AI DevelopmentGlossary30 min readPublished August 29, 2026

18 tool families · 27 vendor documentation pages · retrieved 2026-08-30

Where Every AI Coding Tool Looks for Your Instructions

This repository carries six committed instruction surfaces: CLAUDE.md, AGENTS.md, .cursor/rules/, .claude/skills/, eight scoped per-directory CLAUDE.md files, and .github/copilot-instructions.md. Four tools read four different subsets of them. This is the map of which file each tool reads, in what order, and whether it loads on every request.

DA
Digital Applied Team
Senior strategists · Published August 29, 2026
PublishedAug 29, 2026
Read time30 min
SourcesVendor documentation only
Tool families mapped
18
27 vendor doc pages, retrieved Aug 30, 2026
Publish a precedence order
7/18
the rest publish a load order, or nothing
Publish a size limit
4
in four different units of measurement
Tools that read CLAUDE.md
7
non-Anthropic · Claude Code reads AGENTS.md: none

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. 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. And prompt technique is a different layer entirely: standing instruction files are configuration, loaded before anyone types; prompts are per-request.

Key takeaways
  1. 01
    The 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.
  2. 02
    AGENTS.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.
  3. 03
    Only 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.
  4. 04
    Four 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.
  5. 05
    Zed 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.
  6. 06
    Unsourced 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.

01The 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.

The six committed instruction surfaces in this repository, sized with wc and git ls-files on August 30, 2026, against what four tools read from each according to their vendors' own documentation. Per-tool behavior is documentation, not instrumentation.
Instruction surface in this repoSize (measured 2026-08-30)Claude CodeOpenAI CodexCursorGitHub Copilot
CLAUDE.md101 lines · 7,599 BReads it, at launchNot on its list of namesReads it, always applied to every conversationAgent instructions, on supporting surfaces only
AGENTS.md42 lines · 2,139 BNot read — needs an @AGENTS.md importReads it; the only name it readsReads it, root and subdirectoriesAgent instructions, lowest repository tier
8 × scoped CLAUDE.md58,049 B combinedOn demand, per directory, when it reads a file thereNot readNot a documented Cursor surfaceNot read
7 × .cursor/rules/*.mdc54,105 B combined · one alwaysApply: true at 17,343 BRead once by /init, not at runtimeNot read1 always-on + 6 agent-decided from their descriptionsNot read
.claude/skills/1 skill directoryBody on demand, when invokedNot readNot readNot read
.github/copilot-instructions.md127 lines · 5,069 BRead once by /init, not at runtimeNot readNot readRepository-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.

Found while building this table · 2026-08-30
Our .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.

02The 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.

Reads CLAUDE.md
Non-Anthropic tools
7tools

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.

Seven vendor pages, retrieved 2026-08-30
Claude Code reads AGENTS.md
By its own documentation
0natively

“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.

docs.claude.com/en/docs/claude-code/memory
One-time exception
Generation, not runtime
/init

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.

Same page, same retrieval

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.

03The 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.

The complete instruction-file map: for each of eighteen AI coding tool families, the instruction files it reads, the scopes it searches, its documented precedence rule when several files apply, whether content is always loaded or loaded on demand, whether the files are committed to the repository, any documented size limit, whether it reads AGENTS.md, and the vendor documentation page every cell came from. All pages retrieved August 30, 2026. Cells reading "not documented" indicate the vendor page does not address the question.
ToolFile(s) readScopePrecedence when several existAlways-loaded or on demandCommitted to repo?Documented size limitReads AGENTS.md?Docs URL
Tool families — 18 vendors, plus one superseded file kept visible
Claude CodeCLAUDE.md, ./.claude/CLAUDE.md, CLAUDE.local.md, .claude/rules/*.mdManaged policy (/Library/Application Support/ClaudeCode/ macOS, /etc/claude-code/ Linux and WSL, C:\Program Files\ClaudeCode\ Windows) → user ~/.claude/ → project → local ./CLAUDE.local.mdDocumented. 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-deployed4 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.docs.claude.com
OpenAI CodexAGENTS.override.md, AGENTS.md, plus any name in project_doc_fallback_filenamesGlobal ~/.codex (or $CODEX_HOME) → project root walking down to the current directory, at most one file per directoryDocumented, and the most explicit of any vendor. Global step uses “only the first non-empty file at this level.” Project step checks 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.”Always-loaded. The chain is rebuilt once per run — in the TUI, once per launched session. No lazy subdirectory discovery: Codex “stops searching once it reaches your current directory.”AGENTS.md yes. AGENTS.override.md is documented as a temporary or team override with no stated commit policy.32 KiB by default via project_doc_max_bytes, applied to the combined chain: it “stops adding files once the combined size reaches the limit.”Yes — natively, and it is the only filename it reads unless you add fallbackslearn.chatgpt.com
Cursor.cursor/rules/**/*.mdc, AGENTS.md (root and subdirectories), CLAUDE.md, legacy .cursorrulesTeam Rules (dashboard, Team and Enterprise) → Project .cursor/rules/ and AGENTS.md → User Rules (account-synced) and machine-local ~/.cursor/rules, which do not syncDocumented for scopes: “Team Rules → Project Rules → User Rules. All applicable rules are merged; earlier sources take precedence when guidance conflicts.” Nested AGENTS.md combines with parents, “with more specific instructions taking precedence.” Ranking of AGENTS.md against .cursor/rules/: not documented.Per file, from .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.Not documented. Best-practice guidance only: “Keep rules under 500 lines.”Yes — one of four documented rule types, in the project root and subdirectories. Also reads CLAUDE.md the same way.cursor.com/docs
Cursor — legacy .cursorrules.cursorrules at the project rootProjectSuperseded. Cursor's help page says it “is legacy and will be deprecated.” Documented migration: create a new rule, set it to Always Apply — “this matches the old behavior” — and delete the file.Was always-on; the migration target is Always ApplyYes, historicallyNot documentedNot applicable — but note it ranks fourth in Zed's first-match list, above AGENTS.mdcursor.com/help
GitHub Copilot.github/copilot-instructions.md, .github/instructions/**/*.instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md, *.prompt.mdPersonal (a popup on GitHub.com; ~/.copilot/copilot-instructions.md and ~/.copilot/instructions/**/*.instructions.md in Copilot CLI) → Repository → Organization (Business and Enterprise, owner-set)Documented as a complete ordered list, highest first: Personal → path-specific .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.”Repository-wide instructions are “sent with every chat message.” Path-specific files load when their 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.Yes for everything under .github/ and AGENTS.md. Personal instructions live outside the repo.Not documented. Only prose advice to keep instructions short, self-contained statements.Varies by surface, so check the matrix rather than generalizing. GitHub.com Chat, Visual Studio Chat and JetBrains Chat read 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
Gemini CLIGEMINI.md by default; the filename is configurableGlobal ~/.gemini/GEMINI.md → configured workspace directories and their parents → just-in-time per-directory discoveryLoad order is published — global, then workspace, then just-in-time — and the CLI “concatenates the contents of all found files.” What wins on a direct contradiction is not documented.Both. Global, workspace and parent files are loaded and sent “to the model with every prompt.” Just-in-time files load only “when a tool accesses a file or directory,” scanning that directory and its ancestors up to a trusted root.Yes for the project file; the global one is user-levelNot documentedNot by default — opt-in with one key. context.fileName in settings.json, e.g. {"context": {"fileName": ["AGENTS.md", "GEMINI.md"]}}github.com/google-gemini
Windsurf → Devin Desktop (Cascade)global_rules.md, .devin/rules/*.md (preferred) or .windsurf/rules/*.md (fallback), legacy .windsurfrules, AGENTS.mdGlobal ~/.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 pathDirectory precedence is explicit: .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.Declared per file with 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.Rules files and AGENTS.md yes. global_rules.md is user-level. Auto-generated Memories are explicitly “not committed to your repository.”12,000 characters per workspace rule file; 6,000 characters for the global rules fileYes — “processed by the same Rules engine — root-level = always-on, subdirectory = auto-glob for that directory.” No frontmatter support.docs.devin.ai/desktop
Devin CLIAGENTS.md, AGENTS.local.md, AGENT.md, .windsurfrules, CLAUDE.md, .devin/rules/*.md, .devin/global_rules.md, plus imported .cursor/rules/, .windsurf/rules/ and .claude/Global ~/.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 oneExplicit for one pair: if both .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.Both. “Files at the workspace root are loaded at session start. Files in subdirectories are discovered lazily when the agent accesses files in that directory.” Imported Cursor and Windsurf rules keep their source tool's activation semantics.Yes, except AGENTS.local.md, which the docs say to gitignoreNot documentedYes — “AGENTS.md is the recommended approach for project rules.”docs.devin.ai/cli
Devin (cloud)AGENTS.mdProject root “or anywhere else”Not documented on the cloud page — the Devin CLI rules page is the one carrying detailAlways-loaded at task start: “Devin will look for the file before it starts coding.”YesNot documentedYesdocs.devin.ai/onboard
Amazon Kiro.kiro/steering/*.md, ~/.kiro/steering/*.md, AGENTS.mdWorkspace .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.Documented for the scope pair: “In case of conflicting instructions between global and workspace steering, Kiro will prioritize the workspace steering instructions.” A file-type ranking is not documented.Declared per file with 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.Not documentedYes, with a stated cost: “AGENTS.md files do not support inclusion modes and are always included.”kiro.dev
Cline.clinerules/**/*.md and .txt, AGENTS.md, ~/.agents/AGENTS.md, auto-detected .cursorrules and .windsurfrulesWorkspace .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 WindowsDocumented for the scope pair: “When both workspace and global rules exist, Cline combines them. Workspace rules take precedence when they conflict with global rules.” .clinerules/ against AGENTS.md: not documented.Declared per file with 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-levelNot documentedYes — a supported rule type, alongside the cross-tool global ~/.agents/AGENTS.mddocs.cline.bot
AiderCONVENTIONS.md, or any file you nominateProject, loaded by flag or config fileNot applicable — there is no discovery chain to rankOn demand by design, and the outlier in this map. Aider does not auto-discover an instruction file. You load it: /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.”Yes — CONVENTIONS.md is an ordinary repo fileNot documentedOnly if you configure it: read: AGENTS.md in .aider.conf.ymlaider.chat
ZedPersonal ~/.config/zed/AGENTS.md; for the project, the first match in an ordered list of nine filenamesPersonal ~/.config/zed/AGENTS.md (%APPDATA%\Zed\AGENTS.md on Windows) → projectDocumented, and it is first-match-wins rather than a merge — the only tool in this map that works that way. “Zed uses the first matching file in this list: .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.”Always-on by definition: “Instructions are always-on context for the Zed Agent.” On-demand material belongs in Skills. Caveat: External Agents and Terminal Threads “may read their own native instruction files directly. Do not assume Zed's instruction loader controls those agents.”Project instruction file yes; the personal one is user-levelNot documentedYes — “the primary instruction file” — but four other tools' files rank above it in the first-match listzed.dev
Continue.continue/rules/**/*.md (Markdown recommended, YAML still supported), plus rules: entries in config.yamlProject .continue/rules/ at the workspace root; hub or config-referenced rules via uses: or file://. A global rules directory is not documented.Ordering is published as a mechanic, not a conflict rule: rules “are joined with new lines, in the order they appear in the toolbar,” and files “are loaded in lexicographical order, so you can prefix them with numbers to control the order.” A conflict winner is not documented.Declared per file. 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/ yesNot documentedNot documented. The CLI documents /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
WarpAGENTS.md (default), WARP.md (kept for backwards compatibility)Global Rules (account-level, in Warp Drive) → project rules file at the repo root and in subdirectoriesDocumented and numbered: “1. Rules in the current subdirectory's project rules file. 2. Rules in the root directory's project rules file. 3. Global Rules.” Same-directory tiebreak: if both exist, WARP.md takes priority over AGENTS.md.Root and current-directory rules are “automatically applied.” Other subdirectories are best-effort: “Warp makes a best-effort attempt to include that subdirectory's rules file as well” when you edit files there.YesNot documentedYes — the default project rules file, with a hard gotcha: “The filename must be in all caps for Warp to recognize it (e.g., AGENTS.md, not agents.md or Agents.md).”docs.warp.dev
Junie (JetBrains).junie/AGENTS.md, root AGENTS.md, .junie/playbook.md, .junie/rules/*.md, legacy .junie/guidelines.md or .junie/guidelines/Global ~/.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.Documented as an ordered discovery chain: 1. .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.Always-loaded — Junie “adds this context to every task it works on”.junie/ yes, designed to be version-controlled; global is user-levelNot documentedYes — now the preferred filename, with .junie/guidelines.md marked legacy but still supported. Junie also offers to import other agents' files on first open.junie.jetbrains.com
AmpAGENTS.md, falling back per directory to AGENT.md or CLAUDE.mdSystem-wide /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 → subtreesPer-directory fallback is explicit: “If no 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.Both, published cleanly. Files in the current working directory or editor workspace roots and parent directories up to $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.Project file yes; personal and system files sit outside the repoNot documentedYes — the first filename it looks for in every directoryampcode.com
Factory (Droid)AGENTS.md, agents.md, Agents.md, CLAUDE.md, Claude.md; DESIGN.md and its case variants loaded separately as design guidelines; SKILL.md on demandSearches the current directory up to the git root; at each level it checks the directory itself plus .factory/, .agents/ and .agent/. Personal: ~/.factory/, ~/.agents/, ~/.agent/Published as a “mental model” with a normative 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.Both. Root guidance loads at startup; when Droid later reads files under a subdirectory it can discover that directory's file. SKILL.md bodies load only when invoked. .factory/settings.json is “parsed as configuration, not as prose instructions.”AGENTS.md and .factory/ yesThe most precise budget any vendor publishes: 80,000 characters for the initial guideline load, 40,000 characters for dynamic read-path discovery. The docs add: “These are caps, not targets.”Yes — recommended for new guidance, with 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
Jules (Google)AGENTS.mdRepository rootNot documentedAlways-loaded at task start: Jules “automatically looks for a file named AGENTS.md in the root of your repository.”YesNot documentedYesjules.google
The convention itself — a specification, not a tool
AGENTS.md (the convention)AGENTS.md, nested per packageRepository root and any subdirectoryDocumented in one line: “The closest AGENTS.md to the edited file wins; explicit user chat prompts override everything.”“Agents automatically read the nearest file in the directory tree”YesNone — “AGENTS.md is just standard Markdown. Use any headings you like.” No required fields.Not applicable — it is AGENTS.md, now “stewarded by the Agentic AI Foundation under the Linux Foundation”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.

04AdoptionAGENTS.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.

Tier 1 · 8 tools
Reads it as the primary or only file
Codex · Amp · Warp · Zed · Junie · Devin · Factory · Jules

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.

Eight vendor pages
Tier 2 · 4 tools
Reads it alongside a richer native format
Cursor · Kiro · Cline · Devin Desktop

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.

Four vendor pages
Tier 3 · 3 tools
Reads it conditionally, or only if you opt in
Copilot · Gemini CLI · Aider

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.

Three vendor pages
Tier 4 · 1 tool
Documents that it does not read it
Claude Code

"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.

docs.claude.com

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.

05PrecedenceWho 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.
Explicit conflict orderingCodex · Claude Code · Cursor · Copilot · Zed · Warp · Junie
7 / 18
Load order or merge mechanic onlyGemini CLI · Amp · Devin CLI · Continue · Factory
5 / 18
Scope-pair rule onlyKiro · Cline · Devin Desktop — workspace beats global
3 / 18
Nothing published, or no chain to rankDevin cloud · Jules · Aider (no discovery chain)
3 / 18

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.

Algorithm 1
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.

Last read, loudest
Algorithm 2
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.

Delete stale files
Algorithm 3
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.

Scope, not position

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.

06Size 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.

Every documented size limit for AI coding tool instruction files, with the unit each vendor uses and what the limit applies to. Vendors publishing no limit are listed in the final row. Retrieved August 30, 2026.
ToolLimitUnitApplies to
Hard limits — a documented threshold the tool enforces
OpenAI Codex32 KiB, default of project_doc_max_bytesKibibytesThe combined merged chain, not any one file — Codex stops adding files once the total reaches the limit
Factory (Droid)80,000 / 40,000CharactersInitial guideline load / dynamic read-path discovery. Docs add: “These are caps, not targets.”
Devin Desktop (Cascade)12,000 / 6,000CharactersPer workspace rule file / the single global rules file
Claude Code4 MiBMebibytesA single CLAUDE.md — loaded in full up to that size, skipped entirely above it
Published guidance — a target, not an enforced limit
Claude Code200 linesLinesTarget per CLAUDE.md: “Longer files consume more context and reduce adherence.”
Claude Code auto memory200 lines or 25 KBLines or kilobytesMEMORY.md index — whichever comes first. Topic files are not loaded at startup.
Cursor500 linesLinesBest-practice guidance for a rule file. Not enforced; no hard limit is documented.
No published limit of any kind
Ten tool familiesNot documentedCopilot, 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.

07Load 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. The mechanics of budgeting for it live in our agent token-budget framework.

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.

Pattern 1
Both, split by directory depth
6tools

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.

Six vendor pages
Pattern 2
Declared per file, in frontmatter
5tools

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.

Five vendor pages
Pattern 3
On demand by design
1tool

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.

aider.chat
Pattern 4
Best effort — the fourth state nobody names
1case

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.

docs.warp.dev

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. 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.

08The 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.

Questions about instruction-file behavior that the vendors' own documentation does not answer, with the status of each as of the August 30, 2026 retrieval. Kept visible rather than filled by inference.
ToolThe questionStatus at retrieval
CursorDoes 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.
ClineDoes .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 CLIOn a direct contradiction between ~/.gemini/GEMINI.md and a workspace file, which wins?Not documented. Load order is published; conflict resolution is not.
Devin DesktopGlobal global_rules.md versus workspace .devin/rules/ on conflictNot documented. System rules are documented as non-overriding; the global-versus-workspace pair is not addressed.
Devin CLIGlobal ~/.config/devin/AGENTS.md versus project AGENTS.md on conflictNot documented. “Work alongside” is published; a winner is not.
AmpCross-scope conflict resolution — system versus personal versus projectNot documented. Inclusion is documented; ranking is not.
ContinueDoes 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.
JulesNested files, precedence, size limitNot documented. The getting-started page is genuinely all there is — one sentence about the root file.
GitHub CopilotWhat the runtime does with YAML frontmatter placed in .github/copilot-instructions.mdNot 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 familiesAny published byte, character, token or line limitNot 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 eighteenThe token cost of each always-on fileOut 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.

09MethodologyHow 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.

Methodology
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.
Exclusions and limitations
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.
Cite this
Digital Applied, “Where Every AI Coding Tool Looks for Your Instructions,” August 29, 2026. 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 cover.

10ConclusionA map, not a convention.

Eighteen tool families · 27 vendor pages · retrieved 2026-08-30

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.”

Map your instruction layer

Know which file your tool actually reads.

Our team maps the instruction layer across every agent tool a business runs — which files each one reads, what loads on every request, and where a stale file is quietly winning — and builds the checks that keep the estate honest.

Free consultationExpert guidanceTailored solutions
What we work on

Instruction-layer mapping

  • Instruction-file inventories across every tool in use
  • Always-on versus on-demand load mapped per file
  • Stale and superseded config files found and removed
  • One canonical source per rule, with imports, not copies
  • Deterministic gates so the layout cannot drift back
FAQ · Instruction file locations

The questions this map gets asked.

No, and Anthropic documents it in one sentence: "Claude Code reads CLAUDE.md, not AGENTS.md." The same page publishes two bridges for repositories that already use the cross-tool standard: put @AGENTS.md at the top of your CLAUDE.md so the import expands at launch, or symlink one file to the other with ln -s AGENTS.md CLAUDE.md. On Windows the symlink requires Administrator or Developer Mode, so the import is the portable option. Both are author actions — nothing happens by default. Separately, Claude Code's /init command does read other tools' files (Cursor rules and .github/copilot-instructions.md, and with CLAUDE_CODE_NEW_INIT=1 also AGENTS.md, .devin/rules/, .windsurf/rules/ and .clinerules) to generate a CLAUDE.md, but that is a one-time generation step, not runtime loading. Retrieved from docs.claude.com on 2026-08-30.
Related dispatches

Continue exploring the instruction layer.