openai/codex-plugin-cc · error · Error

`/codex:review` now maps directly to the built-in reviewer a

Error message

`/codex:review` now maps directly to the built-in reviewer and does not support custom focus text. Retry with `/codex:adversarial-review ${focusText.trim()}` for focused review instructions.

What it means

validateNativeReviewRequest is the validator for `/codex:review` (reviewName === 'Review'), which maps to the codex built-in reviewer (runAppServerReview). The built-in reviewer takes a structured target, not free text, so any non-empty focusText positional is rejected with a redirect to adversarial-review which does accept focus.

Source

Thrown at plugins/codex/scripts/codex-companion.mjs:273

    throw new Error("Codex CLI is not installed or is missing required runtime support. Install it with `npm install -g @openai/codex`, then rerun `/codex:setup`.");
  }
}

function buildNativeReviewTarget(target) {
  if (target.mode === "working-tree") {
    return { type: "uncommittedChanges" };
  }

  if (target.mode === "branch") {
    return { type: "baseBranch", branch: target.baseRef };
  }

  return null;
}

function validateNativeReviewRequest(target, focusText) {
  if (focusText.trim()) {
    throw new Error(
      `\`/codex:review\` now maps directly to the built-in reviewer and does not support custom focus text. Retry with \`/codex:adversarial-review ${focusText.trim()}\` for focused review instructions.`
    );
  }

  const nativeTarget = buildNativeReviewTarget(target);
  if (!nativeTarget) {
    throw new Error("This `/codex:review` target is not supported by the built-in reviewer. Retry with `/codex:adversarial-review` for custom targeting.");
  }

  return nativeTarget;
}

function renderStatusPayload(report, asJson) {
  return asJson ? report : renderStatusReport(report);
}

function isActiveJobStatus(status) {
  return status === "queued" || status === "running";

View on GitHub (pinned to db52e28f4d)

Solutions

  1. Use /codex:adversarial-review <focus text> when you need to inject custom focus instructions.
  2. Use /codex:review with no positional arguments for the standard built-in review.
  3. Update slash-command wrappers to stop appending focus text to review.

Example fix

// before
codex-companion.mjs review "focus on error handling"
// after
codex-companion.mjs adversarial-review "focus on error handling"
Defensive patterns

Strategy: validation

Validate before calling

if (reviewName === 'Review' && focusText.trim()) {
  throw new Error('review does not accept focus; use adversarial-review');
}

Prevention

When it happens

Trigger: Running `/codex:review check error handling` where the positional words become focusText. The user expected review to accept a focus string like the older API.

Common situations: Migration from an older companion where /codex:review accepted focus text; muscle memory from adversarial-review syntax.

Related errors


AI-assisted analysis of openai/codex-plugin-cc@db52e28f4d (2026-08-13). Data as JSON: /api/errors/b0b070152ebe838a. Report an issue: GitHub.