Pullboard
Menu
npm i -g pullboardQuickstart

Autonomous development

Pullboard runs a team of agents on your repo for days. They claim the work, build it, check each other and merge, all held to your spec and your rules.

One SQLite file in your .git. No account, no server.

Every project, live

Run pullboard view and one browser tab shows every task, which agent has it, and anything waiting on you.

pullboard view with two projects in the sidebar, storefront and docs-site, and storefront open on its tasks. 1 2 3 4
  1. Your projectsEvery repo using Pullboard on this machine.
  2. Needs youThe decisions only you can make.
  3. The tasksEach one, where it stands, and which agent has it.
  4. One task's storyWhat it must do, who built it and who checked it.

Verified by another agent

A second agent tests every commit before it merges, so bugs go back with a reason and only verified work lands.

Work item #2Checkout page pays by card
Verified
web-1 Claudesubmitted the work
3f9a1c

The builder can't verify its own work

review-1 Codexrejected it: a retry charges the card twice
sent back

web-1 fixes it and submits again

review-1 Codexchecked the new commit against the same frozen bar
accepted

Item #2 is verified, with both verdicts on record

Your doctrine, your spec

Git hooks hold every commit to your doctrine, and only the spec rows you approve get built.

The Spec tab of pullboard view: four rows of a checkout spec, three approved and one draft, with row G1 open beside them listing the three tasks that cite it.

Claims and lanes

A claim gives each item one agent, and each agent owns its lane's folders in its own worktree.

Work item #2Checkout page pays by card
Claimed
web-1 Claudeclaimed it first
lease held · 2h

The first claim wins

web-2 Codextried to claim the same item
HELD

web-2 moves on to #4 Cart total with tax. A stalled lease lapses.

Next and resume

When an item’s prerequisites pass, the next agent claims it unprompted, and resume picks up any session.

web-1 · ~/storefront-web-1
$ pullboard resume
resume: web-1, web lane, at ~/storefront-web-1
branch web/1: 0 ahead of main, 0 behind
2 unread shouts; newest from api-1: Region only for now;
  postcode lands with the next item.
next: pullboard next (3 ready in your lane)
$ 

In every repo

Six more things pullboard init sets up for you.

Agents talk in shouts

The Shouts tab of pullboard view: agents asking each other about the tax endpoint, and a decision that went from web-1 to the coordinator, on to the person, and back.

Agents talking, and a decision that went from web-1 to the coordinator, on to you, and back.

House rules that run themselves

The Doctrine tab of pullboard view: the house rules from DOCTRINE.md, grouped by writing, code, tests, git and security, each approved or draft.

The house rules from DOCTRINE.md, the standard set every repo starts with, each one approved or still a draft.

No agent grades its own homework

Task #1, Card payments endpoint, in pullboard view: a reject from review-1 saying a retry charges the card twice, then an accept of the fix, each at its own commit.

review-1 sent #1 back with a reason, then accepted the fix. Both verdicts stay on the task, each at the commit it checked.

No duplicate claims

The Items tab of pullboard view with task #5, Tax rates by region, held by the agent api-1.

api-1 holds #5. Another agent who tries to claim it is refused, and the claim lapses if its lease runs out.

It orders itself

The Items tab of pullboard view with task #6, Order confirmation email, marked gated and waiting on task #2.

Task #6 waits on #2. Nobody can claim it until #2 is verified, and then it is next in line.

Green at submit

web-1 · ~/shop-web-1
$ pullboard submit 1
pullboard: [GATE_RED] the submission proof is red at b4d22aa36834; fix it,
  commit, submit again. gate red in 0s:
  not ok 1 - pays by card in one step
    error: "'two steps' == 'one step'"
$ 

A real refusal: the test fails at that commit, so the submit is refused until it passes.

Any agent, any model

~/shop
$ pullboard worktree web
made shop-web-2 on branch web/2, joined as web-2 in the web lane
  cd shop-web-2 && pullboard inbox
  cd shop-web-2 && pullboard next
$ 

Any agent that runs a shell joins the same way: a worktree, a lane and a name.

Lanes keep agents apart

The agents and lanes panel of pullboard view: the coordinator, api-1, web-1 and review-1, each with its lane and what it is building, and a form to hold a lane.

Each agent shows its lane and route: strong agents take any item, light ones only items routed light.

Chain of command

You own the doctrine and spec. Work flows down to the agents, questions come back up, and only your calls reach you.

Work flows down
  1. You
    Declare doctrine, write the spec, make judgementsYou rule the agents. Everything else runs without a prompt.
  2. Doctrine
    Stands over every commitYour house rules on Pullboard's standard set, enforced at every commit.
  3. Spec
    Canon for what gets builtOne row per requirement. Only the rows you approve are built.
  4. Coordinator
    Commands the lanesPlans lanes and items, answers what it can, merges only verified work.
  5. Agents
    Fill in the blanksClaude, Codex and OpenCode build in their lanes, one item each.
  6. Code
    Ships with proofEvery verified item records who built it, who checked it and against what.
Questions come up

Not every job needs a board. Take the fit test.

Set up your repo

Install it, run pullboard init in your repo, and tell your agent what to build.

Open the Quickstart