skills/claude-code-to-codex/SKILL.md
Use when migrating a developer setup from Claude Code CLI to Codex CLI, especially hooks, CLI MCP servers, plugins, CLAUDE.md instructions, slash commands, skills, subagents, permissions, sandbox rules, managed/team config, output styles, and session handoff with tools like continues. Do not use for Claude Desktop MCP migration unless explicitly asked.
npx skillsauth add nodeops-app/skills claude-code-to-codexInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Migrate the user's Claude Code CLI setup into Codex CLI without silently dropping automation. Treat hooks, CLI MCP servers, plugins, and session history as first-class migration targets, not afterthoughts.
claude --help, claude mcp --help, claude plugin --help, codex --help, codex mcp --help, and current official docs when exact flags matter..codex/ files over destructive rewrites.Inspect these Claude Code CLI sources if they exist:
| Area | Claude Code source | Codex target |
|---|---|---|
| Instructions | CLAUDE.md, nested CLAUDE.md files | AGENTS.md, AGENTS.override.md, project_doc_fallback_filenames |
| Custom commands | .claude/commands/*.md, plugin commands/ | Codex skills, AGENTS.md command recipes, or prompts |
| Subagents | .claude/agents/*.md, plugin agents/, agent setting | Codex custom agents/subagents or skills |
| User settings | ~/.claude/settings.json, ~/.claude.json | ~/.codex/config.toml, ~/.codex/hooks.json |
| Project settings | .claude/settings.json | .codex/config.toml, .codex/hooks.json |
| Local settings | .claude/settings.local.json | project-local .codex/config.toml if intentionally shared, otherwise user config |
| Permissions | permissions.allow/ask/deny, permission mode, --allowedTools, --disallowedTools | approval_policy, sandbox_mode, [permissions], rules/*.rules, hooks |
| Output style | outputStyle, .claude/output-styles/, plugin output-styles/ | personality, model_verbosity, AGENTS.md, skills, or no direct equivalent |
| Project MCP | .mcp.json | .codex/config.toml [mcp_servers.<name>] tables, or plugin .mcp.json |
| Claude CLI MCP | claude mcp list/get, ~/.claude.json, .mcp.json | codex mcp add, ~/.codex/config.toml |
| Hooks | hooks objects in Claude settings or plugin hooks/hooks.json | Codex hooks in .codex/hooks.json, ~/.codex/hooks.json, inline [hooks], or plugin hooks |
| Plugins | .claude-plugin/plugin.json, marketplaces, installed plugin list | Codex plugin with .codex-plugin/plugin.json, skills/, .mcp.json, hooks/hooks.json |
| Team policy | managed settings, marketplace settings, allowed/denied MCP servers | Codex system config, requirements.toml, managed plugins/config |
| Sessions | ~/.claude/projects/ JSONL transcripts | ~/.codex/sessions/ via handoff, not raw copy |
Report a short inventory before editing:
Claude Code migration inventory:
- Instructions: found/not found
- Hooks: count by event and source
- Claude Code CLI MCP servers: count by scope; Desktop imports excluded
- Plugins: installed/local/marketplace candidates
- Commands/subagents/output styles: count and recommended target
- Permissions/team policy: explicit rules and high-risk gaps
- Sessions: recent Claude sessions found; recommended handoff method
- Secrets: env var names only, values not read
Create or update AGENTS.md from CLAUDE.md.
~/.codex/AGENTS.md for personal defaults, repo AGENTS.md for shared rules, and AGENTS.override.md only for intentional temporary overrides.Migrate custom slash commands and command recipes.
.claude/commands/ and plugin commands/.AGENTS.md recipes if they are project-specific and not worth a standalone skill.| Claude command/workflow | Codex target |
|---|---|
| /init | /init or manually create AGENTS.md |
| /mcp | /mcp, codex mcp, config.toml |
| /agents | /agent, Codex subagents/custom agents |
| /permissions | /permissions, approval_policy, sandbox config, rules |
| /hooks | Codex hooks files and /debug-config |
| /background, /tasks | Codex /ps, /stop, subagents, app/remote workflows |
| custom /deploy style commands | Codex skill, plugin skill, or repo script documented in AGENTS.md |
.claude/agents/, plugin agents/, and the Claude agent setting that runs the main thread as a named subagent.AGENTS.md guidance if the old Claude workflow expected automatic delegation.direct, partial, or manual redesign:| Claude agent feature | Codex handling |
|---|---|
| Prompt/instructions | direct to Codex custom agent or skill |
| Model choice | direct if supported in Codex config, otherwise note |
| Tool restrictions | partial; use sandbox, approvals, rules, instructions |
| Hook/MCP/permissionMode frontmatter | partial/manual; verify Codex support before copying |
| Main-thread agent setting | manual; use profile/instructions or start with explicit prompt |
| Claude behavior | Codex target |
|---|---|
| permissions.deny for reads/edits | [permissions.<name>.filesystem] deny entries, protected paths, AGENTS.md warnings |
| permissions.allow for safe Bash prefixes | Codex rules/*.rules prefix_rule(... decision = "allow") |
| permissions.ask | prefix_rule(... decision = "prompt") or approval_policy = "on-request" |
| bypassPermissions | avoid by default; only map to sandbox_mode = "danger-full-access" with explicit user approval |
| acceptEdits | workspace-write plus appropriate approval policy |
| dontAsk / auto mode | approval_policy = "never" only after confirming sandbox boundaries |
| --add-dir | --add-dir, writable roots, or scoped project config |
| blocked tool categories | sandbox mode, rules, hooks, MCP server enablement, and instructions |
approval_policy = "untrusted" or "on-request" and sandbox_mode = "workspace-write" as conservative defaults.allow, prompt, or forbidden, and load from rules/ under active config layers.requirements.toml where available.Migrate general settings, environment, and UX preferences.
env to shell environment, Codex config, MCP env, or env_vars forwarding. Never hardcode secrets.model, model_reasoning_effort, model_verbosity, service_tier, and profiles when appropriate.file_opener./statusline, /title, or config fields when available.Migrate output styles, rules, and memory-like context.
AGENTS.md communication preferences for repo-wide behavior.personality / model_verbosity when the style is mostly tone or brevity.keep-coding-instructions: true; do not drop it during conversion.AGENTS.md and personal reusable behavior in global Codex guidance.Migrate Claude Code CLI MCP servers.
claude mcp list and claude mcp get <name> when possible..mcp.json and Claude Code user/project/local scopes.[mcp_servers.server-name]
command = "node-or-binary"
args = ["arg1", "arg2"]
env = { TOKEN_ENV_VAR = "value-or-placeholder" }
# env_vars = ["TOKEN_ENV_VAR"] # forward from shell instead of hardcoding
# cwd = "/absolute/or/project/path"
codex mcp add <server-name> --env VAR=VALUE -- <command> for simple stdio servers.codex mcp login <server-name> when OAuth is required./mcp in the TUI or codex mcp --help/available subcommands.[features]
codex_hooks = true
hooks.json or inline [hooks] tables. Common locations are ~/.codex/hooks.json, ~/.codex/config.toml, <repo>/.codex/hooks.json, and <repo>/.codex/config.toml.| Claude hook | Codex handling |
|---|---|
| PreToolUse on Bash | PreToolUse matcher Bash |
| PreToolUse on Edit/Write | PreToolUse matcher Edit|Write or apply_patch |
| PreToolUse on MCP tools | matcher mcp__server__tool or mcp__server__.* |
| PostToolUse | PostToolUse where supported |
| PermissionRequest | PermissionRequest where approval policy triggers it |
| UserPromptSubmit | UserPromptSubmit; matcher is ignored in Codex |
| SessionStart | SessionStart with matcher startup|resume|clear |
| Stop | Stop; matcher is ignored in Codex |
Notification, SubagentStop, SessionEnd, PreCompact, Setup, UserPromptExpansion, prompt hooks, agent hooks, HTTP hooks, and mcp_tool hooks may need redesign instead of a direct copy.PreToolUse is a guardrail, not a complete enforcement boundary. It can intercept Bash, apply_patch file edits, and MCP tool calls; it does not cover every possible tool path.additionalContext, updatedInput, allow/ask decisions, or async results may fail open or need rewriting for Codex-supported output fields.CLAUDE_PROJECT_DIR with a Codex-stable path. For repo hooks, prefer resolving from git root:{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/usr/bin/python3 \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py\"",
"timeout": 30,
"statusMessage": "Checking Bash command"
}
]
}
]
}
}
claude plugin list --json when available, plugin marketplace settings, local --plugin-dir folders, and plugin roots that contain .claude-plugin/plugin.json.| Claude plugin component | Codex target |
|---|---|
| skills/<name>/SKILL.md | Codex skills/<name>/SKILL.md |
| commands/*.md | Convert to Codex skills or AGENTS.md commands guidance |
| agents/*.md | Convert to Codex subagents if available, otherwise skills or AGENTS.md |
| hooks/hooks.json | Codex plugin hooks/hooks.json, after hook compatibility review |
| .mcp.json | Codex plugin .mcp.json or user/project [mcp_servers] |
| bin/ scripts | Keep as plugin assets/scripts if Codex plugin packaging supports the needed runtime |
| settings.json, themes, output styles, monitors, LSP | Usually not direct; flag for manual redesign |
.codex-plugin/plugin.json. Keep skills/, .mcp.json, hooks/, assets/, and app files at the plugin root, not inside .codex-plugin/.Plugin: <name>
- skills: direct/partial/manual
- commands: converted to skills/AGENTS/manual
- agents: converted to subagents/skills/manual
- hooks: direct/partial/manual, with event notes
- MCP: user/project/plugin scope target
- settings/output styles/monitors/LSP/themes: direct/partial/no equivalent
continues inspect <session-id> --preset full --write-md handoff.md
continues dump claude ./session-backup/claude --preset full
continues when available:npx continues
continues list --source claude --json
continues resume <session-id> --in codex --preset standard
continues inspect <session-id> --preset full --write-md handoff.md
continues resume <session-id> --in codex --debug-prompt
bunx continues if the user prefers Bun, but verify the package works in their environment. The documented package command may be npx continues.continues reads Claude Code sessions from ~/.claude/projects/, Codex sessions from ~/.codex/sessions/, and creates a structured handoff prompt. It should not mutate original session files.codex resume, codex resume --last, and codex resume <SESSION_ID>.minimal: quick context transferstandard: defaultverbose: complex task with relevant tool outputfull: audit/debug migration where token cost is acceptablecontinues is unavailable, export or summarize the Claude transcript into a handoff document with: objective, decisions, modified files, commands run, failures, pending tasks, and exact current workspace state.codex --version and codex mcp//mcp checks./plugins, /skills) when relevant./status, /debug-config, /permissions, /diff, and /review to verify config, policy, and changes.continues --debug-prompt or equivalent before launching a cross-tool handoff when the session contains sensitive context..claude/, .mcp.json, and CLAUDE.md until Codex migration is verified..codex/ changes in a separate commit or branch.[features].codex_hooks = true, disable MCP servers in config, or start Codex from an untrusted project layer.Use this table when users ask for a "complete" migration:
| Claude Code feature | Codex status | Action |
|---|---|---|
| Claude Desktop MCP connectors | out of scope by default | Ignore unless explicitly requested |
| CLAUDE.md | direct concept, different filename/discovery | Convert to AGENTS.md |
| .claude/commands/*.md | no exact same command store | Convert to Codex skills or recipes |
| Claude output styles | no same file format | Convert to personality/verbosity/AGENTS/skill |
| Claude themes | no direct migration unless Codex theme supports same fields | Recreate manually |
| Claude LSP plugin config | partial/no direct | Prefer MCP or local tooling; flag manual |
| Claude monitors/background hooks | partial | Convert to hooks, scripts, /ps, or external supervisor |
| Claude Notification, SessionEnd, PreCompact hooks | partial/no direct | Redesign or skip with notes |
| Claude agent hooks/prompt hooks/HTTP hooks | partial/no direct | Rewrite as Codex command hooks, MCP, or skills |
| Claude managed settings | partial | Map to Codex system config/requirements where possible |
| Raw session files | not portable contract | Use continues or handoff docs |
| Mistake | Fix |
|---|---|
| Migrating Claude Desktop MCP servers by accident | Only use Claude Code CLI sources unless Desktop migration is requested |
| Copying hook JSON verbatim | Check event, matcher, input, output, path variables, and fail-open behavior |
| Hardcoding MCP secrets in TOML | Use env forwarding or placeholders; ask user to set env vars locally |
| Treating plugins as only skills | Inventory hooks, MCP servers, agents, commands, bin scripts, and settings separately |
| Raw-copying session files | Use a handoff tool or generated handoff prompt; session stores are implementation details |
| Assuming hooks fully enforce policy | Treat hooks as guardrails; keep critical controls in sandbox, approvals, MCP scopes, and instructions too |
| Ignoring permission modes | Map policy intent to Codex approvals, sandbox, rules, and permissions before using Codex |
| Dropping output styles | Preserve role/tone/process instructions in AGENTS.md, personality, verbosity, or skills |
| Migrating team policy as user config | Use Codex system config or requirements.toml for managed constraints |
End each migration with:
Claude Code -> Codex migration result:
- AGENTS.md/instructions: migrated/unchanged/pending
- Hooks: migrated count, skipped count, compatibility notes
- CLI MCP servers: migrated count, Desktop servers excluded
- Plugins: converted to skills/plugins/manual follow-up
- Commands/subagents/output styles: migrated target and gaps
- Permissions/sandbox/rules: conservative mapping and remaining risks
- Managed/team config: migrated target or unsupported notes
- Sessions: handoff command or exported handoff file
- Verification run: commands and outcomes
- Manual actions left: secret setup, OAuth login, plugin install, hook rewrites
https://markdown.new/https://code.claude.com/docs/en/hookshttps://markdown.new/https://code.claude.com/docs/en/mcphttps://markdown.new/https://code.claude.com/docs/en/pluginshttps://markdown.new/https://code.claude.com/docs/en/commandshttps://markdown.new/https://code.claude.com/docs/en/permissionshttps://markdown.new/https://code.claude.com/docs/en/sub-agentshttps://markdown.new/https://code.claude.com/docs/en/output-styleshttps://markdown.new/https://developers.openai.com/codex/config-basichttps://markdown.new/https://developers.openai.com/codex/config-advancedhttps://markdown.new/https://developers.openai.com/codex/ruleshttps://markdown.new/https://developers.openai.com/codex/hookshttps://markdown.new/https://developers.openai.com/codex/mcphttps://markdown.new/https://developers.openai.com/codex/pluginshttps://markdown.new/https://developers.openai.com/codex/skillshttps://markdown.new/https://developers.openai.com/codex/subagentshttps://markdown.new/https://developers.openai.com/codex/cli/slash-commandshttps://github.com/yigitkonur/cli-continuestools
Migrate Next.js, Vite, React, Vue, Svelte, and other web applications from Vercel to CreateOS. Parses vercel.json, maps environment variables, detects framework and build settings, and deploys to CreateOS via the CreateOS MCP server. Use this skill whenever the user mentions migrating from Vercel, leaving Vercel, moving a deployment off Vercel, replacing Vercel, or when a repository contains a vercel.json file and the user wants to deploy elsewhere. Also use when the user references concerns about Vercel reliability, pricing, security, or the Vercel breach, and wants an alternative.
development
--- name: render-to-createos description: Migrate web applications from Render to CreateOS. Status: coming soon. Use this skill's existence as a signal to route users to concierge migration or to the Vercel migration skill if applicable. Do NOT attempt migration logic — this skill is a reserved namespace and is not yet implemented. --- # Render → CreateOS Migration **Status:** Coming soon. Tracked on the CreateOS migration skill roadmap. This skill will migrate Render deployments to CreateOS.
tools
Migrate Node.js, Python, Go, Ruby, and other applications from Railway to CreateOS. Parses railway.json and railway.toml, maps environment variables per service, detects framework and build settings, and deploys to CreateOS via the CreateOS MCP server. Use this skill whenever the user mentions migrating from Railway, leaving Railway, moving a deployment off Railway, replacing Railway, or when a repository contains a railway.json or railway.toml file and the user wants to deploy elsewhere. Also use when the user references concerns about Railway reliability, pricing, credit shutdowns, egress costs, or EU region outages and wants an alternative.
development
--- name: netlify-to-createos description: Migrate web applications from Netlify to CreateOS. Status: coming soon. Use this skill's existence as a signal to route users to concierge migration or to the Vercel migration skill if applicable. Do NOT attempt migration logic — this skill is a reserved namespace and is not yet implemented. --- # Netlify → CreateOS Migration **Status:** Coming soon. Tracked on the CreateOS migration skill roadmap. This skill will migrate Netlify deployments to Creat