The Codex plugin lives at plugins/cc-plugin-codex and delegates to the Claude Code CLI.
.agents/plugins/marketplace.json: Codex marketplace entry.plugins/cc-plugin-codex/.codex-plugin/plugin.json: plugin manifest.plugins/cc-plugin-codex/skills/: user-facing and internal skills.plugins/cc-plugin-codex/scripts/claude-companion.mjs: command dispatcher.plugins/cc-plugin-codex/scripts/lib/: Claude driver, job state, rendering, and git review context.tests/: Node test suite for the surviving plugin.
npm ci
npm run check-version
npm testCI also installs the marketplace and plugin with an isolated CODEX_HOME.
Verify plugin/CLI behavior empirically (--help, live runs) against the installed codex and
claude versions — don't guess from docs or memory. Platform details change quickly.
- Manifest:
.codex-plugin/plugin.json; when present, the hooks field points at the hooks.json file (./hooks/hooks.json), not a directory — directory ref silently fails to load. Current Codex also supports defaulthooks/hooks.jsondiscovery, but this plugin retains the explicit known-good path. - Hook env vars include
PLUGIN_ROOT/PLUGIN_DATAand compatibility aliasesCLAUDE_PLUGIN_ROOT/CLAUDE_PLUGIN_DATA. - No command namespacing: a
commandsmanifest field is ignored. Real routing isskills/<name>/SKILL.md; users explicitly invoke skills with$skill-nameor select them through/skills. - Codex
Stophooks can continue the loop with{ "decision": "block", "reason": "..." }or exit code 2. This plugin's current stop-review hook deliberately remains advisory and exits 0. - Non-managed hooks require review and persisted trust. For vetted automation,
--dangerously-bypass-hook-trustbypasses that trust check for one invocation. - Codex prefers the repo marketplace at
.agents/plugins/marketplace.json. Install this plugin from the repo root withcodex plugin marketplace add .. Public distribution targets OpenAI's universal Plugins Directory using the.codex-plugin/plugin.jsonmanifest.
-p --output-format stream-jsonrequires--verboseor errors outright.--bgis mutually exclusive with-p(separate code path);--bgprompt can be piped via stdin.claude agents --jsonlists background sessions — records have both a shortidand a full-UUIDsessionId(the short id is a prefix); don't conflate them when matching.- Claude's on-demand background supervisor exposes
agents,attach,logs,stop, anddaemon. This plugin currently integratesagentsandstop; stored background results still point users to the Claude session instead of importing terminal logs. claude auth status --jsonexits 0 when authenticated and nonzero when not.claude --effort low|medium|high|xhigh|maxis real and independent of--model.
- Do not pass Claude arguments through
cmd.exe. The driver resolves the native executable or npm entrypoint and keepsshell:false. - Route multi-line prompts via stdin on Windows.