Codex compatibility
Claude Code is this catalog’s native harness. Every plugin also ships a Codex-side manifest, and the repo carries a second marketplace — but ported and identical are different claims, so each plugin declares which one applies.
Two marketplaces, one catalog
| Claude Code | Codex | |
|---|---|---|
marketplace |
|
|
per-plugin manifest |
|
|
instructions file |
|
|
The Codex manifests are generated, never hand-written:
make codex # regenerate from the Claude-side source of truth
make validate # fails if they are stale
This is the one place we deliberately diverge from the reference implementation. Superpowers — which pioneered the cross-harness skills repo and supports six — hand-maintains a manifest per harness and keeps versions aligned with a nine-entry stamping list. That works until someone adds a seventh manifest and forgets the list. Deriving the Codex manifests from the Claude ones makes the drift impossible instead of merely discouraged, and the check is a diff.
Three tiers of portability
Tiers are computed from the tree, not hand-listed, so a plugin that gains hooks
tomorrow is re-tiered by the next make codex. They appear in each Codex
manifest under compatibility.
| Tier | Count | What it means |
|---|---|---|
1 — portable |
9 |
Prose skills. Same behaviour on any harness; nothing to translate. |
2 — needs tool translation |
6 |
Uses agent dispatch or an external CLI runner. The skill ships |
3 — lifecycle hooks |
7 |
Hook behavior is enabled only for plugins shipping a reviewed
|
Tier 3 is dev-crew, evolving-claude-md, learn-on-failure, memory-hygiene,
progress-channel, prompt-coach and roles. Each ships an explicit
hooks/codex.json alongside its Claude hooks/hooks.json.
Feature comparison
Platform surfaces
What changes between the two clients for every plugin that touches the surface. Each plugin page carries its own Claude Code vs Codex section with the specifics.
| Surface | Claude Code | Codex |
|---|---|---|
Slash commands |
|
Ask in plain language; the command’s procedure runs unchanged. |
Hook registration |
|
|
Hook events |
SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, PostCompact. |
The same events. PostCompact findings arrive as a |
Edits the hooks see |
|
|
Shell |
|
|
Instructions file |
|
|
Project memory |
Claude’s native memory, loaded automatically. |
Plugin-managed |
Plugin workflow state |
|
The same directory — shared on purpose, so learning carries across clients. |
Subagents |
|
|
Models |
Anthropic model names and tiers. |
Mapped to the client’s available models; Anthropic names are never sent. |
Live progress |
Status-line bar. |
Browser dashboard or |
Session identity |
|
|
Transcripts |
Claude JSONL. |
Codex rollout files — not a stable API; unknown formats degrade gracefully. |
Plugin by plugin
| Plugin | Tier | What differs on Codex |
|---|---|---|
3 |
Same five hooks through the adapter; instructions file resolves to |
|
3 |
Guards plugin-managed |
|
3 |
Roles travel in the brief rather than registering as agent types; the phase gate needs the exact |
|
2 |
Seats spawn via the client’s agent tool; without one the panel runs sequentially and says so. |
|
3 |
Writes |
|
1 |
Attribution names the client actually used. |
|
1 |
Nothing. |
|
1 |
Nothing. |
|
2 |
No-write becomes an instruction, not a runtime guarantee. |
|
2 |
Results are collected from child messages, not transcripts. |
|
3 |
Same SessionStart hook; commands become plain-language requests. |
|
1 |
Nothing beyond tool names. |
|
3 |
No status-line bar — use the dashboard or |
|
2 |
Lane dispatch uses the client’s agent tool. |
|
3 |
Native |
|
2 |
|
|
1 |
Automated rules are Claude-convention first; Codex packaging is checked by hand. |
|
1 |
Tunes |
|
1 |
Nothing. |
|
1 |
Nothing (needs a client that can view images). |
|
1 |
Nothing. |
|
2 |
Waits and relays use the client’s agent status and follow-up tools. |
How Codex support works
Hooks and the shared adapter
-
Every tier-3 plugin vendors the same
codex-bridge.py. It setsSKILL_CLIENT=codex, turns Codex tool envelopes into the shapes the existing Claude handlers expect, and reshapes their output for Codex. The rules themselves live in one place for both clients. -
Codex behavior is strictly opt-in: handlers branch only on
SKILL_CLIENT == "codex", and only the bridge sets it. Claude’s hook files and full workflows are untouched. -
Hooks cover matching exposed tool paths, not arbitrary shell edits.
-
Crew dispatch messages must include the exact role name so the handoff gate can identify the role.
Agents, runners and live progress
-
review-agentsships a discoverable skill; Codex dispatches the complete shipped specialist definition in the child brief. Markdown agent files are not registered Codex agent types, and prose tool limits are not runtime restrictions. -
Mindmap’s
--ai-client auto|claude|codexselects an implemented runner, preserving the original Claude CLI path. The Codex runner uses a read-only local sandbox and a final-message file; external MCP servers, plugins and apps are disabled, and a failed MCP configuration check stops it before any model request. -
Progress keeps its full tracker, history, notifications, browser and terminal watch. Only the status-line bar is Claude-specific.
Tests
-
make test-codex-adapters— shipped adapters, role packaging and the unchanged Claude paths, with no model calls. Runs in CI. -
make test-codex-runtime— the real Codex CLI blocking a malformed instruction patch through the shipped hook. -
make test-coach-codex— the real Codex CLI running the prompt hook against a local mock model, spending no tokens.
The last two need an installed Codex and skip cleanly without one.
Sources: Codex hooks and Codex subagents.
Verified behavior and remaining limits
| Surface | Evidence | Limit |
|---|---|---|
Instruction hooks |
Real Codex rejects a malformed patch; adapter regression covers a 751-file patch and nested overrides. |
Matches exposed tool paths, not arbitrary shell edits. |
Mindmap expansion |
Real Codex returns parsed ideas with both user and project MCP servers disabled; sentinel servers never start. |
Model/provider availability remains local configuration; inspection errors stop expansion. |
Agent workflows |
Complete shipped role definitions remain the dispatch source. |
Claude agent metadata is not registered as native Codex agent configuration; prompt restrictions are not runtime enforcement. |
Memory |
Codex index loading and format checks have adapter tests. |
Plugin-managed files, not Codex’s internal memory database. |
Progress |
Existing 123-check suite and Codex identity/nudge regressions pass. |
Live Codex bars use a companion terminal or browser, not Claude’s command status line. |
Installation |
All 22 generated manifests validate; each declares its skill directory. |
End-to-end marketplace installation and every client’s tool surface still need verification. |
What still needs verifying on the Codex side
The packaging mirrors a working example, but these are assumptions until a real Codex install confirms them:
-
Marketplace schema —
.agents/plugins/marketplace.jsonfield names and thepolicyblock are copied from a shipped plugin, not from a published spec. -
source.urlshape — ours points at./plugins/<name>(a multi-plugin repo); the reference example is a single-plugin repo pointing at./. -
Skill discovery — the manifests declare
"skills": "./skills/"; confirm Codex readsSKILL.mdfrontmatter the same way, especially the description field that drives triggering. -
references/loading — the tier-2 translation only helps if Codex follows a relative link out ofSKILL.mdon demand. -
Multi-agent tool names — these have shipped in more than one version; the translation files say so and tell the reader to trust their live tool list over any table.
-
Hook execution beyond the tested paths — the real Codex CLI is verified for the instruction-patch lint and the prompt hook. The remaining events (memory, progress, roles, crew gate) are covered by adapter contract tests only. Plugins without
hooks/codex.jsonkeephooks: {}to suppress automatic discovery.