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
- Restart the claude-mem worker (or reboot the machine) so it reloads the sync settings.
- Recheck /api/sync/status after restart to confirm `configured: true`.
- 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
- Restart the claude-mem worker after changing sync settings.
- Don't run install while a stale worker from a previous session is still holding old config.
- Re-check /api/sync/status after restart to confirm configured:true.
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
- Port still bound entering restart fallback — verifying…
- Self-replacing worker handoff did not verify in time —…
- Cannot lazy-spawn worker: worker-service.cjs not found in…
- Claude CLI preflight failed
- [claude-mem] Worker GET
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)