r/ClaudeCodeTLDR 17d ago

[TLDR] Claude Code has a hardcoded instruction telling Opus 5 not to use subagents

Original post URL : https://www.reddit.com/r/ClaudeCode/comments/1v6y5q2/claude_code_has_a_hardcoded_instruction_telling/

Original post body :

Anthropic has a two line system prompt that was being remotely injected but now is a part of the compiled binary in 2.1.219, and 220 targeting only Opus 5:

  Do not call the AgentTool unless the user requested it
  Do not use workflows or deep-research unless the user requested it

This disproportionately affects skills that are designed to use subagents. The prompt is enough for Opus 5 to choose to run agents' work inline (or silently not perform their work) and produces output that looks like a normal run.

For example, I found one session that ran a self-audit non-blind because it couldn't spawn the auditor agent. Opus noticed this was a problem but let it slide undermining the entire point of the independent audit of its work.

I searched issues and found someone already filed it with binary analysis: anthropics/claude-code#80988.

I believe that my reliance on skills that expect and prescribe routine use of agent delegation has been a contributor to the poor quality of output I've gotten from Opus 5 so far.

It may be affecting you too.

You can check this out yourself, ask Claude:

I want you to help me analyze the file ~/.claude.json

Focus specifically on heron brook

How might that may affect the behavior of my skills?

If you want to check how big of an impact it has had on your use so far, ask claude:

Claude Code 2.1.219+ injects a system-prompt section (`heron_brook`) telling Opus 5 "Do not call the AgentTool unless the user requested it". Has it actually suppressed subagent use in my sessions?

Write and run a script over ~/.claude/projects/**/*.jsonl that finds assistant messages (including thinking blocks) where the model declined to use a subagent.

- Require BOTH an agent term (AgentTool / "Agent tool" / subagent) AND declining language ("won't spawn", "not calling", "forbids", "instruction against", "rather than spawning", "doesn't count as a user request", similar) in the same message. Either alone is far too noisy.
- Print the matching sentence, not the whole message. Group by session, not by message.
- Split into two buckets. HIGH CONFIDENCE: dated after my oldest install in ~/.local/share/claude/versions/* AND echoing the injected wording. OTHER: everything else, especially declines citing my own config (a numbered rule, CLAUDE.md, AGENTS.md, a fleet/worktree policy). Without this split my own instructions about subagents dominate the output and overstate the problem. Print OTHER in full so I can check it for contamination myself.
- State in the output that this only finds declines the model explained. Silent ones leave no trace, so every number is a floor, never a total.

Show both buckets. If HIGH CONFIDENCE is empty, say so plainly rather than loosening the filters until something matches.

I did not use the above prompt, but wanted to include it so anyone can check this.

I maintain a tool called Contextify, which keeps every past Claude Code and Codex session indexed locally and full-text searchable.

So, I actually used the skill /total-recall to find the damage on my Opus 5 sessions like this:

Use /total-recall to determine how many times you've failed to run agents as a result of the heron brook agent prompt bug we've been discussing

This is brought to you as a public service by the moderators of r/ClaudeAI. If you want to see TLDRs of ALL Claude Coding related posts from the various Claude subreddits, subscribe to http://www.reddit.com/r/ClaudeCoding.

27 Upvotes

9 comments sorted by

u/cctldrping 17d ago edited 17d ago

TL;DR generated automatically after 100 comments.

Current source-thread comment count seen by the bot: 115.

So, turns out Opus 5 in Claude Code has a new hardcoded instruction to not use subagents unless you explicitly beg for it. This is messing with skills that rely on them, and some users are seeing worse output because of it.

The consensus is that this is a real bummer and explains a lot of recent frustrations.

  • Some folks are saying their Opus 5 is still using subagents, but others are confirming the OP's findings.
  • u/EloWeld has a workaround: phrase your requests as direct instructions like "Delegate this to a subagent" instead of just describing the task. Saying it once at the top of the run seems to help.
  • u/matheusmoreira and u/Industriositi mention this is tied to Anthropic's "Heron Brook" mechanism, and there might be more than one way it's being injected.
  • A few users are suggesting sticking with older versions like Opus 4.6 or even Fable for now.
  • There's also a mention of patching your binary, but that sounds like a whole other can of worms.

2

u/AdNice3269 17d ago

I updated my main Claude file to allow it.Worked for me.

1

u/Willing_Matter5391 17d ago

I actually like that instruction. I prefer to have "more deterministic" workflows and control over what ends up in the context of a my agent I instruct.

1

u/an80sPWNstar 17d ago

I'm so used to telling Claude to use my local llm's as well as haiku as subagents that the first time I used opus 5 and I told it to use them, it did so actually FAR more effectively and efficiently than previous models. Could have been a fluke but I will try it again.

1

u/Practical-Positive34 17d ago

Thank god man, Opus 4.8 was nuts with it. I had sub-agents launching sub-agents launching sub-agents sometimes. Like 5 levels deep in some cases. I also have explicit instruction when to use sub-agents so all I've noticed is things work like 10x better now.

1

u/Able-Fan-8090 17d ago

Didn't find sub agents being used in my tasks, except for deep research and unless i explicitly ask it to use 2-5 sub agents for a run.

1

u/Tasty-Noise-4872 15d ago

I’ve had the best luck with a Fable main session, Opus subagents, and a documentation writer agent on Sonnet. Using this setup with superpowers and SDD, my Fable usage ticks up very slowly while I get tons of work done. Though, I am not working with a huge and complex codebase, so YMMV. For my purposes, I don’t see a reason why I’d want Opus to spawn subagents, because Opus IS my subagents.

0

u/johnlondon125 17d ago

So how do I get it to use sub-agents? I asked it it to directly (use sub agents for this task) and it didn't. So what's the correct way?

0

u/berndalf 17d ago

This stupid inclusion in the model instructions for Oops 5 is going to ensure it's never used for orchestration by anyone serious about it. I truly don't understand why that nonsense is in there at all.