Troubleshooting
Symptoms, causes, and fixes — seeded from the Doctor checks.
Start with Doctor
Every troubleshooting session starts in the same place: Settings ▸ Doctor. Doctor runs the full health catalog against your install — binaries, Python runtimes, configuration files, daemons, the knowledge-graph backend, the video engines, media tools, and your account state — and shows one row per check, grouped into five sections:
| Group | Covers |
|---|---|
| Core | Binaries (Python, Node.js, npm, the agent CLI) · the six component Python environments · configuration files · platform tree · doctrine · hooks |
| Daemons | The six app-managed daemons, the shared memory service, and ArcadeDB |
| Engines | Remotion and Hyperframes — the opt-in video engines |
| Media | ffmpeg/ffprobe and the Whisper speech-to-text models |
| Account | Sign-in and subscription state |
How to read the results
Three states matter:
- Pass — the check verified the real condition (a binary answered on PATH, a daemon answered its health endpoint, a file exists where expected).
- Fail — something is genuinely broken and needs your action. Fail is reserved for real breakage: a missing prerequisite binary, a missing or partial platform tree.
- Info — a deliberate design choice worth understanding: "not started yet" is never treated as broken. A daemon that is not running, an engine you have not installed, an API key you have not set, or a check that cannot run because the daemon it needs is offline all show as info rows with a precise cause and, where possible, a one-click fix. An install with several info rows can be perfectly healthy.
Most rows carry a fix action (Start, Provision, Generate, Trust, Refresh). These delegate to the exact same operations the Dashboard's Platform Health card uses — there is no separate "Doctor-only" mutation path, so a fix applied here behaves identically to one applied there.
When the app itself will not start
The same checks exist as a zero-dependency terminal script that runs before anything is provisioned — no daemons, no Python packages required:
python scripts/doctor.pyRun it from your install root. It is the fallback diagnostic for the rare case where the desktop app cannot boot at all.
The clusters below map the Doctor catalog onto the problems buyers actually hit, in rough order of likelihood. A complete per-check reference is at Reference ▸ Doctor checks.
Runtime prerequisites — binaries and Python environments
Command Center's agentic layer rides four external binaries and six component Python environments. Doctor's Core group checks each one individually.
| Symptom | Doctor row | Fix |
|---|---|---|
| Agent features do nothing; MCP servers never come up | Agent CLI (claude) — fail, "not found on PATH" | Install Claude Code from claude.ai/code and sign in with your own Claude account. The agent CLI is the one prerequisite Command Center cannot provision for you. |
| Python-backed components refuse to start | Python — fail | Install Python 3.11 or newer from python.org (on Windows the py launcher also satisfies the check). |
| App UI or video engines will not build/install | Node.js / npm — fail | Install Node.js 22 or newer from nodejs.org; npm ships with it. If npm alone is missing, reinstall Node. |
| Daemons exit immediately; MCP servers report missing modules | One or more venv rows — fail, "not created yet" | Run the one-command provisioner (below). |
The six component environments are: shared-agent-memory, knowledge-base (which also serves the graph and Gemini tools), routines, observer, email-server, and imagegen. You do not need to create them by hand — the runtime provisioner bootstraps everything in one pass:
python scripts/provision_runtime.pyRun it from your install root. It installs uv, a pinned Python, and all six
environments. It can take several minutes on first run (network plus
interpreter download), which is why Doctor points you at the terminal command
instead of offering a one-click fix for this row.
Two info states worth knowing:
- "cannot verify yet" on a binary row — the tool-detection command shipped in this build but needs one app restart to activate. Restart Command Center and re-run Doctor before concluding anything is missing.
- "the platform was updated since the last provision" on the Runtime provisioner row — an app update refreshed the platform tree, but Python environments are never touched automatically on update. Re-run the provisioner to pick up refreshed dependencies.
API keys — presence and reachability
No API key is required to boot Command Center. Two optional Gemini slots unlock specific capabilities, and Doctor checks both presence and whether the running services can actually use them.
| Symptom | Doctor row | Fix |
|---|---|---|
| Semantic memory search returns nothing; knowledge-base embeddings unavailable | Gemini key (KB · memory · embeddings) — info, "not set" | Set GEMINI_API_KEY in Settings ▸ API Keys (free tier). Keyword memory search and graph queries keep working without it. |
| Key is set, but semantic search still fails | Same row — info, "the running memory daemon has no key loaded" | The service started before the key was saved. Restart your Claude Code session (the memory service starts and stops with it). |
| Covers and generated images fail; the imagegen daemon never starts | Gemini image key (imagegen) — info, "not set" | Set GEMINI_IMAGE_API_KEY in Settings ▸ API Keys. This slot is paid-tier and used only by image generation; the daemon deliberately stays off without it. |
| Image key is set but generation errors out | Same row — info, "cannot reach Gemini with it" | Check the key value and its billing state in your Google account, then restart the imagegen daemon from Platform Health. |
Two rules explain most key problems:
- Keys are read at process start. A key saved while a daemon is running is invisible to it until that daemon restarts. Doctor cross-checks the live daemon's own view and names this state explicitly.
- Key writes are restart-bound. Settings ▸ API Keys writes your local
.envfile (and creates it on first save — the ".env configured" row passes from then on). After changing keys, restart the affected daemon (Dashboard ▸ Platform Health) or your agent session.
Daemon health
The platform's substance runs in local background daemons, all bound to
loopback (127.0.0.1) only. Doctor's Daemons group probes each one's health
endpoint.
| Daemon | What stops working without it |
|---|---|
| Observer | News and feed harvesting, source scheduling |
| Routines | Scheduled agent jobs, the video/products/footage job engine |
| Knowledge Base | Ingest, graph sync, Cortex data |
| Imagegen | Image generation (also requires the Gemini image key) |
| Voice | The Voice assistant |
| MCP Gateway | The shared MCP endpoint |
| Shared Memory | Cross-agent memory search and writes |
| ArcadeDB | The knowledge graph itself (see the next cluster) |
| Symptom | Check | Fix |
|---|---|---|
| A view sits empty or shows "offline" | The matching daemon row — info, "not running" | Click Start on the row, or use Dashboard ▸ Platform Health. Daemons start on launch when autostart is enabled there. |
| Everything daemon-backed is down after a reboot | Autostart toggles | Enable autostart per daemon at Dashboard ▸ Platform Health. |
| Shared Memory shows "not running" while other daemons are fine | Shared Memory row | This service is hosted inside the shared-agent-memory MCP server — it starts and stops with your Claude Code session, not with the app. Start an agent session and re-check. |
| A daemon-backed Doctor row says "daemon offline — cannot check" | The daemon rows above it | This is by design: daemon-down is a first-class state, not an error. Start the daemon, then re-run Doctor for the dependent rows. |
A daemon being down never crashes the shell — dependent views go quiet and recover as soon as the daemon is back. Restarting a daemon from Platform Health is also the standard step after configuration changes, and it never requires restarting the app or your agent session. See Infrastructure ▸ Daemons for the full map.
Knowledge-graph backend (ArcadeDB)
The knowledge graph runs on ArcadeDB. The default mode is provisioned local: Command Center installs and manages its own no-Docker instance (a Java runtime plus a pinned package) inside your install. No container runtime is required.
| Symptom | Doctor row state | Fix |
|---|---|---|
| Cortex is dark; ingest and graph queries fail on a fresh install | ArcadeDB — info, "not provisioned yet" | Click Provision. This downloads and sets up the local instance — expect a few minutes. When it finishes, Doctor brings the database up and restarts the Knowledge Base daemon automatically. |
| Graph worked before, dark now | ArcadeDB — info, "provisioned, not running" | Click Start, or manage it from Settings ▸ Database. |
| Provisioning reports an error | Row detail names the failure | Read arcadedb/local/_provision.log in your install root for the exact step that failed, fix the cause (usually disk space or a blocked download), and provision again. |
| Docker/remote mode shows "unreachable" | ArcadeDB — info, docker/remote mode | You have pointed the graph at an external ArcadeDB server. Check that server, or switch back to provisioned-local in Settings ▸ Database. |
The graph store is derived data — it is rebuilt from your files by root sync and re-ingest. A damaged graph is an inconvenience, never data loss; your documents are the source of truth. See Concepts ▸ Knowledge graph.
Sign-in and subscription
Command Center requires sign-in with an active Pro or Ultra subscription. Verification happens online, periodically — and the product is designed to degrade politely, not punish you, when you are offline.
| What you see | What it means | What to do |
|---|---|---|
| "not signed in" | No account is connected on this install. Product surfaces stay locked. | Sign in from Settings ▸ Account (Doctor's Account row has a shortcut). |
| "Offline — reconnect to verify" / "offline grace — reconnect to refresh" | The last online verification is aging out. You are inside the grace window: everything keeps working. | Reconnect when convenient and click Refresh on the Account row (or in Settings ▸ Account). |
| "degraded — past grace, treated as unsubscribed" | The grace window elapsed without a successful verification. Tier-gated views lock. | Reconnect and refresh. Nothing is deleted — your files, configuration, and local data are untouched, and everything unlocks again on the next successful verification. |
If a refresh fails while you are demonstrably online, check that your subscription is active, then contact support with the exact Account row text.
Hooks, terminals, and folder trust
Two agent-harness conveniences ride hook scripts installed into your agent configuration — and uninstalled hooks fail silently, which makes them a classic "nothing errored, it just stopped happening" case.
| Symptom | Doctor row | Fix |
|---|---|---|
| Agent terminal panes no longer resume their sessions after an app restart | Fleet wake & session-resume hooks — info, "not installed" | Run python .claude/hooks/cc_install_hooks.py from your install root. It writes machine-correct paths; new terminal sessions pick the hooks up immediately. |
| Fleet workers idle indefinitely without being nudged | Same row | Same fix — the idle-nudge rides the same hooks. |
| A new agent session stops at a trust prompt every time | Folder trust (Claude Code) — info | Claude Code trusts folders individually. Use the row's Trust this folder action once for your install root, and the agent-side prompt disappears. |
Install and update recovery
These rows cover the install's structural integrity — the platform tree, the generated agent configuration, and the doctrine files.
| Symptom | Doctor row | Fix |
|---|---|---|
| Nearly every Core row fails at once; daemons and agent paths resolve to nothing | Platform tree present — fail, "no platform tree at this root" | Either the home folder was never laid down here, or Settings points at the wrong folder. Use the row's Re-run lay-down here action, or point the project root (Settings) at the folder Command Center actually installed into. |
| Some platform folders exist, others are missing | Same row — fail, "a partial lay-down" | The initial copy did not finish. Re-run lay-down — it is idempotent and completes what is missing. |
| Agents cannot see their MCP servers on a fresh setup | .mcp.json (agent config) — info, "not generated yet" | Click Generate. This writes the agent configuration from your settings with real absolute paths for this machine. |
| A leftover configuration file from an early install | Config layout — info | The row names the stray file and offers Remove stray file. The active configuration is unaffected either way. |
| You want the original shipped agents/skills/protocols back after editing them | Doctrine (agents · skills · protocols) — info | Updates seed new doctrine but never overwrite a file you changed. Refresh doctrine is the explicit restore: it backs up every changed file to .backups/doctrine_refresh_<timestamp>/ inside your install before overwriting, seeds anything missing, and never removes doctrine you added yourself. |
For the full picture of what an update does and does not touch, see Concepts ▸ How updates work.
Video engines and media tools
The two video engines are opt-in installs — a fresh install without them is the normal state, not a problem.
| Symptom | Doctor row | Fix |
|---|---|---|
| Engine rows say "not installed" | Remotion / Hyperframes — info | Install per engine from the Video tab, where each engine's license gate lives. Doctor's row links you there. |
| Engine installed, first render slow or waiting | Engine row — info, "render browser not fetched yet" | The render browser downloads automatically on first render. Let it finish, or retry the fetch from the Video tab. |
| Footage or video work fails on a missing ffmpeg | ffmpeg / ffprobe — info, "not installed" | No action usually needed — it fetches automatically on first use. The row offers Fetch now if you want it ahead of time. A system-installed ffmpeg on PATH is also detected and used. |
| Transcription and local speech-to-text unavailable | Whisper models — info, "none installed yet" | Install a model from Settings ▸ Speech-to-Text. One install serves both footage transcription and the Voice assistant's local speech-to-text. |
Still stuck?
Check the FAQ for the questions that come up most, or contact support — include your Doctor findings and the app version, and you will get a substantive answer rather than a canned one.