kyvvu doctor
What you'll learn: How to find out, in one command, whether your setup works — and if it doesn't, which part.
kyvvu doctor
Runs nine checks and prints one line each. It never stops at the first failure, because the check that explains a failure is usually the one after it.
Usage: kyvvu doctor [OPTIONS]
Options:
--api-url TEXT Kyvvu API URL to probe
--agent-key TEXT Agent to diagnose (defaults to KV_AGENT_KEY)
--json Emit JSON instead of a reportExit code is 1 when any check failed, 0 when everything passed or only warned — so it works in a CI step or a support reply.
A healthy setup
$ kyvvu doctor --agent-key my-agent
✓ Python 3.13.15 (CPython), minimum 3.10
✓ Versions kyvvu 0.22.0, kyvvu-engine 0.12.0 (satisfies <1.0.0,>=0.12.0)
✓ .env /app/.env defines 3 KV_* key(s): KV_AGENT_KEY, KV_API_KEY, KV_API_URL
✓ API https://platform.kyvvu.com reachable (200)
✓ Credential API key valid — you@company.com
✓ Registration cache 'my-agent' cached, registered at 2026-09-11T11:27:53+00:00 (agent_id=agent_6442dabc)
✓ Policies 15 policy(ies) in effect from the api source (7 at step_execution, enforcing)
✓ Trace sink https://platform.kyvvu.com
• Local trial no local trial record (kyvvu installed 2026-09-10)
All checks passed.The line that matters
Policies is the reason this command exists. A policy count cannot tell apart situations that need completely different fixes — several of them report zero and allow every step:
15 policy(ies) in effect … (7 at step_execution, enforcing)
Working.
Nothing.
0 policies in effect: the api source answered with no policies
Nothing is assigned to this agent.
Restore the bundled baseline: in the dashboard open Manifests, pick the Kyvvu baseline and Assign it, or POST /api/v1/assignments with the bundled manifest_path (listed by GET /api/v1/baseline) and no repo_id. Re-registering will not bring an unassigned baseline back — that is deliberate. See Removing and restoring the baseline.
the api source offered a policy set that cannot be loaded, so nothing was loaded (a failing check)
A policy in the set is unloadable: an unknown rule_type, params that do not match the rule, a duplicate name, a bad regex or the retired scope: key. A set is loaded whole or refused whole, so an agent started here would refuse to start.
Fix the policies listed under the check — each one names its reason.
0 policies in effect: the configured api source could not be read
The fetch failed and there was no cache to fall back on.
Fix the API and Credential checks above.
N policy(ies) in effect, but the set is stale
Enforcing an older set; the last refresh failed.
Check connectivity — the agent is not enforcing what the platform currently says.
N policy(ies) in effect … but none at step_execution
The agent passed one check at registration; every step it takes afterwards is allowed. A fail-open blind spot with a tick on it.
Assign a manifest carrying step_execution policies — the bundled baseline has them.
An unloadable set prints every refusal with its reason, and kyvvu doctor exits non-zero:
Traces going nowhere
The Trace sink check is the tell for the commonest silent failure: an agent that registers, appears in the dashboard, and has an empty Logs page.
Working offline
kyvvu doctor needs no credentials at all — being logged out is one of the things it diagnoses. With KV_POLICY_FILE set it reports on a local manifest instead of the platform, so it works the same for a kyvvu serve --policy-file setup.
The local trial record
If you ran kyvvu try --record-trial, the Local trial check reads that opt-in marker and reports how long it took you to get from pip install to a blocked step:
That marker is opt-in and never transmitted. Nothing sends it anywhere, and declining costs nothing: with no marker, the check is informational and every other command behaves identically.
doctor vs whoami
They sit side by side and answer different questions.
kyvvu whoami
kyvvu doctor
Question
Who am I, and what would this shell do?
Is anything broken, and what?
Needs a session
Yes — exits 1 without one
No
On a failure
Stops
Keeps going, reports everything
Exit code
1 when logged out
1 only when a check failed
Output
Six stable lines a script can grep
A report
doctor can also resolve something whoami deliberately refuses to guess: whoami only reads this shell's KV_*, so with no KV_AGENT_KEY it qualifies its answer about where traces go. doctor takes --agent-key, so given one it resolves the trace sink for real — and, with credentials, asks the platform what that agent's policy set actually is.
Next steps
kyvvu auth — log in, and what
whoamireportskyvvu try — enforcement with no account and no network
kyvvu serve — a local policy evaluation server
Last updated
