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

After configuring cloud sync, the installer queries the running worker's /api/sync/status endpoint. If the worker responds ok but reports configured:false, it means the worker hasn't yet reloaded the freshly written sync settings; the installer warns that it will pick them up on its next restart.

Solutions

  1. Restart the claude-mem worker (or reboot the machine) so it reloads the sync settings.
  2. Recheck /api/sync/status after restart to confirm `configured: true`.
  3. If it persists after restart, verify the sync settings keys were actually written to settings.json and re-run cloud sync setup.
Defensive patterns

Strategy: retry

Validate before calling

const sync = await fetch(`http://${host}:${port}/api/sync/status`, { signal: AbortSignal.timeout(3000) }).then(r => r.json()).catch(() => null);
if (sync?.configured === false) console.warn('Worker has stale sync config; restart it.');

Type guard

function isSyncStatus(v: unknown): v is { configured?: boolean } {
  return typeof v === 'object' && v !== null;
}

Try / catch

try {
  const res = await fetch(syncStatusUrl, { signal: AbortSignal.timeout(3000) });
  const sync = await res.json();
  if (sync.configured === false) console.warn('Worker will pick up sync settings on next restart.');
} catch {
  // informational only; worker may still be warming up
}

Prevention

When it happens

Trigger: GET http://<workerUrlHost>:<port>/api/sync/status succeeds and the JSON body has `configured === false` immediately after sync settings were written during install.

Common situations: Worker was already running before the settings were updated and caches config at startup; race between install writing settings and worker restart; long-lived worker process from a previous session.

Related errors


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

Appendix: source

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

          : `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 d8bc9755e7)