Codex support, from the same set of files.
SubagentStarthook for Codex, inside the samehooks/briefing-preload
script: it branches onhook_event_name, so the Claude Code path is
untouched.- Codex agents declare skills in a
[briefing]table in
.codex/agents/<name>.toml. Codex's own[[skills.config]]is deliberately
not read — it means "visible to the agent", not "preloaded". - Skills resolve against the roots Codex itself searches (
.agents/skillsin
project, parent and repo root, then~/.agents/skills,~/.codex/skills,
/etc/codex/skills).plugin:skillworks there too — Codex uses the same
syntax, undocumented but observable. - Injection goes through
additionalContext, withadditionalContextLimit: 0
inhooks.json. At the default threshold Codex replaces large skill bodies
with a preview and briefs nobody, silently. - A
SubagentStarthook cannot deny a spawn, so a missing skill yields an abort
instruction to the agent plus asystemMessageto the user — and none of the
skills that did resolve. No partial briefings. .codex-plugin/plugin.jsonpoints at the sameskills/andhooks/
directories. Nothing is duplicated; onehooks.jsonserves both harnesses,
verified against Claude Code rather than assumed.- TOML parsing uses
tomllibwhere available and a regex fallback on Python
3.10, which CI still covers. A test forces the fallback path explicitly. - 11 new unit tests for the Codex path, plus end-to-end verification against
Codex 0.147.0: a declaring agent answered from injected skill content, the
identical non-declaring agent did not, and a marker confirmedSubagentStart
reached the hook in both runs.