Updated 11 October 2026: Claude Code 2.1.281 fixed this the day this piece ran; AGENTS.md now loads with telemetry off and on Bedrock, Vertex, Foundry and gateways. The behaviour below applies to 2.1.277 through 2.1.280.
Claude Code 2.1.277 added support for AGENTS.md, the project-instruction file several coding agents now share. In a repo with no CLAUDE.md, it is supposed to load AGENTS.md instead. On 2.1.277 through 2.1.280 it did, as long as telemetry was on; 2.1.281 fixed it (changelog: "Changed AGENTS.md support to also work on Amazon Bedrock, Google Vertex AI, Microsoft Foundry, LLM gateways, and sessions with telemetry disabled").
The ships as a built-in plugin named agents-md. In the 2.1.280 bundle its registration reduces to this:
var W = !1;
var B = () => Oa("tengu_agents_md_mod", W);
var H = "AGENTS.md as project instructions: ...";
W is the plugin's isOnByDefault value, and it is false. B is isAvailable, which queries a remote feature flag called tengu_agents_md_mod and falls back to W when the flag cannot be fetched. No flag, no plugin, no file read. Pulling a markdown file off the working directory needs no network, yet this path waits on a server-side switch anyway.
Turn off nonessential traffic and the switch never resolves to true. The author of the write-up confirmed it with a canary: an empty directory holding only an AGENTS.md with the word PERIWINKLE in it, then claude -p asking for the word and forbidding file reads. Two sessions per configuration, because the first session only fetches the flag and the second one acts on it.
Two environment variables each kill the feature on their own: CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 and DISABLE_TELEMETRY=1. Both have to be cleared before AGENTS.md loads. Setting either to 0 does not count as off; any value at all counts as set, which is easy to trip over when you think you are turning the feature back on. An env block in the project's .claude/settings.json that clears both variables does nothing, so there is no per-repo way in. A session flag works from the second session onward:
claude --settings '{"env":{"DISABLE_TELEMETRY":"","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC":""}}'
On those builds none of this printed a warning. The session started, the model answered without your project instructions, and nothing said a file was skipped. Anthropic's docs now say an interactive session prints a "no CLAUDE.md found; AGENTS.md loaded" line naming the path when it reads the file, and a "Project instructions" setting in /config controls whether CLAUDE.md, AGENTS.md or both load; nothing is printed when a file is skipped. That silence is the expensive part. Most people will not plant a canary word and grep the binary; they will watch the model ignore their instructions and go rewrite prompts, while the file never reached the model at all.
On those builds the same gate caught anyone whose traffic could not resolve the flag to true: third-party gateways, Bedrock and Vertex. Those are also the setups most likely to have disabled nonessential traffic by policy, and their users are the ones most likely to keep one AGENTS.md across several tools. They get a feature announced as available that then does nothing.
The workaround is one line. CLAUDE.md supports @path imports, and those do not depend on the flag:
echo '@AGENTS.md' > CLAUDE.md
With that file next to AGENTS.md, the canary returns the word even with CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 still set. The price is one extra file per repo, which is the file AGENTS.md support was meant to delete. If a staged rollout needs the flag, the fallback for an unfetchable flag should be the documented behavior, or at least a startup message when an AGENTS.md is present and skipped.
Two related gaps are worth knowing if you share instructions across agents. There is no user-level AGENTS.md next to the user CLAUDE.md; the plugin only looks in project directories. Codex reads a global ~/.codex/AGENTS.md. Claude Code's /import can copy one into the user CLAUDE.md, but the copy does not follow later edits, so you still need an @ import pointing at the shared file. Skills have the same shape. Codex reads .agents/skills and ~/.agents/skills; Claude Code 2.1.280 knows those paths only through /import, which copies the skills into .claude/skills and then drifts from the source. Symlinking .claude/skills to ../.agents/skills works, because Claude Code follows the symlink.