What
Every repo in the org keeps its agent instructions in CLAUDE.md — this repo included. AGENTS.md
is the cross-agent filename other coding agents look for, so the instructions are invisible to
anything that is not Claude Code.
Proposal: rename the file to AGENTS.md in each repo and leave CLAUDE.md as a symlink to it, so
Claude Code keeps loading it with no change on its side.
Scope
Repos with a CLAUDE.md today include this one, modern-di, faststream-outbox, and the
modern-di-* integrations. Worth doing in one pass rather than per repo — half-migrated is worse
than either end state, because a reader cannot tell which file is authoritative.
Per-repo checklist
git mv CLAUDE.md AGENTS.md
ln -s AGENTS.md CLAUDE.md (git stores the symlink as a mode-120000 blob; no config needed)
- Update inbound references. In
faststream-outbox that is two: .github/PULL_REQUEST_TEMPLATE.md
and a prose mention in tests/test_client_contract.py. Other repos will have their own.
Worth checking before doing it
- Windows checkouts. Git creates symlinks on Windows only with
core.symlinks=true and
developer mode or elevation; otherwise the working tree gets a plain text file containing the
target path. If anyone develops on Windows, a committed duplicate with a one-line pointer may beat
a symlink.
- Direction.
AGENTS.md as the real file and CLAUDE.md as the link is the right way round —
the generic name should be the content — but it means any tool that writes to CLAUDE.md writes
through the link, which is fine, and any tool that replaces it breaks the link silently.
- Tools that resolve vs. read links. Worth a quick check that the agents in use follow a symlink
rather than skipping it.
Context
Raised in review on modern-python/faststream-outbox#159, which deliberately did not do the rename:
that PR's premise is aligning with modern-di, which is still on CLAUDE.md, so renaming in one
repo alone would have introduced the drift this issue exists to avoid.
What
Every repo in the org keeps its agent instructions in
CLAUDE.md— this repo included.AGENTS.mdis the cross-agent filename other coding agents look for, so the instructions are invisible to
anything that is not Claude Code.
Proposal: rename the file to
AGENTS.mdin each repo and leaveCLAUDE.mdas a symlink to it, soClaude Code keeps loading it with no change on its side.
Scope
Repos with a
CLAUDE.mdtoday include this one,modern-di,faststream-outbox, and themodern-di-*integrations. Worth doing in one pass rather than per repo — half-migrated is worsethan either end state, because a reader cannot tell which file is authoritative.
Per-repo checklist
git mv CLAUDE.md AGENTS.mdln -s AGENTS.md CLAUDE.md(git stores the symlink as a mode-120000 blob; no config needed)faststream-outboxthat is two:.github/PULL_REQUEST_TEMPLATE.mdand a prose mention in
tests/test_client_contract.py. Other repos will have their own.Worth checking before doing it
core.symlinks=trueanddeveloper mode or elevation; otherwise the working tree gets a plain text file containing the
target path. If anyone develops on Windows, a committed duplicate with a one-line pointer may beat
a symlink.
AGENTS.mdas the real file andCLAUDE.mdas the link is the right way round —the generic name should be the content — but it means any tool that writes to
CLAUDE.mdwritesthrough the link, which is fine, and any tool that replaces it breaks the link silently.
rather than skipping it.
Context
Raised in review on modern-python/faststream-outbox#159, which deliberately did not do the rename:
that PR's premise is aligning with
modern-di, which is still onCLAUDE.md, so renaming in onerepo alone would have introduced the drift this issue exists to avoid.