Guides
Observability
What doctor measures, what the percentages actually mean, and why "no observed use" is never reported as "unused".
agentyx doctor answers a practical question: is the harness you configured actually useful, or have
you piled up capabilities you rarely use?
pnpm dlx @agentyx/cli doctor
pnpm dlx @agentyx/cli doctor --json
pnpm dlx @agentyx/cli doctor --check # exit 1 on warnings or errors
Three kinds of evidence
Footprint, always. From configuration alone, doctor reports how many packs, Skills, MCP servers,
local tools and hooks are active, and how many active MCP servers are low, medium or high context
cost. Those are the qualitative contextCost labels each MCP server declares — they are never added
up into a token figure. A capability two packs both contribute counts once.
Pack breadth. Configured packs are compared with what project detection recommends. This is
informational: packs such as security, documentation or efficiency are often deliberate workflow
choices that a package.json cannot reveal.
Observed activity, when a provider can show it. With the efficiency pack, Agentyx installs
small project-local hooks that run agentyx hook observe. Each records that a session started or
ended and which Agentyx Skill or MCP server was used. Repeated hooks are silent and fail open.
What the numbers mean
observed in 9 / 12 observable sessions (75%) is an observed session rate: sessions where
Agentyx saw activity for a capability, divided by sessions that gave it enough telemetry to see it.
It is not a token, cost or context-window share, and not a measure of usefulness. Every JSON percentage carries its numerator and denominator.
The honesty rule
Important
"No observed use" is not "unused". A capability a provider cannot reliably show is unobservable, never dormant.
That distinction drives the flags in each adapter's capabilities.observability:
| Signal | Codex | Claude Code | Kimi Code | Qwen Code |
|---|---|---|---|---|
| Session lifecycle | yes | yes | no | yes |
| Tool use | yes | yes | no | yes |
| Skill use | no | yes | no | no |
| MCP use | yes | yes | no | yes |
| Context size | no | yes, on resume or fork only | no | no |
Two of those are worth explaining, because both look like missing features and are deliberate:
- Codex documents no Skill usage signal, so Skill activity cannot be observed at all.
- Qwen Code documents no
Skilltool, so a Skill the model selects on its own produces no hook payload. Only an explicitly typed/skillfiresUserPromptExpansion. Counting just that half would report every model-selected use as "no observed use", so Agentyx declares Skill use unobservable and does not register the event. - Kimi Code supports hooks, but only in user-level config. Agentyx never writes under
$HOME, so nothing is observable — a policy limit, not a provider limit.
Baselines
Doctor recommendations must never combine sessions from incompatible harness baselines. Only sessions stamped with the current installed baseline reach a denominator, so enabling a new capability does not retroactively make old sessions count as evidence against it. The baseline fingerprint covers Agentyx capability names, target ids and provider observability flags — never paths, environment values, timestamps, provider session ids or project content.
doctor --json reports how many historical sessions were ignored for this reason.
What is stored
Observation state is metadata only, and local:
- It lives at
<git dir>/agentyx/usage-v2.jsonl. The real git directory is resolved for worktrees and submodules. - Git ignores it, so
git statusstays clean and your.gitignoreis untouched. - Outside a Git checkout nothing is recorded. Agentyx never writes to
$HOME. - It keeps the 50 most recent sessions and at most 256 KiB.
It holds a provider session id hash, an event, an Agentyx Skill or MCP id, a session-start baseline fingerprint and — when a provider reports it — a context size. It never holds prompts, responses, source code, file names, tool arguments or output, shell commands, secrets or environment variables; the schema has nowhere to put them.
Skill use is recorded for Agentyx's built-in Skills only. Tools that run through shell commands, such as RTK, are not observed, because Agentyx will not store or guess at command lines.
Readiness is separate
Doctor's readiness section independently reports configuration, installation and
localPrerequisites as ready, not-ready or unknown.
It can inspect active local executable presence, referenced environment-variable names, and provider
MCP scope and transport compatibility. It does not launch MCP commands, load .env files, make network
requests, test registry downloads, or claim connectivity, authentication, authorization, provider
approval or semantic correctness. Finding npx proves only that the launcher is present; it does not
prove the MCP package is installed or that the server will start.