Claude Code skips AGENTS.md when telemetry is off

According to a post on Szypowi, Claude Code skips the AGENTS.md in your repo whenever telemetry is off. The code that reads this local file first asks a remote server for permission and treats an unanswered request as a no. The author found the gate in the 2.1.280 bundle with a string search and confirmed it with a canary word. Nothing on screen tells you the file was skipped.
At a glance
- Claude Code 2.1.277 announced that projects without a CLAUDE.md would get their AGENTS.md read instead, but the built-in agents-md plugin only turns on when a remote feature flag says so.
- Setting DISABLE_TELEMETRY=1 or CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 blocks the file, setting them to 0 still blocks it, and a project-level settings override does nothing. Only a session-level override works.
- There is no warning when the file is skipped, and Issue #95690 says Bedrock, Vertex and third-party gateways are affected too. The workaround is a one-line CLAUDE.md that imports AGENTS.md.
In case you missed it, Claude Code 2.1.277 added support for AGENTS.md project instructions on September 18. When a project has no CLAUDE.md, Claude Code can read AGENTS.md instead, and you can change this in the Project instructions setting in /config. The default mode stands down when a repository already has a CLAUDE.md, so an update does not swap instruction sources. According to Windows Forum, The Register first framed the move as Anthropic adopting OpenAI's Markdown-based instruction mechanism.
The agents-md plugin waits on a remote flag, tengu_agents_md_mod, that falls back to false
The loader is a built-in plugin called agents-md. In the 2.1.280 bundle, its registration sets isOnByDefault to false. It defines isAvailable as a call to a remote feature flag, tengu_agents_md_mod, with false as the fallback. If Claude Code cannot fetch that flag, the plugin counts as unavailable and never reads the AGENTS.md in your working directory. The plugin's own description, quoted from the bundle, promises the documented behavior:
AGENTS.md as project instructions: by default loaded where the project has no CLAUDE.md
According to AI Catchup, the mod documents four values for an instructionFiles option. claude-md keeps Claude-only behavior. claude-md-or-agents-md is the default fallback. claude-md-and-agents-md loads both files. managed-only removes project, local and user instruction files but keeps managed policy and memory files. None of those choices matters if the flag never resolves to true.
Either DISABLE_TELEMETRY=1 or CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 keeps AGENTS.md out
The test was small. The author made an empty directory holding only an AGENTS.md with the line "The canary word is PERIWINKLE." Then they asked claude -p for the canary word and told it not to read files. Each setup ran twice, because the first session in a new configuration only fetches the flag and the second one uses it.
With either variable set, the file never loaded. Setting a variable to 0 changes nothing. The environment variable docs say any value counts, which is easy to miss when you are trying to turn a feature on. An env block in the project's .claude/settings.json that clears both variables has no effect either, so you cannot turn the feature on for a single repo.
One thing does work. You can pass claude --settings with both variables set to empty strings, but even that only takes effect from the second session on. In none of these cases does Claude Code print a warning. According to Issue #95690, third-party gateways, Bedrock and Vertex have the same problem, because the flag cannot resolve to true there either.
How a local file ended up behind a remote switch
A feature flag is a switch that a vendor flips on its own servers to release a feature gradually. According to DeepWiki, Claude Code uses GrowthBook for feature flags and Statsig for experiment gating as part of its telemetry pipeline. DeepWiki describes two kinds of check. One returns a disk-cached value right away. The other waits for a fresh network fetch when the cache is missing or stale.
Put those pieces next to the measurements and the behavior follows. With telemetry or nonessential traffic disabled, the flag cannot be fetched, so the check lands on its false fallback. Picture a shop that unlocks its own front door only after a call to head office. If the phone line is cut, the door stays shut, even though the key is sitting on the counter.
A one-line CLAUDE.md with @AGENTS.md brings the instructions back
CLAUDE.md supports @path imports, and those do not depend on the flag. The author's workaround is a CLAUDE.md next to AGENTS.md that contains the single line @AGENTS.md. With it in place, the canary test returned the word even with CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 still set. The cost is one extra file per repo, which is exactly what AGENTS.md support was supposed to remove.
The author also lists gaps beyond the gate. The plugin looks for AGENTS.md and .claude/AGENTS.md in project directories only, and there is no user-level file next to the user CLAUDE.md. Codex reads a global ~/.codex/AGENTS.md. The /import command in Claude Code can copy that file into the user CLAUDE.md, but the copy does not pick up later edits.
Skills follow the same pattern. Codex reads them from .agents/skills and ~/.agents/skills, while Claude Code 2.1.280 knows those paths only in /import, which copies them into .claude/skills. A canary skill in .agents/skills did not appear in Claude Code, but the same skill in .claude/skills did. The author now links .claude/skills to ../.agents/skills, and Claude Code follows the symlink.
The author objects most to the silence. People who never run a canary test will blame the model and rewrite prompts for a file it never saw. In our view, false is the wrong fallback for a feature announced as available, because reading a local Markdown file needs no network. The inputs do not say whether the flag is a temporary staged rollout. At launch, the feature was also missing for deployments on Bedrock, Vertex AI and Microsoft Foundry.
What would end the silent skip
The author asks for two changes. First, reading a local file should not depend on telemetry. Second, if the gate stays for a gradual rollout, Claude Code should show a startup warning whenever an AGENTS.md is present and skipped. Anthropic has not given a version number or date for either change. Until one ships, anyone with telemetry off needs the one-line CLAUDE.md to get AGENTS.md loaded.
Related stories
- Claude Code reads AGENTS.md when CLAUDE.md is missing
- Claude Mods ship in weeks, and you can flip them on now
- Claude Code grades your plugin against a no-plugin run
- /resume carries CLI sessions into the desktop app
- /design shows up in Claude Code as research preview
- Output tokens cost roughly 5x input in Claude Code
Comments
No comments yet. Be the first.
Join the conversation
Sign in with Google to leave a comment. Your name and avatar come from your Google profile, and the comment appears after moderation.
