Before diving into specific issues, run these checks to get an overview of system health:
# Check if the worker is runningnpm run worker:status# Test worker health endpointcurl http://localhost:37777/health# View recent logsnpm run worker:logs# Check database integritysqlite3 ~/.claude-mem/claude-mem.db "PRAGMA integrity_check;"
You can also describe your issue to Claude in a session — the built-in troubleshoot skill will automatically activate, run diagnostics, and suggest fixes.
Symptoms: Observations are saved but no summaries appear, even after the worker has been running for several minutes.After a worker crash or forced shutdown, messages may remain stuck in the processing state. Automatic recovery is intentionally disabled — you must trigger it manually.
# Check queue and prompt to recovernpm run queue# Auto-process without promptingnpm run queue:process# Process up to 5 sessions at a timebun scripts/check-pending-queue.ts --process --limit 5
Example output:
Worker is healthy ✓Queue Summary: Pending: 12 messages Processing: 2 messages (1 stuck) Failed: 0 messagesSessions with pending work: 3 Session 44: 5 pending, 1 processing (age: 2m) Session 45: 4 pending, 1 processing (age: 7m - STUCK) Session 46: 2 pendingWould you like to process these pending queues? (y/n)
sqlite3 ~/.claude-mem/claude-mem.db " SELECT id, session_db_id, status, retry_count, (strftime('%s', 'now') * 1000 - started_processing_at_epoch) / 60000 as age_minutes FROM pending_messages WHERE status = 'processing' ORDER BY started_processing_at_epoch;"
Force reset stuck messages (nuclear option)
sqlite3 ~/.claude-mem/claude-mem.db " UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE status = 'processing';"
Symptoms: Valid queries return empty results even though you have prior sessions.
1
Confirm the database has data
sqlite3 ~/.claude-mem/claude-mem.db "SELECT COUNT(*) FROM observations;"
2
Check FTS5 tables are populated
sqlite3 ~/.claude-mem/claude-mem.db "SELECT COUNT(*) FROM observations_fts;"
If observations_fts is empty but observations has rows, rebuild the FTS index.
3
Rebuild FTS5 index
sqlite3 ~/.claude-mem/claude-mem.db " INSERT INTO observations_fts(observations_fts) VALUES('rebuild'); INSERT INTO session_summaries_fts(session_summaries_fts) VALUES('rebuild'); INSERT INTO user_prompts_fts(user_prompts_fts) VALUES('rebuild');"
4
Simplify your query
Special characters can cause FTS5 syntax errors. Use simple words:
Cause: The worker is not running, or the configured port doesn’t match the running worker’s port.Fix: npm run worker:restart
"Database is locked"
Cause: Multiple processes are accessing the database simultaneously.Fix: Stop the worker, kill any stale SQLite connections with lsof ~/.claude-mem/claude-mem.db, then restart.
"FTS5: syntax error"
Cause: Invalid characters in a search query (e.g. [, ], * used incorrectly).Fix: Simplify the query to plain words without special characters.
"SQLITE_CANTOPEN"
Cause: The database file cannot be opened — either missing directory or wrong permissions.Fix: Verify ~/.claude-mem/ exists and is writable: ls -la ~/.claude-mem/
"Cannot find module"
Cause: Missing npm dependencies.Fix: npm install in the plugin directory.
"port already in use"
Cause: Another process is occupying port 37777.Fix: Kill the conflicting process (kill -9 $(lsof -t -i:37777)) or configure a different port in ~/.claude-mem/settings.json.