GC-301i · Module 3
Migration Paths
3 min read
Migrating between CLI coding agents — from Claude Code to Gemini CLI, from Codex to Claude Code, or from Gemini CLI to Codex — requires mapping three categories of configuration: project memory (CLAUDE.md → GEMINI.md → AGENTS.md), custom commands (skills → .toml commands → commands), and tool integrations (MCP servers → extensions → plugins). The project memory files are the most portable because they are plain markdown — a well-written CLAUDE.md works as a GEMINI.md with minimal changes. Custom commands require rewriting because the formats differ, but the prompt content transfers directly.
The practical migration path is incremental, not big-bang. Run both tools in parallel for 2 weeks. Port the project memory file first (day 1). Port the most-used custom commands next (days 2-3). Set up tool integrations as needed (days 4-5). Let developers use both tools freely during the transition and migrate their workflows at their own pace. After 2 weeks, assess adoption and make the final call. The team that tries to switch everyone overnight creates friction. The team that migrates gradually finds the natural adoption point.
MIGRATION MAP: Claude Code → Gemini CLI
Project Memory
CLAUDE.md → GEMINI.md (copy, minor edits)
.claude/settings.json → .gemini/settings.json (restructure)
.claudeignore → .geminiignore (same format)
Custom Commands
.claude/commands/review.md → .gemini/commands/review.toml
.claude/commands/test.md → .gemini/commands/test.toml
Format: Markdown → TOML (prompt content is reusable)
Tool Integrations
MCP servers (settings.json) → Extensions (settings.json)
Server-specific configs vary — port individually
Authentication
Anthropic API key → Google account or API key
No cross-tool credential sharing
MIGRATION MAP: Codex → Gemini CLI
Project Memory
AGENTS.md → GEMINI.md (copy, minor edits)
AGENTS.override.md → (personal GEMINI.md overrides)
config.toml → .gemini/settings.json
Custom Commands
codex commands → .gemini/commands/ (.toml format)
Sandbox
execpolicy (config.toml) → hooks (settings.json)
Different enforcement model — hooks are post-hoc, not pre-hoc