Teamregler og beslutninger
En beslutning som tas i én persons agentsesjon, blir værende i den sesjonen. Neste sesjon, eller en kollegas agent, hører aldri om den. Teamregler gir beslutningene et hjem som hver agent leser: ett repository for organisasjonen, én fil per repository og et leseverktøy.
Det er en konvensjon pluss et verktøy. Det er ingenting å slå på.
Hvor reglene ligger
| Hvor | Fil | Gjelder |
|---|---|---|
<org>/.rules (et repository i organisasjonen din) | RULES.md, DECISIONS.md | Hvert repository i organisasjonen |
| Et hvilket som helst repository | .forgejo/RULES.md, .forgejo/DECISIONS.md | Det repositoryet |
Filene leses fra standardbranchen i hvert repository, så en regel endres gjennom en pull request som enhver annen endring, med gjennomgang og historikk.
Hver ## -overskrift starter én regel (eller beslutning); overskriften gir den navn. Tekst før den første ## -overskriften beholdes som innledning.
# Rules
## Migrations
Every migration is expand-only. A column is dropped in a later release, never in the one that stops using it.
## Review
One approval from someone who did not write the change.Hvordan regler for organisasjonen og repositoryet kombineres
Organisasjonens regler og repositoryets regler slås sammen etter overskrift. En regel i repositoryet med samme overskrift som en regel i organisasjonen erstatter den (store og små bokstaver og tegnsetting spiller ingen rolle), så et repository kan stramme inn eller løsne én regel uten å kopiere resten. Regler som bare finnes i repositoryet, kommer etter organisasjonens.
<!-- web/.forgejo/RULES.md -->
## Review
Two approvals: this repository takes payments.get_team_rules: verktøyet agentene kaller
| MCP-verktøy | REST |
|---|---|
get_team_rules | GET /_app/api/v1/orgs/<org>/repos/<repo>/team-rules |
Det returnerer hver regel med kind (rules eller decisions), title, body, om den kom fra organisasjonen eller repositoryet (scope), om den erstattet en regel i organisasjonen (overrides_org), og source (repository, sti og branch). files lister hver fil det ble sett etter, og om den ble funnet. digest endres hver gang de sammenslåtte reglene endres.
Det krever findings:read (eller orgs:read) og lesetilgang til repositoryet. En som kan lese repositoryet, men ikke .rules-repositoryet, får bare repositoryets regler; organisasjonens filer listes da som not_readable.
Regler er instruksjoner til agentene dine, med samme status som repositoryets AGENTS.md, og alle med skrivetilgang til .rules-repositoryet eller repositoryet kan endre dem. Gi skrivetilgang til .rules deretter. En regel gir aldri en tillatelse.
Legg reglene i AGENTS.md eller CLAUDE.md
Agenter som leser en AGENTS.md- eller CLAUDE.md-fil, men ikke kaller verktøy, kan ha reglene i den filen. ?format=agents-md returnerer en Markdown-blokk mellom to markører:
<!-- fremforge:team-rules:start -->
...
<!-- fremforge:team-rules:end -->Blokken er de samme bytene for de samme reglene. For å legge den til, eller oppdatere den, kjører du dette fra roten av repositoryet (det erstatter bare blokken, og legger den til nederst første gang):
ORG=<org>; REPO=<repo>; FILE=AGENTS.md
curl -fsS -H "Authorization: Bearer $FREMFORGE_TOKEN" \
"https://frem.sh/_app/api/v1/orgs/$ORG/repos/$REPO/team-rules?format=agents-md" > .team-rules.md
touch "$FILE"
python3 - "$FILE" .team-rules.md <<'PY'
import sys
path, block = sys.argv[1], open(sys.argv[2]).read().strip()
cur = open(path).read()
s, e = '<!-- fremforge:team-rules:start -->', '<!-- fremforge:team-rules:end -->'
if s in cur and e in cur:
new = cur[:cur.index(s)] + block + cur[cur.index(e) + len(e):]
else:
new = cur.rstrip() + ('\n\n' if cur.strip() else '') + block + '\n'
open(path, 'w').write(new)
PY
rm .team-rules.mdCommit resultatet i en pull request. For å kontrollere i CI at kopien er oppdatert, sammenligner du digest: i blokken i filen med headeren X-Fremforge-Rules-Digest fra den samme forespørselen.
Hvis du heller ikke vil kopiere reglene inn i filen, holder én linje for agenter som kan kalle verktøy:
At the start of a task, call get_team_rules for this repository and follow the rules it returns.Beslutninger
DECISIONS.md har samme form som RULES.md: én ## -overskrift per beslutning. Skriv beslutningen og datoen, og hvorfor, slik at en agent som møter spørsmålet igjen, ikke avgjør det en gang til:
## Kysely, not Drizzle (2026-10-01)
New database code uses Kysely. Drizzle stays only in the frozen migrations.