Plugin hooks.json files use a top-level `description` key that breaks Codex hook loading

Resolved 💬 1 comment Opened Jun 28, 2026 by rajitsaha Closed Jun 28, 2026

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.json
  • plugins/ralph-wiggum/hooks/hooks.json
  • plugins/security-guidance/hooks/hooks.json

(each has top-level keys ["description", "hooks"])

Fix options

  1. Remove the top-level description from each hooks/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.
  2. Ship a Codex-specific hooks/hooks-codex.json (the portable-hooks pattern already used by the superpowers plugin) that omits description, leaving hooks.json unchanged 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 in anthropics/claude-plugins-official and have the same top-level description; the fix should be applied there too.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗