affaan-m/ECC · error · Error
Non-interactive setup requires --yes.
Error message
Non-interactive setup requires --yes.
What it means
Thrown by setup.js in needsConfirmation flow when the run is non-interactive (no TTY) but --yes was not passed. A non-interactive run cannot answer the confirmation prompt, so setup aborts rather than guessing consent for a filesystem-mutating operation.
Source
Thrown at scripts/setup.js:448
}
if (interactiveDefaults) {
const confirmationAction = interactiveDefaults.multipleScopes
? 'Resume migration'
: (
interactiveDefaults.installed && interactiveDefaults.scope !== options.scope
? 'Migrate'
: 'Apply'
);
options = {
...options,
confirmationAction,
};
}
if (needsConfirmation) {
if (!interactive) {
throw new Error('Non-interactive setup requires --yes.');
}
if (!terminal) {
terminal = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
}
if (!await confirm(options, terminal)) {
printResult({
action: 'cancelled',
hooks: options.hooks || 'standard',
pluginId: 'ecc@ecc',
scope: options.scope || 'detected',
}, options.json);
return;
}
}
View on GitHub (pinned to 01e15490f0)
Solutions
- Add `--yes` to skip confirmation in non-interactive runs.
- Add `--dry-run` first to preview the planned changes.
- Provide a TTY if you genuinely want the interactive confirmation.
Example fix
# before node scripts/setup.js --mode claude-plugin --scope user --hooks standard # after node scripts/setup.js --mode claude-plugin --scope user --hooks standard --yes
Defensive patterns
Strategy: validation
Validate before calling
if (!process.stdin.isTTY && !process.argv.includes('--yes') && !process.argv.includes('--dry-run')) {
console.error('Non-interactive run requires --yes');
process.exit(2);
} Type guard
function isInteractive() { return Boolean(process.stdin.isTTY); } Try / catch
try { await confirm(options, terminal); } catch (err) { console.error(err.message); process.exit(2); } Prevention
- Always pass --yes (or --dry-run) in non-interactive automation.
- Run --dry-run first in CI to preview before the real mutation.
When it happens
Trigger: Running setup with all required flags in CI but forgetting --yes; piping input that makes stdin non-TTY; running under cron/systemd.
Common situations: Automated install pipelines; Docker build steps; any harness that does not allocate a terminal.
Related errors
- Interactive --json mutations require --yes.
- Interactive setup requires a terminal. Pass --mode claude-pl
- Interactive --json requires explicit --mode, --scope, and --
- The canonical ito-compute-cli is unpublished and ECC will no
- Missing value for ${argument}
AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13).
Data as JSON: /api/errors/fc44528b1f9a2ac1.
Report an issue: GitHub.