Put Opus in charge of Sonnet and Haiku.
quarterback is a Claude Code plugin that gives each model a job. Opus is the tech lead, Sonnet takes the harder tickets, and Haiku takes the small ones. Nobody writes code until the lead approves their plan, and nobody says done while the tests are failing.
- Brief
/qb:leadYou hand Opus a task. It asks questions and writes the tickets. - Route
routing.mdEach ticket goes to Sonnet or Haiku, scored against hard rules. - Plan gate
phase-guard.shCode edits are locked until the lead approves the plan. - Build
senior-dev / junior-devThe developer implements only what was approved. - Delivery gate
quality-gate.shA hook runs your tests. Nobody reports done on red. - Review
ACCEPTEDOpus reads the actual diff before the next ticket starts.
What happens
at each step.
Both hooks do nothing when the state file is absent. Outside a /qb:lead run, Claude Code behaves as usual.
-
Brief
You start Claude Code on Opus and give the lead a task with
/qb:lead. It asks about anything the code can't answer, then shows you the ticket list with an assignee on each one. Every decision from there on is written to.claude/qb/board.md, so you can read it afterwards. -
Route
The lead scores each ticket on spread, ambiguity, novelty, coupling, blast radius and testability. Hard rules override the score. Haiku never gets migrations, auth, payments, concurrency or public APIs, and the lead keeps architecture decisions for itself.
-
Plan gate
The developer explores the code and writes a plan in a fixed format. During the plan phase,
phase-guard.shblocks Edit and Write on anything outside.claude/qb/and allows only read-only Bash likels,grepandgit diff. Developers can look around. They can't start coding.The lead answers with a verdict: approved, changes requested, reassign, or rescope. After two rejected revisions at one tier it stops coaching, and the ticket moves up a tier or gets rescoped.
-
Build
Once the plan is approved, the developer implements what was approved and nothing else, then files a structured DONE report. The Haiku junior is told to stop and ask rather than guess. The Sonnet senior is allowed to
PUSHBACKon a ticket it thinks is wrong, and the lead has to reconsider. -
Delivery gate
When a developer tries to finish,
quality-gate.shruns your project's checks. Failures go back to the developer with the tail of the output. After three failed runs the developer is released and the state is markedgate: failed, which leaves the call to the lead.Checks come from
.claude/qb/checks, one command per line. Without that file the gate looks for npm, pnpm, yarn or bun test scripts,pytest,cargo test,go test ./...ormake test. If it finds nothing, it stays out of the way and the diff review carries the weight. -
Review
Green tests only get the work back to the lead. Opus reads the actual diff, and it can still send the ticket back, hand it to someone more senior, or rewrite it. Once it's accepted, the next ticket starts.
/qb:statusshows the board, the current phase and anything blocking./qb:resetclears the phase lock and keeps the board and tickets.
Where it falls short.
It costs less than running Opus on everything. It's also v0.1, and these are the limits I know about.
- Phase lock
- GuardrailIt blocks the edit tools and allowlists Bash with a quote-aware word scan. Unknown commands fail closed. It isn't a sandbox, and the lead reviews the diff either way.
- Tickets
- One at a timeThe phase lock is global.
- Cost
- Opus per planEvery plan review is an Opus turn. That pays off on medium and large work. For a one-line fix, just ask Claude directly.
- Checks file
- Runs as shellEach line runs with bash -c. Read any committed .claude/qb/checks before you use qb in a repo you didn't write.
- Platform
- Needs bashOn Windows, use Git Bash or WSL.
Install.
Markdown agents, a skill, and two bash hooks. Read them before you run them.
Claude Code
/plugin install qb --marketplace thepragmaticbear/qb That needs Claude Code 2.1.275 or later. On older versions, add the marketplace first:
/plugin marketplace add thepragmaticbear/qb
/plugin install qb@quarterback Run it
claude --model opus
> /qb:lead add project archiving: archive button in the list view, archived projects hidden by default, an "include archived" filter To pin the checks, put one command per line in .claude/qb/checks and commit it.
pnpm test
pnpm run lint
pnpm run typecheck MIT licensed. The contributions I want most are transcripts of real runs, especially ones where the lead approved something it shouldn't have, or bounced something it shouldn't have.