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

  1. Install the CLI: npm install -g @anthropic-ai/claude-code.
  2. Ensure the CLI's bin directory precedes any Claude.app path on PATH.
  3. 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

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


AI-assisted analysis of thedotmack/claude-mem@e2d1df569a (2026-08-20). Data as JSON: /api/errors/73f0254776e2d32f. Report an issue: GitHub.