Two kinds of files: rules and skills
Rules (CLAUDE.md, AGENTS.md, .mdc, copilot-instructions.md) load at startup or when you touch a matching file, and they stay in context. Every line costs tokens on every request, so keep them short: Anthropic suggests under 200 lines per CLAUDE.md, Cursor under 500 lines per rule, and Codex stops adding AGENTS.md content after 32 KiB by default.
Skills (SKILL.md) use progressive disclosure: only the name and description sit in context, and the body loads when a task matches. Long, situational material belongs there. The format is covered in how to write a SKILL.md.
Matrix: which agent reads which file
FormatPathRead byWhen it loadsCLAUDE.md./CLAUDE.md, .claude/CLAUDE.md, ~/.claude/CLAUDE.md, CLAUDE.local.mdClaude Code; Copilot (cloud agent, code review, CLI); opencode as a fallback; Codex only via project_doc_fallback_filenamesat startup, root down to the working dir; subfolder files on demandAGENTS.mdrepo root and subfoldersCodex, Cursor, Copilot, Devin Desktop, Kiro, opencode, Zed, Cline, Junie; Gemini CLI via context.fileName; Claude Code since v2.1.277always; the file closest to the edit winsGEMINI.md~/.gemini/GEMINI.md, working dirs and parentsGemini CLI; Copilot (cloud agent, CLI); Zedconcatenated and sent with every promptSKILL.md.claude/skills/, .agents/skills/, .kiro/skills/ and moreClaude Code, Codex, Cursor, Copilot, Gemini CLI, Kiro, opencode, Zed, Devin Desktopname and description at startup, body on use.claude/rules/*.md.claude/rules/, ~/.claude/rules/Claude Codealways without paths; with paths, when a matching file is touched.cursor/rules/*.mdc.cursor/rules/Cursoralways, by globs, by description, or manually.cursorrulesrootCursor (legacy), Cline, Zedalwayscopilot-instructions.md.github/Copilot; Zedalways in repo context*.instructions.md.github/instructions/Copilotwhen the path matches applyTo.clinerules.clinerules/ or .cline/rules/Clinealways, or by paths.devin/rules/*.md.devin/rules/ (fallback .windsurf/rules/)Windsurf / Devin Desktopby trigger: always_on, model_decision, glob, manual; 12,000 characters per fileKiro steering.kiro/steering/*.mdKiroby inclusion: always, fileMatch, manual, autoZed is the odd one. From the list .rules → .cursorrules → .windsurfrules → .clinerules → .github/copilot-instructions.md → AGENT.md → AGENTS.md → CLAUDE.md → GEMINI.md it uses only the first file it finds. A stale .rules in the root will shadow your AGENTS.md.
AGENTS.md and CLAUDE.md in one repo
Since v2.1.277 Claude Code reads AGENTS.md natively, but by default only when there is no CLAUDE.md, .claude/CLAUDE.md or CLAUDE.local.md in the working directory or above. If CLAUDE.md exists, AGENTS.md is silently skipped. The documented bridge is a line @AGENTS.md inside CLAUDE.md. Details in AGENTS.md vs CLAUDE.md.
The shared .agents/skills folder
.agents/skills/ (and ~/.agents/skills/) is read by Codex, Cursor, Copilot, Gemini CLI, opencode, Zed and Devin Desktop. It is the closest thing to a common home for skills.
Two exceptions. The Claude Code docs do not mention this path; Claude Code looks in .claude/skills/. Kiro reads only .kiro/skills/. On the other hand, Cursor, Copilot, opencode and, when enabled, Devin Desktop all pick up .claude/skills/.
Installers handle the split for you. npx skills add owner/repo -a claude-code drops the skill into .claude/skills/; with -a codex it goes to .agents/skills/. Per-platform steps: Claude Code, Codex, Cursor.
Slash commands: still a mess of formats
AgentWhereFormatClaude Code.claude/commands/*.mdMarkdown; merged into skills, old files still workCodex~/.codex/prompts/*.mddeprecated in favor of skillsGemini CLI.gemini/commands/*.tomlTOML with a prompt fieldCopilot (VS Code).github/prompts/*.prompt.mdMarkdown + frontmatterDevin Desktop.devin/workflows/*.mdMarkdown, run with /nameThe direction is clear: Claude Code and Codex are folding commands into skills, and Cursor does the same with /migrate-to-skills. Write new commands as skills from the start.
Converters: one source for every agent
GitHub stars as of 2026-10-24.
ToolWhat it doesCoveragerulesync (1,551★, MIT)generates rules, MCP, commands, subagents, skills and hooks from.rulesync/; imports from CLAUDE.md, .cursorrules, copilot-instructionsabout 65 targetsruler (2,950★, MIT)writes AGENTS.md for most agents from .ruler/, merges MCP into native configs31 rows in the README tableblock/ai-rules (139★, Apache-2.0)rules and MCP from ai-rules/11 agentsvercel-labs/skills (36,354★, MIT)an installer, not a converter: puts SKILL.md into each agent's folderClaude Code, Codex, Cursor, OpenCode and 75 more per the READMEopenskills (10,808★)installs skills and lists them in AGENTS.mdany agent that reads AGENTS.md; last push 2026-01-18Our take. One person, one agent: skip converters and use the native file. A team on two or more agents: keep rules in AGENTS.md, skills in .agents/skills/, and add an @AGENTS.md bridge in CLAUDE.md for Claude Code. Once MCP and hooks for three agents join the rules, use rulesync; it covers the most features and works in both directions.