Skip to content
Hoody.com

The Agent: Todos API manages the full lifecycle of master todos across file, read, claim, run, snooze, archive, comment, message, triage, and proposal routes. Use these endpoints to list and search todos, CAS-update fields, claim and release leases, dispatch autonomous runs, post comments and orchestrator-turn messages, approve or deny run proposals, and run an LLM triage pass over the inbox. All routes are scoped to a working directory and an optional container and realm. Every mutation that touches a specific todo accepts that todo’s own revision (from getTodo) as a CAS guard, which is distinct from the store-wide poll cursor returned by getTodosRevision.

Base host for all routes: https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu

Lists master todos for the requesting cwd and config_dir. Returns the store-wide poll cursor revision (a change-detection cursor for the whole list — NOT the per-todo CAS token; updateTodo, archive, snooze, and claim take each todo’s own revision from getTodo). Filters ride the request body (states, tags, query, open_only, all) — there is no query-param filter alias (the daemon applies typed filters a flat query string cannot supply). Active-realm-scoped: a per-request realm header is rejected.

NameInTypeRequiredDescription
pagequeryintegerNo1-based page number for pagination.
limitqueryintegerNoMaximum items per page (0 = no pagination).
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

Optional typed filters forwarded to todos.list. All optional; omit the body for the full list.

FieldTypeRequiredDescription
statesarrayNoFilter to these todo states (array of strings).
tagsarrayNoFilter to todos carrying these tags (array of strings).
querystringNoFree-text filter over title/body.
open_onlybooleanNoWhen true, only open (non-terminal) todos.
allbooleanNoWhen true, include archived/closed todos.
{
"states": ["open", "queued"],
"tags": ["backend", "p1"],
"open_only": true
}
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos?page=1&limit=20" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{"open_only": true, "tags": ["p1"]}'

Returns the full todo record including timeline + proposals (todos.read).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

This endpoint takes no request body.

Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT" \
-H "X-Hoody-Cwd: /home/user/project"

Returns the store-wide revision counter (todos.revision) — a cheap poll cursor that moves on every persisted mutation, for change detection over the whole list. NOT the update CAS token: updateTodo, archive, snooze, and claim take the individual todo’s own revision from getTodo.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

This endpoint takes no request body.

Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/revision" \
-H "X-Hoody-Cwd: /home/user/project"

Files a new master todo (todos.create). Deterministic triage (normalize, fingerprint-dedupe, defaults) runs server-side. The todo’s working directory is taken from the body cwd OR, if omitted, the X-Hoody-Cwd request-scope header; one of the two is required (todos.create rejects an empty cwd).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

New todo (forwarded to todos.create; deterministic triage runs server-side).

FieldTypeRequiredDescription
titlestringYesTodo title.
bodystringNoTodo body / description.
priorityintegerNoOptional priority band 0..4 (0 = P0 urgent … 4 = P4 someday); defaults to 2 when omitted. Must be a JSON integer in range — a string or out-of-range value is rejected.
tagsarrayNoOptional tags.
cwdstringNoThe todo’s working directory (labels the record’s computer/path). Defaults to the X-Hoody-Cwd request-scope header when omitted; one of the two must be set.
{
"title": "Add request-id middleware",
"body": "Stamp every inbound request with an X-Request-Id header for tracing.",
"priority": 2,
"tags": ["backend", "observability"]
}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{
"title": "Add request-id middleware",
"priority": 2,
"tags": ["backend", "observability"]
}'

Applies a CAS-guarded field patch or state transition to a todo (todos.update). Pass the current revision; a stale revision is rejected.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

CAS-guarded field patch or state transition (forwarded to todos.update; the {id} comes from the path). Only the keys present are patched.

FieldTypeRequiredDescription
revisionintegerYesThe TODO’s own current revision (from getTodo — NOT the store-wide revision); a stale value is rejected.
titlestringNoNew title.
bodystringNoNew body.
statestringNoNew state transition.
priorityintegerNoNew priority.
rankintegerNoNew ordering rank.
tagsarrayNoNew tag set.
cwdstringNoRetarget the todo’s working directory.
{
"revision": 7,
"state": "in_progress",
"priority": 1,
"tags": ["backend", "p1", "observability"]
}
Terminal window
curl -X PATCH "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{
"revision": 7,
"state": "in_progress",
"priority": 1
}'

Archives a todo (todos.archive).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

CAS guard (forwarded to todos.archive; the {id} comes from the path).

FieldTypeRequiredDescription
revisionintegerYesThe TODO’s own current revision (from getTodo); required — a stale or absent value is rejected.
{
"revision": 8
}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/archive" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{"revision": 8}'

Claims a todo for the caller (todos.claim).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

CAS guard (forwarded to todos.claim; the {id} comes from the path).

FieldTypeRequiredDescription
revisionintegerNoThe TODO’s own current revision (from getTodo); required for a fresh claim (only the lease’s existing owner may refresh without it).
{
"revision": 8
}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/claim" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{"revision": 8}'

Releases a claimed todo (todos.release).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

JSON object forwarded to the daemon todos.release RPC. Reserved _-prefixed keys are ignored and the request scope (cwd and config_dir) is applied automatically; all other keys are passed through. The todo {id} comes from the path; the body is optional.

{}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/release" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{}'

Snoozes a todo until a wake time (todos.snooze).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

Snooze target (forwarded to todos.snooze; the {id} comes from the path). The daemon reads wake_at + the CAS revision — there is no until field.

FieldTypeRequiredDescription
wake_atstringYesWake time, RFC3339 (e.g. 2026-07-04T09:00:00Z); an empty string clears the snooze.
revisionintegerYesThe TODO’s own current revision (from getTodo); a stale value is rejected.
{
"wake_at": "2026-07-04T09:00:00Z",
"revision": 8
}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/snooze" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{
"wake_at": "2026-07-04T09:00:00Z",
"revision": 8
}'

Dispatches a background worker to autonomously work a todo (todos.run) and returns {job_id, session_id}. The daemon treats reaching the todos.run RPC as the human approval itself (“issued by the TUI Run action or the CLI, both human-driven”). The minted job completes at DISPATCH (it carries the worker session_id for correlation, but the resident worker runs asynchronously and is NOT tracked by the job lifecycle): a succeeded job means the run was STARTED, not that the TODO is finished. Poll the TODO itself (getTodo) — it lands in review when the worker is done.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

JSON object forwarded to the daemon todos.run RPC. Reserved _-prefixed keys are ignored and the request scope (cwd and config_dir) is applied automatically; all other keys are passed through. The todo {id} comes from the path; the body is optional.

{}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/run" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{}'

Cancels an in-flight orchestrator run for a todo (todos.cancel_run).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

JSON object forwarded to the daemon todos.cancel_run RPC. Reserved _-prefixed keys are ignored and the request scope (cwd and config_dir) is applied automatically; all other keys are passed through. The todo {id} comes from the path; the body is optional.

{}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/cancel-run" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{}'

Posts a comment onto a todo’s timeline WITHOUT triggering an orchestrator turn (todos.post_message). Use /message (singular) to also kick an orchestrator turn.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

Comment text (forwarded to todos.post_message; the {id} comes from the path).

FieldTypeRequiredDescription
textstringYesThe comment body to append to the todo timeline.
{
"text": "Spoke with the platform team — they want this shipped next sprint."
}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/messages" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{"text": "Spoke with the platform team — they want this shipped next sprint."}'

Posts a comment AND kicks an orchestrator turn on the todo (todos.message). Returns {job_id}, but the job completes at DISPATCH — the orchestrator runs as a daemon-managed resident whose turn is NOT tracked by the job lifecycle. Poll the todo itself (getTodo) for the orchestrator’s reply or proposal on the timeline; a succeeded job means the turn was dispatched, not finished.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

Comment text that kicks an orchestrator turn (forwarded to todos.message; the {id} comes from the path). Returns {job_id}.

FieldTypeRequiredDescription
textstringYesThe message that both comments and prompts the orchestrator.
{
"text": "Investigate the auth bug and propose a fix in the next reply."
}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/message" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{"text": "Investigate the auth bug and propose a fix in the next reply."}'

POST /api/v1/agent/todos/{id}/proposals/{pid}/approve

Section titled “POST /api/v1/agent/todos/{id}/proposals/{pid}/approve”

Approves a run proposal on a todo (todos.approve_proposal). Approval is NOT inert: the daemon hands the approved proposal to a background worker session equivalent to todos.run — a J-class autonomous run. (The paired denyTodoProposal spawns no worker.)

NameInTypeRequiredDescription
idpathstringYesPath identifier.
pidpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

JSON object forwarded to the daemon todos.approve_proposal RPC. Reserved _-prefixed keys are ignored and the request scope (cwd and config_dir) is applied automatically; all other keys are passed through. The todo {id} and proposal {pid} come from the path; the body is optional.

{}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/proposals/p_01HMRD6Q2W8N5Y7K3T1M9F4HXJ/approve" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{}'

POST /api/v1/agent/todos/{id}/proposals/{pid}/deny

Section titled “POST /api/v1/agent/todos/{id}/proposals/{pid}/deny”

Denies a run proposal on a todo (todos.deny_proposal).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
pidpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

JSON object forwarded to the daemon todos.deny_proposal RPC. Reserved _-prefixed keys are ignored and the request scope (cwd and config_dir) is applied automatically; all other keys are passed through. The todo {id} and proposal {pid} come from the path; the body is optional.

{}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/t_01HMR8K5C5Z0V6FQ3NGAZ8X9TT/proposals/p_01HMRD6Q2W8N5Y7K3T1M9F4HXJ/deny" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{}'

Permanently and irreversibly removes archived todos (todos.purge).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

JSON object forwarded to the daemon todos.purge RPC. Reserved _-prefixed keys are ignored and the request scope (cwd and config_dir) is applied automatically; all other keys are passed through. Optional filters scoping which archived todos to purge; an empty body purges all archived tombstones for the cwd.

{}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/purge" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{}'

Kicks an LLM triage pass over the inbox (todos.triage) and returns {job_id}. This is a J-class op: it spends model budget on an autonomous LLM run — the same property that makes todos.run a privileged op.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd (e.g. POST /todos; createTodo also accepts a body cwd).
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves (HoodyPaths).
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id (also accepted as ?realm=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoPer-request realm selector — the in:query alias of the X-Hoody-Realm header (read only when the header is absent): "global" or a 24-hex id. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.

JSON object forwarded to the daemon todos.triage RPC. Reserved _-prefixed keys are ignored and the request scope (cwd and config_dir) is applied automatically; all other keys are passed through. Optional triage scoping; an empty body triages the whole inbox. Returns {job_id}.

{}
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/todos/triage" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/project" \
-d '{}'