The painful part of switching from Claude Code to Codex is not the model swap. It is the harness.
Claude Code stores useful operating context in ~/.claude: CLAUDE.md, skills, agents, hooks, MCP config, and sometimes session state. Codex has a different shape under ~/.codex. Copying files by hand works for the obvious pieces and misses the edge cases.
The first-party Codex import flow is the right starting point. The second pass is validating the pieces that an import checklist cannot prove:
- Hook behavior that does not port 1:1.
- Per-agent restrictions that Codex cannot enforce the same way.