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

FlagMeaning
<file>the pull request's body; - reads standard input
--file <path>the team file, instead of .agents/team.yaml
--help, -hthe 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:
FindingMeaning
no signature: expected "**Agent:** {display} · {role}" in the last linethe 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

MessageExit
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

.agents/team.yaml
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-5

A pull request's body signs on its last line:

pr.md
The metrics page is ready for review.

**Agent:** Claude Opus 5.5 · implementer
Terminal
 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 0

This one forgot the signature:

body.md
Bump the retry window to thirty seconds.

The old one timed out on the flaky test.
Terminal
 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 1

And this one signs, but leaks the line the file forbids:

leak.md
Tidy the logs.

The reader printed one line too many.

Claude-Session: 8f21c4a9
**Agent:** Claude Opus 5.5 · implementer
Terminal
 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 1

A body file that isn't there can't be read:

Terminal
 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