Claude Code Adopts AGENTS.md: The Last Coding-Agent Holdout Blinks

Sources

September 18, 2026. Claude Code 2.1.277 shipped a one-line changelog entry that quietly settles a year-long standards fight: "Added AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead; change it under 'Project instructions' in /config." Anthropic's CLI — the last major coding agent that still required its own proprietary instruction file — now reads the open AGENTS.md format natively. OpenAI's Codex, Google's Gemini CLI and Jules, Cursor, Amp, Aider, Zed, Warp, VS Code, and roughly sixty more tools adopted it years ago. Anthropic held out. The holdout is over.

On Hacker News the change drew 423 points and 151 comments in its first day — unusual traction for what looks like a file-name mapping. It isn't. The fight was never about the file name; it was about whether your project's agent instructions are portable infrastructure or per-vendor config sprawl. Platform teams that standardized on CLAUDE.md now own a migration decision, and teams that standardized on AGENTS.md own a new precedence bug surface. This piece breaks down exactly what shipped, the four-way precedence rules that now govern every repo, the deployment gaps that will bite you on Bedrock, and the governance stance we recommend.

What Actually Shipped: One Option, Four Modes

The implementation is not a hack. Anthropic open-sourced it as a mod — one of four built-in Claude Code plugins whose source lives in the anthropics/claude-code repo under mods/agents-md and ships compiled into the binary. The entire behavior is one option, instructionFiles, set via the Project instructions panel in /config:

ModeWhat Claude readsWho should set it
claude-md-or-agents-md (default)Your CLAUDE.md files — or your AGENTS.md files only when no CLAUDE.md / .claude/CLAUDE.md / CLAUDE.local.md exists in the working directory or any directory above itMost repos. AGENTS.md works "just works" without touching anything.
claude-md-and-agents-mdBoth files, per-directory: CLAUDE.md first, AGENTS.md after it. Files already @-imported or symlinked aren't double-loadedHybrid shops mid-migration, or teams that want agent-portable instructions beside Claude-specific overrides
claude-mdCLAUDE.md only. AGENTS.md ignoredRepos that never want agent-file portability; lock-in as an explicit choice
managed-onlyOrg-managed CLAUDE.md + auto memory only. Project/local/user CLAUDE.md, .claude/rules/, and every AGENTS.md droppedEnterprises running a central prompt/governance function

The critical precedence rule: under the default mode, the presence of any CLAUDE.md — including an uncommitted CLAUDE.local.md you keep for personal preferences — silently disables AGENTS.md loading. Per the docs: "Because CLAUDE.local.md counts, adding one to keep your own uncommitted instructions in a project that relies on AGENTS.md stops Claude from reading AGENTS.md for you." One stray local file and your entire agent-instruction contract stops applying for that developer. This is the single most likely operational failure mode of the whole feature.

The Precedence Table Every Repo Owner Should Pin

Claude Code's official docs give the exact resolution logic. Here it is in the form your team will actually consult:

Your repo has…Claude Code reads
AGENTS.md, no CLAUDE.md / CLAUDE.local.md anywhere above the working directoryAGENTS.md — plus every AGENTS.md and .claude/AGENTS.md up the directory tree
AGENTS.md + any CLAUDE.md or CLAUDE.local.md in or above the working directoryCLAUDE.md only — AGENTS.md silently ignored
CLAUDE.md that @-imports AGENTS.mdCLAUDE.md with AGENTS.md included through the import (works on every version, including Bedrock)

Files that don't block AGENTS.md loading and still load alongside it: your ~/.claude/CLAUDE.md (user-global), the org's managed CLAUDE.md, and .claude/rules/ files. Files that are never read: AGENTS.local.md, AGENTS.override.md, anything under .agents/. Subdirectory AGENTS.md files attach when Claude reads a file in that subdirectory with the Read tool (nested context), mirroring how nested CLAUDE.md files behave.

Load-order diagram — default mode (claude-md-or-agents-md):

session start
    │
    ├─ engine walks working-dir → root
    │      finds CLAUDE.md / .claude/CLAUDE.md / CLAUDE.local.md anywhere on path?
    │
    ├─ YES ──► CLAUDE.md chain loaded (AGENTS.md ignored entirely)
    │
    └─ NO  ──► agents-md mod loads every AGENTS.md + .claude/AGENTS.md on path
                   │
                   ├─ rendered into prompt.context as {path, kind: "project", content}
                   ├─ same framing/preamble/omission rules as CLAUDE.md
                   ├─ announced: "no CLAUDE.md found; AGENTS.md loaded: /repo/AGENTS.md"
                   └─ @path imports expanded, claudeMdExcludes patterns applied

The Bedrock Gap: Where AGENTS.md Support Doesn't Exist

Here's the part the changelog buries and the docs surface: native AGENTS.md loading is feature-flagged, and the flag doesn't fly everywhere. Claude reads AGENTS.md natively only in sessions that fetch feature flags from Anthropic. The documented exceptions:

The workaround is the one the ecosystem used for the last year: CLAUDE.md containing a single line, @AGENTS.md. The import path is engine-native, works on every provider, fires InstructionsLoaded hooks, and shows up in /memory — which brings us to the divergences.

Import vs. Native Read: Four Divergences That Matter

The docs list exactly where a natively-read AGENTS.md behaves differently from a CLAUDE.md. For governance work, these matter:

BehaviorCLAUDE.mdAGENTS.md (native read)
Visible in /memory and /context file listsListedNot listed. Confirm via the "AGENTS.md loaded" line or ask the model
InstructionsLoaded hooksFireDon't fire (they fire if CLAUDE.md imports the AGENTS.md)
--add-dir extra directories (with CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD)Their CLAUDE.md loadsTheir AGENTS.md doesn't load
@path import of a file outside the working directoryPrompt-based external-import approvalLoads only if external imports were already approved — no new prompt

That last row is the security-relevant one. An AGENTS.md sitting at the repo root can pull in a file from outside the repository — @/etc/something in the worst case — without triggering the approval prompt a CLAUDE.md import would. The docs frame it as convenience; a red team frames it as a prompt-injection surface that skips a consent gate. If AGENTS.md files in your org can be modified via merge-PR from an external contributor (they can — it's a plain markdown file in the repo), the @import of paths outside the working directory is a data-flow channel your code-review policy doesn't currently name.

Who Adopted What: The Vendor Matrix

With Anthropic in, every major coding agent now reads the same file. The agents.md registry tracks adoption and claims over 60,000 open-source projects now ship an AGENTS.md — including openai/codex (the standard's origin repo), apache/airflow (4,600+ forks), temporalio SDKs, and thousands of internal monorepos that adopted it as CI-adjacent documentation.

ToolInstruction fileAGENTS.md native?Notes
OpenAI Codex (CLI)AGENTS.mdYes — origin of the standardThe format was designed inside openai/codex and spun out as a vendor-neutral spec
Claude CodeCLAUDE.md → AGENTS.md fallbackYes — as of 2.1.277 (Sep 18, 2026)Default-mode fallback; Bedrock/Vertex/Foundry and telemetry-off sessions excluded
Gemini CLI / JulesGEMINI.md → AGENTS.md fallbackYesSame fallback pattern as Claude; hierarchical GEMINI.md files alongside
Cursor.cursor/rules + AGENTS.mdYesRules take precedence; AGENTS.md read for portability
AiderCONVENTIONS.md → AGENTS.mdYesLong-standing AGENTS.md support in the minimal-agent camp
Zed, Warp, VS Code, Amp, goose, opencode, Devin, Windsurf, Junie, GitHub Copilot coding agent, …AGENTS.mdYesThe registry lists ~60 tools; adoption is table stakes at this point

The takeaway: AGENTS.md won. Not because it's technically superior — it's a plain markdown file — but because it's the only instruction format that every agent can read without translation. The "tuned per-model prompt" argument (Anthropic's thariq made it publicly: prompts should be tuned for models, and blindly applying AGENTS.md "is probably an antipattern") lost to the operational reality that nobody maintains 60 instruction files per repo, and platform teams won't either.

What This Means for Platform Teams: Three Moves

1. Pick one canonical file per repo, and make the choice explicit. The CLAUDE.local.md footgun means "both files present" is now a silent misconfiguration, not a belt-and-suspenders setup. Decision matrix:

# Option A — AGENTS.md canonical (recommended for multi-agent orgs)
repo/
├── AGENTS.md            # single source of truth, all tools read it
└── (no CLAUDE.md anywhere — check CI for stray files)

# Option B — AGENTS.md canonical + Claude-specific overrides
repo/
├── AGENTS.md            # portable core
└── CLAUDE.md            # one line: @AGENTS.md, plus Claude-only rules below
                          # fires hooks, lists in /memory, works on Bedrock

# Option C — lock-in explicit
repo/
└── CLAUDE.md            # claude-md mode; AGENTS.md deliberately ignored

Option B is the pragmatic winner for enterprises: the @-import keeps one source of truth while restoring hook firing, /memory visibility, and — critically — Bedrock compatibility. The import is engine-native and provider-independent; the native read is flag-gated.

2. Add AGENTS.md to your review pipeline — it's now a load-bearing config file. A file that steers every AI agent touching your repo is not documentation; it's a privilege boundary. Minimum review policy:

  • CODEOWNERS entry for /AGENTS.md — require platform-team approval on changes. It shapes agent behavior more than most Kubernetes manifests you review.
  • Diff-alerting: any PR adding an @-import pointing outside the repo root should fail policy review. Native-read AGENTS.md imports of external paths skip the approval prompt that CLAUDE.md imports trigger (documented divergence, see table above).
  • Secrets scan the file like any other: agent instructions routinely accumulate environment details, internal hostnames, and credential paths.
  • Lint instruction quality: instructions >25KB or 200+ lines degrade context efficiency (Claude's auto-memory loads are capped at 200 lines/25KB; bloated instruction files tax every session). Keep build commands, conventions, PR format — push procedures to skills or rules.

3. Decide your org-level default now, before sprawl does it for you. The managed-only mode exists precisely for central governance: org-managed CLAUDE.md + auto memory, project files dropped. If you run a golden-path IDP, expose the instruction file as a scaffolded template in your cookiecutter/backstage template so every new service starts with a governed AGENTS.md — not a copy-pasted one from a random repo.

Why This Matters More Than It Looks

The cynical read is correct in one respect: nothing about Claude's model changed. What changed is the topology of agent configuration. For two years the ecosystem looked like this:

BEFORE (2024–mid 2026)                    AFTER (Sep 18, 2026)
┌─────────────────────────┐               ┌─────────────────────────┐
│ your repo               │               │ your repo               │
│  ├─ CLAUDE.md    ───────┼── Claude only │  └─ AGENTS.md ─┬─ Claude Code │
│  ├─ GEMINI.md   ────────┼── Gemini only │                ├─ Codex       │
│  ├─ .cursor/rules ──────┼── Cursor only │                ├─ Gemini CLI  │
│  ├─ CONVENTIONS.md ─────┼── Aider only  │                ├─ Cursor      │
│  └─ (AGENTS.md) ────────┼── everyone else│                └─ 60+ tools   │
│                         │               │                          │
│  4–6 instruction files  │               │  1 instruction file       │
│  drifting apart silently│               │  + optional vendor shim   │
└─────────────────────────┘               └─────────────────────────┘

Instruction files drift. Anyone who maintained both CLAUDE.md and AGENTS.md knows the CLAUDE.md copy grows Claude-specific workarounds until the two disagree about what "run the tests" means. Standardization collapses that surface to one file with one CODEOWNERS line — and one place to audit when an agent does something you didn't expect.

The second-order effect is the one platform engineers should price in: AGENTS.md is becoming the first broadly-adopted piece of agent governance surface. It's plain markdown, so it diffs cleanly, reviews like code, and rides existing Git workflows — but it's also executed by every agent that reads it. The ZCode workspace-upload fiasco of last week (our coverage: ZCode's silent .git upload) is the bookend: instruction files are how agents learn what they're allowed to do. A file that sixty tools treat as authoritative context is now part of your platform's security perimeter, whether your threat model admits it or not.

Who Should Skip This

Standard Platform Monkey honesty: not every team needs to act this week.

Bottom Line

Claude Code reading AGENTS.md isn't a feature announcement; it's the end of the instruction-file format war. One open file, sixty tools, every major vendor. The work left is governance-shaped: pick your canonical file, wire it into CODEOWNERS and review policy, watch the external-@import surface, and scaffold it into golden paths before the copy-paste versions land. The agents are converging on a standard — the interesting question is whether your platform's review pipeline converges on treating that standard like the production configuration it now is.

Reference links: Claude Code changelog and memory/AGENTS.md docs, mods/agents-md source, agents.md spec & adoption registry, HN discussion.