2.1.220 silently added a system-prompt directive suppressing Agent-tool dispatch (absent in 2.1.218)

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 3 comments · opened Aug 5, 2026

Summary

Starting in 2.1.220, the system prompt contains a directive instructing the model not to call the Agent tool unless the user requested it. This was not present in 2.1.218.

The effect is that Claude declines to dispatch subagents for workflows whose entire design is parallel dispatch — custom skills for code review, auditing, and plan review — even though invoking the skill is itself the request. The workflows do not error; they silently run degraded, or the model reports that it needs permission to fan out.

This arrived in a patch release with no signal, and it is not present in any configuration file on disk, which made it extremely difficult to diagnose.

Evidence it arrived in an upgrade

Measured across every version retained on this machine:

$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.210   # Jul 14
0
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.218   # Jul 23
0
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.220   # Jul 24
2
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.221
2
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.222
2

Absent in 2.1.218, present from 2.1.220 onward.

The string appears in no config file on disk — not in ~/.claude/settings.json, not in project settings, not in any memory or rules file. We attempted several configuration-side fixes before locating it inside the binary, and initially mis-diagnosed it as a long-standing compiled constant because we compared only 2.1.220, 2.1.221 and 2.1.222 to each other and never checked 2.1.218.

Environment

| | |
|---|---|
| Claude Code | 2.1.220 and later (2.1.218 unaffected) |
| Platform | macOS 26.5.2 (25F84), arm64 |
| Node | v22.23.2 |
| Shell | zsh |
| Install method | native, autoUpdates: false |

Impact

Our review workflow depends on fanning out parallel reviewers. With the directive in place it silently stopped doing so. As a direct consequence our code-review gate was skipped on four commits that reached production; running the review retroactively surfaced three critical defects, including one in a drift-detection gate that caused it to falsely pass the exact condition it had been built to catch.

The failure mode is the dangerous kind: nothing errors, and the absence of review looks identical to a clean review.

What I'd like to see

  1. Release-note system-prompt changes that alter agent behavior. A directive that suppresses tool dispatch is a behavioral breaking change, not an internal detail.
  2. Make such directives inspectable — some supported way to see the effective system prompt, so this is diagnosable without byte-level comparison of binaries.
  3. Provide a supported override for projects whose workflows legitimately depend on programmatic subagent dispatch.
  4. Reconsider the directive's phrasing. Invoking a skill whose documented purpose is multi-agent fan-out should count as the user requesting it.

Related: I have filed a separate issue about the 2.1.222 worktree-isolation guard. Both are behavioral regressions that arrived silently via patch releases on a setup that had been stable for months.

View original on GitHub ↗

3 Comments

FriskySatyr · 25 days ago

The separate issue referenced above is #84182 — the 2.1.222 worktree-isolation guard regression.

darthShadow · 22 days ago

You may want to add your voice here: https://github.com/anthropics/claude-code/issues/80988

kfriedenberger · 3 days ago

Still present a month later, and now reaching users through a second delivery path: the VS Code extension, which bundles its own binary independently of the CLI on PATH.

On this machine (macOS 26.5.2 (25F84), arm64):

| Binary | Version | heron_brook plumbing | Fallback text present |
|---|---|---|---|
| /opt/homebrew/bin/claude | 2.1.218 (Jul 23) | yes | no — the function ends return null |
| ~/.vscode/extensions/anthropic.claude-code-2.1.245-darwin-arm64/.../claude | 2.1.245 (Aug 25) | yes | yes |
| ~/.vscode/extensions/anthropic.claude-code-2.1.246-darwin-arm64/.../claude | 2.1.246 (Aug 25) | yes | yes |

Independently reproduces your 2.1.218 boundary. In 2.1.218 the selector ends at the two flag reads and returns null; from 2.1.220 on it gains the third branch (if (rzt(e)) return zLr) carrying the client-side default.

The IDE/terminal split is worth calling out on its own. The extension bundles its own binary, so a user pinned to a pre-2.1.220 CLI is unaffected in the terminal and affected in the IDE — on the same machine, same project, same CLAUDE.md. Delegation appears to work or not work depending on which window you are in, which reads as model nondeterminism rather than a version difference. Nothing surfaces the extension's bundled version in-session.

Local gate state, confirming the mechanism in #80988:

tengu_heron_brook:    ABSENT from cachedGrowthBookFeatures
tengu_fennel_godwit:  false

Neither flag is set, so the kill-switch is off and the client-side default applies unconditionally on Opus 5.

Impact here. This repo uses single-writer agent lanes — CLAUDE.md requires that work in src/chemistry/, src/integrations/, src/store/, and src/app/ be delegated to its owning agent, and a cross-lane edit is a review-blocking violation by convention. Sessions began stating outright that they would not invoke agents. That is a better failure than silent degradation, but it inverts the repo's routing rules, and diagnosis cost a full session of byte-level binary comparison because the string is in no config file on disk.

Adding to your request list, in priority order for this use case:

  • A supported opt-out. tengu_fennel_godwit already exists as the kill-switch — exposing it as a setting or env var would resolve this without new machinery.
  • Version parity or visibility across delivery paths. If the extension ships a different binary than the CLI, the effective version should be inspectable in-session.
  • Treat a project-level delegation policy as the user requesting it. A CLAUDE.md that mandates routing is an explicit standing request; the directive's own wording ought to accommodate it.

Two workarounds, for anyone finding this issue:

  1. Switch the session to Sonnet 5. The gate checks for the opus_5_prompt_bundle capability, so non-Opus-5 models are unaffected. This is the only reliable fix available locally.
  2. Restating the routing policy in CLAUDE.md as an explicit standing user request rather than project policy helps, but it is persuasion against a system-prompt line, not a real override.