> _**CLI skill · `agent` namespace** · ~20,419 tokens · hoody-sdk v1.0.0-beta.12_

# `agent` — In-container AI coding agent over HTTP

## Purpose

The `hoody-agent-d` HTTP gateway exposes the in-container AI agent as a typed namespace: create a chat session, send a prompt, stream the turn (tool calls, gates, output), then confirm/answer/cancel as the agent works. 22 services — `sessions`, `agents`, `models`, `skills`, `memory`, `github`, `workflows`, `tools`, `hooks`, `mcp`, `settings`, `system`, `loops`, `logs`, `tasks`, `statistics`, `jobs`, `discovery`, `headless`, `todos`, plus `hoody` (token bootstrap) and a namespace-root `GET /api/v1/agent/logs/export`.

## When to use

- **Drive the agent programmatically** — create a session, prompt it, and consume the turn: `hoody agent sessions create` → stream the turn for live tool/gate/output events (per surface — see the streaming note under Quirks), or `hoody agent sessions prompt-sync` for one blocking call → resolve gates with `hoody agent sessions confirm-gate` / `hoody agent sessions answer-question` → `hoody agent sessions cancel` to interrupt.
- **Inspect or configure the agent** — list `models` (`hoody agent models list` / `hoody agent models get`) and `hoody agent models list-providers` (configure providers via `hoody agent models set-provider-default` / `hoody agent models set-provider-api-key` / `hoody agent models start-provider-o-auth`); switch a session's active model with `hoody agent sessions set-model`, browse/install `skills`, read/edit `memory`, manage `workflows`, `hooks`, `agents` (named agent profiles), and `tools` — both the sessionless catalogue/registry (`hoody agent tools list` / `hoody agent tools list-read-only` / `hoody agent tools get`, and `hoody agent tools run` (blocks, returns the result) / `hoody agent tools run-async` (returns `{ job_id }`, poll `jobs`) / `hoody agent tools stream` (one-shot result over SSE frames — not a per-token stream) to invoke a tool with no session — read-only by default, a mutating tool needs `allow_mutations: true` or a confirmed re-issue) and the per-session surface (`hoody agent tools list-session` for a session's *effective* tool set, `hoody agent tools list-session-mcp`, and `hoody agent tools run-session`). Unlike the sessionless `hoody agent tools run`, a per-session run executes against the session's *frozen* realm/container/cwd/tool-mode and claims the session's single serial turn slot — so it returns 409 `turn_in_flight` while a turn is running, 409 `gate_parked` while a gate is open, and 404 `tool_not_found` if the tool is not in that session's effective list; its mutating-tool posture comes from the live session's gate chain (the `allow_mutations` escape hatch is sessionless-only).
- **One-shot non-interactive runs** — `hoody agent headless create-run` for a fire-and-forget agent invocation that returns a job; poll `hoody agent jobs get` / `hoody agent jobs get-result`.
- **GitHub from inside the agent** — first establish an account with `hoody agent github login` (omit the body for a GitHub device flow → poll `hoody agent github login-poll`; or pass a `token` PAT to persist it directly), then `hoody agent github auth-status` to confirm; once an account is active, `hoody agent github clone` / `hoody agent github commit` (and `hoody agent github status` / `hoody agent github branches` / `hoody agent github repos` / `hoody agent github pull-request` / `hoody agent github sync`) for repo operations the agent performs in-container.

## When NOT to use

- Want the interactive TUI, not the API? Run the bare `hoody agent` launcher (`cli/agent-command.ts`) — it opens the in-container Agent TUI over the terminal-kit WebSocket; this namespace is the HTTP control surface beside it.
- Raw shell / command exec → `terminal` (PTY) or `exec` (one-shot). File I/O → `files`. The agent runs these as tools internally; call them directly when you don't need the LLM.
- Account-level resources (containers, billing, realms) → `api`.

## Prerequisites

- Container with the `agent` kit running (`hoody-agent-d` gateway); capability URL.
- At least one model provider configured (`hoody agent models list-providers` / `hoody agent models list` to confirm one is usable) before prompting.
- A session id from `hoody agent sessions create` for every prompt/gate/cancel call.

## Capability URL

→ See `SKILL-CLI.md § Proxy URLs`.

**Reaching a service you host on a container port** (any port, any namespace):

- `https://{projectId}-{containerId}-http-<port>.{node}.containers.hoody.com` — proxy speaks HTTP to `localhost:<port>`.
- `https://{projectId}-{containerId}-https-<port>.{node}.containers.hoody.com` — proxy speaks HTTPS to `localhost:<port>` (target needs TLS).

Edge is always `https://`. No alias, firewall edit, or proxy registration needed; capability-token gates still apply.

## Common workflows

### 1. Prompt a session and stream the turn

`hoody agent sessions create` (returns a session id) → stream the turn with `{ text }` to receive live events (tool calls, gates, output deltas) — see the streaming note under Quirks for the supported per-surface method (SDK helper / HTTP SSE route / CLI command) → resolve any gate as it arrives → turn ends.

### 2. One-shot synchronous prompt

`hoody agent sessions create` → `hoody agent sessions prompt-sync` with `{ text }` — blocks until the turn finishes and returns the result in one call. Best for short, non-interactive prompts where you don't need streamed events.

### 3. Resolve gates mid-turn

While a prompt streams, the agent may pause for human input: a confirmation gate → `hoody agent sessions confirm-gate`; an open question → `hoody agent sessions answer-question` (to get a helper model to DRAFT an answer for a parked question call `hoody agent sessions answer-assist` — it does NOT answer the gate: it dispatches an async job (HTTP 202) whose suggestion arrives via `hoody agent jobs get-result` and an `event.question_suggestion` on the session stream — only one assist may be in flight per session — and the real answer still goes through `hoody agent sessions answer-question`; for unattended runs arm `hoody agent sessions set-auto-reply` (a self-driving auto-user loop that withholds write-class actions unless you opt in with `allow_writes: true`, either on the arm call or later via `hoody agent sessions set-auto-reply-writes`)). Echoing a wrong/stale `gate_id`/`generation`, or answering when nothing is parked, returns 409 (`no_pending_gate` / `stale_gate` / `gate_already_answered` / `gate_type_mismatch`). Interrupt a running turn with `hoody agent sessions cancel`. Tear the session down: `hoody agent sessions close` removes it from the live map; `hoody agent sessions delete` drops the live connection but keeps the persisted record (re-attach via `hoody agent sessions create`), while a *hard* delete (set the `hard` flag — SDK `hoody agent sessions delete`, HTTP `?hard=true`, CLI `--hard`) also erases the persisted record. To roll a session back without tearing it down, `hoody agent sessions trim` with `{ turn_idx }` truncates conversation history to (and including) that turn index.

### 4. Pick a model / provider

`hoody agent models list-providers` to see configured providers, `hoody agent models list` to list available models, then `hoody agent sessions set-model` to bind a model to a session before prompting — SYNCHRONOUS: the response reports the actual outcome ({status:'ok', model, persisted} on success; structured 409/422 errors while busy or for an unconstructable spec) and a successful switch PERSISTS into the chat agent's frontmatter (a global repin for future sessions of that agent). PRECEDENCE: the agent's frontmatter `model` is the DEFAULT for a session that does not request one; an explicit `hoody agent sessions create` (or this live `hoody agent sessions set-model`) OVERRIDES that pin for the session — create is session-scoped and does not rewrite the agent, this live switch repins globally. The shipped default agent ships pinned, so its pin is the out-of-the-box default until an explicit model is chosen (`hoody agent sessions create` with attach or backend:"acp" is rejected 400 — a resumed/delegated session cannot take an explicit model). Each session has further per-session knobs (all session-scoped PATCHes that apply live): `hoody agent sessions set-effort` (`{ effort }` — `low|medium|high|xhigh`, or `""` for the model default), `hoody agent sessions set-verbosity` (`{ level }` — `normal|concise|terse|minimal`), `hoody agent sessions set-hoody-env` (`{ enabled }` — toggle whether the `HOODY_*` shell-env contract is injected for the bash tool), and `hoody agent sessions set-chat-agent` (`{ agent }` — bind a named profile from `agents`).

### 5. Skills, memory, todos, workflows, agents

- **Skills** — `hoody agent skills list` (each carries an enabled + trust state), `hoody agent skills install-hub` / `hoody agent skills search-hub` / `hoody agent skills preview-hub` to find and install from the hub. A newly installed/imported skill must be trusted before its code runs — `hoody agent skills trust` is the gate (identify the skill by `root_dir`+`rel_dir`, set the `trusted` flag); `hoody agent skills toggle` only enables/disables by `name` (set the `disabled` flag). Like the J-class todo ops, both `hoody agent skills trust` (which grants arbitrary code-execution trust) and `hoody agent skills install-hub` (which writes arbitrary skill code to disk) have NO human-confirmation gate over this namespace — that denial lives only on the model-facing skill-edit tool path, and the HTTP edge has no app-level admin gate, so an autonomous API caller can silently trust and install skill code; gate these in your own caller.
- **Memory** — `hoody agent memory search` for hybrid recall (BM25 + vector + graph) and `hoody agent memory list-items` to enumerate by `project`; `hoody agent memory save-item` / `hoody agent memory edit-item` / `hoody agent memory delete-item` to write; `hoody agent memory get-graph` for the relation graph (or `hoody agent memory get-item` to read one record by `id`). `hoody agent memory set-enabled` (`{ enabled }`) is the memory capture/privacy switch — it persists `features.memory` and flips the live store — and `hoody agent memory flush` forces the store's durability barrier; both are not admin-gated. Memory is project-scoped (pass `project`); the reads (`hoody agent memory search` / `hoody agent memory list-items` / `hoody agent memory get-graph` / `hoody agent memory list-projects`) and `hoody agent memory consolidate` are active-realm-only (a realm header is rejected), while the writes (`hoody agent memory save-item` / `hoody agent memory edit-item` / `hoody agent memory delete-item`) carry no such restriction. `hoody agent memory search` / `hoody agent memory get-graph` also return `503 store_unavailable` while the store is still warming — retry rather than treating it as an empty result.
- **Todos** — `hoody agent todos list` / `hoody agent todos create` to file; then `hoody agent todos triage` (LLM inbox pass), `hoody agent todos claim` / `hoody agent todos release`, `hoody agent todos run` (dispatch a background orchestrator — returns `{job_id, session_id}`), `hoody agent todos cancel-run` to abort an in-flight run, and `hoody agent todos approve-proposal` / `hoody agent todos deny-proposal` to resolve a proposed run — approve is NOT inert: it spawns a background worker session equivalent to `hoody agent todos run` (a J-class autonomous run that spends model budget), while `hoody agent todos deny-proposal` spawns nothing — plus `hoody agent todos snooze` / `hoody agent todos archive`. To advance a todo through its lifecycle (inbox→active→done) or edit its fields, `hoody agent todos update` applies a CAS-guarded patch / `state` transition — read the todo's OWN `revision` with `hoody agent todos get` and pass it back (`hoody agent todos get-revision` is a store-wide change cursor, NOT the CAS token; a stale value → `409 todo_conflict`); a stale revision is rejected (409). `hoody agent todos archive` is not terminal — `hoody agent todos purge` permanently and irreversibly destroys all archived todos (no confirmation gate; treat as destructive). Mind the comment split: `hoody agent todos post-comment` (`/messages`, plural) only appends a comment, whereas `hoody agent todos message` (`/message`, singular) ALSO kicks an orchestrator turn — a budget-spending LLM run that returns `{job_id}` — so use the plural form for a plain note. Note `hoody agent todos run` / `hoody agent todos triage` / `hoody agent todos approve-proposal` are J-class autonomous runs with NO confirmation gate on the RPC (reaching the RPC is itself treated as the human approval; that denial lives only on the model-facing `run_todo` *tool*), so calling them from automation silently dispatches a real LLM run — gate them in your own caller.
- **Workflows** — `hoody agent workflows list` / `hoody agent workflows get` / `hoody agent workflows put` / `hoody agent workflows delete` / `hoody agent workflows hide` manage saved definitions; `hoody agent workflows run-session` dispatches one onto a live session and returns a JOB, not a run (optionally seed the run with a `{ prompt }` body — input text fed to the workflow) — poll `hoody agent jobs get` until its `run_id` populates (null during the brief dispatch window), then track via `hoody agent workflows list-runs` / `hoody agent workflows get-run` and stop with `hoody agent workflows cancel-run`; feed a running workflow with `hoody agent sessions post-workflow-message` (`{ text }`). Run events flow on the owning session's stream, not a per-run bus.
- **Agent profiles** — `hoody agent agents list` to enumerate named profiles; `hoody agent agents create` / `hoody agent agents copy` / `hoody agent agents rename` / `hoody agent agents delete`; `hoody agent agents get-source` → edit → `hoody agent agents put-source` (pass `base_gen` from the read for conflict detection); `hoody agent agents set-model` / `hoody agent agents set-tools` / `hoody agent agents toggle-tool` / `hoody agent agents set-turns` / `hoody agent agents reset-to-shipped`. To make a session use a profile, `hoody agent sessions set-chat-agent` (`{ agent }`) — that selects, it does NOT edit the profile. Two daemon guard rails: `hoody agent agents delete` refuses a shipped-default profile or the configured default chat agent (`is_error:true` — use `hoody agent agents reset-to-shipped` or `hoody agent agents put-source` instead), and `hoody agent agents reset-to-shipped` refuses a profile that has no shipped default (`is_error:true`).

### 6. Fire-and-observe, recurring prompts, and re-attach

- **Fire-and-observe** — `hoody agent sessions post-message` with `{ text }` dispatches a turn and returns `{ job_id }` immediately (HTTP 202) without streaming or blocking; watch completion via `agent_done` on `hoody agent sessions stream`. Refuses with 409 `turn_in_flight` if a turn is running, or 409 `gate_parked` if a gate is open.
- **Observe / re-attach** — `hoody agent sessions stream` attaches (WebSocket primary, SSE fallback) to a live session's full `event.*` stream; pass `since` (gateway int64 seq, or the `Last-Event-ID` header) to resume from the 1024-event replay ring after a disconnect (a gap past eviction yields `event: lagged {code:replay_gap}`). `hoody agent sessions replay` returns the buffered event tail of a *live* session (with `min_seq`/`max_seq`) for a one-shot catch-up (only a *live* session has this ring; for a non-live session there is nothing to replay — attach via `hoody agent sessions stream` to receive the daemon's `event.replay` instead).
- **Recurring prompts (loops)** — `hoody agent loops create` with `{ prompt, interval }` (plus optional `max_runs` / `stop_when` / `max_cost_usd` / `max_wall_ms` caps) schedules a prompt to re-fire on a live session; `hoody agent loops list` / `hoody agent loops update` (pause via `{ paused: true }`) / `hoody agent loops delete` to manage, `hoody agent loops run-now` to fire one immediately. Loops are entirely session-scoped.

### 7. Headless one-shot run

`hoody agent headless create-run` for a non-interactive invocation that returns a job handle; poll `hoody agent jobs get` and fetch the output with `hoody agent jobs get-result`.

### 8. Configure MCP servers for a session

Reads first: `hoody agent mcp list` (`{ session_id }`) returns the EFFECTIVE merged `mcp_servers` config, the per-layer settings files behind it, and each server's LIVE runtime state (connected, negotiated protocol revision, tool count, pid, revocation reason, recent stderr). Every write is TWO steps: `hoody agent mcp begin-write` (`{ session_id, op, scope }`, op ∈ `upsert`|`delete`|`set_enabled`|`import`, scope ∈ `user` (default)|`project`|`local`) mints a single-use nonce bound to {session, op, resolved settings path} and returns the target path plus the current `mcp_servers` hash — then present that `nonce` plus the hash as `expect_hash` on the matching `hoody agent mcp upsert` / `hoody agent mcp delete` / `hoody agent mcp set-enabled` / `hoody agent mcp import`. BOTH are required on every write: skipping step one fails closed, a nonce minted for a different op or scope fails closed, and `expect_hash` has no omit-it default — a first write into a settings file that does not exist yet states that expectation with the empty-array hash rather than leaving the field out. To adopt someone else's config, preview it with `hoody agent mcp parse` (`{ session_id, document }` — writes nothing, needs no nonce, strips credential values) and then `hoody agent mcp import` with a fresh `op: "import"` nonce; imported servers land DISABLED, so enable each one with `hoody agent mcp set-enabled`. After editing a settings file by hand, or to recover a server that died, `hoody agent mcp reconnect` (`{ session_id }`) re-reads the layers and reconciles every live session's pool — a healthy unchanged server is not restarted. `hoody agent mcp probe` trials a candidate config without saving it, but it is human-only (see Common errors).

## Quirks & gotchas

- The bare `hoody agent` verb is a **hand-written TUI launcher** (`cli/agent-command.ts`), distinct from this generated HTTP namespace; they coexist — the launcher opens the in-container Agent TUI, the namespace is the typed control surface.
- Source of truth is the `hoody-agent-d` gateway's own OpenAPI document, served at `GET /api/v1/agent/openapi.{json,yaml}`; every route lives under the single `/api/v1/agent` prefix. The kit URL is itself the credential; no HTTP bearer header is required.
- The proxy service slug is `agent` and the kit URL host carries the index segment (`-agent-{index}`); resolve it via `getKitUrl('agent', container)` rather than hand-building.
- `hoody agent sessions prompt-sync` blocks until the turn finishes (or returns `{pending_gate}` the moment a turn parks on a confirm/question) — long un-parked agent turns can still exceed default HTTP client timeouts; prefer streamed prompting for anything non-trivial so you can observe progress and resolve gates as they arrive. (Stream the turn with `hoody agent prompt "<task>" -c <id>` — the user-facing launcher reads the daemon's SSE for you; the generated `prompt-stream` subcommand is the raw, hidden form.)For non-interactive turns where you cannot resolve gates by hand, enable the `auto_approve` gate policy on `hoody agent sessions prompt-stream` / `hoody agent sessions prompt-sync` to auto-approve confirm gates for the life of the turn (off by default) — HTTP: `?policy=auto_approve` (or the `X-Hoody-Gate-Policy: auto_approve` header); SDK: `policy: 'auto_approve'` in the prompt options; the generated CLI: `--policy auto_approve`. Note this only answers **confirm** gates, never questions. (`hoody agent prompt` takes `-y/--yes` as the shorthand for `?policy=auto_approve`; the bare TUI launcher has no such flag.)- Every prompt/gate/cancel call is **session-scoped** — you must hold a session id from `hoody agent sessions create` first; there is no implicit default session. Hook writes are session-scoped too (the guarded writes — `hoody agent hooks upsert` / `hoody agent hooks delete` / `hoody agent hooks toggle` / `hoody agent hooks disable-all` — plus `hoody agent hooks begin-write`, and the side-effecting `hoody agent hooks test` / `hoody agent hooks ack-trust`, all require a live `session_id` — `hoody agent hooks ack-trust` clears the per-session hook-trust prompt (the execution-trust probe `hoody agent hooks list` reports), the gate that must be acknowledged before any hook command is allowed to fire, mirroring `hoody agent skills trust` for skills; `hoody agent hooks reload` accepts one only to also return the reloaded summary) AND nonce-guarded: call `hoody agent hooks begin-write` (`{ session_id, op, scope }`, op ∈ upsert|delete|toggle|set_disabled) to mint a single-use nonce, then pass that `nonce` on the matching `hoody agent hooks upsert` / `hoody agent hooks delete` / `hoody agent hooks toggle` / `hoody agent hooks disable-all` — the nonce binds to that session+op+scope tuple and the write fails closed without it. Note hooks are an arbitrary-command surface: `hoody agent hooks upsert` persists a command that fires on lifecycle events and `hoody agent hooks test` executes one immediately. The human-only confirmation gate lives only on the model-facing tool path, not on these RPCs, and the gateway HTTP edge has no app-level admin gate — the same access that authorizes any agent-kit call authorizes these too, with nothing extra, so gating this surface is the caller's/proxy's responsibility.
- **Credential VALUES are never returned by the MCP surface.** `hoody agent mcp list` reports `env_keys` / `header_keys` — key NAMES only — because a redacted value invites a client to write the placeholder back as the real secret; a write whose body carries the redaction placeholder for a credential is REFUSED rather than stored. To change a secret you must supply its real value; to leave one alone, omit the field — `hoody agent mcp upsert` merges FIELD BY FIELD over the existing entry of the same name, so omitted fields keep their stored value (including fields this build does not model), and `hoody agent mcp set-enabled` flips only the `enabled` flag so credentials and options survive a disable. Writes apply to live sessions before the response returns: a deleted, disabled, or re-pointed server is REVOKED in every live session first (a stdio child is reaped when its last holder releases), so a caller mid-turn cannot still reach it. Import is WHOLE-BATCH — one bad entry aborts everything — it understands the hoody (`mcp_servers` list), Claude/Cursor (`mcpServers` map) and VS Code (`servers` map) dialects, and REFUSES a document carrying more than one of them rather than guessing.

## Common errors

- A gate or question left unresolved stalls the turn — a streamed prompt that emitted an `event.confirm_request` (confirm gate) or `event.user_question` (question gate) will not complete until you answer it: `hoody agent sessions confirm-gate` for a confirm, `hoody agent sessions answer-question` for a question. For unattended runs, arm `hoody agent sessions set-auto-reply` (a self-driving auto-user loop), or pass `policy: "auto_approve"` on the prompt — but `auto_approve` only auto-approves **confirm** gates, never questions; a parked question still stalls until `hoody agent sessions answer-question` (or the auto-reply loop) answers it.
- `hoody agent tasks list` and `hoody agent tasks request-transcript` do NOT return data inline — they ask a *live* session to emit its background-subagent snapshot/transcript onto the session's WebSocket/SSE stream (`event.tasks_snapshot` for the snapshot, `event.task_transcript` for the transcript) and return only a JSON ack; you must already be attached via `hoody agent sessions stream` to receive the payload. `hoody agent tasks cancel` / `hoody agent tasks cancel-all` stop background tasks mid-turn (server-layer; tasks survive `hoody agent sessions cancel` but are not restartable).
- `hoody agent memory consolidate` (POST /memory/consolidate) is **human-only and ALWAYS fails over this namespace** — the gateway server-stamps a machine marker and the daemon's non-bypassable gate returns `403 human_only` for every HTTP/SDK/CLI call; it can only be triggered from an interactive human session. Do not call it programmatically.
- `hoody agent mcp probe` (POST /mcp/probe) is **human-only and ALWAYS fails over this namespace** — probing STARTS A PROCESS (stdio) or makes an outbound request to a caller-chosen URL (http/sse), so a machine caller may not self-approve it and receives `403 human_only` on every HTTP/SDK/CLI call. The surface still exposes it for completeness, it simply always refuses. The deny list is still enforced on the candidate config before anything is started. Use `hoody agent mcp parse` for a write-free preview instead; there is no programmatic substitute for the live trial.
- An MCP write needs BOTH a `nonce` and an `expect_hash` — neither is optional, and a stale hash is a CONFLICT rather than a silent overwrite. `hoody agent mcp upsert` / `hoody agent mcp delete` / `hoody agent mcp set-enabled` / `hoody agent mcp import` each require a fresh single-use `nonce` from `hoody agent mcp begin-write` minted for that exact op and scope (one minted for a different op or scope fails closed) AND the `mcp_servers` hash you last read, from either `hoody agent mcp begin-write` or `hoody agent mcp list`. A mismatch means someone else edited the layer since you read it — re-read, re-mint, retry; each nonce is good for exactly one write, so a retry always needs a new one. There is no "omit it for the first write" shortcut: writing into a settings file that does not exist yet means passing the empty-array hash.
- `hoody agent workflows delete` only removes **user** workflows — built-in/**system** workflows are refused (`is_error:true`) and re-seed on every boot; `hoody agent workflows hide` is the only way to remove a system workflow from view.
- Empty values on agent-profile edits mean *inherit / unrestrict*, not *clear to nothing*: `hoody agent agents set-model` with `model: ""` removes the model line (falls back to the default model), and `hoody agent agents set-tools` with `tools: []` removes the allow-list line, which means **all tools are allowed** (NOT zero). Pass a non-empty `tools` array to genuinely restrict.
- Prompting with no usable model/provider configured fails the turn — check `hoody agent models list-providers` returns a ready provider before you prompt (blocking or streamed).
- Calling prompt/gate/cancel against a session whose live connection was torn down (`hoody agent sessions close`, or `hoody agent sessions delete` without `hard`) returns not-found — re-attach with `hoody agent sessions create` if the record survives, or start fresh with `hoody agent sessions create`. After a *hard* `hoody agent sessions delete` (the `hard` flag set) the record is gone and only a fresh `hoody agent sessions create` works.

## Related namespaces

`terminal`, `exec`, `files`, `notes`, `api`.

## Reference

### `hoody agent` (171) — AI agent — sessions, prompting, models, skills, memory, todos, workflows

| Command | Aliases | Category | Summary | SDK Link | Example |
|---------|---------|----------|---------|----------|---------|
| `hoody agent agents copy` |  | write | Copy a chat agent | `agent.agents.copyAgent` | `hoody agent agents copy --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --new-name <new_name>` |
| `hoody agent agents create` |  | write | Create a chat-agent definition | `agent.agents.createAgent` | `hoody agent agents create --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --name my-resource --frontmatter <frontmatter> --system-prompt <system_prompt>` |
| `hoody agent agents delete` |  | write | Delete a custom chat agent | `agent.agents.deleteAgent` | `hoody agent agents delete --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent agents get-source` |  | read | Read a chat agent's source | `agent.agents.getAgentSource` | `hoody agent agents get-source --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent agents list` |  | read | List chat-agent definitions | `agent.agents.listAgentsIterator` | `hoody agent agents list --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent agents put-source` |  | write | Write a chat agent's source | `agent.agents.putAgentSource` | `hoody agent agents put-source --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --content "Hello" --base-gen 10` |
| `hoody agent agents rename` |  | write | Rename a chat agent | `agent.agents.renameAgent` | `hoody agent agents rename --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --new-name <new_name>` |
| `hoody agent agents reset-to-shipped` |  | write | Reset an agent to its shipped default | `agent.agents.resetAgentToShipped` | `hoody agent agents reset-to-shipped --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent agents set-model` |  | write | Set an agent's model | `agent.agents.setAgentModel` | `hoody agent agents set-model --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --model openai/gpt-5.4-nano` |
| `hoody agent agents set-tools` |  | write | Set an agent's tool allow-list | `agent.agents.setAgentTools` | `hoody agent agents set-tools --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --tools <tools>` |
| `hoody agent agents set-turns` |  | write | Set an agent's max-turns | `agent.agents.setAgentTurns` | `hoody agent agents set-turns --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --turns 10` |
| `hoody agent agents toggle-tool` |  | write | Toggle a single tool for an agent | `agent.agents.toggleAgentTool` | `hoody agent agents toggle-tool --name my-resource --tool abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent discovery list-containers` |  | read | List containers in a realm (for binding) | `agent.discovery.listContainersIterator` | `hoody agent discovery list-containers --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent discovery list-realms` |  | read | List realms (for binding) | `agent.discovery.listRealmsIterator` | `hoody agent discovery list-realms --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent github auth-status` |  | read | GitHub auth status | `agent.github.githubAuthStatus` | `hoody agent github auth-status --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent github branches` |  | read | List GitHub branches | `agent.github.githubBranches` | `hoody agent github branches --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent github clone` |  | write | Clone a GitHub repository | `agent.github.githubClone` | `hoody agent github clone --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --repo my-repo --dir <dir> --full-name <full_name> --clone-url https://example.com --shallow` |
| `hoody agent github commit` |  | write | Stage all and commit | `agent.github.githubCommit` | `hoody agent github commit --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --message "Hello"` |
| `hoody agent github login` |  | write | Start a GitHub device-flow login (or add a PAT) | `agent.github.githubLogin` | `hoody agent github login --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --token <token> --host example.com --activate` |
| `hoody agent github login-poll` |  | write | Poll a GitHub device-flow login to completion | `agent.github.githubLoginPoll` | `hoody agent github login-poll --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --host example.com --device-code <device_code> --interval 10 --expires-in 10` |
| `hoody agent github pull-request` |  | write | Open a pull request | `agent.github.githubPullRequest` | `hoody agent github pull-request --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --title "My Title" --body '{}' --base <base>` |
| `hoody agent github repos` |  | read | List GitHub repos | `agent.github.githubRepos` | `hoody agent github repos --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent github status` |  | read | GitHub working-tree status | `agent.github.githubStatus` | `hoody agent github status --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent github sync` |  | write | Sync (fetch → pull → push) | `agent.github.githubSync` | `hoody agent github sync --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --direction <direction>` |
| `hoody agent hooks ack-trust` |  | write | Acknowledge hook trust | `agent.hooks.ackHookTrust` | `hoody agent hooks ack-trust --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent hooks begin-write` |  | write | Begin a hook write (nonce) | `agent.hooks.beginHookWrite` | `hoody agent hooks begin-write --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --op <op> --scope workspace` |
| `hoody agent hooks delete` |  | write | Delete a hook | `agent.hooks.deleteHook` | `hoody agent hooks delete --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope workspace` |
| `hoody agent hooks disable-all` |  | write | Disable all hooks | `agent.hooks.disableAllHooks` | `hoody agent hooks disable-all --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope workspace` |
| `hoody agent hooks list` |  | read | List hooks | `agent.hooks.listHooks` | `hoody agent hooks list --session-id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent hooks reload` |  | write | Reload hooks from disk | `agent.hooks.reloadHooks` | `hoody agent hooks reload --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent hooks test` |  | write | Test-fire a hook | `agent.hooks.testHook` | `hoody agent hooks test --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent hooks toggle` |  | write | Toggle a hook | `agent.hooks.toggleHook` | `hoody agent hooks toggle --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope workspace` |
| `hoody agent hooks upsert` |  | write | Upsert a hook | `agent.hooks.upsertHook` | `hoody agent hooks upsert --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope workspace --event <event> --matcher <matcher> --command "ls -la" --timeout 10 --name my-resource --description "My description"` |
| `hoody agent jobs delete` |  | write | Cancel a pending/running job, or delete a finished record | `agent.jobs.deleteJob` | `hoody agent jobs delete --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent jobs get` |  | read | Get an async job's status | `agent.jobs.getJob` | `hoody agent jobs get --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent jobs get-result` |  | read | Get an async job's result | `agent.jobs.getJobResult` | `hoody agent jobs get-result --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent logs logs-sources` |  | read | Log sources | `agent.logs.logsSources` | `hoody agent logs logs-sources --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent logs logs-stats` |  | read | Log statistics | `agent.logs.logsStats` | `hoody agent logs logs-stats --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent logs query-logs` |  | read | Query logs | `agent.logs.queryLogs` | `hoody agent logs query-logs --source nix --level <level> --host example.com --since 2026-01-01T00:00:00Z --until 2026-01-01T00:00:00Z --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent logs read-log-entry` |  | read | Read a log entry | `agent.logs.readLogEntry` | `hoody agent logs read-log-entry --ref abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent loops create` |  | write | Create a loop | `agent.loops.createLoop` | `hoody agent loops create --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --prompt <prompt> --interval <interval> --max-runs 10 --stop-when <stop_when> --max-cost-usd 10 --max-wall-ms 100` |
| `hoody agent loops delete` |  | write | Delete a loop | `agent.loops.deleteLoop` | `hoody agent loops delete --id abc-123 --loop-id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent loops list` |  | read | List a session's loops | `agent.loops.listLoopsIterator` | `hoody agent loops list --id abc-123 --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent loops run-now` |  | write | Run a loop immediately | `agent.loops.runLoopNow` | `hoody agent loops run-now --id abc-123 --loop-id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent loops update` |  | write | Update a loop | `agent.loops.updateLoop` | `hoody agent loops update --id abc-123 --loop-id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --paused --expires-in <expires_in> --max-cost-usd 10 --max-wall-ms 100` |
| `hoody agent mcp begin-write` |  | write | Mint the single-use nonce every MCP write requires | `agent.mcp.beginMCPWrite` | `hoody agent mcp begin-write --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --op upsert --scope user` |
| `hoody agent mcp delete` |  | write | Delete an MCP server (needs a begin-write nonce + expect-hash) | `agent.mcp.deleteMCPServer` | `hoody agent mcp delete --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope user --name my-resource --expect-hash <expect_hash>` |
| `hoody agent mcp import` |  | write | Import MCP servers from a Claude/Cursor/VS Code config (needs a begin-write nonce + expect-hash) | `agent.mcp.importMCPServers` | `hoody agent mcp import --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope user --document <document> --servers <servers> --replace --expect-hash <expect_hash>` |
| `hoody agent mcp list` |  | read | List configured MCP servers with live connection state | `agent.mcp.listMCPServers` | `hoody agent mcp list --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent mcp parse` |  | read | Preview what a config document would import (writes nothing) | `agent.mcp.parseMCPImport` | `hoody agent mcp parse --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --document <document>` |
| `hoody agent mcp probe` |  | write | Try a candidate MCP server config without saving it (human-only) | `agent.mcp.probeMCPServer` | `hoody agent mcp probe --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --server srv-abc` |
| `hoody agent mcp reconnect` |  | write | Reload MCP config from disk and reconnect live sessions | `agent.mcp.reconnectMCP` | `hoody agent mcp reconnect --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123` |
| `hoody agent mcp set-enabled` |  | write | Enable or disable an MCP server (needs a begin-write nonce + expect-hash) | `agent.mcp.setMCPServerEnabled` | `hoody agent mcp set-enabled --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope user --name my-resource --enabled --expect-hash <expect_hash>` |
| `hoody agent mcp upsert` |  | write | Create or update an MCP server (needs a begin-write nonce + expect-hash) | `agent.mcp.upsertMCPServer` | `hoody agent mcp upsert --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --session-id abc-123 --nonce <nonce> --scope user --expect-hash <expect_hash> --server srv-abc` |
| `hoody agent memory consolidate` |  | write | Trigger a memory consolidation pass (human-only) | `agent.memory.consolidateMemory` | `hoody agent memory consolidate --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --project proj-abc --min-observations 10` |
| `hoody agent memory delete-item` |  | write | Delete a memory item | `agent.memory.deleteMemoryItem` | `hoody agent memory delete-item --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --id abc-123 --project proj-abc --kind create` |
| `hoody agent memory edit-item` |  | write | Edit a memory item | `agent.memory.editMemoryItem` | `hoody agent memory edit-item --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --project proj-abc --kind create --content "Hello"` |
| `hoody agent memory flush` |  | write | Flush the memory store | `agent.memory.flushMemory` | `hoody agent memory flush --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent memory get-graph` |  | read | Read a project's memory relation graph | `agent.memory.getMemoryGraph` | `hoody agent memory get-graph --project proj-abc --node-type <node_type> --limit 10 --offset 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent memory get-item` |  | read | Read a memory item | `agent.memory.getMemoryItem` | `hoody agent memory get-item --id abc-123 --project proj-abc --kind create --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent memory list-items` |  | read | List memory items | `agent.memory.listMemoryItemsIterator` | `hoody agent memory list-items --project proj-abc --kind create --type default --query "my search" --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent memory list-projects` |  | read | List memory projects | `agent.memory.listMemoryProjectsIterator` | `hoody agent memory list-projects --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent memory save-item` |  | write | Save a memory item | `agent.memory.saveMemoryItem` | `hoody agent memory save-item --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --project proj-abc --content "Hello" --type default` |
| `hoody agent memory search` |  | write | Search memory (hybrid recall) | `agent.memory.searchMemory` | `hoody agent memory search --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --project proj-abc --query "my search" --limit 10 --kinds create --skip-graph` |
| `hoody agent memory set-enabled` |  | write | Toggle memory capture | `agent.memory.setMemoryEnabled` | `hoody agent memory set-enabled --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --enabled` |
| `hoody agent models add-provider-account` |  | write | Add an OAuth account to a provider's pool | `agent.models.addProviderAccount` | `hoody agent models add-provider-account --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent models delete-provider-api-key` |  | write | Delete a provider API key | `agent.models.deleteProviderAPIKey` | `hoody agent models delete-provider-api-key --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models get` |  | read | Get a model by spec | `agent.models.getModel` | `hoody agent models get --spec abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models get-provider` |  | read | Get a provider | `agent.models.getProvider` | `hoody agent models get-provider --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models get-provider-auth` |  | read | Get a provider's auth status | `agent.models.getProviderAuth` | `hoody agent models get-provider-auth --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models list` |  | read | List models | `agent.models.listModelsIterator` | `hoody agent models list --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models list-provider-accounts` |  | read | List a provider's OAuth account pool | `agent.models.listProviderAccountsIterator` | `hoody agent models list-provider-accounts --id abc-123 --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models list-providers` |  | read | List LLM providers | `agent.models.listProvidersIterator` | `hoody agent models list-providers --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models logout-provider-o-auth` |  | write | Remove a provider's OAuth login | `agent.models.logoutProviderOAuth` | `hoody agent models logout-provider-o-auth --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models poll-provider-o-auth` |  | read | Poll a provider OAuth login | `agent.models.pollProviderOAuth` | `hoody agent models poll-provider-o-auth --id abc-123 --job abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models remove-provider-account` |  | write | Remove a pooled OAuth account | `agent.models.removeProviderAccount` | `hoody agent models remove-provider-account --id abc-123 --key <key> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent models set-provider-account-active` |  | write | Make a pooled OAuth account active | `agent.models.setProviderAccountActive` | `hoody agent models set-provider-account-active --id abc-123 --key <key> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent models set-provider-api-key` |  | write | Store a provider API key | `agent.models.setProviderAPIKey` | `hoody agent models set-provider-api-key --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --api-key <api_key>` |
| `hoody agent models set-provider-default` |  | write | Set a provider's default credential method | `agent.models.setProviderDefault` | `hoody agent models set-provider-default --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --default <default>` |
| `hoody agent models start-provider-o-auth` |  | write | Start a provider OAuth login | `agent.models.startProviderOAuth` | `hoody agent models start-provider-o-auth --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --add-account` |
| `hoody agent models submit-provider-o-auth-code` |  | write | Submit a provider OAuth authorization code | `agent.models.submitProviderOAuthCode` | `hoody agent models submit-provider-o-auth-code --id abc-123 --job abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --code <code>` |
| `hoody agent open` |  | action | Open the Agent kit service in your browser |  | `hoody agent open [index] [--url]` |
| `hoody agent sessions answer-assist` |  | write | Propose answers for a parked question (helper model) | `agent.sessions.answerAssist` | `hoody agent sessions answer-assist --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --mode stable --model openai/gpt-5.4-nano --gen 10` |
| `hoody agent sessions answer-question` |  | write | Answer a parked question gate | `agent.sessions.answerQuestion` | `hoody agent sessions answer-question --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --gate-id abc-123 --generation 10 --answer <answer> --text "Hello" --answers <answers>` |
| `hoody agent sessions cancel` |  | write | Cancel the active turn (Esc) | `agent.sessions.cancelSession` | `hoody agent sessions cancel --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent sessions close` |  | write | Close the session (teardown) | `agent.sessions.closeSession` | `hoody agent sessions close --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent sessions confirm-gate` |  | write | Answer a parked confirm gate | `agent.sessions.confirmGate` | `hoody agent sessions confirm-gate --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --gate-id abc-123 --generation 10 --approved --persist-dirs` |
| `hoody agent sessions create` |  | write | Create, fork, or attach a session | `agent.sessions.createSession` | `hoody --container ctr-abc agent sessions create --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --cwd <cwd> --config-dir <config_dir> --model openai/gpt-5.4-nano --agent my-agent --tool-mode <tool_mode> --dir-scope <dir_scope> --attach <attach> --fork <fork> --fork-turn-idx 10 --backend <backend> --delegated-agent <delegated_agent> --headless` |
| `hoody agent sessions delete` |  | write | Close (and optionally hard-delete) a session | `agent.sessions.deleteSession` | `hoody agent sessions delete --id abc-123 --hard --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent sessions get` |  | read | Get a session summary | `agent.sessions.getSession` | `hoody agent sessions get --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent sessions list` |  | read | List sessions | `agent.sessions.listSessionsIterator` | `hoody agent sessions list --include-system --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent sessions list-cwds` |  | read | List distinct session working directories | `agent.sessions.listSessionCwds` | `hoody agent sessions list-cwds --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent sessions post-workflow-message` |  | write | Send a message to a running workflow | `agent.sessions.postWorkflowMessage` | `hoody agent sessions post-workflow-message --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --text "Hello"` |
| `hoody agent sessions prompt-sync` |  | write | Dispatch a turn and block to completion | `agent.sessions.promptSync` | `hoody agent sessions prompt-sync --id abc-123 --policy <policy> --x-hoody-gate-policy <x_hoody_gate_policy> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --text "Hello" --tool-mode <tool_mode> --dir-scope <dir_scope>` |
| `hoody agent sessions replay` |  | read | Replay a live session's buffered events | `agent.sessions.replaySession` | `hoody agent sessions replay --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent sessions set-auto-reply` |  | write | Arm/disarm the auto-reply loop | `agent.sessions.setSessionAutoReply` | `hoody agent sessions set-auto-reply --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --armed --rounds 10 --model openai/gpt-5.4-nano --allow-writes` |
| `hoody agent sessions set-auto-reply-writes` |  | write | Flip the auto-reply write opt-in | `agent.sessions.setSessionAutoReplyWrites` | `hoody agent sessions set-auto-reply-writes --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --allow-writes` |
| `hoody agent sessions set-chat-agent` |  | write | Switch the chat agent | `agent.sessions.setSessionAgent` | `hoody agent sessions set-chat-agent --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --agent my-agent` |
| `hoody agent sessions set-effort` |  | write | Set reasoning effort | `agent.sessions.setSessionEffort` | `hoody agent sessions set-effort --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --effort <effort>` |
| `hoody agent sessions set-hoody-env` |  | write | Toggle Hoody shell-env injection | `agent.sessions.setSessionHoodyEnv` | `hoody agent sessions set-hoody-env --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --enabled` |
| `hoody agent sessions set-model` |  | write | Switch the session model | `agent.sessions.setSessionModel` | `hoody agent sessions set-model --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --model openai/gpt-5.4-nano` |
| `hoody agent sessions set-verbosity` |  | write | Set response verbosity | `agent.sessions.setSessionVerbosity` | `hoody agent sessions set-verbosity --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --level <level>` |
| `hoody agent sessions trim` |  | write | Trim session history to a turn index | `agent.sessions.trimSession` | `hoody agent sessions trim --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --turn-idx 10` |
| `hoody agent settings delete-fusion` |  | write | Delete a fusion composite | `agent.settings.deleteFusion` | `hoody agent settings delete-fusion --slug abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent settings get` |  | read | Get settings | `agent.settings.getSettings` | `hoody agent settings get --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent settings get-acp-status` |  | read | Get BYOA ACP backend status | `agent.settings.getACPStatus` | `hoody agent settings get-acp-status --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent settings list-fusion` |  | read | List fusion composites | `agent.settings.listFusionIterator` | `hoody agent settings list-fusion --include-invalid --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent settings patch` |  | write | Patch settings | `agent.settings.patchSettings` | `hoody agent settings patch --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --patch <patch>` |
| `hoody agent settings set-acp-secret` |  | write | Store an ACP per-agent secret value | `agent.settings.setACPSecret` | `hoody agent settings set-acp-secret --agent my-agent --key <key> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --value "hello"` |
| `hoody agent settings upsert-fusion` |  | write | Create or update a fusion composite | `agent.settings.upsertFusion` | `hoody agent settings upsert-fusion --slug abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --spec <spec>` |
| `hoody agent skills apply-import` |  | write | Apply a skill import | `agent.skills.applySkillImport` | `hoody agent skills apply-import --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent skills clear-hub-cache` |  | write | Clear the skill hub cache | `agent.skills.clearSkillHubCache` | `hoody agent skills clear-hub-cache --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent skills create` |  | write | Create a skill | `agent.skills.createSkill` | `hoody agent skills create --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --name my-resource --description "My description" --content "Hello"` |
| `hoody agent skills delete` |  | write | Delete a skill | `agent.skills.deleteSkill` | `hoody agent skills delete --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --root-dir <root_dir> --rel-dir <rel_dir>` |
| `hoody agent skills get-hub-cache` |  | read | Skill hub cache stats | `agent.skills.getSkillHubCache` | `hoody agent skills get-hub-cache --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent skills get-source` |  | read | Read a skill's source | `agent.skills.getSkillSource` | `hoody agent skills get-source --root-dir <root_dir> --rel-dir <rel_dir> --root <root> --rel <rel> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent skills install-hub` |  | write | Install a hub skill | `agent.skills.installSkillHub` | `hoody agent skills install-hub --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --id abc-123` |
| `hoody agent skills list` |  | read | List skills | `agent.skills.listSkillsIterator` | `hoody agent skills list --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent skills preview-hub` |  | read | Preview a hub skill | `agent.skills.previewSkillHub` | `hoody agent skills preview-hub --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent skills put-source` |  | write | Write a skill's source | `agent.skills.putSkillSource` | `hoody agent skills put-source --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --root-dir <root_dir> --rel-dir <rel_dir> --content "Hello" --base-gen 10` |
| `hoody agent skills rename` |  | write | Rename a skill | `agent.skills.renameSkill` | `hoody agent skills rename --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --root-dir <root_dir> --rel-dir <rel_dir> --new-name <new_name>` |
| `hoody agent skills scan-import` |  | read | Scan for importable skills | `agent.skills.scanSkillImport` | `hoody agent skills scan-import --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent skills search-hub` |  | read | Search the skill hub | `agent.skills.searchSkillHub` | `hoody agent skills search-hub --q <q> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent skills toggle` |  | write | Enable/disable a skill | `agent.skills.toggleSkill` | `hoody agent skills toggle --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --name my-resource --disabled` |
| `hoody agent skills trust` |  | write | Set a skill's trust state | `agent.skills.trustSkill` | `hoody agent skills trust --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --root-dir <root_dir> --rel-dir <rel_dir> --trusted` |
| `hoody agent statistics get` |  | read | Cross-session statistics | `agent.statistics.getStatistics` | `hoody agent statistics get --scope cwd --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent statistics usage-by-account` |  | read | Usage rollup by account | `agent.statistics.usageByAccount` | `hoody agent statistics usage-by-account --since 1750000000 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent statistics usage-by-model` |  | read | Usage rollup by model | `agent.statistics.usageByModel` | `hoody agent statistics usage-by-model --since 1750000000 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent system docs` |  | read | API documentation UI | `agent.system.docs` | `hoody agent system docs` |
| `hoody agent system health-check` |  | read | Standardized health check | `agent.system.healthCheck` | `hoody agent system health-check` |
| `hoody agent system metrics` |  | read | Prometheus metrics | `agent.system.metrics` | `hoody agent system metrics` |
| `hoody agent system openapi-json` |  | read | OpenAPI spec (JSON) | `agent.system.openapiJSON` | `hoody agent system openapi-json` |
| `hoody agent system openapi-yaml` |  | read | OpenAPI spec (YAML) | `agent.system.openapiYAML` | `hoody agent system openapi-yaml` |
| `hoody agent tasks cancel` |  | write | Cancel a background task | `agent.tasks.cancelTask` | `hoody agent tasks cancel --id abc-123 --tid abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tasks cancel-all` |  | write | Cancel all background tasks | `agent.tasks.cancelAllTasks` | `hoody agent tasks cancel-all --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tasks list` |  | read | Request the session's task snapshot | `agent.tasks.listTasks` | `hoody agent tasks list --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tasks request-transcript` |  | read | Request a task's transcript (upsert-poll) | `agent.tasks.requestTaskTranscript` | `hoody agent tasks request-transcript --id abc-123 --tid abc-123 --after-seq 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent todos approve-proposal` |  | write | Approve a todo proposal | `agent.todos.approveTodoProposal` | `hoody agent todos approve-proposal --id abc-123 --pid 1234 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent todos archive` |  | write | Archive a todo | `agent.todos.archiveTodo` | `hoody agent todos archive --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --revision 10` |
| `hoody agent todos cancel-run` |  | write | Cancel a todo's run | `agent.todos.cancelTodoRun` | `hoody agent todos cancel-run --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent todos claim` |  | write | Claim a todo | `agent.todos.claimTodo` | `hoody agent todos claim --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --revision 10` |
| `hoody agent todos create` |  | write | File a todo | `agent.todos.createTodo` | `hoody agent todos create --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --title "My Title" --body '{}' --priority 10 --tags "tag1,tag2" --cwd <cwd>` |
| `hoody agent todos deny-proposal` |  | write | Deny a todo proposal | `agent.todos.denyTodoProposal` | `hoody agent todos deny-proposal --id abc-123 --pid 1234 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent todos get` |  | read | Read a todo | `agent.todos.getTodo` | `hoody agent todos get --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent todos get-revision` |  | read | Get the todos store revision | `agent.todos.getTodosRevision` | `hoody agent todos get-revision --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent todos list` |  | read | List todos | `agent.todos.listTodosIterator` | `hoody agent todos list --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --states <states> --tags "tag1,tag2" --query "my search" --open-only --all` |
| `hoody agent todos message` |  | write | Comment + run an orchestrator turn | `agent.todos.messageTodo` | `hoody agent todos message --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --text "Hello"` |
| `hoody agent todos post-comment` |  | write | Comment on a todo | `agent.todos.postTodoComment` | `hoody agent todos post-comment --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --text "Hello"` |
| `hoody agent todos purge` |  | write | Purge archived todos | `agent.todos.purgeTodos` | `hoody agent todos purge --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent todos release` |  | write | Release a todo | `agent.todos.releaseTodo` | `hoody agent todos release --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent todos run` |  | write | Run a todo's orchestrator | `agent.todos.runTodo` | `hoody agent todos run --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent todos snooze` |  | write | Snooze a todo | `agent.todos.snoozeTodo` | `hoody agent todos snooze --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --wake-at <wake_at> --revision 10` |
| `hoody agent todos triage` |  | write | Run an LLM triage pass | `agent.todos.triageTodos` | `hoody agent todos triage --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --body '{}'` |
| `hoody agent todos update` |  | write | Update a todo (CAS) | `agent.todos.updateTodo` | `hoody agent todos update --id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --revision 10 --title "My Title" --body '{}' --state active --priority 10 --rank 10 --tags "tag1,tag2" --cwd <cwd>` |
| `hoody agent tools get` |  | read | Get one tool schema | `agent.tools.getTool` | `hoody agent tools get --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tools list` |  | read | List the tool catalogue | `agent.tools.listToolsIterator` | `hoody agent tools list --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tools list-read-only` |  | read | List the read-only tool subset | `agent.tools.listReadOnlyToolsIterator` | `hoody agent tools list-read-only --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tools list-session` |  | read | List a session's effective tool set | `agent.tools.listSessionToolsIterator` | `hoody agent tools list-session --id abc-123 --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tools list-session-mcp` |  | read | List a session's MCP tools | `agent.tools.listSessionMCPToolsIterator` | `hoody agent tools list-session-mcp --id abc-123 --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent tools run` |  | write | Run a tool (sessionless, gated) | `agent.tools.runTool` | `hoody agent tools run --name my-resource --confirm --confirm-token <confirm_token> --x-hoody-tool-mode <x_hoody_tool_mode> --x-hoody-dir-scope <x_hoody_dir_scope> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --params <params> --allow-mutations` |
| `hoody agent tools run-async` |  | write | Run a tool asynchronously (sessionless, gated) | `agent.tools.runToolAsync` | `hoody agent tools run-async --name my-resource --confirm --confirm-token <confirm_token> --x-hoody-tool-mode <x_hoody_tool_mode> --x-hoody-dir-scope <x_hoody_dir_scope> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --params <params> --allow-mutations` |
| `hoody agent tools run-session` |  | write | Run a tool inside a live session (gated) | `agent.tools.runSessionTool` | `hoody agent tools run-session --id abc-123 --name my-resource --confirm --confirm-token <confirm_token> --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --params <params> --allow-mutations` |
| `hoody agent workflows cancel-run` |  | write | Cancel a workflow run | `agent.workflows.cancelWorkflowRun` | `hoody agent workflows cancel-run --run-id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent workflows delete` |  | write | Delete a workflow definition | `agent.workflows.deleteWorkflow` | `hoody agent workflows delete --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent workflows get` |  | read | Read one workflow definition | `agent.workflows.getWorkflow` | `hoody agent workflows get --name my-resource --include-revision --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent workflows get-run` |  | read | Get one workflow run by id | `agent.workflows.getWorkflowRun` | `hoody agent workflows get-run --run-id abc-123 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent workflows hide` |  | write | Hide or un-hide a workflow | `agent.workflows.hideWorkflow` | `hoody agent workflows hide --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --hidden` |
| `hoody agent workflows list` |  | read | List workflow definitions | `agent.workflows.listWorkflowsIterator` | `hoody agent workflows list --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent workflows list-runs` |  | read | Snapshot in-flight and recent workflow runs | `agent.workflows.listWorkflowRunsIterator` | `hoody agent workflows list-runs --page 10 --limit 10 --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm>` |
| `hoody agent workflows put` |  | write | Create or replace a workflow definition | `agent.workflows.putWorkflow` | `hoody agent workflows put --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --definition <definition> --expected-revision <expected_revision> --expected-absent` |
| `hoody agent workflows run-session` |  | write | Run a workflow onto an existing session | `agent.workflows.runSessionWorkflow` | `hoody agent workflows run-session --id abc-123 --name my-resource --x-hoody-cwd <x_hoody_cwd> --x-hoody-config-dir <x_hoody_config_dir> --x-hoody-container <x_hoody_container> --x-hoody-realm <x_hoody_realm> --prompt <prompt> --inputs <inputs>` |

