Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
778d77d
Add optional CODEX_REVIEW_GATE_MAX_ROUNDS cap to the stop review gate
dxcmb Jun 23, 2026
d71889c
docs: document CODEX_REVIEW_GATE_MAX_ROUNDS bound for the review gate
dxcmb Jun 23, 2026
508cb96
fix: thread approvalPolicy through runAppServerTurn so --write is hon…
mvanhorn Jul 4, 2026
6c724c2
Log reasoning item starts in background job logs
cubicj Jul 12, 2026
3ea322a
fix(app-server): accept MCP elicitation requests instead of rejecting…
dane-krambergar Jul 14, 2026
86b9a73
Capture resolved model, effort, and sandbox in job records
cubicj Jul 15, 2026
0e0cd92
fix: treat task --help and unknown flags as CLI errors (#539)
stantheman0128 Jul 23, 2026
aa70e6d
fix(rescue): await delegated Codex result
Aug 1, 2026
1485a5f
feat: accept max and ultra reasoning efforts
t-sato Aug 8, 2026
40bf9da
Fix duplicate SessionStart exports in CLAUDE_ENV_FILE
manavagarwal123 Aug 22, 2026
77d09cf
Handle repeated SessionStart environment updates
manavagarwal123 Aug 22, 2026
592b7ac
fix: allow session start hook more time to restore state
Hughhhhcoder Aug 23, 2026
d1be927
fix: block stop gate on malformed hook input
weivwang Aug 25, 2026
9da0b2c
fix: resolve model aliases on review and adversarial-review
drewyd Aug 26, 2026
ff27854
fix(commands): replace unsupported inline !` command syntax with expl…
Aug 26, 2026
fef2c6a
docs: v1.1.0 fork implementation plan
CBEPX Aug 27, 2026
65e9892
chore(test): hermetic test env; run CI on push
CBEPX Aug 27, 2026
4a8261a
Merge branch 'pr/616' into release/v1.1.0
CBEPX Aug 27, 2026
c11da3b
Merge branch 'pr/688' into release/v1.1.0
CBEPX Aug 27, 2026
71334b0
Merge branch 'pr/426' into release/v1.1.0
CBEPX Aug 27, 2026
9fc9925
Merge branch 'pr/501' into release/v1.1.0
CBEPX Aug 27, 2026
6946318
Merge branch 'pr/608' into release/v1.1.0
CBEPX Aug 27, 2026
57099e5
Merge branch 'pr/690' into release/v1.1.0
CBEPX Aug 27, 2026
aaf9d56
docs(plan): amendments after Codex adversarial review (Tasks 5-8, gat…
CBEPX Aug 27, 2026
c39ee80
docs(plan): tooling rule — ripgrep only, status-checked gates
CBEPX Aug 27, 2026
dcb9d41
docs(plan): remove remaining grep references
CBEPX Aug 27, 2026
1cbebfa
Merge branch 'pr/547' into release/v1.1.0
CBEPX Aug 27, 2026
6be183f
Merge branch 'pr/644' into release/v1.1.0
CBEPX Aug 27, 2026
1acb30c
Merge branch 'pr/645' into release/v1.1.0
CBEPX Aug 27, 2026
6ac6a62
Merge branch 'pr/672' into release/v1.1.0
CBEPX Aug 27, 2026
52aefc4
Merge branch 'pr/668' into release/v1.1.0
CBEPX Aug 27, 2026
7ebf5a3
Merge branch 'pr/682' into release/v1.1.0
CBEPX Aug 27, 2026
c01718d
Merge branch 'pr/396' into release/v1.1.0
CBEPX Aug 27, 2026
3237f2e
fix(stop-gate): keep script timeout below the Stop hook timeout
CBEPX Aug 27, 2026
265487e
docs(plan): Codex merge-review rulings — form elicitation decline, de…
CBEPX Aug 27, 2026
6763a62
feat: per-thread config overrides (--config), effort on reviews, gpt-…
CBEPX Aug 27, 2026
518c5fc
fix(app-server): decline form-mode MCP elicitations
CBEPX Aug 27, 2026
13a5532
feat(rescue): synchronous inline path (no Agent), visible failures, g…
CBEPX Aug 27, 2026
36fd3e3
fix(resume): cold-resume via direct app-server; never send model on t…
CBEPX Aug 27, 2026
ee2ad22
fix(rescue): carry job id literally, fail fast on launch errors, alig…
CBEPX Aug 27, 2026
73906e6
docs(plan): release notes reflect fix rounds
CBEPX Aug 27, 2026
c365e8f
chore(release): v1.1.0 — cbepx marketplace, changelog
CBEPX Aug 27, 2026
85e3248
fix(commands): pass arguments to the companion via quoted heredoc std…
CBEPX Aug 27, 2026
99c88ee
fix(app-server): answer approval requests with a denial instead of a …
CBEPX Aug 27, 2026
a3c8de0
fix(app-server): decline all MCP elicitations in the non-interactive …
CBEPX Aug 27, 2026
abb4855
fix(task): persist the job record before spawning the worker; keep --…
CBEPX Aug 27, 2026
e1c58b1
fix(rescue): confirm before resuming; refuse to resume a thread with …
CBEPX Aug 27, 2026
2e5cedd
chore(release): fork install docs, lockfile identity, changelog wording
CBEPX Aug 27, 2026
48ac93b
fix(rescue): keep request text byte-exact via --prompt-file; harden h…
CBEPX Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
{
"name": "openai-codex",
"name": "cbepx",
"owner": {
"name": "OpenAI"
"name": "CBEPX",
"url": "https://github.com/CBEPX"
},
"metadata": {
"description": "Codex plugins to use in Claude Code for delegation and code review.",
"version": "1.0.6"
"description": "CBEPX fork of the OpenAI Codex plugin for Claude Code: max/ultra effort, per-thread config overrides, gpt-5.6 aliases, rescue agent fixes.",
"version": "1.1.0"
},
"plugins": [
{
"name": "codex",
"description": "Use Codex from Claude Code to review code or delegate tasks.",
"version": "1.0.6",
"version": "1.1.0",
"author": {
"name": "OpenAI"
},
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/pull-request-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ name: Pull Request CI

on:
pull_request:
push:
branches: [main, "release/**"]

permissions:
contents: read
Expand Down
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Changelog

## 1.1.0 — 2026-08-27

Fork of [openai/codex-plugin-cc](https://github.com/openai/codex-plugin-cc) 1.0.6 (`db52e28`). Marketplace `cbepx`, plugin name unchanged (`codex`).

### Merged from upstream pull requests
- #616 accept `max` and `ultra` reasoning efforts
- #688 resolve model aliases on `review` / `adversarial-review`
- #426 `on-request` approval policy for `--write` task runs
- #501 answer MCP elicitation requests instead of rejecting them
- #608 rescue agent awaits the delegated result instead of returning a placeholder
- #690 explicit Bash blocks in `status`/`result`/`cancel`/`transfer` commands (pass permission classifiers)
- #547 unknown flags are CLI errors, never part of the prompt; `--help` prints usage and exits 0
- #645 / #644 job records store resolved model/effort/sandbox; reasoning start is logged
- #672 SessionStart hook timeout raised; #668 idempotent `CLAUDE_ENV_FILE` exports; #682 stop gate fails closed on malformed input; #396 `CODEX_REVIEW_GATE_MAX_ROUNDS`

### Fork changes
- Slash-command arguments reach the companion through a quoted heredoc on stdin (`--args-stdin`) instead of a shell string: Claude Code substitutes `$ARGUMENTS` before bash runs, so `$(...)`/backticks in a prompt used to execute on the host shell, outside Codex's sandbox. Rescue job ids are validated before use. `/codex:rescue` keeps the two channels separate — the request prose goes to `--prompt-file` through its own quoted heredoc so quotes, backslashes and newlines survive byte-exact, while `--args-stdin` carries only runtime flags — and randomizes both heredoc delimiters per call; the other seven command bodies keep the fixed `CODEX_ARGS` delimiter because their payload is only flags and job ids.
- Approval requests (`execCommandApproval`, `applyPatchApproval`, `item/commandExecution/requestApproval`, `item/fileChange/requestApproval`, `item/permissions/requestApproval`) are answered with each type's refusal variant instead of a `-32601` protocol error that made `--write` turns fail or hang.
- Background task records are written before the worker is spawned (a fast worker used to find no record and exit while the launch reported `queued`), and the worker reads the full request — including `--config` values — from a private one-shot `jobs/<id>.request.json` (mode 0600); the job record `status`/`result` echo keeps secret-looking config values redacted.
- Model and reasoning effort are sent per thread via `thread/start.config` (`model`, `review_model` for native review, `model_reasoning_effort`); generic `--config` pairs are applied first, dedicated flags override them; `--effort` now works on `review` and `adversarial-review`.
- Repeatable `--config key=value` on `task`, `review`, `adversarial-review` forwards any `config.toml` override to the thread (values are JSON-parsed; quote a literal string as `'"true"'`). Prompt-taking commands stop option parsing at the first positional, so prompt text like `ls -R` is never mis-parsed.
- `--resume-last` opens a fresh app-server session (cold resume) so `--config`, sandbox and approval policy take effect, and never sends `model` on `thread/resume` (it would drop the persisted model); the resumed turn's model/effort ride on `turn/start`.
- All MCP elicitations are declined (no operator is present); URL/form flows must be completed in an interactive Codex session.
- `/codex:rescue` is synchronous by default without the `Agent` tool: `task --background` → `status --wait` in ≤9-minute slices (job id carried literally between Bash calls) → `result`; launch failures stop immediately with visible stderr; `Agent` only for `--background`; `--write` is never added unless the user explicitly asked Codex to modify files.
- `/codex:rescue` asks before continuing an existing Codex thread (`Continue current Codex thread` / `Start a new Codex thread`) instead of resuming silently; its `allowed-tools` is now `Bash, AskUserQuestion, Agent` because the body is multi-command shell.
- A resume refuses to start a second turn on a thread that a queued or running job is still using, including a job from another Claude session.
- Model aliases: `sol`, `luna`, `terra`, `mini` (plus `spark`); rescue agent has no pinned `model:`; runtime skill mentions `$agent-compat:skill-router` for uncommon domains.
- Stop-gate script timeout (13 min) is below the hook timeout (15 min); `spawnSync` uses `SIGKILL` and a 16 MiB buffer.
- Hermetic test environment (`tests/test-env.mjs`); CI on push; `npm run build` type-checks the JSDoc.

## 1.0.6 and earlier
See upstream releases: https://github.com/openai/codex-plugin-cc/releases
21 changes: 18 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Codex plugin for Claude Code

> **CBEPX fork.** Install with `claude plugin marketplace add CBEPX/codex-plugin-cc` then `claude plugin install codex@cbepx`. Differences from upstream are listed in [CHANGELOG.md](CHANGELOG.md). Upstream: openai/codex-plugin-cc.

Use Codex from inside Claude Code for code reviews or to delegate tasks to Codex.

This plugin is for Claude Code users who want an easy way to start using Codex from the workflow
Expand All @@ -24,13 +26,13 @@ they already have.
Add the marketplace in Claude Code:

```bash
/plugin marketplace add openai/codex-plugin-cc
/plugin marketplace add CBEPX/codex-plugin-cc
```

Install the plugin:

```bash
/plugin install codex@openai-codex
/plugin install codex@cbepx
```

Reload plugins:
Expand Down Expand Up @@ -159,7 +161,9 @@ Ask Codex to redesign the database connection to be more resilient.
**Notes:**

- if you do not pass `--model` or `--effort`, Codex chooses its own defaults.
- if you say `spark`, the plugin maps that to `gpt-5.3-codex-spark`
- `--effort` accepts `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`, and `ultra`. Which of those a given model actually supports is decided by Codex, not by the plugin — run `codex debug models` to see the reasoning levels each model advertises.
- model aliases: `spark` -> `gpt-5.3-codex-spark`, `sol` -> `gpt-5.6-sol`, `luna` -> `gpt-5.6-luna`, `terra` -> `gpt-5.6-terra`, `mini` -> `gpt-5.4-mini`
- `--config key=value` (repeatable, also on `/codex:review` and `/codex:adversarial-review`) forwards a `config.toml` override to the Codex thread, e.g. `--config model_provider=ollama`. On `--resume-last` the plugin opens a fresh app-server session (cold resume) so `--config` overrides, sandbox and approval policy take effect; model and effort for the resumed turn are sent on the turn, never on the resume request.
- follow-up rescue requests can continue the latest Codex task in the repo

### `/codex:transfer`
Expand Down Expand Up @@ -236,6 +240,17 @@ When the review gate is enabled, the plugin uses a `Stop` hook to run a targeted
> [!WARNING]
> The review gate can create a long-running Claude/Codex loop and may drain usage limits quickly. Only enable it when you plan to actively monitor the session.

#### Bounding the review gate

By default the gate keeps blocking the stop until Codex is satisfied, which is what can create the loop above. Set `CODEX_REVIEW_GATE_MAX_ROUNDS` to cap how many consecutive gate rounds run in a single session before the stop is allowed through:

```bash
# allow at most 5 stop-gate review rounds per session, then let the stop proceed
export CODEX_REVIEW_GATE_MAX_ROUNDS=5
```

When unset or `0`, the gate is unbounded (the previous behavior). The count is per session, increments on each blocked round (tracked via `stop_hook_active`), and resets once a stop is allowed or a fresh user turn begins.

## Typical Flows

### Review Before Shipping
Expand Down
Loading