thedotmack/claude-mem · critical · InstallAbortError
failed during
Error message
${ctx.component} failed during ${ctx.phase}: ${causeMessage(ctx.cause)} What it means
installerError is the central error dispatcher of the installer: it computes a category, remediation, and severity for a failed component, and when severity is ABORT it writes a last-install-error record and throws InstallAbortError with '<component> failed during <phase>: <cause>'. This means a phase of installation failed hard enough that the install cannot continue.
Solutions
- Read the full error: the component, phase, and cause message identify exactly which step failed.
- Check the last-install-error record written to the data dir (~/.claude-mem) for remediation steps.
- Fix the underlying cause (network, permissions, config) and re-run the install.
- Follow the remediation hint included in the error/report, which is computed per category and platform.
Example fix
// before npx claude-mem install # fails: 'marketplace failed during npm-install: ENOSPC' // after df -h # free disk space, then re-run the installer
Defensive patterns
Strategy: try-catch
Validate before calling
const lastError = readLastInstallError(dataDir);
if (lastError) console.log('Previous install failed:', lastError.category, lastError.remediation); Type guard
const isInstallAbort = (e: unknown): e is InstallAbortError => e instanceof InstallAbortError && typeof e.remediation === 'string';
Try / catch
try {
await runInstall();
} catch (e) {
if (e instanceof InstallAbortError) {
console.error(`${e.category.label}: ${e.message}\nFix: ${e.remediation}`);
process.exitCode = 1;
} else throw e;
} Prevention
- Run the installer with a stable network and sufficient disk space.
- Ensure no claude-mem worker is running before installing (requireWorkerStopped).
- Set provider credentials before non-interactive installs.
- Read the remediation hint in the error output before retrying blindly.
When it happens
Trigger: Any installer phase recording a failure via recordFailure or a step like setupIDEs, runNpmInstallInMarketplace, requireWorkerStopped, or validateNonInteractiveProvider escalating to ABORT severity through installerError.
Common situations: npm/marketplace install failures, IDE setup errors, a worker still running when it must be stopped, or missing non-interactive provider config — each surfaced as a single wrapped abort.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- Backfill failed
- Claude Code is not installed. Claude-mem works best in…
- Codex marketplace is already registered from another…
- Corrupt hooks.json at
- Could not auto-apply PATH setup
AI-assisted analysis of thedotmack/claude-mem@d8bc9755e7 (2026-09-17).
Data as JSON: /api/errors/7dd623bb5d9fffd5.
Report an issue: GitHub.
Appendix: source
Thrown at src/npx-cli/install/error-reporter.ts:123
* The single decision point. ABORT throws InstallAbortError (the top-level
* handler prints + exits 1). Every other severity records to the summary and
* returns.
*/
export function installerError(
severity: ErrorSeverity,
ctx: ErrorContext,
summary: InstallSummary,
): void {
const dataDir = resolveDataDir();
const category = classifyError(ctx.cause, { component: ctx.component, phase: ctx.phase });
const remediation =
ctx.remediation ??
category.remediation({ platform: process.platform, dataDir });
switch (severity) {
case ErrorSeverity.ABORT: {
writeLastInstallError(category, ctx, remediation, dataDir);
throw new InstallAbortError(
`${ctx.component} failed during ${ctx.phase}: ${causeMessage(ctx.cause)}`,
{ category, remediation, cause: ctx.cause },
);
}
case ErrorSeverity.FAIL_LOUD_PER_IDE: {
const ide = ctx.ide ?? ctx.component;
if (!summary.failedIDEs.includes(ide)) summary.failedIDEs.push(ide);
summary.warnings.push({
component: ide,
message: ctx.details ? `${causeMessage(ctx.cause)}\n${ctx.details}` : causeMessage(ctx.cause),
remediation,
});
return;
}
case ErrorSeverity.WARN_CONTINUE: {
summary.warnings.push({
component: ctx.component,
message: causeMessage(ctx.cause),View on GitHub (pinned to d8bc9755e7)