doctor
nouride doctorEvery finding says what to do about it, and the command exits non-zero on a real problem — so it works inside a healthcheck or a CI step, not only in front of a person.
What it checks, in order
The order is deliberate. The half that works with no daemon runs first, because a config broken enough to matter is usually why nothing is running.
- Which config is loaded, and which data directory. Two lines, and they are the fastest way to spot that you are in the wrong working directory.
- The config itself — every lint the loader knows, with its hint.
- Can it reach the daemon? Everything below depends on this, so a failure here reports one accurate line rather than a wall of consequences, and stops.
- Providers with a credential. None at all is a hard failure — no agent can answer. One profile without a credential is a warning.
- Agent packs that failed to load, with the parse error.
- Agents actually running. None is a hard failure, and the hint distinguishes “none exist” from “loaded but disabled”.
- Declared workspace roots that do not exist. This is the check that was missing when a whole class of confusion happened: everything else reported green — agent running, gateway connected, provider credentialed — while every path inside that root was refused, which reads as the agent being broken.
- Agents pointing at a provider with no key, or at one that is not configured at all. This is the failure that looks like a model outage.
- Gateways. None connected is a warning — nothing can reach an agent except
nouride chat. One that isdeadis a failure with the restart command in the hint. - Approvals waiting, because a tool call is blocked until answered.
- Messages queued, because turns may be backing up.
- Skills whose host software is missing. A warning if an agent has it on; noted and dismissed if nobody does.
- Skills an agent carries but cannot run — the tool axis, per agent, listing only what is actually missing for that one.
- Skills nobody has read in the audit history, reported as fine rather than as a fault.
What the output looks like
nouride doctor
✓ config: /srv/nouride/.nouride/config.toml ✓ data dir: /srv/nouride/.nouride/data ✓ daemon reachable at http://127.0.0.1:18254 (up 3120s) ✓ providers with credentials: nougate-anthropic ✓ agents running: nouva, nox ! nouva: workspace root does not exist — /home/you/projects/thing Nothing in it can be read. Check [workspace] roots in agents/nouva/config.toml. ✓ gateway telegram:nouva: connected ✗ gateway discord:main is dead Check its token, then `nouride gateway restart discord:main`.
1 problem(s), 1 warning(s)✓ is fine, ! is worth knowing, ✗ is what is actually broken. Only ✗ affects the exit code.
Two findings worth explaining
“skill X needs dot, not installed here.” A skill declares the programs it needs in its
frontmatter, which is what makes this checkable at all. Without the check the failure is invisible
until it is expensive: the skill loads, the agent reads it, follows the procedure, and step four dies
on dot: command not found — halfway through a task, with an approval already spent.
“N of M skills have not been read in the audit history.” Every skill costs a line of every agent’s system prompt on every turn, whether or not it is ever read — measured at ~3.4 KB for eighteen of them on a live box. So one nobody has opened is a bill nobody chose to pay.
The window is the audit log’s, not a fixed ninety days. Last-read is derived from audit rows and
[retention] audit_days defaults to 30, so beyond a month there is no evidence either way and a
90-day threshold would report every skill on the box as dead.
When it cannot reach the daemon
It stops there and says so, with the config path and the data directory already on screen. Those two
lines are usually the answer: the CLI resolves the install relative to your working directory, so
running it from /tmp looks for /tmp/.nouride/data/.control-token.
Related
nouride config check [file] # would this configuration start? Nothing is launchednouride status # agents, gateways, queuenouride service status # which supervisor, and whether anything would respawn it