thedotmack/claude-mem · info

Cloud sync: worker has not picked up the sync settings yet —

Error message

Cloud sync: worker has not picked up the sync settings yet — it will on its next restart.

What it means

Purely informational post-install probe: when `trialActivated && workerReady`, the installer makes one GET to the local worker's `/api/sync/status` (3s timeout). A 200 with `configured === false` means the worker booted before the just-written cloud-sync settings landed, so it warns that sync activates on the worker's next restart. Fetch errors are deliberately swallowed (fail-soft).

Source

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

          : `Worker reachable but not ready on port ${workerPort}`,
      );
    } catch {
      healthSpinner?.stop(`Worker not yet responding on port ${workerPort} (still starting)`);
    }

    // A sign-in just wrote cloud-sync settings the worker booted with, so
    // one cheap read of /api/sync/status confirms sync is really configured.
    // Purely informational and fail-soft — a warming worker legitimately
    // can't answer yet, and the state is always visible via the cloud-sync skill.
    if (cloudSyncConfigured && workerReady) {
      try {
        const syncResponse = await fetch(`http://${workerUrlHost}:${actualPort}/api/sync/status`, {
          signal: AbortSignal.timeout(3000),
        });
        if (syncResponse.ok) {
          const sync = await syncResponse.json() as { configured?: boolean };
          if (sync && sync.configured === false) {
            log.warn('Cloud sync: worker has not picked up the sync settings yet — it will on its next restart.');
          } else {
            log.success('Cloud sync: configured — the worker is reporting sync status.');
          }
        }
      } catch {
        // [ANTI-PATTERN IGNORED]: this read-through is purely informational; a worker still warming up legitimately can't answer, and sync state stays visible via the cloud-sync skill.
      }
    }
  }

  const finalWorkerState = workerStartResult as WorkerStartResult;
  const workerAlive = finalWorkerState !== 'dead' || workerReady;
  const runtimeLabel = selectedRuntime === 'server' ? 'Server' : 'Worker';
  const runtimeStartCommand = selectedRuntime === 'server' ? 'npx claude-mem server start' : 'npx claude-mem start';
  const workerBaseUrl = `http://${workerUrlHost}:${actualPort}`;
  const configuredWorkerBaseUrl = `http://${workerUrlHost}:${workerPort}`;
  const workerHeadline = autoStartSkipped
    ? `${styleText('yellow', '!')} ${runtimeLabel} autostart skipped — start it manually with ${styleText('bold', runtimeStartCommand)}`

View on GitHub (pinned to 8bc631a71a)

Solutions

  1. Restart the worker (or start a new session) so it reloads the sync settings, then re-check.
  2. Verify via the cloud-sync skill or GET /api/sync/status that configured becomes true.
  3. If still false after a restart, re-save the cloud-sync settings and restart once more.
Defensive patterns

Strategy: validation

Validate before calling

async function syncConfigured(port: number): Promise<boolean | null> {
  try {
    const res = await fetch(`http://127.0.0.1:${port}/api/sync/status`, { signal: AbortSignal.timeout(3000) });
    if (!res.ok) return null;
    const body = await res.json() as { configured?: boolean };
    return body.configured === true;
  } catch {
    return null; // worker still warming up
  }
}

Prevention

When it happens

Trigger: Trial install just wrote cloud-sync settings, the worker is up, but it answers `{ configured: false }` because it booted from the pre-settings state.

Common situations: Race between the settings write and worker boot on fresh trial installs; a worker restarted from an older config snapshot.

Related errors


AI-assisted analysis of thedotmack/claude-mem@8bc631a71a (2026-08-20). Data as JSON: /api/errors/41cdd0dd519b7c76. Report an issue: GitHub.