Where Every AI Coding Tool Looks for Your Instructions A new reference map from an unnamed source reveals that 18 AI coding tool families read at least 21 different standing-instruction file paths, yet only 7 of them publish an explicit precedence order for conflicts. The map, based on vendor documentation retrieved 2026-08-30, shows that Anthropic's Claude Code reads CLAUDE.md but not AGENTS.md, while seven non-Anthropic tools also read CLAUDE.md, and only four vendors publish size limits with inconsistent units (e.g., Codex caps at 32 KiB, Factory at 80,000 characters initial). Eighteen AI coding tool families read at least twenty-one different standing-instruction file paths, and only seven of them publish an explicit precedence order for what happens when several apply at once. That gap is the reason this page exists. Below is the complete map: the file or files each tool reads, the scopes it searches, whether it publishes a conflict rule, whether the content loads on every request or only when triggered, and the vendor documentation page behind every cell. One boundary before the data, because a companion piece published the same day covers the neighboring question. This post is a map of where the files live and who reads them. It makes no recommendation about what belongs in them and publishes no measurement of our own. What to cut, and what an audit of a real instruction estate actually finds, is the subject of our record of the files we cut and what broke /blog/ai-agent-instruction-file-audit-what-we-cut . The only numbers here are limits other people published. Every file path, scope, precedence rule and byte cap comes from a vendor documentation page, retrieved 2026-08-30, and where a vendor is silent the cell says so and stays visible. Two related layers are also out of scope. What makes an instruction file bad — the named configuration smells and how often they occur across open-source repositories — belongs to our config-smells reference /blog/ai-agent-config-smells-claude-md-best-practices-2026 . And prompt technique is a different layer entirely: standing instruction files are configuration, loaded before anyone types; prompts are per-request. - 01The convergence runs one way.Anthropic's documentation states plainly: "Claude Code reads CLAUDE.md, not AGENTS.md." Meanwhile Cursor, Zed, Amp, Devin CLI, Devin Desktop's importer, Factory Droid and Copilot's cloud agent all read CLAUDE.md. Seven non-Anthropic tools read Anthropic's filename; Anthropic's tool reads the cross-tool standard only if you import it. - 02AGENTS.md adoption is four tiers, not a checkmark.Primary file for eight tools. Read alongside a richer native format by four. Conditional or opt-in for three — Copilot varies by surface, Gemini CLI needs one settings.json key, Aider needs one line in .aider.conf.yml. Explicitly not read by one. - 03Only 7 of 18 publish a precedence rule.Codex, Zed, Warp, Junie, Copilot, Cursor and Claude Code publish an ordering for what wins. Three more publish a scope-pair rule only. Five publish a load order with no conflict winner. Most tools tell you where the file goes, not which one wins. - 04Four vendors publish a size limit. No two agree on a unit.Codex caps the merged chain at 32 KiB. Factory publishes 80,000 characters initial and 40,000 dynamic. Devin Desktop publishes 12,000 characters per workspace rule file and 6,000 for the global one. Claude Code skips a file over 4 MiB and targets 200 lines. Bytes, characters, lines and mebibytes for the same job. - 05Zed reads the first match from a nine-name list.It is the only tool in the map that works this way, and .cursorrules — a file Cursor itself calls legacy — ranks fourth, above AGENTS.md, CLAUDE.md and GEMINI.md. A repository that never deleted its .cursorrules has a deprecated file winning in Zed. - 06Unsourced cells stay visible.We did not infer precedence from observed behavior, changelogs or source code. Cells that read "not documented" mean the vendor's rules or memory page does not address the question. A reference that mixes documented guarantees with reverse-engineered ones is not safe to cite. 01 — The ProblemSix surfaces, one repository. The reader's problem does not need a hypothetical. The repository this post was written in carries six committed instruction surfaces at once, all six tracked in git, measured with wc and git ls-files on 2026-08-30: a root CLAUDE.md at 101 lines, a root AGENTS.md at 42 lines, eight scoped per-directory CLAUDE.md files totalling 58,049 bytes, seven .cursor/rules/ .mdc files totalling 54,105 bytes, a .claude/skills/ directory, and a .github/copilot-instructions.md at 127 lines. Nobody designed that. It accreted one tool at a time, and each file was a reasonable thing to add on the day it was added. The problem is not the count. It is that four different tools, pointed at this one repository, read four different subsets of those six surfaces — and nothing in the repository tells you which subset belongs to which tool. The table below is that mapping for our own files, and it is a worked instance of the general map in section 03. | Instruction surface in this repo | Size measured 2026-08-30 | Claude Code | OpenAI Codex | Cursor | GitHub Copilot | |---|---|---|---|---|---| CLAUDE.md | 101 lines · 7,599 B | Reads it, at launch | Not on its list of names | Reads it, always applied to every conversation | Agent instructions, on supporting surfaces only | AGENTS.md | 42 lines · 2,139 B | Not read — needs an @AGENTS.md import | Reads it; the only name it reads | Reads it, root and subdirectories | Agent instructions, lowest repository tier | 8 × scoped CLAUDE.md | 58,049 B combined | On demand, per directory, when it reads a file there | Not read | Not a documented Cursor surface | Not read | 7 × .cursor/rules/ .mdc | 54,105 B combined · one alwaysApply: true at 17,343 B | Read once by /init , not at runtime | Not read | 1 always-on + 6 agent-decided from their descriptions | Not read | .claude/skills/ | 1 skill directory | Body on demand, when invoked | Not read | Not read | Not read | .github/copilot-instructions.md | 127 lines · 5,069 B | Read once by /init , not at runtime | Not read | Not read | Repository-wide, every chat message | Read across the AGENTS.md row. One tool ignores it, one tool reads nothing else, one reads it as one rule type among four, and one reads it as its lowest-priority repository tier. Read down the Claude Code column and three of the six surfaces are invisible to it at runtime. There is no arrangement of six files that makes that table uniform, which is why the answer to “where do I put my instructions” is a lookup and not a convention. And then there is the row we did not expect to write. Building this table surfaced a real misconfiguration in our own repository, and it is the strongest argument available for the table existing, because the mistake is invisible without one. .github/copilot-instructions.md opens with applyTo: " / .{ts,tsx,js,jsx}" — and the vendor documents that keyword for a different filename in a different directory. GitHub documents applyTo for path-specific NAME.instructions.md files within or below the .github/instructions directory, and documents .github/copilot-instructions.md as repository-wide, applying to all requests made in the context of a repository. So the author's intent was path-scoping, in a file whose documented behavior is unscoped. What Copilot's runtime actually does with YAML frontmatter in a repository-wide file is not documented anywhere we could find, so we make no claim about it — the finding is the mismatch between the keyword and the filename, published as found.Somebody wrote path-scoping into a file with no documented path-scoping mechanism, it sat there through months of ordinary work, and it was found by reading the vendor's reference table column-by-column against our own tree. That is what a map is for. The fix is booked; the row is published as it stood on the retrieval date. 02 — The AsymmetryThe convergence runs one way . The headline story of the last two years has been convergence on AGENTS.md — a single cross-tool filename, now stewarded by the Agentic AI Foundation under the Linux Foundation. The marketing answer to “who supports it” is “almost everyone.” The documentation says something more interesting, and it is the single most consequential fact in this map. Claude Code reads CLAUDE.md, not AGENTS.md. If your repository already uses AGENTS.md for other coding agents, create a CLAUDE.md that imports it so both tools read the same instructions without duplicating them.Anthropic, How Claude remembers your project — docs.claude.com, retrieved 2026-08-30 That is a vendor documenting a deliberate non-behavior, in one sentence, with two documented bridges attached: put @AGENTS.md at the top of your CLAUDE.md , or symlink one to the other with ln -s AGENTS.md CLAUDE.md — and on Windows the symlink needs Administrator or Developer Mode, so the import is the portable option. It matters more than any other cell in the table because Claude Code is the tool most likely to be running in a repository that already has an AGENTS.md . Now look the other direction. CLAUDE.md is read by more non-Anthropic tools than AGENTS.md is read by Anthropic's. Cursor reads it — and treats it as “always applied to every conversation, regardless of any alwaysApply frontmatter setting.” Zed has it eighth in its ordered filename list. Amp uses it as a per-directory fallback when no AGENTS.md is present. Devin CLI treats it identically to AGENTS.md . Devin Desktop's importer pulls it in. Factory Droid lists it in its compatibility set. Copilot's cloud agent and CLI read it as agent instructions. Seven tools, one filename, and no arrow back. Non-Anthropic tools Cursor always applied , Zed eighth in its first-match list , Amp per-directory fallback , Devin CLI treated identically to AGENTS.md , Devin Desktop's importer, Factory Droid compatibility set , and Copilot's cloud agent and CLI. Each one is documented on the vendor's own page. By its own documentation “Claude Code reads CLAUDE.md , not AGENTS.md .” The two published bridges are an @AGENTS.md import at the top of CLAUDE.md , or a symlink. Both are author actions, not tool behavior — nothing happens by default. Generation, not runtime Claude Code's /init command reads other tools' files to generate a CLAUDE.md : Cursor rules in .cursor/rules/ or .cursorrules , and Copilot rules in .github/copilot-instructions.md . With CLAUDE CODE NEW INIT=1 it also reads AGENTS.md , .devin/rules/ , .windsurf/rules/ and .clinerules . This is a one-time generation step, not runtime loading — and it is the difference the six-surface table above turns on. The practical consequence for anyone running more than one tool: a repository with only AGENTS.md is silently unconfigured for Claude Code, and a repository with only CLAUDE.md is read by most of the field but ignored by Codex, whose documentation states that filenames not on its list “are ignored for instruction discovery.” Neither failure produces an error message. Both produce an agent that behaves as though your conventions do not exist. 03 — The MapThe complete map . Eighteen tool families, nine columns, one row each — plus a superseded Cursor file kept visible because it still wins in Zed, and a final row for the AGENTS.md convention itself, which is a specification rather than a tool. Every path, scope, precedence rule, load behavior and size limit in this table came from the vendor documentation page in the last column, retrieved 2026-08-30. Cells that read not documented mean we read the vendor's rules or memory page and it does not address the question. They are not gaps in our reading; they are the published state of the ecosystem. The table scrolls horizontally. If you cite one cell, cite its retrieval date with it — three of these vendors changed a brand or a default filename in the weeks before we read them. | Tool | File s read | Scope | Precedence when several exist | Always-loaded or on demand | Committed to repo? | Documented size limit | Reads AGENTS.md? | Docs URL | |---|---|---|---|---|---|---|---|---| | Tool families — 18 vendors, plus one superseded file kept visible | |||||||| | Claude Code | CLAUDE.md , ./.claude/CLAUDE.md , CLAUDE.local.md , .claude/rules/ .md | Managed policy /Library/Application Support/ClaudeCode/ macOS, /etc/claude-code/ Linux and WSL, C:\Program Files\ClaudeCode\ Windows → user ~/.claude/ → project → local ./CLAUDE.local.md | Documented. Files are “concatenated into context rather than overriding each other,” ordered broadest scope to most specific and filesystem root down to the working directory. Within a directory, CLAUDE.local.md is appended after CLAUDE.md . User rules load before project rules, “giving project rules higher priority.” Managed policy cannot be excluded. | Both. Root and every ancestor file load at launch; subdirectory files load when Claude reads files in those subdirectories. .claude/rules/ .md load at launch unless they carry paths: , which makes them conditional. @path imports load at launch and so do not reduce context. | Yes, except CLAUDE.local.md docs say gitignore it and managed policy, which is MDM-deployed | 4 MiB — loads a file up to that size in full and skips a larger one. Separate 200-line target, guidance not a limit. Auto-memory MEMORY.md capped at 200 lines or 25 KB, whichever comes first. Import depth: 4 hops. | No — explicitly. “Claude Code reads CLAUDE.md , not AGENTS.md .” Documented workarounds: an @AGENTS.md import, or a symlink. | | AGENTS.override.md , AGENTS.md , plus any name in project doc fallback filenames ~/.codex or $CODEX HOME → project root walking down to the current directory, at most one file per directory AGENTS.override.md , then AGENTS.md , then fallback names, per directory. Merge: “concatenates files from the root down… Files closer to your current directory override earlier guidance because they appear later in the combined prompt.” AGENTS.md yes. AGENTS.override.md is documented as a temporary or team override with no stated commit policy. project doc max bytes , applied to the combined chain: it “stops adding files once the combined size reaches the limit.” learn.chatgpt.com https://learn.chatgpt.com/docs/agent-configuration/agents-md.md .cursor/rules/ / .mdc , AGENTS.md root and subdirectories , CLAUDE.md , legacy .cursorrules .cursor/rules/ and AGENTS.md → User Rules account-synced and machine-local ~/.cursor/rules , which do not sync AGENTS.md combines with parents, “with more specific instructions taking precedence.” Ranking of AGENTS.md against .cursor/rules/ : not documented . .mdc frontmatter: alwaysApply: true always included; false plus globs auto-attaches on a context match; false plus a description only is agent-decided; neither means @ -mention only. A plain .md file in .cursor/rules is ignored. CLAUDE.md is always applied regardless of frontmatter. .cursor/rules/ and AGENTS.md yes — docs say check them into git. Team and User rules live outside the repo. CLAUDE.md the same way. cursor.com/docs https://cursor.com/docs/context/rules .cursorrules .cursorrules at the project root AGENTS.md cursor.com/help https://cursor.com/help/customization/rules.md .github/copilot-instructions.md , .github/instructions/ / .instructions.md , AGENTS.md , CLAUDE.md , GEMINI.md , .prompt.md ~/.copilot/copilot-instructions.md and ~/.copilot/instructions/ / .instructions.md in Copilot CLI → Repository → Organization Business and Enterprise, owner-set .github/instructions/ / .instructions.md → repository-wide .github/copilot-instructions.md → agent instructions such as AGENTS.md → Organization. For multiple agent files, “the nearest AGENTS.md file in the directory tree will take precedence.” applyTo glob matches, and if a repository-wide file also exists “the instructions from both files are used.” Prompt files are on-demand only, invoked in a chat prompt. .github/ and AGENTS.md . Personal instructions live outside the repo. no agent instructions. VS Code Chat and GitHub.com code review read AGENTS.md only. Cloud agents and Copilot CLI read all three of AGENTS.md , CLAUDE.md and GEMINI.md . Eclipse code review: not supported. docs.github.com https://docs.github.com/en/copilot/reference/custom-instructions-support GEMINI.md by default; the filename is configurable ~/.gemini/GEMINI.md → configured workspace directories and their parents → just-in-time per-directory discovery not documented . context.fileName in settings.json , e.g. {"context": {"fileName": "AGENTS.md", "GEMINI.md" }} github.com/google-gemini https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/gemini-md.md global rules.md , .devin/rules/ .md preferred or .windsurf/rules/ .md fallback , legacy .windsurfrules , AGENTS.md ~/.codeium/windsurf/memories/global rules.md → workspace rules directory, searched in the current directory, its subdirectories and its parents up to the git root → system and enterprise rules at /Library/Application Support/Devin/rules/ .md , /etc/devin/rules/ .md and C:\ProgramData\Devin\rules\ .md , each with a legacy Windsurf fallback path .devin/ “is the preferred location and takes precedence” over .windsurf/ . System rules “are merged with workspace and global rules… without overriding user-defined rules.” A global-versus-workspace winner is not documented . trigger: frontmatter, and the docs publish each mode's cost: always on puts full content in the system prompt on every message; model decision shows the description always and the body on demand; glob only on matching files; manual only when @ -mentioned. global rules.md and root AGENTS.md take no frontmatter and are always on. AGENTS.md yes. global rules.md is user-level. Auto-generated Memories are explicitly “not committed to your repository.” docs.devin.ai/desktop https://docs.devin.ai/desktop/cascade/memories AGENTS.md , AGENTS.local.md , AGENT.md , .windsurfrules , CLAUDE.md , .devin/rules/ .md , .devin/global rules.md , plus imported .cursor/rules/ , .windsurf/rules/ and .claude/ ~/.config/devin/AGENTS.md %APPDATA%\devin\AGENTS.md on Windows , ~/.devin/rules/ .md , ~/.devin/global rules.md and ~/.claude/CLAUDE.md → project root → every directory between root and the current one .devin/global rules.md and .windsurf/global rules.md exist, only the .devin/ one loads, while both rules directories load. Global and project rules “work alongside” each other; a winner is not documented . AGENTS.local.md , which the docs say to gitignore AGENTS.md is the recommended approach for project rules.” docs.devin.ai/cli https://docs.devin.ai/cli/extensibility/rules.md AGENTS.md docs.devin.ai/onboard https://docs.devin.ai/onboard-devin/agents-md.md .kiro/steering/ .md , ~/.kiro/steering/ .md , AGENTS.md .kiro/steering/ → global ~/.kiro/steering/ , which is also the documented team-distribution path via MDM or Group Policy. Global steering works on IDE and CLI only. not documented . inclusion: frontmatter: always default , fileMatch with a pattern, manual via steering-file-name , or auto with a name and description Kiro matches against your request. The three foundation files are in every interaction by default. With custom agents, steering files are not automatically included. .kiro/steering/ yes — the docs warn they “are part of your codebase,” so no secrets. Global is user-level. AGENTS.md files do not support inclusion modes and are always included.” kiro.dev https://kiro.dev/docs/steering/ .clinerules/ / .md and .txt , AGENTS.md , ~/.agents/AGENTS.md , auto-detected .cursorrules and .windsurfrules .clinerules/ at the project root → global rules directory: ~/Documents/Cline/Rules on macOS and Linux or WSL, with ~/Cline/Rules as a documented fallback; Documents\Cline\Rules on Windows .clinerules/ against AGENTS.md : not documented . paths: frontmatter. No frontmatter means always active; globs activate only on a context match; paths: never activates, a documented temporary disable. Context is defined precisely — paths in your message, open tabs, visible files, files Cline touched this task, pending operations. .clinerules/ and AGENTS.md yes; the global directory is user-level ~/.agents/AGENTS.md docs.cline.bot https://docs.cline.bot/features/cline-rules CONVENTIONS.md , or any file you nominate /read CONVENTIONS.md in chat, aider --read CONVENTIONS.md , or permanently with read: CONVENTIONS.md in .aider.conf.yml . The docs recommend /read because the file “is marked as read-only, and cached if prompt caching is enabled.” CONVENTIONS.md is an ordinary repo file read: AGENTS.md in .aider.conf.yml aider.chat https://aider.chat/docs/usage/conventions.html ~/.config/zed/AGENTS.md ; for the project, the first match in an ordered list of nine filenames ~/.config/zed/AGENTS.md %APPDATA%\Zed\AGENTS.md on Windows → project .rules , .cursorrules , .windsurfrules , .clinerules , .github/copilot-instructions.md , AGENT.md , AGENTS.md , CLAUDE.md , GEMINI.md .” Then: “Project instructions override personal AGENTS.md when they conflict.” zed.dev https://zed.dev/docs/ai/instructions .continue/rules/ / .md Markdown recommended, YAML still supported , plus rules: entries in config.yaml .continue/rules/ at the workspace root; hub or config-referenced rules via uses: or file:// . A global rules directory is not documented . not documented . alwaysApply: true is always included; false is included if globs exist and match or the agent pulls it in from the description; undefined , the default, is included if no globs exist or globs exist and match. A regex: condition matches on file content. Documented exclusion: “Rules are not included in autocomplete or apply.” .continue/rules/ yes /init as creating an AGENTS.md , which proves Continue writes one — not that it reads one as standing instructions. We did not upgrade this cell without a page that says so. docs.continue.dev https://docs.continue.dev/customize/deep-dives/rules AGENTS.md default , WARP.md kept for backwards compatibility WARP.md takes priority over AGENTS.md . AGENTS.md , not agents.md or Agents.md .” docs.warp.dev https://docs.warp.dev/knowledge-and-collaboration/rules .junie/AGENTS.md , root AGENTS.md , .junie/playbook.md , .junie/rules/ .md , legacy .junie/guidelines.md or .junie/guidelines/ ~/.junie/AGENTS.md %USERPROFILE%\.junie\AGENTS.md on Windows → project. A custom Guidelines path in project settings overrides discovery entirely — the docs say always set it for monorepos. .junie/AGENTS.md in the project root. 2. root AGENTS.md combined with .junie/playbook.md and every .junie/rules/ .md . 3. the legacy .junie/guidelines.md file or folder. For scope: “Project-level guidelines always take precedence over global ones when they conflict.” Identical content is deduplicated. .junie/ yes, designed to be version-controlled; global is user-level .junie/guidelines.md marked legacy but still supported. Junie also offers to import other agents' files on first open. junie.jetbrains.com https://junie.jetbrains.com/docs/guidelines-and-memory.html AGENTS.md , falling back per directory to AGENT.md or CLAUDE.md /etc/ampcode/AGENTS.md , /Library/Application Support/ampcode/AGENTS.md , %ProgramData%\ampcode\AGENTS.md → personal $HOME/.config/amp/AGENTS.md and $HOME/.config/AGENTS.md → project working directory and parents up to $HOME → subtrees AGENTS.md exists in a directory, but a file named AGENT.md without an S or CLAUDE.md does exist, that file will be included.” Cross-scope conflict resolution is not documented . $HOME “are always included,” as are the system-wide and both $HOME/.config files. “Subtree AGENTS.md files are included when the agent reads a file in the subtree.” @ -mentioned files with globs: load only on a glob match. ampcode.com https://ampcode.com/docs/markdown/customize/agents-md AGENTS.md , agents.md , Agents.md , CLAUDE.md , Claude.md ; DESIGN.md and its case variants loaded separately as design guidelines; SKILL.md on demand .factory/ , .agents/ and .agent/ . Personal: ~/.factory/ , ~/.agents/ , ~/.agent/ should , not a strict algorithm: the current user request takes priority over standing instructions; nested project files refine root project files for a directory tree; project files “should override personal defaults.” A deterministic conflict rule is not documented . SKILL.md bodies load only when invoked. .factory/settings.json is “parsed as configuration, not as prose instructions.” AGENTS.md and .factory/ yes CLAUDE.md and the case variants as a compatibility set, plus the warning that “duplicating rules across supported filenames spends context without adding signal.” docs.factory.ai https://docs.factory.ai/cli/configuration/agents-md AGENTS.md jules.google https://jules.google/docs/ AGENTS.md the convention AGENTS.md , nested per package AGENTS.md to the edited file wins; explicit user chat prompts override everything.” AGENTS.md is just standard Markdown. Use any headings you like.” No required fields. is AGENTS.md , now “stewarded by the Agentic AI Foundation under the Linux Foundation” agents.md https://agents.md/ Two footnotes on rows that will surprise people. Warp requires the filename in all caps — agents.md and Agents.md are not recognized — while Factory explicitly reads both of those variants. Two tools, opposite behavior, one file. And Codex's row covers discovery, ordering and its byte cap only; what happens to those instructions after they are loaded, including how they are stored and whether the loaded set is auditable, is the subject of our piece on Codex's encrypted agent instructions /blog/openai-codex-encrypted-agent-instructions-auditability . 04 — Adoption AGENTS.md support is four tiers , not a checkmark. A yes-or-no column for AGENTS.md support would be a lie for at least five of these tools. Copilot's answer depends on which surface you are in. Gemini CLI and Aider read it only if you add a line of configuration. Warp reads it by default but lets WARP.md beat it in the same directory. Zed calls it the primary file and then ranks it seventh out of nine. So the honest presentation is four tiers. Reads it as the primary or only file Codex reads no other name unless you add fallbacks. Amp looks for it first in every directory. Warp calls it the default project rules file. Zed calls it the primary instruction file. Junie makes .junie/AGENTS.md step one of discovery. Devin recommends it for project rules. Factory recommends it for new guidance. Jules looks for it at the repository root. Read the caveats in the map, though: Warp lets WARP.md win in the same directory, and Zed lets four other tools' files rank above it. Reads it alongside a richer native format In each case AGENTS.md is a first-class rule type that cannot be conditional, because it is plain Markdown with no frontmatter. Cursor's own advice is to use .cursor/rules/ instead "for more control over when rules apply." Kiro states the trade-off outright: AGENTS.md files do not support inclusion modes and are always included. Devin Desktop processes it through the same rules engine but with no trigger: frontmatter. Adopting the portable standard costs you the ability to make the file on-demand. Reads it conditionally , or only if you opt in Copilot's support is per-surface, not per-product: GitHub.com Chat, Visual Studio Chat and JetBrains Chat read no agent instructions at all, while cloud agents and the CLI read all three agent filenames. And where Copilot does read it, AGENTS.md is the lowest-priority repository tier, beneath both path-specific and repository-wide Copilot files. Gemini CLI needs one settings.json key. Aider needs one line in .aider.conf.yml. Documents that it does not read it "Claude Code reads CLAUDE.md, not AGENTS.md." One sentence, one vendor, and the most consequential cell in the whole map — because Claude Code is the tool most likely to be running in a repository that already has an AGENTS.md. Two bridges are published: an @AGENTS.md import at the top of CLAUDE.md, or a symlink, which needs Administrator or Developer Mode on Windows. Continue is the tool deliberately absent from all four tiers. Continue's CLI documents /init as creating an AGENTS.md for the current project, which proves it writes one — and no page on its rules deep-dive or its config.yaml reference says it reads one as standing instructions. Putting Continue in the “yes” column on the strength of a scaffolding command would be exactly the kind of inference this table exists to avoid, so its cell reads not documented. 05 — PrecedenceWho documents what wins . This is the column readers arrive looking for and the column most vendors do not fill. Seven of eighteen publish an explicit ordering for what happens when several instruction files apply at once. Three more publish a scope-pair rule — workspace beats global — and stop. Five publish a load order, a merge mechanic or a “mental model” without naming a conflict winner. Three publish nothing, or have no chain to rank. That distribution is itself the finding. Most tools tell you where the file goes. Fewer tell you which file wins. Precedence documentation across 18 tool families Source: 27 vendor documentation pages, retrieved 2026-08-30. Counted over the 18 tool families in the map above; the AGENTS.md convention row is excluded because it is a specification, not a tool.Among the seven that do document an ordering, the mechanisms are not variations on one theme. They are three genuinely different algorithms, and knowing which one your tool uses is worth more than memorizing its file paths — because it tells you what to predict. Concatenate — position decides Claude Code, Codex, Gemini CLI, Warp, Cline and Kiro all combine the applicable files rather than picking one. Claude's docs are explicit that files are “concatenated into context rather than overriding each other”; Codex says files closer to your current directory “override earlier guidance because they appear later in the combined prompt.” Practical consequence: put the override closest to the work. First match wins — the rest are never read Zed reads the first hit from a nine-name ordered list, and Codex's per-directory step and Junie's discovery chain work the same way within their scope. This is the sharpest trap in the map: .cursorrules — a file Cursor itself calls legacy and says will be deprecated — sits fourth in Zed's list, above AGENTS.md , CLAUDE.md and GEMINI.md . A repository that migrated to .cursor/rules/ and never deleted the old file has a deprecated file silently owning its Zed sessions. Ranked merge with a published tie-break Cursor resolves by scope — Team Rules → Project Rules → User Rules, all merged, “earlier sources take precedence when guidance conflicts.” Copilot publishes a five-level order: Personal → path-specific → repository-wide → agent instructions → Organization. Conflicts resolve by where the file lives in the hierarchy, not by where it sits in a concatenated prompt. One consequence worth stating plainly, because it is the most common way a reader gets burned: in a concatenating tool, a file you forgot about does not lose. It gets appended. In a first-match tool, a file you forgot about does not get appended — it wins outright and silences everything below it. Neither failure emits a warning, and the only reliable defense is knowing which list your tool reads and in what order. Three tools publish a way to check. Claude Code's /context lists loaded memory files and its InstructionsLoaded hook logs exactly which instruction files loaded, when and why. Gemini CLI's /memory show prints the full concatenated hierarchy. Amp exposes agents-md list in its command palette. Warp marks which rules fired under References in the conversation. If your tool publishes one of these, use it before you trust any table, including this one. 06 — Size LimitsFour vendors, four units . Ten of the eighteen tool families publish no size limit of any kind. Four publish a number, and no two of them agree on what to measure. The same job — bounding how much standing instruction text enters a model's context — is expressed in kibibytes, characters, lines and mebibytes depending on which vendor you ask. | Tool | Limit | Unit | Applies to | |---|---|---|---| | Hard limits — a documented threshold the tool enforces | ||| | OpenAI Codex | 32 KiB, default of project doc max bytes | Kibibytes | The combined merged chain, not any one file — Codex stops adding files once the total reaches the limit | | Factory Droid | 80,000 / 40,000 | Characters | Initial guideline load / dynamic read-path discovery. Docs add: “These are caps, not targets.” | | Devin Desktop Cascade | 12,000 / 6,000 | Characters | Per workspace rule file / the single global rules file | | Claude Code | 4 MiB | Mebibytes | A single CLAUDE.md — loaded in full up to that size, skipped entirely above it | | Published guidance — a target, not an enforced limit | ||| | Claude Code | 200 lines | Lines | Target per CLAUDE.md : “Longer files consume more context and reduce adherence.” | | Claude Code auto memory | 200 lines or 25 KB | Lines or kilobytes | MEMORY.md index — whichever comes first. Topic files are not loaded at startup. | | Cursor | 500 lines | Lines | Best-practice guidance for a rule file. Not enforced; no hard limit is documented. | | No published limit of any kind | ||| | Ten tool families | Not documented | — | Copilot, Kiro, Cline, Zed, Warp, Junie, Amp, Jules, Aider and Gemini CLI publish no byte, character, token or line limit for their instruction files. Copilot's docs offer prose advice to keep instructions short and self-contained, and nothing numeric. | The incoherence is the point, and it has a practical edge. A repository sized to Devin Desktop's 12,000-character per-file ceiling is comfortably inside Factory's 80,000 and nowhere near Claude Code's 4 MiB — but Codex's 32 KiB applies to the combined chain, so a monorepo with a root file and six nested ones can breach Codex while every individual file looks small. If you maintain instructions for several tools, the binding constraint is whichever vendor measures the thing you are not measuring. Note also that four vendors who publish a cap separately advise staying far below it. Factory: “These are caps, not targets. Smaller files are usually better.” Claude Code pairs its 4 MiB skip threshold with a 200-line target. Devin CLI is the bluntest: “Rules and AGENTS should be kept as small as possible.” A published limit is not a budget. 07 — Load BehaviorAlways-loaded, or on demand . This is the column that costs money, and it is the one most summaries of this topic omit. An always-loaded file enters the model's context on every request in scope, whether or not it is relevant. An on-demand file does not. Same content, same repository, different bill — and the academic evidence that convention files raise inference cost materially is covered in our read of the ETH Zurich study on AGENTS.md and inference costs /blog/agents-md-eth-zurich-study-inference-costs-guide . The mechanics of budgeting for it live in our agent token-budget framework /blog/agent-token-budget-calculator-cost-control-framework-2026 . The column resists a binary answer because most tools are both, and which one a given file gets is often decided by the file's own frontmatter rather than by the tool. Four patterns cover the map. Both, split by directory depth Claude Code, Amp, Devin CLI, Factory, Gemini CLI and Copilot load the root and ancestor files at launch and defer the rest. Devin CLI states it cleanly: “Files at the workspace root are loaded at session start. Files in subdirectories are discovered lazily when the agent accesses files in that directory.” Codex is the notable exception — it stops searching at your current directory and has no lazy subdirectory tier at all. Declared per file, in frontmatter Cursor alwaysApply , Kiro inclusion: , Cline paths: , Devin Desktop trigger: and Continue alwaysApply plus regex: all put the decision in the file. Devin Desktop publishes the cost of each mode next to it, which is the clearest presentation any vendor offers: always on costs every message, model decision costs a description always and the body on demand. On demand by design Aider is the outlier in the entire map: it does not auto-discover an instruction file at all. Nothing loads until you say /read CONVENTIONS.md , pass --read , or make it permanent in .aider.conf.yml . The docs recommend /read specifically because the file is then marked read-only and cached if prompt caching is on. Best effort — the fourth state nobody names Warp's subdirectory tier is neither guaranteed nor triggered: root and current-directory rules are “automatically applied,” and for other subdirectories “Warp makes a best-effort attempt to include that subdirectory's rules file as well.” It is the only instance of the pattern in the map, and it means a Warp user cannot fully predict whether a given nested rule file was in context. Two rows carry a trade-off sharp enough to change a decision. Kiro's: adopting AGENTS.md removes your ability to make the content conditional, because the file has no frontmatter — “ AGENTS.md files do not support inclusion modes and are always included.” Portability costs tokens, and one vendor says so outright. And Claude Code's: splitting a long file into @path imports “helps organization but doesn't reduce context, since imported files load at launch.” The reorganization that feels like a saving is not one. Which is where this post stops and its companion starts. Everything above is a map of where content lives and when it loads. What to remove from it, what a two-model audit of a real instruction estate actually finds, and why a headline percentage from a vendor does not transfer to your repository are the subject of our own instruction-file audit and what it broke /blog/ai-agent-instruction-file-audit-what-we-cut . That post publishes a measurement with a denominator; this one publishes vendor-documented caps and nothing of our own. Same day, same layer, deliberately different jobs — use this page to find the files, and that one to decide what stays in them. 08 — The GapsWhat we could not source. These are kept visible on purpose. A reference that shows its gaps is more citable than one that fills them, and every row below is a question we went looking for an answer to and did not find on a vendor page. We did not infer any of them from observed behavior, changelogs or source code. | Tool | The question | Status at retrieval | |---|---|---| | Cursor | Does AGENTS.md beat, lose to, or merge with .cursor/rules/ when both apply? | Not documented. The published order covers Team, Project and User scopes, not file-type conflicts within Project. | | Cline | Does .clinerules/ beat AGENTS.md when both exist in the workspace? | Not documented. The docs say Cline “combines them”; workspace-versus-global is ranked, file-type-versus-file-type is not. | | Gemini CLI | On a direct contradiction between ~/.gemini/GEMINI.md and a workspace file, which wins? | Not documented. Load order is published; conflict resolution is not. | | Devin Desktop | Global global rules.md versus workspace .devin/rules/ on conflict | Not documented. System rules are documented as non-overriding; the global-versus-workspace pair is not addressed. | | Devin CLI | Global ~/.config/devin/AGENTS.md versus project AGENTS.md on conflict | Not documented. “Work alongside” is published; a winner is not. | | Amp | Cross-scope conflict resolution — system versus personal versus project | Not documented. Inclusion is documented; ranking is not. | | Continue | Does Continue read AGENTS.md as standing instructions? Is there a global rules directory outside .continue/rules ? | Not documented, on both counts. /init writes an AGENTS.md ; no page says one is read. | | Jules | Nested files, precedence, size limit | Not documented. The getting-started page is genuinely all there is — one sentence about the root file. | | GitHub Copilot | What the runtime does with YAML frontmatter placed in .github/copilot-instructions.md | Not documented. applyTo is documented only for .github/instructions/ / .instructions.md — which is the finding in section 01, and the reason it is stated as a documentation mismatch rather than a runtime claim. | | Ten tool families | Any published byte, character, token or line limit | Not documented for Cursor, Kiro, Cline, Zed, Warp, Junie, Amp, Jules, Aider or Gemini CLI. Only Codex, Factory, Devin Desktop and Claude Code publish a number. | | All eighteen | The token cost of each always-on file | Out of scope by design. This is a documentation map, not a measurement — we did not instrument any tool. | One class of gap is more interesting than the rest. Where a vendor publishes a load order but no conflict winner — Gemini CLI, Amp, Devin CLI, Continue, Factory — the documentation is describing a mechanism without committing to a guarantee. That is not sloppiness; concatenation makes “which one wins” a genuinely fuzzy question, because both files are in the prompt and the model decides. But it means a reader cannot predict behavior from the docs, and it is why those cells say not documented rather than “the later one wins,” which is a guess dressed as a rule. 09 — MethodologyHow this map was built . The whole value of a reference table is that a stranger can check it. Here is exactly what was collected, from where, on what date, what was left out, and what the table cannot tell you. What was collected. Twenty-one instruction-file paths across eighteen tool families, read out of each vendor's own documentation on 2026-08-30 . Every file path, scope, precedence rule, load behavior and size limit in this post traces to one of 27 vendor pages, each listed in the map's Docs URL column. No third-party blog post, aggregator, community list or gist was used as a source for a path or a precedence rule — a wrong path in a reference table is worse than a missing one, and the only way to be sure is to read the vendor. Where a vendor is silent, the cell says so. Cells marked not documented mean we read the vendor's rules or memory page and it does not address the question; we did not infer precedence from observed behavior, changelogs or source code. What “always-loaded” means here: a file is always-loaded if the vendor documents that its full contents enter the model's context on every request in scope, and on-demand if the vendor documents a trigger — a glob match, a directory read, an @ -mention, a slash command. Several tools are both depending on a file's own frontmatter, and those rows say so rather than picking a side. Excluded, and why. Autocomplete-only configuration is out of scope — Cursor documents that rules do not affect Tab, and Continue documents that rules are not included in autocomplete. Ignore files .cursorignore , .aiignore , .geminiignore , .codeiumignore are out of scope because they subtract context rather than adding instructions. Skills, plugins, prompt files, slash commands and MCP definitions are out of scope except where a vendor's own page uses them to explain the always-on boundary. Auto-generated memory systems get one line each where the vendor publishes a limit, because those limits are what readers arrive looking for, but they are not standing instruction files you author. Limitations, stated plainly. 1 This is documentation, not instrumentation: we did not measure token counts or verify that any product's runtime matches its docs, and where a vendor and its runtime disagree this table follows the vendor. 2 Vendor docs are living pages with no version pinning — three brands renamed a default file or a docs domain in the weeks before retrieval, so any row can go stale without notice. 3 Coverage is the tools we could source, not every tool that exists. 4 The character and byte limits are the vendors' published caps, and four of the same vendors separately recommend staying far below their own cap. www.digitalapplied.com/blog/where-ai-coding-tools-keep-their-instructions . When citing a cell, carry the retrieval date with it: “vendor documentation as retrieved 2026-08-30.” Every row describes what a live documentation page said on that date, not what a product does at runtime.The table is maintained rather than superseded: the slug carries no date, and rows are corrected in place and re-dated when a vendor page changes. Three changes are already queued for the next refresh if they land — Cursor's .cursorrules deprecation moving from future tense to fact, the .windsurf/ fallback paths being dropped, and Junie's legacy guidelines.md losing support. None has a published date, so none is announced here. If you want a second set of eyes on your own instruction estate across several tools, that kind of mapping is part of what our AI transformation engagements /services/ai-transformation cover. 10 — ConclusionA map, not a convention . Most tools tell you where the file goes. Only seven of eighteen tell you which one wins. The convergence on AGENTS.md is real and it is one-directional. Seven non-Anthropic tools read CLAUDE.md ; Anthropic's own documentation says Claude Code reads CLAUDE.md , not AGENTS.md , and offers two author-side bridges rather than a default. Adoption of the cross-tool standard splits into four honest tiers, not a checkmark column, because Copilot varies by surface, two tools need a line of configuration, and two more let a native file outrank it. The gaps are as informative as the entries. Seven of eighteen families publish an explicit conflict ordering; three publish a scope-pair rule; five publish a load order with no winner named; three publish nothing. Four publish a size limit and no two agree on a unit — kibibytes across a merged chain, characters per file, lines as a target, mebibytes as a skip threshold. Ten publish no limit at all. And the reason to keep a table like this rather than a mental model: our own .github/copilot-instructions.md opens with applyTo frontmatter, and the vendor documents that keyword for a different filename in a different directory. That sat in a repository maintained by people who work on this daily, and it surfaced only when someone read the vendor's reference column by column against the tree. Whatever your estate looks like, the useful first question is not “which file should I use” but “which of my files does each of my tools actually read.”