affaan-m/ECC · error · Error

unsupported Codex version ${versionMatch[1]}; tool-less revi

Error message

unsupported Codex version ${versionMatch[1]}; tool-less review requires exactly ${SUPPORTED_CODEX_VERSION}

What it means

Thrown by verifyToollessSupport() when the Codex version was parsed successfully but does not equal SUPPORTED_CODEX_VERSION (currently '0.146.0'). The review script pins an exact version because the tool-less safety contract depends on specific feature toggles and CLI behavior; even a minor version drift is treated as unsupported until verified. Both the detected and required versions are printed.

Source

Thrown at skills/council-multi-model/scripts/review-with-codex.js:145

}

function verifyToollessSupport(dependencies = {}) {
  const spawn = dependencies.spawnSync || spawnSync;
  const options = {
    cwd: os.tmpdir(),
    env: buildEnvironment(dependencies.env || process.env),
    encoding: 'utf8',
    timeout: 5_000,
    maxBuffer: 256 * 1024,
    windowsHide: true,
  };
  const versionText = probeCodex(spawn, ['--version'], options, 'version');
  const versionMatch = versionText.match(/^codex-cli\s+([^\s]+)$/m);
  if (!versionMatch) {
    throw new Error('Codex version could not be verified for tool-less review');
  }
  if (versionMatch[1] !== SUPPORTED_CODEX_VERSION) {
    throw new Error(
      `unsupported Codex version ${versionMatch[1]}; `
      + `tool-less review requires exactly ${SUPPORTED_CODEX_VERSION}`
    );
  }

  const featuresText = probeCodex(spawn, ['features', 'list'], options, 'feature');
  const stages = new Map();
  for (const line of featuresText.split('\n')) {
    const match = line.trim().match(
      /^(\S+)\s+(stable|under development|experimental|deprecated|removed)\s+(true|false)$/
    );
    if (match) stages.set(match[1], match[2]);
  }
  const unavailable = REQUIRED_TOOLLESS_FEATURES.filter(
    (feature) => stages.get(feature) !== 'stable'
  );
  if (unavailable.length > 0) {
    throw new Error(

View on GitHub (pinned to 01e15490f0)

Solutions

  1. Install exactly the pinned version: `codex-cli 0.146.0` (use the project's documented install/pin step).
  2. If you intentionally upgraded, update SUPPORTED_CODEX_VERSION in the script after re-validating the feature set.
  3. Pin Codex in CI (e.g. a specific npm/brew version) so it does not drift.

Example fix

// before: installed 0.147.0
Error: unsupported Codex version 0.147.0; tool-less review requires exactly 0.146.0

// after
$ npm install -g @openai/codex@0.146.0
$ codex --version
codex-cli 0.146.0
Defensive patterns

Strategy: validation

Validate before calling

const SUPPORTED_CODEX_VERSION = '0.146.0';
function assertSupportedVersion(detected) {
  if (detected !== SUPPORTED_CODEX_VERSION) {
    throw new Error(`unsupported Codex version ${detected}; requires exactly ${SUPPORTED_CODEX_VERSION}`);
  }
  return detected;
}

Type guard

function isSupportedCodexVersion(detected, supported) {
  return typeof detected === 'string' && detected === (supported || '0.146.0');
}

Try / catch

try {
  verifyToollessSupport({ spawnSync });
} catch (error) {
  if (/^unsupported Codex version/.test(error.message)) {
    // install the pinned version, then retry
  } else {
    throw error;
  }
}

Prevention

When it happens

Trigger: Having any Codex version other than 0.146.0 installed, e.g. 0.145.0, 0.147.0, or a newer release. The check is exact-equality, not a range.

Common situations: Auto-updated Codex CLI that moved past the pinned version; a team member on a different version; an older CI image with a stale Codex; downgrading/upgrade mid-stream.

Related errors


AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13). Data as JSON: /api/errors/2ef7d7c55c3fe985. Report an issue: GitHub.