thedotmack/claude-mem · error

uv installation completed but binary not found. Please…

Error message

uv installation completed but binary not found. Please restart your terminal and try again.

What it means

Symmetric to the Bun check: after running the uv installer script, runUvInstaller re-checks isUvInstalled() and throws if the uv binary is still not found. It detects installer scripts that succeeded without putting uv on the current session's PATH.

Solutions

  1. Restart your terminal or source your profile so ~/.local/bin is on PATH, then re-run.
  2. Verify with 'which uv'; if missing, reinstall manually: curl -LsSf https://astral.sh/uv/install.sh | sh
  3. Add the uv install directory to PATH explicitly (e.g. export PATH="$HOME/.local/bin:$PATH").

Example fix

// before
$ claude-mem install   # throws: uv binary not found
// after
$ export PATH="$HOME/.local/bin:$PATH"
$ which uv   # then re-run installer
Defensive patterns

Strategy: fallback

Validate before calling

import { execSync } from 'child_process';
const uvOnPath = (): boolean => { try { execSync('uv --version', { stdio: 'ignore' }); return true; } catch { return false; } };
if (!uvOnPath()) console.warn('uv missing; ensure ~/.local/bin is on PATH');

Type guard

const hasUv = (p: string): boolean => existsSync(path.join(p, 'uv'));

Try / catch

try {
  await ensureUv();
} catch (e) {
  if (String(e).includes('binary not found')) {
    console.error('Add ~/.local/bin to PATH or install uv manually, then retry.');
  }
}

Prevention

When it happens

Trigger: runUvInstaller's install command exits 0 but the follow-up isUvInstalled() check still returns false.

Common situations: uv installed to ~/.local/bin which is not on PATH, shell profile not reloaded, or installer silently skipped on an unsupported platform.

Related errors


AI-assisted analysis of thedotmack/claude-mem@d8bc9755e7 (2026-09-17). Data as JSON: /api/errors/7c5e1525c1c42e9e. Report an issue: GitHub.

Appendix: source

Thrown at src/npx-cli/install/setup-runtime.ts:239

/** Run the platform-specific uv installer, then confirm the binary is resolvable. */
function runUvInstaller(): void {
  if (IS_WINDOWS) {
    execSync('powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"', {
      stdio: 'pipe',
      timeout: INSTALL_TIMEOUT_MS,
      shell: process.env.ComSpec ?? 'cmd.exe',
    });
  } else {
    execSync('curl -LsSf https://astral.sh/uv/install.sh | sh', {
      stdio: 'pipe',
      timeout: INSTALL_TIMEOUT_MS,
      shell: '/bin/bash',
    });
  }

  if (!isUvInstalled()) {
    throw new Error(
      'uv installation completed but binary not found. Please restart your terminal and try again.',
    );
  }
}

function installUv(): void {
  try {
    runUvInstaller();
  } catch (error) {
    const err = error instanceof Error ? error : new Error(String(error));
    const manualInstructions = IS_WINDOWS
      ? '  - winget install astral-sh.uv\n  - Or: powershell -c "irm https://astral.sh/uv/install.ps1 | iex"'
      : '  - curl -LsSf https://astral.sh/uv/install.sh | sh\n  - Or: brew install uv (macOS)';
    throw new Error(
      `Failed to install uv. Please install manually:\n${manualInstructions}\nThen restart your terminal and try again.\n` +
        `Underlying error: ${describeExecError(err)}`,
    );
  }

View on GitHub (pinned to d8bc9755e7)