Plugin hooks.json files use a top-level `description` key that breaks Codex hook loading
Summary
Several plugins ship a hooks/hooks.json with a top-level "description" key:
{
"description": "...",
"hooks": { ... }
}
Claude Code ignores unknown top-level keys, so this works fine there. But OpenAI Codex's plugin hook parser is strict and rejects the entire file:
⚠ failed to parse plugin hooks config .../hooks/hooks.json:
unknown field `description`, expected `hooks` at line 2 column 15
As a result, these plugins' hooks silently fail to load under Codex.
Affected files in this repo
plugins/hookify/hooks/hooks.jsonplugins/ralph-wiggum/hooks/hooks.jsonplugins/security-guidance/hooks/hooks.json
(each has top-level keys ["description", "hooks"])
Fix options
- Remove the top-level
descriptionfrom eachhooks/hooks.json. It is not part of the hooks schema and is ignored by Claude Code, so removing it is behavior-neutral for Claude Code and fixes Codex. - Ship a Codex-specific
hooks/hooks-codex.json(the portable-hooks pattern already used by thesuperpowersplugin) that omitsdescription, leavinghooks.jsonunchanged for Claude Code.
Option 1 is simplest if the description isn't needed; option 2 preserves the documentation for Claude Code while keeping Codex happy.
Related
The root cause is also tracked upstream as a Codex parser-strictness bug (openai/codex#30397) — ideally Codex tolerates unknown top-level keys. This issue covers the plugin-side fix so the hooks load on current Codex without waiting on that change.
Note: the same plugins exist inanthropics/claude-plugins-officialand have the same top-leveldescription; the fix should be applied there too.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗