-
Notifications
You must be signed in to change notification settings - Fork 2
Committing to One Tool
Gregor Biswanger edited this page Aug 3, 2026
·
1 revision
Nothing needs to be ejected — both tools read the same files, and keeping both costs you one extra one-line file per command. But if you want a repository with no trace of the other tool, the conversion is mechanical.
| From | To | Transformation |
|---|---|---|
.claude/commands/<n>.md |
.github/prompts/<n>.prompt.md |
move the body into the existing loader file (replacing the pointer line), keep name/description/argument-hint, drop disable-model-invocation
|
.claude/rules/<n>.md |
.github/instructions/<n>.instructions.md |
rename, and change frontmatter paths: [a, b] to applyTo: 'a,b'
|
AGENTS.md |
.github/copilot-instructions.md |
move, or keep AGENTS.md — both are native |
CLAUDE.md |
— | delete |
.claude/settings.json hooks block |
.github/hooks/hooks.json |
restructure to the Copilot hooks file; other keys are dropped |
.mcp.json |
.vscode/mcp.json |
rename root key mcpServers to servers
|
.vscode/settings.json |
— | the .claude/* location entries become unnecessary |
.specs/ and .memory-bank/ are unchanged — they are plain data.
| From | To |
|---|---|
.github/prompts/*.prompt.md |
delete — the loaders exist only for Copilot |
.github/agents/SpecDrivenAgent.agent.md |
delete, or port to .claude/agents/ accepting the changed semantics (isolated subagent, not a persona) |
.vscode/settings.json |
delete |
| everything else | unchanged |
Two things worth weighing:
-
The cost of staying dual is small. One
.prompt.mdloader per command, each a single line pointing at the body you were going to write anyway, plus a five-line.vscode/settings.json. Nothing is duplicated, so nothing can drift. -
The cost of ejecting is one-way in practice. Once the bodies move into
.github/prompts/*.prompt.md, they carry Copilot-only assumptions again the moment someone reaches for${input:…}. Coming back means re-normalising them.
If your team genuinely uses one tool and the other folder is confusing people, eject. Otherwise the dual setup is close to free.
You do not have to delete anything to reduce noise. Add the other tool's entry points to
.gitignore in a fork, or exclude them from your editor's file explorer:
{
"files.exclude": { ".claude/**": true }
}The files stay in the repository for whoever wants them, and stay out of your way.
Start here
Reference
Design & interop
- Interop Matrix
- Design Decisions
- Specify Method
- Committing to One Tool
- Migrating from the predecessor
Help