About three weeks ago I was on a flight trying to get work done with Opus 5 in Claude Code. Five hours later it had accomplished basically nothing. It kept surfacing problems that weren’t actually problems, because it never looked at the full context before deciding something was broken. And I believed it at first, so I let it fix things. By the time I realized what was happening it had essentially broken my repo and I had to roll the whole thing back and write the day off. And Opus is a really really good model, that’s what makes it frustrating, and I’m not talking about one line in a CLAUDE.md. There’s a hook that injects “deliver the requested scope and stop before unasked work” into every single prompt it sees. My written rules literally say never turn a partial search failure into a global conclusion, and to treat “not found in the path I checked” as different from “does not exist.” I added PreToolUse code gates on top of all that because just telling it things clearly wasn’t working. It still does it. Before that flight I’d been running it at medium or low reasoning effort as the orchestrator, which mostly kept it from wandering, but then I’m paying for the strongest reasoning and not using it. So after the rollback I switched to having Fable 5 orchestrate instead. Fable writes the full spec and hands it to Opus, which executes at full reasoning. Then Fable checks what came back against what it wrote, so Opus is on a leash the whole time. That behavior mostly stopped. I’m on the 20x Max plan running about 8 to 10 hours a day straight, so the difference is very noticeable. Fable ends up being a small share of tokens so the weekly cap works out, and the smaller stuff goes to Haiku and Sonnet, data pulls, fan-out jobs, things that don’t need a frontier model. I know this is not a new strategy and there are lots of variations of how to go about it. As far as keeping Opus on a leash and actually getting the most out of it without getting frustrated every single time you talk to it, this works the best for me. Anyway, this is what my rules are and where they live. CLAUDE.md holds the always-on rules, a rules/router.md file holds the routing map, and a model-postures.md file holds per-model payloads that a UserPromptSubmit hook injects into every prompt based on which model is live.
FABLE 5 (orchestrator, main session)
"Fable 5 at high effort owns the main session, requirements, judgment,
integration, and final verification."
"Fable does not inline-execute large builds. For a bounded, difficult
implementation, Fable writes the spec, dispatches an Opus 5 executor
subagent, and verifies the result. Fable stays at requirements, judgment,
and integration; an executor converging fast on an approved spec is the
desired behavior, not a defect."
"Brief only the exact delta, scope, output, stopping condition, and
exclusions."
OPUS 5 (executor, injected into every prompt it sees)
"Deliver the requested scope and stop before unasked work."
"Correct an immaterial slip silently. Call it out only when it changes
a number, conclusion, or decision."
"Do not replace grounding or fresh retrieval with confidence or
self-review."
SONNET 5 (fan-out worker)
"Dispatch it freely for fan-out that needs per-item judgment: blind
reader panels, audits, workspace sweeps. Give it an exact brief,
defined output, and a stopping condition."
"Complete the exact requested deliverable and stop. Do not audit the
surrounding system, surface adjacent issues, or recommend extra
improvements."
"Diagnose or report does not authorize a fix. A one-file request does
not authorize related changes."
"Do not create or delegate to subagents."
HAIKU (mechanical worker)
"Haiku agents handle bounded mechanical reads and transforms. Exact
brief, compact return, no recursive delegation."
"Subagent returns come back as extracted key numbers and paths, never
raw dumps."
submitted by /u/CraveFounder
Originally posted by u/CraveFounder on r/ClaudeCode
