ccChat-general
Codex setup
audit & cleanup plan
Your Codex setup is fundamentally healthy. The migration did not corrupt it, but it left one real duplicate: an older standalone Impeccable skill alongside the enabled current Impeccable plugin. This audit separates active behaviour from caches and gives you a calm, reversible cleanup order.
- Nothing indicates repeated migration damaged Codex. The migration markers are prompt/import bookkeeping, not a second copy of your setup.
- The real issue is Impeccable: an older standalone global skill and the current enabled plugin both publish a skill named
impeccable. - Keep the plugin. It is the newer revision, has the packaged post-edit UI check, and is explicitly enabled in
~/.codex/config.toml. - Do not treat
~/.codex/plugins/cache/or~/.codex/.tmp/as configuration. They are generated install/update material.
01The mental model
These things are related, but they are not interchangeable.
| Thing | What it is | Put your setup here when | Your current example |
|---|---|---|---|
AGENTS.md | Persistent instructions | You want Codex to behave a certain way in every relevant repo | Global style, commit, and autonomy rules |
| Skill | Reusable workflow instructions, optionally with scripts and references | The task recurs and needs a playbook | readout, design-styles, impeccable |
| Plugin | Installable distribution bundle, often containing one or more skills plus hooks, commands, or MCP/app wiring | You want a maintained package or to share a workflow | Impeccable, GitHub, Playwright |
| Hook | A command run around an agent lifecycle event | A mechanical rule must run automatically | Your post-edit formatter; Impeccable UI checker |
config.toml | Codex client configuration and enabled plugins | You are changing client defaults, trust, marketplaces, or MCP | Model, plugin enablement, trusted projects |
Codex’s own model is: AGENTS.md shapes behaviour, skills package reusable processes, and plugins distribute skills with richer integrations. A plugin may contain a skill; that is exactly what Impeccable does. Codex customization guide · plugin build guide
02What is active now
This is the stuff that can actually affect a new Codex task today.
| Area | Current state | Verdict |
|---|---|---|
Global AGENTS.md | A valid Codex-native adaptation of your Claude global instructions | Good base, but it has drifted from Claude’s response-style and commit exceptions |
Global config.toml | gpt-5.5, medium reasoning, pragmatic personality; trusted project list; six plugins enabled | Healthy |
| Codex global hooks | Formatter hook enabled; LSP pre-edit and session-start hooks explicitly disabled | Formatter is active. The two LSP hooks are dormant, not broken |
| Impeccable plugin | Enabled from the impeccable marketplace, version 3.9.1 | Keep |
| Impeccable plugin hook | Trusted post-tool-use hook runs after Edit, Write, or MultiEdit | Active for UI edits; useful, but it adds feedback after every frontend file edit |
| Standalone Impeccable | Separate global skill at ~/.agents/skills/impeccable, older than the plugin copy | Remove from Codex discovery after checking no other agent needs it |
| Imported Claude env vars | Several CLAUDE_CODE_* / ENABLE_* variables survive in Codex shell policy | Harmless clutter for Codex itself; remove after validating they are not deliberately consumed by your shell tooling |
The Impeccable plugin itself is installed once and enabled once. The duplicate comes from a separate global skill directory that pre-dates the plugin. Codex is correctly discovering both sources, then displaying both an un-namespaced and plugin-namespaced skill entry.
03Impeccable: what is weird and what to do
This is the only cleanup I would actively recommend from this audit.
flowchart TD A[Codex discovers global skills] --> B[~/.agents/skills/impeccable] C[Enabled Impeccable plugin v3.9.1] --> D[plugin-bundled impeccable skill] C --> E[post-edit UI hook] B --> F[older standalone skill entry] D --> G[second current skill entry] F --> H[ambiguous duplicate discovery] G --> H
The sources are not identical revisions. The standalone skill was last changed on April 30; the plugin copy was refreshed today. Its content hashes differ. The plugin has the current packaged skill and a post-edit hook; the standalone copy is simply an older full workflow.
- Keep
impeccable@impeccableenabled in~/.codex/config.toml. - Move or rename
~/.agents/skills/impeccableso Codex no longer discovers it globally. - Start a new Codex task and confirm there is only one Impeccable skill entry.
- Use
$impeccablefor a real UI task once; confirm the post-edit check is helpful rather than noisy. - If it is noisy, disable only the plugin hook before disabling the whole plugin.
Do not delete cache directories by hand to solve this. The active plugin is stored and refreshed through Codex’s plugin system. The standalone ~/.agents/skills/impeccable directory is the source that creates the duplicate.
04Claude comparison
The two setups have the same foundation, but Codex is intentionally less opinionated in a few places.
| Area | Claude Code | Codex | Assessment |
|---|---|---|---|
| Global instruction file | ~/.claude/CLAUDE.md | ~/.codex/AGENTS.md | Same purpose; global vs repo-local precedence maps cleanly |
| Core code conventions | Mostly copied | Mostly copied | Consistent |
| Response style | Claude includes your compact, direct response rules and Object Floor | Missing | Main behavioural gap if Codex feels less like your Claude setup |
| Commit rules | Claude allows commits in named personal repos and bans attribution lines | Codex omits both | Worth consciously porting if you want parity |
| Subagent policy | Claude instructs parallelisation for large work | Codex currently asks for explicit user request | A deliberate mismatch, not breakage |
| Skills | 46 direct global skills, mostly symlinked from ~/.agents | 4 direct skills plus plugins/system skills | Expected: Codex has a smaller direct-skill surface, not a failed migration |
| Plugins | Claude has its own installed-plugin registry and marketplaces | Codex has enabled plugin entries and marketplace records in config.toml | Both are valid, separate package systems |
| Global hooks | Claude settings define Stop, SessionEnd, PostToolUse, Notification | Codex has PostToolUse enabled and two disabled LSP-related hooks | Not equivalent; review them by behaviour, not by file count |
Keep the global Codex AGENTS.md short and practical. Port only the Claude rules you miss in actual use: response compactness, anonymous commit attribution, and personal-repo commit exceptions. Do not bulk-copy every Claude instruction just for symmetry.
Codex supports global guidance in ~/.codex/AGENTS.md and repo guidance nearer the working directory; closer repo guidance wins. AGENTS guidance
05Hooks: active, dormant, and worth deciding
Hooks are enforcement, not preferences. Keep them only where automatic behaviour earns its place.
| Hook | State | What it does | Recommendation |
|---|---|---|---|
Codex PostToolUse formatter | Enabled | Finds Oxfmt or Biome upward from the changed file, otherwise runs Prettier | Keep; it is more robust than the older Claude Prettier-only hook |
Codex PreToolUse LSP client | Disabled | Would run cli-lsp-client claude-code-hook before Write/Edit/MultiEdit | Leave disabled unless you intentionally use that tool |
Codex SessionStart LSP client | Disabled | Would start cli-lsp-client on startup/resume | Leave disabled unless you intentionally use that tool |
Impeccable PostToolUse | Trusted/active | Runs a UI-change check after edits/writes | Keep for now; reassess after one real frontend task |
| Claude global hooks | Active in Claude only | Stop/session/notification patterns plus one post-tool hook | They do not automatically migrate into Codex behaviour |
Codex loads hooks from hooks.json or inline config.toml tables. User-level hooks live independently from project trust; project hooks require a trusted project. Codex hook configuration
06Cleanup order
Do this in three tiny passes. Each is reversible and should be followed by a new Codex task, not a heroic configuration rewrite.
- 1Fix the real duplicateMove
~/.agents/skills/impeccableto a dated backup outside Codex’s global skill discovery path. Leave the enabled Impeccable plugin alone. - 2Smoke-test the pluginOpen a new Codex task, confirm a single Impeccable entry, then try one real UI edit. Check whether the post-edit report helps or interrupts.
- 3Choose behavioural parityCompare
~/.claude/CLAUDE.mdand~/.codex/AGENTS.mdline by line, then port only the response and commit rules you want Codex to inherit. - 4Prune migration residueAfter confirming no shell tool needs them, remove the Claude-specific environment variables from Codex’s shell policy. Ignore migration prompt timestamps, imported-session records, caches, and temp staging directories.
~/.codex/plugins/cache/ and ~/.codex/.tmp/marketplaces/ look messy by design. They are not why Impeccable duplicates.
Skills and plugin availability are assembled at task startup. After a cleanup or plugin change, verify in a fresh task or restart the client.
07My recommendation
The setup needs a tune-up, not a rebuild.
- Keep the Impeccable plugin and its hook.
- Retire the older
~/.agents/skills/impeccablecopy from Codex discovery. - Port only the Claude global-instruction deltas that you consciously want—especially response style and anonymous commits.
- Ignore the migration bookkeeping. It is evidence of imports and prompts, not a malfunction.
Once the duplicate is removed, the useful default is simple: use design-styles for quick/normal frontend work; use $impeccable when you want the heavier full-craft flow with its context and preflight gates.