thedotmack/claude-mem · warning
Skipping desktop app at "${candidate}" — it doesn't support
Error message
Skipping desktop app at "${candidate}" — it doesn't support headless mode. Install Claude Code CLI: npm install -g @anthropic-ai/claude-code What it means
A discovered candidate path that matches the Claude Desktop app bundle pattern (looksLikeDesktopAppPath) is skipped because the desktop app binary does not support the headless/print mode claude-mem needs. The warning directs the user to install the Claude Code CLI instead.
Source
Thrown at src/shared/find-claude-executable.ts:352
const candidate = candidates[order];
const probe = probeCandidate(candidate);
if (probe.kind === 'capable') {
capable.push({ path: candidate, version: probe.version, key: parseVersionKey(probe.version), order });
continue;
}
if (probe.kind === 'incompatible') {
incompatible.push({ path: candidate, version: probe.version, detail: probe.detail });
logger.warn(
logComponent,
`Skipping "${candidate}" (${probe.version}) — too old for claude-mem: ${probe.detail}`
);
continue;
}
if (looksLikeDesktopAppPath(candidate)) {
logger.warn(
logComponent,
`Skipping desktop app at "${candidate}" — it doesn't support headless mode. ` +
`Install Claude Code CLI: npm install -g @anthropic-ai/claude-code`
);
} else {
logger.warn(logComponent, `Skipping "${candidate}" — failed --version check (${probe.detail})`);
}
}
if (capable.length > 0) {
capable.sort((a, b) => compareVersionKeysDesc(a.key, b.key) || a.order - b.order);
const winner = capable[0];
// INFO, not DEBUG: when observations silently stop, which binary the
// worker picked is the first question — make it answerable from default logs.
logger.info(logComponent, `Using Claude CLI v${winner.version} at ${winner.path}`, {
candidatesProbed: candidates.length,
skippedTooOld: incompatible.length,
});View on GitHub (pinned to e2d1df569a)
Solutions
- Install the CLI: npm install -g @anthropic-ai/claude-code.
- Ensure the CLI's bin directory precedes any Claude.app path on PATH.
- Verify `claude --version` in a shell resolves to the CLI binary, not the app bundle.
Defensive patterns
Strategy: validation
Validate before calling
if (looksLikeDesktopAppPath(candidate)) {
// desktop app cannot run headless — require the CLI instead
continue;
} Type guard
const isDesktopAppPath = (p: string): boolean => p.includes('Claude.app/'); Prevention
- Install the Claude Code CLI (npm install -g @anthropic-ai/claude-code) even if you mainly use Desktop.
- Never add the Claude.app Contents/MacOS directory to PATH.
- Verify `claude --version` resolves to the CLI before enabling claude-mem.
When it happens
Trigger: A path like .../Claude.app/Contents/MacOS/... appears in the candidate list (usually because the .app binary directory leaked onto PATH or shell-history discovery picked it up) and its probe failed.
Common situations: Claude Desktop installed but CLI never installed; users adding the app's MacOS dir to PATH manually; shell integrations indexing app bundles.
Related errors
- Found desktop app at "${settings.CLAUDE_CODE_PATH}" but it d
- Skipping "${candidate}" (${probe.version}) — too old for cla
- Skipping "${candidate}" — failed --version check (${probe.de
- Generator paused for ${abortCategory}; preserving buffered w
- Transcript path missing or file does not exist: ${transcript
AI-assisted analysis of thedotmack/claude-mem@e2d1df569a (2026-08-20).
Data as JSON: /api/errors/73f0254776e2d32f.
Report an issue: GitHub.