Migrate to Codex
Autonomy
Keep going until the selected migration is completely done: run the migrator, inspect the report, fix migrated Codex instructions/skills/agents/MCP config, and re-run checks without stopping to ask for confirmation of the next step. If the user has selected a target, do not ask before creating, editing, replacing, or deleting generated Codex artifacts in that target (AGENTS.md, .codex/, .agents/, or ~/.codex/). Preserve unrelated existing Codex config entries in .codex/config.toml or ~/.codex/config.toml, such as notify, projects, marketplaces, or unrelated MCP servers; do not ask about them unless they fail validation or directly conflict with the migration. Do not edit source Claude Code files (.claude/, ~/.claude/, .mcp.json, or .claude.json), unrelated project code, secrets, or another repository.
Migration Order
Run the migration in this order for each selected global or project source:
Start by using Codex's built-in TODO/task list tool. Do not create MIGRATION_TODOS.md or any TODO file unless the user explicitly asks. The TODO list input has a plan array whose items each have step and status; use statuses pending, in_progress, and completed. Make the TODOs specific to the selected artifacts. Before finishing, update the TODO list so every finished step is marked completed and no step remains in_progress. Use literal source → Codex target labels, for example:
- Inspect
.claude/commands → Codex skills/prompts
- Inspect
.claude/agents → .codex/agents
- Inspect
.mcp.json → .codex/config.toml MCP servers
- Inspect
.claude/settings.json hooks → .codex/hooks.json
- Migrate safe selected artifacts → Codex files
- Validate generated
.codex/config.toml
- Validate generated
.codex/agents
- Report migrated artifacts and manual-review items
Read references/differences.md (and refresh Codex docs if its Docs last checked date is old).
Scan and inspect before writing:
--scan-only lists active and inactive source surfaces.
--plan prints staged Codex artifact paths and report rows.
--doctor summarizes readiness, manual-review work, and validation risks.
Convert surfaces in the same order the CLI uses:
- instructions:
CLAUDE.md / AGENTS.md to AGENTS.md
- plugins: report Claude plugin trees and marketplaces as manual migration work
- hooks: rewrite supported Claude hooks into
.codex/hooks.json and enable [features].codex_hooks = true
- skills and commands: write Codex skills under
.agents/skills/
- config: write
.codex/config.toml from Claude model/sandbox settings and MCP servers, including personality = "friendly" when config is generated
- subagents: write Codex custom agents under
.codex/agents/
Dry-run, then write the selected target. Use --replace only when orphan generated skills or agents should be deleted.
Inspect the terminal output and .codex/migrate-to-codex-report.txt after real runs.
Review generated artifacts in this order: AGENTS.md, .agents/skills/, .codex/config.toml, .codex/hooks.json, .codex/agents/, then report-only plugin items.
Run --validate-target against each target after edits.
Re-run checks and --dry-run after edits.
Return the final migration report as one markdown table per scope that has rows. The tables cover only the non-native follow-up migration work you performed, such as skills created from slash commands, subagents, MCP servers, hooks, unsupported/local plugin notes, and manual-review caveats. Include programmatic native import rows for config, instructions, skills, or supported plugins only if you personally migrated them in this follow-up run.
If only one scope has rows, render only the table with no heading. If multiple scopes have rows, render one heading before each table. Use **User Config** for user-scope rows. For project-scope rows, use the actual project folder name as the heading, for example **northstar-support-portal**; do not use Current Project as the heading. Do not add prose before or after the table output.
Use exactly these columns:
northstar-support-portal
| Status |
Item |
Notes |
Added |
Slash command pr-review |
Converted into a Codex skill |
Added |
Subagent release-lead |
Added as a Codex subagent |
Check before using |
Hook PreToolUse |
Converted, but some Claude hook behavior differs in Codex |
Not Added |
Hook Notification |
Codex does not have an equivalent notification hook |
Not Added |
Plugin team-macros |
Plugin needs manual setup |
Status must be Added, Check before using, or Not Added. Use Added when a Codex-facing artifact was created or changed and needs no special review. Use Check before using when a Codex-facing artifact was created or changed but the migration changed semantics, inferred behavior, preserved tool rules as guidance, or dropped unsupported behavior. Use Not Added when a source artifact was detected but no Codex-facing artifact was created. Item combines the artifact type and concrete item name in one cell. Artifact type must be singular: Skill, Slash command, Subagent, MCP, Hook, or Plugin. Wrap the artifact type in inline code; write the item name as plain text after it. Notes is always required; never leave it empty. Keep notes short, plain, and literal. Avoid internal implementation terms such as runtime expansion. Prefer phrases like Converted into a Codex skill, Added as a Codex subagent, Added to Codex config, Converted into a Codex hook, Converted, but some Claude hook behavior differs in Codex, Codex does not have an equivalent notification hook, Plugin needs manual setup, or Plugin marketplace needs manual setup.
Self-Healing Loop
Keep looping until the selected migration is complete:
- Run
--plan or --doctor.
- Run the migration with
--dry-run.
- Run the migration for real.
- Fix every generated
## MANUAL MIGRATION REQUIRED block and every manual_fix_required or skipped report row that can be resolved inside Codex artifacts.
- Run
--validate-target.
- Re-run the migrator and validator until the report and validator have no actionable generated-artifact fixes left.
Do not edit source Claude Code files, unrelated project code, secrets, or another repository during this loop. If a report row requires source-provider changes or product judgment, leave the generated Codex artifact with clear manual guidance instead of changing the source.
Commands
Choose the migrator command.
MIGRATE_TO_CODEX='python3 .codex/skills/migrate-to-codex/scripts/migrate-to-codex.py'
Inspect the migration before writing.
$MIGRATE_TO_CODEX --source ~/.claude/ --scan-only
$MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/ --plan
$MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/ --doctor
Dry-run, then run without --dry-run, for global and project.
$MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/ --dry-run
$MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/
$MIGRATE_TO_CODEX --source ./.claude/ --target ./.codex/ --dry-run
$MIGRATE_TO_CODEX --source ./.claude/ --target ./.codex/
Run the post-migration validator against each target after edits.
$MIGRATE_TO_CODEX --validate-target ~/.codex/
$MIGRATE_TO_CODEX --validate-target ./.codex/
Run $MIGRATE_TO_CODEX --help for flags (--scan-only, --plan, --doctor, --validate-target, defaults, and so on). Deep tables and more links are in references/differences.md.
Source: openai/skills → skills/.curated/migrate-to-codex/SKILL.md
1---2name: migrate-to-codex3description: Migrate supported instruction files, skills, agents, and MCP config into Codex project and global files.4---567# Migrate to Codex89## Autonomy1011Keep going until the selected migration is completely done: run the migrator, inspect the report, fix migrated Codex instructions/skills/agents/MCP config, and re-run checks without stopping to ask for confirmation of the next step. If the user has selected a target, do not ask before creating, editing, replacing, or deleting generated Codex artifacts in that target (`AGENTS.md`, `.codex/`, `.agents/`, or `~/.codex/`). Preserve unrelated existing Codex config entries in `.codex/config.toml` or `~/.codex/config.toml`, such as `notify`, `projects`, `marketplaces`, or unrelated MCP servers; do not ask about them unless they fail validation or directly conflict with the migration. Do not edit source Claude Code files (`.claude/`, `~/.claude/`, `.mcp.json`, or `.claude.json`), unrelated project code, secrets, or another repository.1213## Migration Order1415Run the migration in this order for each selected global or project source:16171. Start by using Codex's built-in TODO/task list tool. Do not create `MIGRATION_TODOS.md` or any TODO file unless the user explicitly asks. The TODO list input has a `plan` array whose items each have `step` and `status`; use statuses `pending`, `in_progress`, and `completed`. Make the TODOs specific to the selected artifacts. Before finishing, update the TODO list so every finished step is marked `completed` and no step remains `in_progress`. Use literal source → Codex target labels, for example:18 - Inspect `.claude/commands` → Codex skills/prompts19 - Inspect `.claude/agents` → `.codex/agents`20 - Inspect `.mcp.json` → `.codex/config.toml` MCP servers21 - Inspect `.claude/settings.json` hooks → `.codex/hooks.json`22 - Migrate safe selected artifacts → Codex files23 - Validate generated `.codex/config.toml`24 - Validate generated `.codex/agents`25 - Report migrated artifacts and manual-review items26272. Read `references/differences.md` (and refresh Codex docs if its `Docs last checked` date is old).28293. Scan and inspect before writing:30 - `--scan-only` lists active and inactive source surfaces.31 - `--plan` prints staged Codex artifact paths and report rows.32 - `--doctor` summarizes readiness, manual-review work, and validation risks.33344. Convert surfaces in the same order the CLI uses:35 - instructions: `CLAUDE.md` / `AGENTS.md` to `AGENTS.md`36 - plugins: report Claude plugin trees and marketplaces as manual migration work37 - hooks: rewrite supported Claude hooks into `.codex/hooks.json` and enable `[features].codex_hooks = true`38 - skills and commands: write Codex skills under `.agents/skills/`39 - config: write `.codex/config.toml` from Claude model/sandbox settings and MCP servers, including `personality = "friendly"` when config is generated40 - subagents: write Codex custom agents under `.codex/agents/`41425. Dry-run, then write the selected target. Use `--replace` only when orphan generated skills or agents should be deleted.43446. Inspect the terminal output and `.codex/migrate-to-codex-report.txt` after real runs.45467. Review generated artifacts in this order: `AGENTS.md`, `.agents/skills/`, `.codex/config.toml`, `.codex/hooks.json`, `.codex/agents/`, then report-only plugin items.47488. Run `--validate-target` against each target after edits.49509. Re-run checks and `--dry-run` after edits.515210. Return the final migration report as one markdown table per scope that has rows. The tables cover only the non-native follow-up migration work you performed, such as skills created from slash commands, subagents, MCP servers, hooks, unsupported/local plugin notes, and manual-review caveats. Include programmatic native import rows for config, instructions, skills, or supported plugins only if you personally migrated them in this follow-up run.5354 If only one scope has rows, render only the table with no heading. If multiple scopes have rows, render one heading before each table. Use `**User Config**` for user-scope rows. For project-scope rows, use the actual project folder name as the heading, for example `**northstar-support-portal**`; do not use `Current Project` as the heading. Do not add prose before or after the table output.5556 Use exactly these columns:5758 **northstar-support-portal**5960 | Status | Item | Notes |61 | --- | --- | --- |62 | `Added` | `Slash command` pr-review | Converted into a Codex skill |63 | `Added` | `Subagent` release-lead | Added as a Codex subagent |64 | `Check before using` | `Hook` PreToolUse | Converted, but some Claude hook behavior differs in Codex |65 | `Not Added` | `Hook` Notification | Codex does not have an equivalent notification hook |66 | `Not Added` | `Plugin` team-macros | Plugin needs manual setup |6768 `Status` must be `Added`, `Check before using`, or `Not Added`. Use `Added` when a Codex-facing artifact was created or changed and needs no special review. Use `Check before using` when a Codex-facing artifact was created or changed but the migration changed semantics, inferred behavior, preserved tool rules as guidance, or dropped unsupported behavior. Use `Not Added` when a source artifact was detected but no Codex-facing artifact was created. `Item` combines the artifact type and concrete item name in one cell. Artifact type must be singular: `Skill`, `Slash command`, `Subagent`, `MCP`, `Hook`, or `Plugin`. Wrap the artifact type in inline code; write the item name as plain text after it. `Notes` is always required; never leave it empty. Keep notes short, plain, and literal. Avoid internal implementation terms such as runtime expansion. Prefer phrases like `Converted into a Codex skill`, `Added as a Codex subagent`, `Added to Codex config`, `Converted into a Codex hook`, `Converted, but some Claude hook behavior differs in Codex`, `Codex does not have an equivalent notification hook`, `Plugin needs manual setup`, or `Plugin marketplace needs manual setup`.6970## Self-Healing Loop7172Keep looping until the selected migration is complete:73741. Run `--plan` or `--doctor`.752. Run the migration with `--dry-run`.763. Run the migration for real.774. Fix every generated `## MANUAL MIGRATION REQUIRED` block and every `manual_fix_required` or `skipped` report row that can be resolved inside Codex artifacts.785. Run `--validate-target`.796. Re-run the migrator and validator until the report and validator have no actionable generated-artifact fixes left.8081Do not edit source Claude Code files, unrelated project code, secrets, or another repository during this loop. If a report row requires source-provider changes or product judgment, leave the generated Codex artifact with clear manual guidance instead of changing the source.8283## Commands8485Choose the migrator command.8687 ```bash88 MIGRATE_TO_CODEX='python3 .codex/skills/migrate-to-codex/scripts/migrate-to-codex.py'89 ```9091Inspect the migration before writing.9293 ```bash94 $MIGRATE_TO_CODEX --source ~/.claude/ --scan-only95 $MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/ --plan96 $MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/ --doctor97 ```9899Dry-run, then run without `--dry-run`, for global and project.100101 ```bash102 $MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/ --dry-run103 $MIGRATE_TO_CODEX --source ~/.claude/ --target ~/.codex/104 $MIGRATE_TO_CODEX --source ./.claude/ --target ./.codex/ --dry-run105 $MIGRATE_TO_CODEX --source ./.claude/ --target ./.codex/106 ```107108Run the post-migration validator against each target after edits.109110 ```bash111 $MIGRATE_TO_CODEX --validate-target ~/.codex/112 $MIGRATE_TO_CODEX --validate-target ./.codex/113 ```114115Run `$MIGRATE_TO_CODEX --help` for flags (`--scan-only`, `--plan`, `--doctor`, `--validate-target`, defaults, and so on). Deep tables and more links are in `references/differences.md`.116117---118119**Source:** [`openai/skills`](https://github.com/openai/skills) → `skills/.curated/migrate-to-codex/SKILL.md`