Pullboard
Menu
npm i -g pullboardQuickstart

Tutorials · Lesson 4 of 9

Lanes

A lane is a part of your system, like web or api, and the folders it owns. Agents work inside lanes, each in its own worktree. A commit outside its proper lane is refused, so lanes never collide and merge conflicts stay rare.

By a lane, we mean:

  • Ownership by path: each lane lists its folders in pullboard.json.
  • A worktree per agent: its own checkout and branch.
  • Refusals at commit: files outside the lane are blocked.
  • A pause when you need it: hold stops new claims and says why.

Owned paths

A lane owns paths and spec sections, set in pullboard.json.

pullboard.json
{
  "gate": "npm test",
  "lanes": {
    "web": { "owns": ["apps/web/"], "specs": ["G"] },
    "review": { "owns": [] }
  }
}
Where things live. The main checkout is the coordinator and holds SPEC.md, PRACTICE.md, pullboard.json, AGENTS.md and the git hooks. Inside .git, shared by every worktree, are the board and the pinned submitted commits. Beside it, each agent works in its own worktree, builders in their lanes and a verifier, all on the same board. pullboard view lists every project on this machine.

Refused at commit

A commit outside its lane never lands.

~/shop-web-1
$ git commit -m "feat(web): pay by card [G1]"
pullboard pre-commit: blocked
  - outside the web lane: test/checkout.test.js (coordinator's); shout its owner instead
Fix what each line names. Never work around a refusal with filler text.

Try it

Add an agent to a lane, then pause the lane.

~/your-repo
$ pullboard worktree web                    # a worktree and a name in the web lane
$ pullboard lanes                           # every lane and what it owns
$ pullboard hold web --reason "API first"   # next claims nothing there until --off