Gå til hovedindhold

Teamets regler og beslutninger

En beslutning, der træffes i én persons agentsession, bliver i den session. Den næste session, eller en kollegas agent, hører aldrig om den. Teamregler giver beslutningerne et sted, som alle agenter læser: ét repository for organisationen, én fil pr. repository og et læseværktøj.

Det er en konvention plus et værktøj. Der er intet at slå til.

Hvor reglerne ligger

HvorFilGælder for
<org>/.rules (et repository i din organisation)RULES.md, DECISIONS.mdAlle organisationens repositories
Et vilkårligt repository.forgejo/RULES.md, .forgejo/DECISIONS.mdDet repository

Filerne læses fra hvert repositorys default branch, så en regel ændres gennem en pull request som enhver anden ændring, med gennemgang og historik.

Hver ## -overskrift begynder én regel (eller beslutning); overskriften navngiver den. Tekst før den første ## -overskrift bevares som indledning.

# 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.

Sådan kombineres organisationens og repositoriets regler

Organisationens regler og repositoriets regler flettes efter overskrift. En regel i repositoriet med samme overskrift som en regel i organisationen erstatter den (store og små bogstaver samt tegnsætning er ligegyldige), så et repository kan stramme eller løsne én regel uden at kopiere resten. Regler, der kun findes i repositoriet, kommer efter organisationens.

<!-- web/.forgejo/RULES.md -->
## Review
Two approvals: this repository takes payments.

get_team_rules: værktøjet, agenterne kalder

MCP-værktøjREST
get_team_rulesGET /_app/api/v1/orgs/<org>/repos/<repo>/team-rules

Det returnerer hver regel med dens kind (rules eller decisions), title, body, om den kom fra organisationen eller repositoriet (scope), om den erstattede en regel fra organisationen (overrides_org), og dens source (repository, sti og branch). files viser hver fil, der blev ledt efter, og om den blev fundet. digest ændrer sig, hver gang de flettede regler ændrer sig.

Det kræver findings:read (eller orgs:read) og læseadgang til repositoriet. En person, der kan læse repositoriet, men ikke .rules-repositoriet, får kun repositoriets regler; organisationens filer vises så som not_readable.

Regler er instruktioner til dine agenter, med samme status som repositoriets AGENTS.md, og alle med skriveadgang til .rules-repositoriet eller repositoriet kan ændre dem. Giv skriveadgang til .rules derefter. En regel giver aldrig en rettighed.

Læg reglerne i AGENTS.md eller CLAUDE.md

Agenter, der læser en AGENTS.md- eller CLAUDE.md-fil, men ikke kalder værktøjer, kan have reglerne med i den fil. ?format=agents-md returnerer en Markdown-blok mellem to markører:

<!-- fremforge:team-rules:start -->
...
<!-- fremforge:team-rules:end -->

Blokken er de samme bytes for de samme regler. For at tilføje den, eller bringe den up to date, så kør dette fra roden af repositoriet (det erstatter kun blokken og tilføjer den 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.md

Commit resultatet i en pull request. For at kontrollere i CI, at kopien er aktuel, så sammenlign digest: i filens blok med headeren X-Fremforge-Rules-Digest fra samme anmodning.

Vil du hellere lade være med at kopiere reglerne ind i filen, er én linje nok for agenter, der kan kalde værktøjer:

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 pr. beslutning. Skriv beslutningen og datoen, og hvorfor, så en agent, der møder spørgsmålet igen, ikke træffer beslutningen en gang til:

## Kysely, not Drizzle (2026-10-01)
New database code uses Kysely. Drizzle stays only in the frozen migrations.