Commands
Straight from pullboard help. Your agents run most of these for you.
Set up
pullboard tour#- see it work: a reject and its rework, scripted, in thirty seconds
pullboard init [--model <name>]#- config, SPEC.md, agent instructions, git hooks, board; optional coordinator model
pullboard worktree <lane> --model <name> [--route light] [--family <name>]#- make and join a worktree for a new agent
pullboard join <lane> --model <name> [--route light] [--family <name>]#- register this worktree as an agent A model is required (or set PULLBOARD_MODEL); family is a separate declaration
pullboard join coordinator --model <name>#- declare the main checkout's coordinator model pullboard.json agents.names: suffix (default) or prefix
pullboard whoami | lanes | status#- who you are, the lanes, the board at a glance
pullboard takeover#- rebind this checkout when the same agent starts a new session
pullboard resources#- local resource holders and their FIFO queues
pullboard settings [gateSlots <n>]#- view or set this machine's gate slots (default 2)
pullboard view [--port N] [--no-open]#- every project on this machine in your browser; default http://127.0.0.1:4890 items, shouts, doctrine, agents and activity; --port 0 chooses a free port add items, shout and hold lanes from it
pullboard view --export <dir>#- a read-only snapshot with event replay, for any static host
pullboard serve [--port N]#- local API v1: boards, state, moves, requests and live events, behind the session secret in its printed address
pullboard relay [on|off|pair|join <code>] [--url <address>]#- link, inspect or unlink this board's sealed relay on signs in through GitHub; the address defaults to https://app.pullboard.dev pair prints a one-use machine code; join stores it in another clone
pullboard relay on --all [--url <address>]#- link every registered project after one sign-in; pair the phone once keep this command open until pairing finishes; later projects link on registration
pullboard relay devices#- list paired device ids and their public-key fingerprints
pullboard relay revoke <device>#- stop future key delivery; already received keys remain known
pullboard relay tokens#- list this board's agent token ids, agents and expiry, never credentials
pullboard relay revoke <token-id>#- revoke one token from that list; other agents keep working
pullboard relay recover --skip <sequence>#- person-only recovery of one blocked next relay position
pullboard resume#- where you are: your claim, branch, uncommitted work, what came back, unread shouts, what to do next; run it to start any session
pullboard hooks#- reinstall the git hooks (e.g. after a fresh clone)
Work
pullboard add <lane> <title> [--criterion "..."] [--specs G1.2,K3] [--after 3,4] [--parent <id>][--brief "..." | --brief-file <file>] [--route light|mid]#- --after: claiming waits until those items are verified
- --brief: what a cold agent needs; --route light: any model can build it
[--check "<command>"] [--wait]the command that proves it; --wait waits for its main baseline with --criterion and a brief, --check is needed below strongpullboard edit <id> [--brief "..." | --brief-file <file>] [--route light|mid|strong] [--criterion "..."] [--check "..."]#[--wait]wait for a new check's baseline; otherwise it runs in the backgroundpullboard escalate <id> --note "what was tried and how it failed"#- hand it one tier up
pullboard run --agent "<command>" [--attempts 3] [--minutes 15] [--items N] [--wait M]#- build routed items unattended in this worktree: the agent command reads the context pack at $PULLBOARD_PACK (and $PULLBOARD_CHECK, $PULLBOARD_ITEM, $PULLBOARD_ATTEMPT, $PULLBOARD_TIER); green work is submitted, red escalated
[--agent-light "..."] [--agent-mid "..."] [--agent-strong "..."]a command per tierpullboard list [lane] [--all] [--route light|mid|strong]#- open and active items; --all adds closed ones
pullboard roadmap#- ordered milestones and each item's live status
pullboard milestone add <name> [--note ...] [--items 1,2,3]#- create a milestone and optionally add items
pullboard milestone items <name> --add|--remove ids#- append or remove item references
pullboard milestone move <name> --before <other>#- reorder a milestone
pullboard milestone edit <name> [--name <new>] [--note <text>]#- rename or update a milestone note
pullboard milestone remove <name>#- remove a milestone without changing its items
pullboard doctor#- check board integrity without changing it
pullboard skills --update#- refresh unchanged Claude Code skills from shipped versions
pullboard show <id> [--history]#- an item, the criterion frozen at claim, its verdicts: the latest in full, earlier ones as one line; --history prints every note in full
pullboard fact <id> <kind> <text> [--supersedes <fact-id>] [--ref path:lines@full-sha]#- append an observation or a holder/coordinator judgement to its thread
pullboard next [--wait <minutes>]#- offer an eligible review when reviews pile up, otherwise claim work
pullboard next --build#- claim a build explicitly, recording a skipped review offer
pullboard next --verify#- reserve the next submitted item you can check;
pullboard next --verify <id>#- reserve that submitted item instead in the main checkout, verifying needs --as coordinator
pullboard check [id] [--yes]#- show and run your item's check; --yes confirms a check set by someone else the command and its author print first; the project gate is pullboard gate
pullboard claim <id>#- take or renew a lease; the first claim freezes the criterion
pullboard release <id> [--note "why"]#- hand it back; a review release needs a one-line reason
pullboard submit <id>#- needs a clean tree, item check and affected tests green at HEAD (alias: done)
pullboard verify <id> accept --note "what you broke or which edge you tried, and what happened"#pullboard verify <id> reject --reason TEST_FAILURE --note "what failed"#- any --note can be --note-file <file>, which keeps quotes, $ and backticks intact
pullboard shout <lane|agent|person|all> <text>#pullboard inbox#pullboard shout [<to>] <text> --decision#- ask for a decision; defaults to your coordinator or the person
pullboard shout <to> <text> --evidence attempt|receipt --outcome <word> --item <id> --commit <rev>#pullboard answer <shout-id> <text> [--as person]#- answer your decision; person mode is main-checkout only
pullboard pass <shout-id> <note>#- coordinator passes a decision to the person
pullboard decisions [--as person]#- shouts waiting for you; main checkout defaults to coordinator
pullboard export#- print the whole board as versioned JSON
pullboard import <file>#- restore a versioned export into an empty board
Coordinator
pullboard sweep --run "<checker>" --check "<checker on {file}>" [--route light] [--max 20] [--dry-run]#- file one item per file a linter, type checker or test reporter flags
pullboard land [--max N] [--dry-run] [--adopt]#- gate and push a durable batch of verified items
pullboard land --waive <test> --until <date> --reason "why"#- the person records an expiring test waiver
pullboard merged <id> <commit>#- record where verified work landed
pullboard withdraw <id> <reason>#- drop an item nobody should build
pullboard refreeze <id>#- adopt a corrected criterion or changed spec rows
pullboard reopen <id> --note "why"#- return a submission for criterion correction without a verdict
pullboard hold <lane> --reason "..."#- pause a lane: next there claims nothing and names the reason
pullboard hold <id> "reason"#- hold one item so next skips it
pullboard hold <lane|id> --off#- lift a lane or item hold
Receipts
pullboard stats [--since <date>]#- proof numbers from the event log; --json for sites and tools stage averages/medians count ends inside the inclusive UTC window; build: first claim to final submit (including rework); review wait: final submit to the closing review reservation; released/expired reservations remain wait, not review; review: closing reservation to verdict; merge wait: accept to first merge unfinished stages are omitted; missing legacy reservations are unmeasured JSON flow.asOf records one observation clock; oldest.since records its origin; ageMinutes = (asOf - since) / 60000 for every queue age queues include all current work, even added before --since; open age restarts on add, reopen, reject, release or claim lapse; claimed age starts at claim (not renewal), submitted at final submit, accepted-not-merged at accept; oldest ties use the lower item id daily additions and first merges use UTC dates; repeated merge receipts count once active agents moved in the last 60 minutes (inclusive), by role and lane; role is latest role-bearing move, falling back to earlier history or unknown: claim/submit/build release = builder; reserve/verdict/review release = verifier; the coordinator is coordinator; shouts and joins never imply a role bottleneck: largest summed stage share over fully measured first-merge cycles; ties: build, review wait, review, merge wait; print fully measured/total cycles; fewer than half fully measured means low confidence; no measured cycles means no action one action, first matching rule: review wait + fewer than 1 verifier per 4 active builders: add a verifier review wait otherwise: review the oldest submission first (#N) build + more than 30% sent back: tighten criteria or briefs: N of M submissions were sent back build otherwise: add a builder in the lane with most open items (lane-name tie) review: reviews are slow (median X min): check how long the frozen checks take merge wait: land the accepted items: #A, #B when that queue is empty, the action says none waiting or waits for open work
pullboard ledger#- markdown: what was built, by whom, verified by whom
pullboard log [id]#- every move, in order
Spec
pullboard spec --json#- parsed SPEC.md and doctrine rows as JSON
pullboard forget <path>#- remove a repo from this machine's project list
pullboard spec check#- lint SPEC.md and the doctrine (house rules for agentic development)
pullboard spec view [--out file]#- the spec, open questions, sign-offs and doctrine as one page
pullboard spec show <id> | unmet [--must] | signoff <ids> [--by <principal>]#- signoff: --note "what was checked" stays with the receipt
pullboard spec draft <text> [--aim] [--gate "<gate>"]#- any agent appends a pending row; never approves it Defaults to must and gate review.
pullboard spec signers add [--key <path>] [--by <principal>]#- opt into SSH-signed sign-offs principal defaults to Git user.email; --by overrides it
pullboard spec approve <ids> | decline <ids> --reason "why"#- the person's exact-row decision approve <id> --text "new wording" approves an exact rewrite
pullboard spec apply#- coordinator applies recorded row decisions to the files
Role guides
pullboard prompt decompose|plan|signoff|review|verify#- how to do each role; Claude Code gets them as skills
Gate and hooks
Lifecycle, read from src/machine.js
pullboard lifecycle#- the states, moves, guards and refusals as a markdown page, with a diagram
- agent
- claim, release, submit, reserve, accept, reject, escalate, refreeze (when a live claim has a pending coordinator correction)
- coordinator
- claim, release, submit, reserve, accept, reject, reopen, escalate, refreeze, withdraw
- clock
- lapse (when its lease runs out)
Reject reasons: TEST_FAILURE, BEHAVIOR_MISMATCH, INSUFFICIENT_EVIDENCE, STALE_HEAD, OTHER.
--json prints one versioned document for every command; refusals include their code and next step.
From pullboard 0.8.18.