When the codex-reviewer and ralph-reviewed Stop hooks invoke
`codex exec`, they pass `-o <outputFile>` so the verdict can be parsed
back from a known path, then append the user's `extra_args`. Two latent
bugs surfaced after the docs commit started promoting the shared
~/.claude/codex.json knobs to standalone users:
1. The previous filter dropped `-o` / `--output*` tokens individually
but not the value that followed a bare flag. With
extra_args: ["-o", "/tmp/other"], the filter left "/tmp/other" as a
stray positional that Codex treated as an extra prompt argument.
The new index-walk filter consumes both halves of paired flags
(-o, --output, --output-last-message) and drops the inline
--flag=value variants. Applied to both hooks.
2. ralph-reviewed honored `timeout_seconds` raw. A configured value at
or above the 1800s Stop hook timeout let Claude kill the hook
before it could parse Codex's output and surface a verdict. Now
clamped to [60, 1680] (matching the existing codex-reviewer
clamp), leaving a 120s buffer below the hook ceiling.
Bumps ralph-reviewed to 3.0.2 and codex-reviewer to 1.6.10 in
lockstep across each plugin.json and the root marketplace.json. The
ralph-reviewed troubleshooting README is updated to describe the new
clamp range rather than telling users to "increase to 1800".
Claude Code now auto-loads hooks/hooks.json from plugin directories,
so explicit declaration causes duplicate loading. Also adds enabledPlugins
to settings template.
- ralph-reviewed: 1.8.7 → 1.8.8
- codex-reviewer: 1.6.8 → 1.6.9
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Claude Code auto-loads hooks/hooks.json by convention. Inline hooks
in plugin.json were not being loaded, causing Stop hooks to never
trigger.
- codex-reviewer: 1.6.5 → 1.6.6
- ralph-reviewed: 1.8.4 → 1.8.5
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When codex-reviewer has no active review gate, it was outputting
{"decision": "approve"} which could override other plugin hooks'
block decisions. Now it exits silently (no output) to let other
hooks like ralph-reviewed make the decision.
Also bumps versions: codex-reviewer to 1.6.5, ralph-reviewed to 1.8.4
Both codex-reviewer and ralph-reviewed plugins were missing the
"commands" field, preventing their slash commands from appearing
in the /plugin:command format.
- Remove clipboard copy from handoff/ralphoff (hooks automate prompt passing)
- Add MANDATORY step markers with CRITICAL warnings for continuation
- Fix stop-hook to find state files in submodules by walking git hierarchy
- Check ACTIVE status when walking ancestors (inactive files don't mask parents)
- Update Step 0 to detect active gates in any ancestor repo
- Add head/grep to allowed-tools for verification commands
Fixes issue where Claude stops after first skill invocation in composite
commands like /ralph and /codex-reviewer:review.
Align all default values with the new 10-cycle default set in the
codex-reviewer command. Updates struct defaults, test assertions,
documentation examples, and fallback values.
Add support for customizing max review cycles via command argument:
- `/codex-reviewer:review "focus" --max-cycles N`
- Defaults to 5 if not specified
- Matches ralph-loop argument style (description first, flags after)
Also fixes null task_description handling in stop-hook parser.
- Hook now reads from handoff_path at review time (latest content)
- Falls back to embedded task_description for backwards compatibility
- State file stores handoff path instead of full content
- Claude can update handoff between review cycles without touching state
- Added ALLOWED/FORBIDDEN sections clarifying what Claude can modify
When Codex approves, stop hooks now output a systemMessage that Claude
Code displays to the user. This provides visibility into what happened
(approval status, reviewer notes, iteration counts) instead of silent exit.
Changes:
- codex-reviewer: Show approval summary with review cycle and files
- ralph-reviewed: Show status for APPROVE, BLOCKED, max iterations,
and max review cycles scenarios
- Added JSDoc with reference to official hooks documentation
- Bumped plugin versions (codex-reviewer 1.4.0, ralph-reviewed 1.6.0)
- Add Step 0 guard in review.md to check for existing active gate
- If gate already active, tell Claude to just exit instead of recreating
- Update stop-hook feedback to explicitly warn against calling skill again
- Bump version to 1.3.0
The review command now invokes /handoff before creating the state file,
giving Codex rich context about the work instead of a basic summary.
Changes:
- Restructure review.md into 3 steps: generate handoff, create state, exit
- Add YAML frontmatter with description and allowed-tools
- State file task_description now contains full handoff with XML sections:
<role>, <context>, <current_state>, <key_files>, <next_steps>
- Bump version to 1.2.0
Before: task_description was "Updated file X to do Y"
After: task_description includes reviewer framing, approach context,
what was done, key files with descriptions, verification steps
Implement Codex-powered review gate plugin with fail-closed behavior:
- Stop hook with 1800s timeout to bypass Bash tool limits
- Strict gate: all errors block, requires explicit /cancel to escape
- Timeout clamping to [60s, 1680s] for safe hook execution
- State persistence before max-cycle check
- Execution error handling (spawn, signal, non-zero exit)
- Review history tracking with issue IDs across cycles
- Commands: review (start gate), cancel (escape gate)
Config stored at ~/.claude/codex/config.json separate from other tools.