Fable 5 holds the baton. The orchestra plays. A Claude Code plugin that makes Fable 5 the orchestrator. Fable keeps the judgment, tiered subagents on Opus, Sonnet and Haiku do the labor. Install once and every new session in every repo starts this way.
FAQ
fable-baton is a Claude Code plugin with 1 hand-picked skill for development work, indexed on Flowy. Install it with the command on its page. It includes baton-setup. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
> /plugin marketplace add realgarit/fable-baton> /plugin install fable-baton@fable-baton

Fable 5 holds the baton. The orchestra plays.
A Claude Code plugin that makes Fable 5 the orchestrator. Fable keeps the judgment, tiered subagents on Opus, Sonnet and Haiku do the labor. Install once and every new session in every repo starts this way.
Why · Benchmark · How it works · What you'll see · Install · Day-to-day · Alternatives
The tiers are Opus, Sonnet and Haiku today. Later this should open up to other models and structures.
Numbers from a small controlled test, run 2026-07-13 on Claude Code 2.1.197 with plugin v1.3.0. The project was a zero dependency Node.js library with a test suite. Three tasks: fix two seeded bugs, implement a feature from a spec in TODO.md, and review the codebase for bugs. Each task ran headless via claude -p, twice with the plugin off and twice with it on, same session model (Fable 5) in both. Success was checked from outside the session: the test suite had to pass (for the feature task against hidden tests the session never saw) and the review had to find both seeded bugs. All 12 runs passed.
| task | plugin off, total cost | plugin on, total cost | plugin on, cost split | Fable output tokens, off / on |
|---|---|---|---|---|
| bugfix | $0.96 | $1.15 | Fable $0.92, Sonnet $0.19, Haiku $0.04 | 2.4k / 2.2k |
| feature | $1.52 | $1.50 | Fable $1.05, Sonnet $0.39, Haiku $0.06 | 6.1k / 3.4k |
| review | $2.13 | $2.71 | Fable $1.61, Opus $1.05, Haiku $0.05 | 13.7k / 8.5k |
Values are per run averages over the two reps. Read the table honestly. Total API cost comes out about the same and sometimes higher, because orchestration adds coordination on top of the work. What changes is where the tokens land. Fable's own output tokens drop 44 percent on the feature task and 38 percent on the review, and its share of the cost drops with them. That work moves to Sonnet, Haiku and Opus. If you pay per token through the API and only care about the total, the plugin will not save you money on small tasks. If you are on a subscription where Fable quota is what runs out and triggers the mid session model switch, this is the tradeoff you want: Fable stays available for judgment much longer and the session keeps its conductor.
Keep in mind this is n=2 per cell on one small project, and variance between reps was real (one review run cost $3.25, the other $2.16). Treat the numbers as directional. The benchmark harness is not shipped with the plugin.
| Agent | Model | Owns |
|---|---|---|
scout | Haiku | Discovery, reading files/logs, summaries, simple checks |
executor | Sonnet | Scoped implementation, tests, routine edits, local refactors |
architect | Opus | Complex implementation, deep debugging, high-risk work, reviewing cheaper agents |
verifier | Haiku | Evidence checks: tests green, diff matches plan, no regressions |
A SessionStart hook injects the orchestration policy into every new session. It tells Fable what to keep (intent, architecture, tradeoffs, review) and what to route down (labor), with anti-waste rules: no pointless fan-out, focused context per agent, no delegation for genuinely trivial single steps.
A one-time policy is not enough. Models drift back to doing everything inline as a session goes on. We watched it happen in real sessions.
| Layer | Hook | What it does |
|---|---|---|
| Policy | SessionStart | Loads the full orchestration policy when the session starts |
| Reminder | UserPromptSubmit | Re-asserts the delegation rules on every prompt |
| Counter | PostToolUse | Counts consecutive inline tool calls and injects a delegation notice once a streak crosses the threshold (default 4, set with FABLE_BATON_TRIPWIRE, resets whenever an agent is used) |
The model can still ignore a notice. But ignoring a fresh instruction mid-streak is much harder than forgetting something from page one.
architect executes or reviews, verifier confirms with evidence.baton-setup sets your default model to best (Fable 5, with Opus fallback) - the one thing a plugin can't set by itself.The routing table assumes Fable is on top. Run a session on another model and the SessionStart hook detects it and appends a tier adaptation to the policy, so the cost logic stays correct:
The per-prompt reminder and the streak counter adapt too, so a Sonnet session is not nudged into hand-offs that save nothing.
One caveat: current Claude Code builds do not tell hooks the session model at startup, so the plugin reads it from the session transcript. A brand-new session has no transcript yet, so at startup the SessionStart hook cannot tell which model is running and injects a self-apply fallback instead: it lists every tier's override and asks the model to apply the one that matches itself. From the second prompt on, transcript detection confirms that choice or corrects it. Resumed sessions have a transcript already, so they get the right adaptation at session start.
Every prompt gets a short delegation reminder, and when the model does too much inline work in a row, the counter steps in:

Recreated replay. The hook text shown is the exact output from a real session.
[fable-baton] 4 consecutive inline tool calls without delegating. Main session: this block
belongs to an agent (scout for discovery, executor for edits) - delegate the remainder now.
That notice comes from a deterministic PostToolUse hook, and the CI suite proves it fires at exactly the threshold.
In any Claude Code session:
/plugin marketplace add realgarit/fable-baton
/plugin install fable-baton@fable-baton
Then ask Claude to "run baton-setup" - it sets model: "best" in your ~/.claude/settings.json (with your approval and a backup) and verifies the install. Restart your session and you're done.
Requirements
best model alias falls back to the latest Opus otherwise - the orchestration still works, just with Opus conducting)[fable-baton] notice in the session telling the model to delegate.Worth knowing before you pick this:
Pick fable-baton when you want install-and-go and Fable staying in charge.
/plugin uninstall fable-baton
To restore your old default model, restore model in ~/.claude/settings.json from the settings.json.baton-backup-* file that baton-setup created.
MIT
.claude-plugin/
marketplace.json
plugin.json
.github/
workflows/
ci.yml
agents/
AGENTS.md
architect.md
executor.md
scout.md
verifier.md
assets/
demo.html
fable-baton-demo.gif
hero.gif
hero.html
social-preview.html
social-preview.png
CLAUDE.md
hooks/
hooks.json
inline-counter.sh
prompt-nudge.sh
session-start.sh
LICENSE
policy/
adapt-haiku.md
adapt-opus.md
adapt-sonnet.md
adapt-unknown.md
orchestration.md
README.md
skills/
baton-setup/
SKILL.md© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic