migrate-copilot-instructions
Migrate Copilot instructions
Migrate a project's AI coding-agent configuration from GitHub Copilot's format into a portable AGENTS.md and the target tool's ecosystem — Claude Code, Codex, or opencode — without losing anything and without creating a "museum of contradictory instructions for robots."
The source is always Copilot's .github/ setup. The target is what varies; detect it from the repo (Step 0). Examples below lean on Copilot → Claude Code because it's the most common request, but the same workflow targets Codex and opencode — the destination homes differ, the method (convert, don't copy) does not.
Core principle (read before touching files)
The bad migration renames copilot-instructions.md to CLAUDE.md and stops. It fails, because each tool reads configuration differently and copying a filename does not copy the behavior.
The good migration moves from "one file per tool" to "one common source with native adapters." AGENTS.md is the natural shared source: Codex and opencode read it natively, and Claude Code can import it. Each tool then reads it through a thin adapter, and Copilot's tool-specific artifacts are re-interpreted into the target's native homes.
Two classes of artifact, handled differently:
- Instructions & rules — plain prose. They travel cheaply via wrappers, imports, or sections. A path-scoped rule keeps its glob; only the field name changes (
applyTo→paths). - Prompts, agents, skills, MCP — behavioral/executable. They must be re-interpreted per target, never blind-copied, because frontmatter fields, tool names, model names, and argument syntax all differ.
cp -R .github/agents .claude/agentslooks like it works until you run it.
Keep this distinction front of mind throughout.