thedotmack/claude-mem · error
Worker already running
Error message
Worker already running
What it means
Error "Worker already running" thrown in thedotmack/claude-mem.
Source
Thrown at src/supervisor/index.ts:41
class Supervisor {
private readonly registry: ProcessRegistry;
private started = false;
private stopPromise: Promise<void> | null = null;
private signalHandlersRegistered = false;
private shutdownInitiated = false;
private shutdownHandler: (() => Promise<void>) | null = null;
constructor(registry: ProcessRegistry) {
this.registry = registry;
}
async start(): Promise<void> {
if (this.started) return;
this.registry.initialize();
const pidStatus = validateWorkerPidFile({ logAlive: false });
if (pidStatus === 'alive') {
throw new Error('Worker already running');
}
this.started = true;
startHealthChecker();
}
configureSignalHandlers(shutdownHandler: () => Promise<void>): void {
this.shutdownHandler = shutdownHandler;
if (this.signalHandlersRegistered) return;
this.signalHandlersRegistered = true;
const handleSignal = async (signal: string): Promise<void> => {
if (this.shutdownInitiated) {
logger.warn('SYSTEM', `Received ${signal} but shutdown already in progress`);
return;
}View on GitHub (pinned to d768ba3643)
Solutions
- Stop the existing worker before starting a new one (`npx claude-mem stop` or `worker-service stop`), or use `restart`.
- Check for a stale PID file: if the recorded PID is dead, remove the stale pid file and start again.
When it happens
Trigger: Fires when starting the worker while a supervisor instance is already active: a second `claude-mem` start, a stale process from a previous terminal session, or a double-invoked installer/launcher. Defensive guard in src/supervisor/index.ts:41 prevents two supervisors from competing for the same SQLite database, worker port, and Chroma writer lock.
Common situations: See trigger scenarios.
AI-assisted analysis of thedotmack/claude-mem@d768ba3643 (2026-08-12).
Data as JSON: /api/errors/9cdb8695d8eaf87a.
Report an issue: GitHub.