team pr check
Checks one pull request body against the team file's rules: the body must end with the signature
the file's pullRequests rule writes, and no line may match a forbidden pattern. It checks the
body alone, so it needs no repository at all — a project without git can check a request to merge.
The commits are a separate run, team commits check.
Synopsis
team pr check <file> [--file <path>]
What it reads and writes
Reads the team file (or the one --file names), the ledger of this machine's store, and the file
holding the body (- reads standard input). It writes nothing, and it runs no git command: the
folder it runs in needs no repository.
Who may run it
Anyone. It needs no herdr session, no terminal and no approval of its own; CI runs it on a push,
with the body written to a file or piped in with -.
Flags
| Flag | Meaning |
|---|---|
<file> | the pull request's body; - reads standard input |
--file <path> | the team file, instead of .agents/team.yaml |
--help, -h | the usage, and exit 0 |
What it finds
The body is printed as one section, its findings under it:
pull request body
line 5: forbidden pattern ^Claude-Session:
| Finding | Meaning |
|---|---|
no signature: expected "**Agent:** {display} · {role}" in the last line | the body carries no signature on its last line |
forbidden pattern <source> | the line matches one of the file's patterns, or one of the two defaults |
The closing line says team pr check: 1 pull request body checked: ok, or
…: the pull request body refused.
Refusals
| Message | Exit |
|---|---|
team pr check: a <file> is required (with the usage) | 2 |
team pr check: one <file> at most (with the usage) | 2 |
team pr check: unknown option --<name> (with the usage) | 2 |
team pr check: <path>, line <n>: <message> | 2 |
team pr check: can't read the pull request body: <error> | 2 |
The old spelling team check … --pr <file> still runs this body check, one notice line first:
team check.
Exit codes
0— the body passes.1— the body was refused.2— the check can't run: a bad invocation, a team file that can't be read, or a body file that can't be read.
Examples
format: 1
project: beacon
coordinator: claude-keeper
operator: claude-keeper
identity:
humans: [[email protected]]
trust:
- ~/.config/team/lobby
- ~/Code/beacon
workspace:
mode: shared
seats:
- role: coordinator
name: claude-keeper
label: coordinator
cli: claude-code
vendor: anthropic
model: Claude Opus
version: "5.5"
launch: claude --model claude-opus-5-5
- role: implementer
name: claude-beacon
label: implementer
cli: claude-code
vendor: anthropic
model: Claude Opus
version: "5.5"
launch: claude --model claude-opus-5-5A pull request's body signs on its last line:
The metrics page is ready for review.
**Agent:** Claude Opus 5.5 · implementer team pr check pr.md ; echo "exit $?"
team pr check: warning: line 3: `coordinator:` is now `leads: true` on the lead's seat, and is still read
team pr check: 1 pull request body checked: ok
exit 0This one forgot the signature:
Bump the retry window to thirty seconds.
The old one timed out on the flaky test. team pr check body.md ; echo "exit $?"
team pr check: warning: line 3: `coordinator:` is now `leads: true` on the lead's seat, and is still read
pull request body
no signature: expected "**Agent:** {display} · {role}" in the last line
team pr check: 1 pull request body checked: the pull request body refused
exit 1And this one signs, but leaks the line the file forbids:
Tidy the logs.
The reader printed one line too many.
Claude-Session: 8f21c4a9
**Agent:** Claude Opus 5.5 · implementer team pr check leak.md ; echo "exit $?"
team pr check: warning: line 3: `coordinator:` is now `leads: true` on the lead's seat, and is still read
pull request body
line 5: forbidden pattern ^Claude-Session:
Claude-Session: 8f21c4a9
team pr check: 1 pull request body checked: the pull request body refused
exit 1A body file that isn't there can't be read:
team pr check missing.md ; echo "exit $?"
team pr check: warning: line 3: `coordinator:` is now `leads: true` on the lead's seat, and is still read
team pr check: can't read the pull request body: ENOENT: no such file or directory, open './missing.md'
exit 2