Zum Hauptinhalt springen

Teamregeln und Entscheidungen

Eine Entscheidung, die in der Agenten-Sitzung einer Person fällt, bleibt in dieser Sitzung. Die nächste Sitzung oder der Agent einer Kollegin erfährt nie davon. Teamregeln geben den Entscheidungen einen Ort, den jeder Agent liest: ein Repository für die Organisation, eine Datei pro Repository und ein Lese-Tool.

Es ist eine Konvention plus ein Tool. Einschalten musst du nichts.

Wo Regeln liegen

OrtDateiGilt für
<org>/.rules (ein Repository in deiner Organisation)RULES.md, DECISIONS.mdJedes Repository der Organisation
Ein beliebiges Repository.forgejo/RULES.md, .forgejo/DECISIONS.mdDieses Repository

Die Dateien werden aus dem Standard-Branch des jeweiligen Repositorys gelesen; eine Regel ändert sich also wie jede andere Änderung über einen Pull Request, mit Review und Historie.

Jede Überschrift ## beginnt eine Regel (oder Entscheidung); die Überschrift benennt sie. Text vor der ersten Überschrift ## bleibt als Vorspann erhalten.

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

Wie Regeln von Organisation und Repository zusammenwirken

Die Regeln der Organisation und die des Repositorys werden nach Überschrift zusammengeführt. Eine Repository-Regel mit derselben Überschrift wie eine Organisationsregel ersetzt diese (Groß-/Kleinschreibung und Satzzeichen spielen keine Rolle), sodass ein Repository eine Regel verschärfen oder lockern kann, ohne den Rest zu kopieren. Regeln, die es nur im Repository gibt, folgen nach denen der Organisation.

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

get_team_rules: das Tool, das Agenten aufrufen

MCP-ToolREST
get_team_rulesGET /_app/api/v1/orgs/<org>/repos/<repo>/team-rules

Es liefert jede Regel mit ihrer Art kind (rules oder decisions), title, body, ob sie aus der Organisation oder dem Repository stammt (scope), ob sie eine Organisationsregel ersetzt hat (overrides_org), und ihrer Quelle source (Repository, Pfad und Branch). files listet jede gesuchte Datei und ob sie gefunden wurde. digest ändert sich, sobald sich die zusammengeführten Regeln ändern.

Es braucht findings:read (oder orgs:read) und Lesezugriff auf das Repository. Wer das Repository lesen kann, aber nicht das Repository .rules, bekommt nur die Regeln des Repositorys; die Dateien der Organisation werden dann als not_readable aufgeführt.

Regeln sind Anweisungen an deine Agenten, mit demselben Gewicht wie die AGENTS.md des Repositorys, und jeder mit Schreibzugriff auf das Repository .rules oder auf das Repository kann sie ändern. Vergib den Schreibzugriff auf .rules entsprechend. Eine Regel gewährt nie eine Berechtigung.

Die Regeln in AGENTS.md oder CLAUDE.md aufnehmen

Agenten, die eine Datei AGENTS.md oder CLAUDE.md lesen, aber keine Tools aufrufen, können die Regeln in dieser Datei mitführen. ?format=agents-md liefert einen Markdown-Block zwischen zwei Markierungen:

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

Der Block besteht für dieselben Regeln aus denselben Bytes. Um ihn einzufügen oder zu aktualisieren, führe dies im Wurzelverzeichnis des Repositorys aus (es ersetzt nur den Block und hängt ihn beim ersten Mal an):

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

Committe das Ergebnis in einem Pull Request. Um in der CI zu prüfen, ob die Kopie aktuell ist, vergleiche den digest: im Block der Datei mit dem Header X-Fremforge-Rules-Digest derselben Anfrage.

Willst du die Regeln lieber nicht in die Datei kopieren, genügt für Agenten, die Tools aufrufen können, eine Zeile:

At the start of a task, call get_team_rules for this repository and follow the rules it returns.

Entscheidungen

DECISIONS.md hat dieselbe Form wie RULES.md: eine Überschrift ## pro Entscheidung. Schreib die Entscheidung, das Datum und die Begründung auf, damit ein Agent, der wieder auf die Frage stößt, sie nicht ein zweites Mal entscheidet:

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