[BUG] Server-side experiment flag injects "Do not call the AgentTool unless the user requested it", silently overriding CLAUDE.md-configured subagent workflows

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 1 comment · opened Jul 29, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Environment

Claude Code version: 2.1.220
Model: claude-opus-5 (default via opus alias on Max plan)
OS: [Windows 11 / WSL2 …]
Observed since: 2026-07-24 (Opus 5 default rollout)

Summary

Since the Opus 5 rollout, Claude Code stopped invoking a project-defined code-reviewer subagent that a CLAUDE.md rule has reliably triggered for over a year ("after every change, the code reviewer agent MUST be run"). No local configuration changed.

Debug output revealed a server-side experiment flag as the cause. The payload includes:

json
{
"experimentKey": "claude_code_canal_plateau_experiment",
"tengu_thistle_grebe": "no_nudges",
"tengu_heron_brook": "Do not call the AgentTool unless the user requested it",
"cedar_basin": "2026-08-31"
}

The injected instruction "Do not call the AgentTool unless the user requested it" suppresses subagent invocations. It apparently does not treat a standing CLAUDE.md instruction as a user request, so long-established agent-based workflows silently stop working for users in this experiment group.

Steps to reproduce

Be in the experiment group (flag payload above visible via [how you obtained it: claude --debug / …])
Define a custom subagent (e.g. a code reviewer) and a CLAUDE.md rule requiring it to run after every code change
Ask Claude Code to implement a change
The subagent is never invoked; asked why, the model cites the injected instruction

Expected behavior

CLAUDE.md-configured workflows should not be overridden by server-side experiments — or at minimum, an experiment that changes agent-invocation behavior should be surfaced to the user (changelog entry, status line, anything inspectable without debug output)
A standing CLAUDE.md instruction should qualify as "the user requested it" — that is the documented purpose of CLAUDE.md

Impact

Silent regression of a production workflow. Debugging this cost roughly a full working day, because every visible signal pointed to a model or configuration problem: the model's own explanations were inconsistent (initially claiming tests had passed "before the changes"), and nothing indicated an experiment was active. Users billing client work by the hour bear this cost directly.

Ask

Confirm whether claude_code_canal_plateau_experiment suppresses AgentTool calls for enrolled users
Either exclude CLAUDE.md-triggered subagent invocations from the suppression, or make experiment enrollment visible/opt-out
Document behavior-changing experiments somewhere inspectable

What Should Happen?

CLAUDE.md-configured workflows should not be overridden by server-side experiments — or at minimum, an experiment that changes agent-invocation behavior should be surfaced to the user (changelog entry, status line, anything inspectable without debug output)
A standing CLAUDE.md instruction should qualify as "the user requested it" — that is the documented purpose of CLAUDE.md

Error Messages/Logs

Steps to Reproduce

Be in the experiment group (flag payload above visible via [how you obtained it: claude --debug / …])
Define a custom subagent (e.g. a code reviewer) and a CLAUDE.md rule requiring it to run after every code change
Ask Claude Code to implement a change
The subagent is never invoked; asked why, the model cites the injected instruction

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

2.1.220

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Warp

Additional Information

_No response_

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗