docs: AGENTS.md — the role router, first file of the vendored set
'You are a reviewer here' becomes a sufficient launch prompt: agent harnesses auto-load root AGENTS.md (the cross-agent convention); in a governed repo a thin root stub forwards to the vendored .ceremony/AGENTS.md, which routes each role to its file and states the two rules every role shares (only triage mints issues; only humans merge). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
0d49ba4da3
commit
3e08533981
2 changed files with 60 additions and 5 deletions
49
AGENTS.md
Normal file
49
AGENTS.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# AGENTS.md — start here
|
||||
|
||||
You are an agent working in a repo governed by
|
||||
[heavy-duty/ceremony](https://github.com/heavy-duty/ceremony). This file is
|
||||
the router: find your role below, read its file, then act. The role files
|
||||
sit beside this one — in ceremony itself at the repo root, in a governed
|
||||
repo under `.ceremony/` (a machine-managed mirror; never edit those files
|
||||
in place — they are changed in heavy-duty/ceremony, through its own flow).
|
||||
|
||||
## Your role
|
||||
|
||||
You were told your role when you were pointed at this repo ("you are a
|
||||
reviewer here"). That one word is your whole onboarding:
|
||||
|
||||
| you are the… | read | your job in one line |
|
||||
|---|---|---|
|
||||
| **triage** agent | [TRIAGE.md](TRIAGE.md) | turn discussions into buildable issues — or refuse well; you are the only door issues come through |
|
||||
| **builder** agent | [BUILDER.md](BUILDER.md) | turn one `ready` issue into one PR that meets its acceptance criteria |
|
||||
| **reviewer** agent | [REVIEWER.md](REVIEWER.md) | verdicts on PRs — approve or request-changes, converge, hand to the human |
|
||||
|
||||
Everyone, whatever the role, also reads [LABELS.md](LABELS.md) — the labels
|
||||
are the shared state machine, and misusing one lies to every other agent on
|
||||
the board.
|
||||
|
||||
**Not told a role?** Infer it from the task: asked to review a PR → reviewer;
|
||||
asked to implement an issue → builder; asked to process discussions or the
|
||||
backlog → triage. Still ambiguous → ask before acting. Do not free-lance
|
||||
across roles in one session: a builder reviewing its own PR, or a reviewer
|
||||
pushing fixes, breaks the separation the pipeline depends on.
|
||||
|
||||
## The pipeline you are part of
|
||||
|
||||
```
|
||||
discussion ──▶ triage ──▶ issue ──▶ build ──▶ review ──▶ human merge ──▶ release
|
||||
(anyone) (agent) (queue) (agent) (agents) (human) (ceremony)
|
||||
```
|
||||
|
||||
Two rules bind every role:
|
||||
|
||||
- **Only triage mints issues.** Found work? Open or extend a discussion.
|
||||
- **Only humans merge.** Convergence ends at `state:needs-human`, never at
|
||||
a merge button.
|
||||
|
||||
## Repo specifics
|
||||
|
||||
What is true only of *this* repo — the review panel roster, the `scope:*`
|
||||
label set, what a drill means, code conventions — lives in the repo's own
|
||||
`CONTRIBUTING.md`. Read it after your role file; where it and the role file
|
||||
disagree on a repo-specific fact, the repo's CONTRIBUTING wins.
|
||||
|
|
@ -88,11 +88,11 @@ Two consumption modes, split by what has a runtime:
|
|||
- **Doctrine is consumed as a machine-verified mirror.** A document's only
|
||||
"runtime" is an agent reading the working tree of the repo it stands in —
|
||||
a doc that requires a cross-repo fetch before it governs is a doc that
|
||||
sometimes goes unread. So the agent-facing set — **TRIAGE.md, BUILDER.md,
|
||||
REVIEWER.md, LABELS.md** — is vendored into each governed repo at
|
||||
**`.ceremony/`**, byte-identical to this repo at the pinned ref, by the
|
||||
sync tool (issue #19). A CI guard diffs the mirror against the pin on
|
||||
every PR: hand-editing a vendored file, or bumping the pin without
|
||||
sometimes goes unread. So the agent-facing set — **AGENTS.md, TRIAGE.md,
|
||||
BUILDER.md, REVIEWER.md, LABELS.md** — is vendored into each governed
|
||||
repo at **`.ceremony/`**, byte-identical to this repo at the pinned ref,
|
||||
by the sync tool (issue #19). A CI guard diffs the mirror against the pin
|
||||
on every PR: hand-editing a vendored file, or bumping the pin without
|
||||
re-syncing, goes red. It is a copy that cannot drift — which is the only
|
||||
kind of copy this org allows.
|
||||
|
||||
|
|
@ -100,6 +100,12 @@ A governed repo (box, rig, cast, incubator, …) therefore carries:
|
|||
|
||||
- `.ceremony/` — the vendored doctrine (machine-written; never edited by
|
||||
hand; agents read it from the checkout, no network, no other repo);
|
||||
- a thin root **`AGENTS.md` stub** — a few lines: "governed by
|
||||
heavy-duty/ceremony; read `.ceremony/AGENTS.md` first; repo specifics in
|
||||
CONTRIBUTING". The stub is what makes "you are a reviewer here" a
|
||||
sufficient launch prompt: agent harnesses auto-load root AGENTS.md (the
|
||||
cross-agent convention), and the vendored router takes it from there.
|
||||
Tool-specific files (`CLAUDE.md`, …) reduce to one pointer line at it;
|
||||
- the thin workflow callers (release, labels) pinned to a ceremony tag, plus
|
||||
the `docs-sync --check` guard step in CI;
|
||||
- a short header in its own CONTRIBUTING pointing agents at `.ceremony/`,
|
||||
|
|
|
|||
Loading…
Reference in a new issue