Skip to content

docs(agents): make CLAUDE.md an import instead of a symlink - #134

Merged
mattbodle merged 1 commit into
mainfrom
docs/claude-md-import
Sep 30, 2026
Merged

mattbodle merged 1 commit into
mainfrom
docs/claude-md-import

Conversation

@mattbodle

Copy link
Copy Markdown
Collaborator

Why

An agent opening this repository on Windows can end up with no agent instructions at all, and
nothing says so. CLAUDE.md is a symlink to AGENTS.md; git on Windows defaults to
core.symlinks=false and checks a symlink out as an ordinary text file whose entire contents are
the string AGENTS.md. Claude Code reads that literally rather than following it, so the
repository's rules, traps and review expectations are silently absent for that developer. Once this
lands, every checkout gets the instructions, on every platform.

Programme

Standalone change, no programme.

What changes

CLAUDE.md stops being a symlink and becomes a one-line @AGENTS.md import, with a comment saying
why it is an import rather than a symlink so the next person does not "tidy" it back. All guidance
stays in AGENTS.md and nothing is duplicated, so the two files cannot drift apart. This is the
pattern thirteen other SDK repositories already use; six, including this one, still had the symlink.

No behaviour, no shipped code, no test changes.

Linked work

Related: the same one-file change is being made in the other SDK repositories that still symlink
CLAUDE.md, each as its own pull request.

Rollout

Nothing changes in production; if this is wrong, revert the pull request.

Risks

  • The import could behave differently from the symlink on macOS and Linux, where the symlink
    worked; the import is already the pattern in thirteen sibling repositories; we would see it as an
    agent that does not know this repository's rules.

Risk class: low.

Who

Written by: an automated coding agent, as part of a prompt-and-instruction audit across the SDK
repositories that checked agent instruction files against what the repositories actually contain.
Code reviewed before opening: no one.
Design reviewed before opening: no one.
Decision this implements: no prior decision record; the reasoning is in this description, and the
convention it adopts is visible in the sibling repositories that already use the import.
Checked: confirmed git ls-files -s CLAUDE.md reported mode 120000 before the change and
100644 after; confirmed AGENTS.md is unchanged; confirmed the import form matches the sibling
repositories.
Not checked: the Windows behaviour is taken from git's documented core.symlinks default and from
the reason recorded in the sibling repositories, not reproduced on a Windows machine here.

Size

Hand-written: 8 lines, 1 file.
Generated: none.

🤖 Generated with Claude Code

CLAUDE.md was a symlink to AGENTS.md. Git on Windows defaults to
core.symlinks=false and checks a symlink out as a plain text file whose
contents are the string "AGENTS.md", which Claude Code reads literally
instead of following, so on those checkouts the repository silently has
no agent instructions and nothing reports an error.

Replaced with the `@AGENTS.md` import that thirteen other SDK
repositories already use, with the reason recorded in the file. The
guidance stays in AGENTS.md; nothing is duplicated, so the two cannot
drift.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mattbodle
mattbodle force-pushed the docs/claude-md-import branch from 3421445 to 1ab5857 Compare September 28, 2026 18:44
@mattbodle
mattbodle marked this pull request as ready for review September 28, 2026 18:47
@mattbodle
mattbodle merged commit 55dadab into main Sep 30, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants