Skip to main content
When something isn’t working, the first command to run is always slowave doctor. It checks every component in sequence — Python version, dependencies, embedding model, daemon reachability, client configuration, and lifecycle version — and points you at specific issues with actionable remediations.
If you need to file a bug report, capture the full verbose output:
The sections below cover failure modes by component.

Daemon (HTTP MCP server)

The daemon is a long-running process that serves slowave_* tools to clients over HTTP. It runs as a user-level service installed by slowave setup.
Setup assigns the first available loopback port from 8766 upward and stores it in the runtime root as daemon.port. If an explicitly configured port is already occupied by another process:
Run slowave doctor and slowave serve status to print the effective URL and PID-file path.
If the daemon was killed ungracefully, daemon.pid beneath the runtime root may prevent it from restarting. slowave serve start detects and cleans stale entries automatically. If it doesn’t:
This prints the exact PID-file path. Remove it manually, then restart:
On Windows the health check waits up to 45 seconds for imports to finish. If startup still fails, inspect the daemon error log in the runtime root:
Run slowave doctor to validate that all required packages are installed and the embedding model can load.
Confirm the daemon is listening and healthy:
A 200 OK means the daemon is alive. If the health endpoint hangs, the engine may be warming up — models load lazily on the first tool call. Wait a moment and retry.
If the daemon process exists but doesn’t respond to requests, force-kill and restart:

Background Worker

The worker consolidates raw events into episodic memories on a 5-minute interval. It runs as a user-level service alongside the daemon.
Check whether the worker process is running:
If it’s not detected, check the platform-level supervisor:
Check the worker log for errors:
Run a single consolidation pass to verify the worker logic works independently of the service:
Check recent worker run history from the CLI:
Or open the dashboard, which shows worker run history under the activity section.
The worker and daemon share the same SQLite database in WAL mode, which supports concurrent reads and one writer at a time. If you see database is locked errors in the logs, an orphaned worker from a prior session may be holding stale WAL state. Restart both services:

Dashboard

The dashboard is a local web UI that starts on 127.0.0.1:8765 by default.
The first run assigns an available port from 8765 upward and persists it as dashboard.port. If there is a conflict:
If Slowave was installed from source without building the frontend, the dashboard serves a broken page. Verify the assets exist:
If missing, build them:
Open the browser’s developer console. API fetch errors indicate the dashboard’s database connection is failing.
If the database file doesn’t exist yet, use Slowave with an MCP client first to create it — the dashboard reads from the same database as the daemon.
The dashboard queries the database directly on every request. If data looks stale, either the consolidation worker hasn’t run recently or the daemon hasn’t written new events yet. Run a manual consolidation pass:
Then reload the dashboard.
The Forget and Unforget action buttons are enabled by default when the dashboard runs. If they appear disabled, confirm the dashboard started without errors:
If the buttons are still unresponsive, check the browser console for API errors and run slowave doctor to verify the database is accessible.

Client Integration (MCP tools)

If the slowave_activate, slowave_remember, and related MCP tools do not appear in your agent, the client configuration is likely wrong or missing.
Run the diagnostic to check every supported client:
doctor reports which clients are correctly configured, misconfigured, or missing their MCP entries. Common issues per client:Re-running setup is always safe and idempotent:
The MCP lifecycle contract (activate → remember → recall → feedback → commit) evolves between releases. slowave doctor reports if the lifecycle block version in CLAUDE.md or equivalent instruction files doesn’t match the installed Slowave version. Fix by re-running setup to inject the current version:
slowave_commit intentionally fails if feedback was not provided for every retrieved memory or procedure before calling commit. This is by design — the error response lists all outstanding targets that still need a slowave_feedback call. Assess each listed target with the correct label (used, irrelevant, stale, etc.) and then retry slowave_commit.
Claude Code and Codex use UserPromptSubmit and Stop hooks to call Slowave on every turn. If they aren’t firing, re-install the hooks:
Verify that ~/.claude/settings.json contains the hook configuration after setup completes.
If memory appears to be split across two similar scopes (e.g. project:my-repo and project:my_repo), Slowave is treating them as separate memory silos. A cold-start warning is logged when a new scope is detected for the first time. Use consistent, exact scope names across all sessions.

Database

Slowave stores all data in a local SQLite database beneath the runtime root. slowave doctor prints the exact path.
Inspect the effective paths without making any changes:
SLOWAVE_HOME and SLOWAVE_DB cannot be set simultaneously — Slowave raises an error immediately. Unset one of them. Use SLOWAVE_HOME to relocate the complete runtime tree; use SLOWAVE_DB only when a legacy integration needs an exact database path. See Configuration for details.
SQLite in WAL mode supports concurrent reads and one writer at a time. If you see database is locked errors, an orphaned process may be holding the write lock. Kill all Slowave processes and restart:
Slowave applies schema migrations automatically (pre-migrations → DDL → post-migrations). If a migration step fails, the database may be in an inconsistent state.
1

Identify the failure

Run slowave doctor to see which migration step failed and what error was reported.
2

Restore from backup

If you have a recent backup, restore it:
3

File an issue if no backup exists

If no backup is available, file an issue at github.com/mrsalty/slowave/issues with the full error output from slowave doctor --verbose.
  • WAL journal mode keeps write performance consistent. The -wal and -shm sidecar files are normal and are auto-checkpointed.
  • Large databases (thousands of sessions) may slow down schema listing. The dashboard paginates results automatically.
  • The auto-rebuild triggered by a logic version bump can take several minutes. It is a one-time cost per version upgrade.
When current_logic_version changes, the engine replays all raw events to rebuild derived state. If the rebuild appears stuck:
  1. Check the log_versions and replay_checkpoints tables — one process holds a claimed_ts lock.
  2. If the lock timestamp is older than 180 seconds, wait — the next retry will claim it automatically.
  3. After 5 failed claim attempts the rebuild stops. Restart the daemon to trigger a fresh retry:
Run the built-in health check:
Or open the dashboard at the /diagnostics path, which exposes PRAGMA integrity_check and PRAGMA quick_check results under the Database Health section.

Backup and Restore

Check the backup error log:
Run a manual backup to confirm the failure is reproducible:
Also verify the backup directory is writable and that sufficient disk space is available.
slowave restore stops the daemon and worker, swaps the database file, and removes stale WAL sidecars. If the restored database was created by a different Slowave version, the engine will automatically rebuild derived state — this is normal and can take several minutes for large databases.Take a fresh backup of the current state before any restore attempt, so you can roll back if needed:

General diagnostics reference

slowave doctor runs all checks in sequence. Here is what each check validates: