| summary | Read-path observability commands: status, familiars, skills, memory, research, calls, hub, scheduler, travel, and session inspection. | ||
|---|---|---|---|
| read_when |
|
||
| title | coven observability commands | ||
| description | Reference for coven status, familiars, skills, memory, research, calls, hub, scheduler, travel, and sessions show/events/log: terminal parity with the CovenCave dashboard and the daemon API. |
Everything the CovenCave dashboard reads is also visible from the terminal.
These commands are read-only, work without a running daemon (they read
the same ~/.coven files and SQLite store the daemon serves), and each takes
--json for machine-readable output that carries the same body as the
corresponding daemon API route.
| Command | Human view | --json body |
|---|---|---|
coven status |
Ecosystem overview | { "health": …, "overview": … } composition of GET /api/v1/health and GET /api/v1/overview |
coven familiars [<id>] |
Roster table, or one familiar's Ward surface (tiers, protected paths, principal binding) | GET /api/v1/familiars[/:id/ward] |
coven skills |
Skill inventory | GET /api/v1/skills |
coven memory |
Memory file table | GET /api/v1/memory |
coven research |
Research loop log | GET /api/v1/research |
coven calls [<id>] |
Delegation ledger (list or detail) | GET /api/v1/coven-calls[/:id] |
coven hub status |
Hub role, nodes, queue depth | GET /api/v1/hub/status |
coven hub nodes |
Executor node table | GET /api/v1/hub/nodes |
coven hub jobs [--state <s>] |
Job table | GET /api/v1/hub/jobs[?state=s] |
coven hub routing |
Routing decisions | GET /api/v1/hub/routing |
coven sessions show <id> |
One session's record | GET /api/v1/sessions/:id |
coven sessions events <id> |
Recorded events (redacted) | GET /api/v1/sessions/:id/events |
coven sessions log <id> |
Log lines | GET /api/v1/sessions/:id/log |
The "what is my coven doing" front door. Complements coven doctor
(is my setup healthy?) with runtime state:
Coven status
daemon running (pid 63321, socket /Users/alice/.coven/coven.sock)
version 0.1.7
sessions 3 open
familiars 1 active / 2 total
skills 4 installed
research 12 iterations (last Δ 2)
hub 1/2 nodes available (details: coven hub status)
Next: coven sessions · coven familiars · coven run <harness> "<task>"
- The
familiarsline counts a familiar as active when it has an open session; the roster comes from~/.coven/familiars.toml. - The
researchline appears only when the research log has rows; thehubline appears only when executor nodes are registered — a fresh single-host install stays quiet instead of alarming. coven overviewis an alias for readers coming from the API route name.
coven status --json prints a CLI-level composition of the two stable API
bodies (this shape is owned by the CLI, like coven daemon status --json):
{
"health": { "ok": true, "apiVersion": "coven.daemon.v1", "…": "…" },
"overview": { "open_sessions": 3, "total_familiars": 2, "…": "…" }
}The health.daemon block reflects a live daemon only; a stale status file
shows up as daemon: null here, while coven daemon status --json reports
the stale state explicitly.
coven familiars <id> reads the same ward.toml the daemon's
Ward-enforced write path (POST /api/v1/familiars/:id/edits) adjudicates —
one source of truth for what a familiar's principal has protected:
Familiar sage — Ward surface
workspace /home/x/.coven/familiars/sage
principal SHA256:principal-key
unmatched tier 2 (logged)
tier path
0 protected SOUL.md
2 logged memory/
3 free scratch/
protected: SOUL.md
Tiers: 0 protected (Gate-1 principal signature required), 1 reviewed
(held for Gate-3 coherence), 2 logged (written with a Gate-4 audit
record), 3 free. unmatched is the tier assigned to paths no surface
entry matches. An unknown id fails with familiar_not_found; a familiar
without a ward.toml fails with ward_not_configured — the same
fail-closed shapes the write path returns.
coven attach replays and follows interactively. For scripts, CI, and quick
glances, the sessions subcommands read the same ledger non-interactively:
coven sessions show 9099 # metadata; unique id prefixes work
coven sessions events 9099 --limit 100 # recorded events, redacted payloads
coven sessions events 9099 --after-seq 42 # resume from a cursor
coven sessions log 9099 # replay-style log lines, then exitevents --json returns the paginated envelope
{ "events": [...], "nextCursor": { "afterSeq": n }, "hasMore": bool } —
the same contract as GET /api/v1/sessions/:id/events, so a shell loop can
page with --after-seq exactly like an API client. Event payloads are
redacted by default before display, matching the API.
coven hub replaces hand-rolled curl --unix-socket calls for the read side
of hub operations (see HUB-OPERATIONS for the
write-side protocol, which stays machine-to-machine):
coven hub status # role, hubId, node availability, queue depth
coven hub nodes # registered executors with capabilities
coven hub nodes <id> # one node: transport, health, capabilities
coven hub jobs --state queued # global queue by state
coven hub jobs <id> # one job: state, route, payload preview
coven hub dispatch <jobId> # executor dispatch record + result envelope
coven hub routing # job→node routing decisionsEvery verb takes --json, which prints the matching /api/v1/hub/* response
body unchanged, so scripts and humans read the same contract.
coven scheduler and coven travel follow ids the hub views hand out —
coven hub routing rows carry a DECISION column, and redispatch responses
carry a loopId — so operators can chase a routing decision without
curl --unix-socket. The write side (decisions, redispatch, profiles, deltas)
stays machine-to-machine, like the executor protocol:
coven scheduler decision <id> # one decision: job, target, reason, inputs
coven scheduler loop <loopId> # loop recovery state + preserved subqueue
coven travel state --client <id> # travel/handoff state machine view
coven travel state --client <id> --profile <profileId> # + profile freshnessEach verb takes --json and prints the matching /api/v1/scheduler/* or
/api/v1/travel/state response body unchanged. Unknown ids fail closed with
the structured API error (scheduler_decision_not_found,
scheduler_loop_not_found, travel_profile_not_found).
Each command's empty state points at the file or flow that populates it, so a fresh install can navigate the ecosystem without reading source:
$ coven familiars
No familiars configured.
Add [[familiar]] entries to ~/.coven/familiars.toml to build your roster.
The same views are reachable without leaving the interactive surfaces: the
Cast composer and the chat UI accept /status (alias /overview),
/familiars, /skills, /memory, /research, /calls, and /hub, plus the
bare words (status, familiars, roster, …). Every card shows the
scriptable coven <view> spelling so the terminal form stays discoverable.
status in a composer means this ecosystem overview; setup checks stay on
doctor/health.