{"slug": "your-telemetry-toggle-was-a-file-access-control", "title": "Your telemetry toggle was a file access control", "summary": "A developer found that Claude Code 2.1.277 through 2.1.280 silently skipped loading AGENTS.md project instructions whenever telemetry or nonessential traffic was disabled, because the built-in agents-md plugin's isAvailable check gated a local file read on the remote feature flag tengu_agents_md_mod, which defaults to false. The same gate broke AGENTS.md loading on Amazon Bedrock, Google Vertex AI, Microsoft Foundry and third-party gateways, with no warning printed when the file was skipped. Anthropic fixed the behavior in 2.1.281, and the write-up offers a one-line workaround — a CLAUDE.md containing '@AGENTS.md' — for affected builds.", "body_md": "*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.*\n\nClaude 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](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md) (changelog: \"Changed AGENTS.md support to also work on Amazon Bedrock, Google Vertex AI, Microsoft Foundry, LLM gateways, and sessions with telemetry disabled\").\n\nThe loader ships as a built-in plugin named `agents-md`. In the 2.1.280 bundle its registration reduces to this:\n\n``` js\nvar W = !1;\nvar B = () => Oa(\"tengu_agents_md_mod\", W);\nvar H = \"AGENTS.md as project instructions: ...\";\n```\n\n`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.\n\nTurn 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.\n\nTwo 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:\n\n```\nclaude --settings '{\"env\":{\"DISABLE_TELEMETRY\":\"\",\"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC\":\"\"}}'\n```\n\nOn 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](https://code.claude.com/docs/en/memory) 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.\n\nOn 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.\n\nThe workaround is one line. CLAUDE.md supports `@path` imports, and those do not depend on the flag:\n\n```\necho '@AGENTS.md' > CLAUDE.md\n```\n\nWith 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.\n\nTwo 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.", "url": "https://wpnews.pro/news/your-telemetry-toggle-was-a-file-access-control", "canonical_source": "https://dev.to/randomchaos/your-telemetry-toggle-was-a-file-access-control-b5", "published_at": "2026-10-11 22:25:10+00:00", "updated_at": "2026-10-11 22:33:40.597057+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Anthropic", "Claude Code", "Amazon Bedrock", "Google Vertex AI", "Microsoft Foundry"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/your-telemetry-toggle-was-a-file-access-control", "markdown": "https://wpnews.pro/news/your-telemetry-toggle-was-a-file-access-control.md", "text": "https://wpnews.pro/news/your-telemetry-toggle-was-a-file-access-control.txt", "jsonld": "https://wpnews.pro/news/your-telemetry-toggle-was-a-file-access-control.jsonld"}}