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.

  1. Brief /qb:lead You hand Opus a task. It asks questions and writes the tickets.
  2. Route routing.md Each ticket goes to Sonnet or Haiku, scored against hard rules.
  3. Plan gate phase-guard.sh Code edits are locked until the lead approves the plan.
  4. Build senior-dev / junior-dev The developer implements only what was approved.
  5. Delivery gate quality-gate.sh A hook runs your tests. Nobody reports done on red.
  6. Review ACCEPTED Opus 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.

  1. 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.

  2. 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.

  3. Plan gate

    The developer explores the code and writes a plan in a fixed format. During the plan phase, phase-guard.sh blocks Edit and Write on anything outside .claude/qb/ and allows only read-only Bash like ls, grep and git 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.

  4. 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 PUSHBACK on a ticket it thinks is wrong, and the lead has to reconsider.

  5. Delivery gate

    When a developer tries to finish, quality-gate.sh runs 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 marked gate: 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 ./... or make test. If it finds nothing, it stays out of the way and the diff review carries the weight.

  6. 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:status shows the board, the current phase and anything blocking. /qb:reset clears 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
Read the plugin on GitHub

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.