affaan-m/ECC · error · Error
Codex ${versionMatch[1]} cannot guarantee tool-less review;
Error message
Codex ${versionMatch[1]} cannot guarantee tool-less review; required stable feature toggles unavailable: ${unavailable.join(', ')} What it means
Thrown by verifyToollessSupport() after parsing `codex features list` output. For each name in REQUIRED_TOOLLESS_FEATURES (apps, shell_tool, browser_use, unified_exec, etc.), the parsed stage must be 'stable'. Any feature that is missing from the output or staged as 'under development'/'experimental'/'deprecated'/'removed' is collected into `unavailable` and reported. This guarantees the tool-less review cannot accidentally enable a tool.
Source
Thrown at skills/council-multi-model/scripts/review-with-codex.js:163
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(
`Codex ${versionMatch[1]} cannot guarantee tool-less review; `
+ `required stable feature toggles unavailable: ${unavailable.join(', ')}`
);
}
return versionMatch[1];
}
function buildEnvironment(sourceEnv = process.env) {
const allowed = [
'PATH', 'HOME', 'USERPROFILE', 'CODEX_HOME',
'TMPDIR', 'TMP', 'TEMP', 'SystemRoot', 'ComSpec', 'PATHEXT',
];
return Object.fromEntries(
allowed.filter((name) => sourceEnv[name]).map((name) => [name, sourceEnv[name]])
);
}
function runReview(prompt, options, dependencies = {}) {View on GitHub (pinned to 01e15490f0)
Solutions
- Run `codex features list` by hand and check the stage column for each named feature.
- Reinstall the canonical Codex 0.146.0 build whose features are all stable.
- If a feature was legitimately renamed, update REQUIRED_TOOLLESS_FEATURES in the script to match and re-validate.
Example fix
// before Error: Codex 0.146.0 cannot guarantee tool-less review; required stable feature toggles unavailable: shell_tool, browser_use // after: reinstall the canonical build and re-check $ codex features list | grep -E 'shell_tool|browser_use' shell_tool stable true browser_use stable true
Defensive patterns
Strategy: validation
Validate before calling
function assertRequiredFeaturesStable(featuresText, required) {
const stages = new Map();
for (const line of (featuresText || '').split('\n')) {
const m = line.trim().match(/^(\S+)\s+(stable|under development|experimental|deprecated|removed)\s+(true|false)$/);
if (m) stages.set(m[1], m[2]);
}
const missing = required.filter(f => stages.get(f) !== 'stable');
if (missing.length) throw new Error(`required features not stable: ${missing.join(', ')}`);
} Type guard
function allRequiredFeaturesStable(featuresText, required) {
const stages = new Map();
for (const line of (featuresText || '').split('\n')) {
const m = line.trim().match(/^(\S+)\s+(stable|under development|experimental|deprecated|removed)\s+(true|false)$/);
if (m) stages.set(m[1], m[2]);
}
return required.every(f => stages.get(f) === 'stable');
} Try / catch
try {
verifyToollessSupport({ spawnSync });
} catch (error) {
if (/cannot guarantee tool-less review/.test(error.message)) {
// reinstall canonical codex build with stable toggles, then retry
} else {
throw error;
}
} Prevention
- Use the canonical Codex 0.146.0 build whose features are all stable.
- Do not run a patched/forked Codex for tool-less review unless its feature stages match.
- Re-validate the required-feature list whenever Codex is upgraded.
When it happens
Trigger: A Codex 0.146.0 build where one or more of the required feature toggles is not stable, e.g. shell_tool is 'experimental' or browser_use is missing from `codex features list`. The error names the offending features.
Common situations: A patched/forked Codex build with different feature stages; a nightly that reclassifies a feature; a feature renamed between builds so the regex no longer matches it (it then counts as unavailable).
Related errors
- Codex version could not be verified for tool-less review
- Codex CLI is not installed
- Codex ${label} probe failed${detail ? `: ${detail}` : ''}
- unsupported Codex version ${versionMatch[1]}; tool-less revi
- Codex review failed${detail ? `: ${detail}` : ''}
AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13).
Data as JSON: /api/errors/822c553ac3cea459.
Report an issue: GitHub.