Keep Codex hooks manifest in plugin metadata

Prompt: Jesse questioned whether the PR should remove the hooks config from the Codex plugin manifest.

Runtime investigation showed Codex accepts a committed plugin manifest with hooks and installs the plugin successfully. Removing the field changes behavior: Codex falls back to the default hooks/hooks.json, which uses the non-Codex session-start hook and CLAUDE_PLUGIN_ROOT path, instead of hooks/hooks-codex.json and the session-start-codex script.

Changes: restore .codex-plugin/plugin.json hooks to ./hooks/hooks-codex.json and update the Codex marketplace manifest test to require that Codex-specific hook pointer instead of rejecting hooks.

Validation: bash tests/codex/test-marketplace-manifest.sh; scripts/lint-shell.sh tests/codex/test-marketplace-manifest.sh; bash tests/codex-plugin-sync/test-sync-to-codex-plugin.sh; bash tests/kimi/test-plugin-manifest.sh; bash tests/shell-lint/test-lint-shell.sh.
This commit is contained in:
Jesse Vincent
2026-06-22 11:14:09 -07:00
committed by Drew Ritter
parent a17aaaef3a
commit bfa3e4137a
2 changed files with 5 additions and 9 deletions

View File

@@ -21,6 +21,7 @@
"workflow"
],
"skills": "./skills/",
"hooks": "./hooks/hooks-codex.json",
"interface": {
"displayName": "Superpowers",
"shortDescription": "Planning, TDD, debugging, and delivery workflows for coding agents",

View File

@@ -51,16 +51,11 @@ if not plugin_manifest.exists():
manifest = json.loads(plugin_manifest.read_text(encoding="utf-8"))
assert_equal(manifest.get("name"), plugin.get("name"), "plugin manifest name")
unsupported_manifest_fields = ["hooks"]
present_unsupported = sorted(
field for field in unsupported_manifest_fields if field in manifest
assert_equal(
manifest.get("hooks"),
"./hooks/hooks-codex.json",
"Codex hooks manifest",
)
if present_unsupported:
raise AssertionError(
"unsupported Codex manifest fields present: "
+ ", ".join(present_unsupported)
)
print("Codex marketplace manifest looks good")
PY