thedotmack/claude-mem · info

No worries — finish anytime: npx claude-mem install

Error message

No worries — finish anytime: npx claude-mem install

What it means

During the poll loop that waits for the user to finish browser sign-up for the cmem Pro trial, the user cancelled (spinner cancelled or Ctrl-C byte seen on stdin). The spinner is cancelled with 'Stopped waiting for the browser steps.', this warning (TRIAL_FINISH_LATER_WARNING: 'No worries — finish anytime: npx claude-mem install') reassures the user, a 'trial_poll_timeout' event with outcome 'cancelled' is captured, and the flow returns null. Trial state ('link_sent') stays persisted so a future install resumes it.

Source

Thrown at src/npx-cli/commands/install.ts:1742

  // every other spinner in this file would not fire until much later
  // (observed empirically). Resume stdin for the duration of the poll so the
  // first Ctrl+C is delivered immediately — normally clack's raw-mode
  // keypress handler then exits cleanly (its standard spinner behavior); the
  // data listener below is the fallback that turns any press clack misses
  // into a graceful escape to the provider prompt. Restored in the finally.
  let ctrlCPressed = false;
  const onStdinData = (chunk: Buffer | string): void => {
    if (typeof chunk === 'string' ? chunk.includes('\x03') : chunk.includes(0x03)) {
      ctrlCPressed = true;
    }
  };
  process.stdin.on('data', onStdinData);
  process.stdin.resume();
  const wasCancelled = (): boolean => spin.isCancelled || ctrlCPressed;

  const bailCancelled = async (): Promise<null> => {
    if (!spin.isCancelled) spin.cancel('Stopped waiting for the browser steps.');
    log.warn(TRIAL_FINISH_LATER_WARNING);
    await captureCliEvent('trial_poll_timeout', {
      version,
      stage,
      outcome: 'cancelled',
      duration_ms: Date.now() - startedAt,
    });
    return null;
  };

  try {
    let consecutiveFailures = 0;
    while (Date.now() - startedAt < TRIAL_POLL_BUDGET_MS) {
      if (wasCancelled()) return bailCancelled();

      const result = await pollTrialOnce(pairing);
      // Re-check: Ctrl+C may have landed during the (up to 10s) poll request.
      if (wasCancelled()) return bailCancelled();

View on GitHub (pinned to e2d1df569a)

Solutions

  1. Finish anytime: rerun `npx claude-mem install` — it detects the stored email and offers to resend the sign-in link.
  2. If you clicked the link already in the browser, completing it activates Pro on the server side; rerun install to sync credentials.
  3. To opt out entirely, clear CLAUDE_MEM_PRO_TRIAL_* keys from ~/.claude-mem/settings.json.
Defensive patterns

Strategy: fallback

Prevention

When it happens

Trigger: User presses Ctrl-C or cancels the spinner while the installer polls cmem.ai for trial activation. The stdin listener flags 0x03 bytes because Ctrl-C may not raise SIGINT during prompt/TTY raw mode.

Common situations: User wants to finish the browser steps later; email link not arrived yet; user abandons install temporarily. The persisted CLAUDE_MEM_PRO_TRIAL_STATE='link_sent' makes the next install offer a resend (confirm prompt path).

Related errors


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