The AI agents directory is named agents, lowercase
Normative, cross-family. This governs every directory in the repository that
holds instructions for AI agents, at any depth and in any family. Requirement ids
use the prefix AG1. Normative language is C0.1; ids are permanent under
C0.5.
The rule#
AG1.1 A directory holding instructions for AI agents MUST be named
agents, in lowercase.AGENTS,Agents, and.agentsare non-conforming names for the same thing.AG1.2 This binds directories only. The
AGENTS.mdfile keeps its uppercase name at every level it appears, because that spelling is the cross-tool convention agents actually look for; renaming it would make the file invisible to the tools it exists for. A tree that holds bothAGENTS.mdandagents/is correct, not inconsistent.AG1.3 A tool that fixes the name itself governs its own path: Claude Code's
.claude/agents/is already lowercase by that tool's requirement, andAG1.1MUST NOT be read as licence to rename a directory whose name a tool defines.AG1.4 Every path that names such a directory MUST use the lowercase spelling wherever it is written — links in
.mdfiles, paths in CI configuration, prose paths in shell scripts and inCargo.tomlcomments. A link that resolves only because the local filesystem is case-insensitive is a defect under this requirement, even though nothing is observed to break locally.This is the whole reason the rule is worth writing down. macOS ships a case-insensitive filesystem by default, so
AGENTS/release.mdandagents/release.mdare the same file on the machine most of this repository is edited on, and are different files on the Linux runners that build it and on the forge that renders it. A mixed tree stays green locally and 404s in CI and on the web.
Renaming, when it happens#
- AG1.5 A rename under
AG1.1MUST move the directory and update every reference to it in the same commit. A rename that leaves references behind satisfies the letter ofAG1.1and breaksAG1.4in the same stroke. - AG1.6 On a case-insensitive filesystem,
git mv AGENTS agentsdoes not record a rename. It MUST be done through an intermediate name —git mv AGENTS agents-tmp && git mv agents-tmp agents— and the result MUST be confirmed withgit ls-filesrather thanls, which reports the name the filesystem chooses to show rather than the name that is committed.
Where the tree stands#
Non-normative, measured 2026-08-21. The tree conforms, as of the rename recorded below.
| Path | State |
|---|---|
agents/ — 8 files |
conforming |
fhir/agents/ — 5 files |
conforming |
fhir/.claude/agents/ |
conforming — the tool defines it (AG1.3) |
AGENTS.md at the root, in fhir/, and in all six ports |
conforming — a file, not a directory (AG1.2) |
The rename was done on 2026-08-21 under AG1.5 and AG1.6: both directories
moved through an intermediate name so that git recorded the move at all, and the
111 references across 30 files were rewritten in the same change — most
heavily agents/release.md (27), agents/conventions.md (15), and
agents/testing.md (14), plus manifest comments in fhir-store/Cargo.toml and
fhir-loco/Cargo.toml, doc comments in fhir/src/codegen/naming.rs and
render.rs, their copies in the generated fhir/llms.txt, and one comment in
scripts/check-published-match.sh. No CI configuration referenced the
directories. Every .md link that names them was checked to resolve
case-sensitively, not merely on the case-insensitive filesystem the rename
was performed on — which is the check AG1.4 exists to require.
One uppercase mention survives deliberately: fhir/plan.md records "the AGENTS
sweep" as the name of a task completed on 2026-08-07. It is a historical record
of what something was called, not a path, so AG1.4 does not reach it.