upstash/context7 · info
Installation cancelled
Error message
Installation cancelled
What it means
A warning logged when the interactive multi-select prompt inside `skill install` throws (typically because the user pressed Ctrl+C / Esc to abort the prompt). The command catches the exception, logs 'Installation cancelled', and returns early without installing anything.
Solutions
- Re-run the command and complete the selection prompt to proceed with installation
- Run in an interactive TTY-enabled terminal; prompts cannot run in non-interactive shells
- Pass flags that skip the interactive prompt if available (e.g. --all or an explicit skill list)
- No harm was done: nothing was installed, so simply retry when ready
Example fix
// before (non-interactive CI fails at prompt) opencode skill install org/skills // after opencode skill install org/skills --all # or run locally in an interactive terminal
Defensive patterns
Strategy: try-catch
Validate before calling
if (!process.stdin.isTTY) {
console.error('Interactive prompt requires a TTY; use explicit flags instead.');
process.exit(1);
} Try / catch
try {
selectedSkills = await prompt(...);
} catch {
console.warn('Installation cancelled');
return;
} Prevention
- Do not press Ctrl+C/Esc unless you intend to cancel
- Run the CLI in an interactive terminal
- Use non-interactive flags (e.g. --all) in scripts/CI
When it happens
Trigger: User aborts the interactive skill-selection prompt during `opencode skill install` (Ctrl+C or Esc), causing the prompt library to throw, which the `catch` block converts into this warning.
Common situations: User changes their mind mid-prompt; non-interactive CI terminal where prompts cannot render and abort immediately; terminal without TTY support interrupting the prompt library.
Related errors
AI-assisted analysis of upstash/context7@4416fb855b (2026-09-16).
Data as JSON: /api/errors/3543dba3cb705147.
Report an issue: GitHub.
Appendix: source
Thrown at packages/cli/src/commands/skill.ts:386
headerPad + pc.dim("Popularity".padEnd(popularityColWidth)) + pc.dim("Trust");
try {
selectedSkills = await checkboxWithHover({
message: `Select skills to install:\n${headerLine}`,
choices,
pageSize: 15,
loop: false,
theme: {
style: {
message: (text: string, status: string) => {
if (status === "done") return pc.dim(text.split("\n")[0]);
return pc.bold(text);
},
},
},
});
} catch {
log.warn("Installation cancelled");
return;
}
}
}
if (selectedSkills.length === 0) {
log.warn("No skills selected");
return;
}
const targets = await promptForInstallTargets(options);
if (!targets) {
log.warn("Installation cancelled");
return;
}
const targetDirs = getTargetDirs(targets);
View on GitHub (pinned to 4416fb855b)