File, read, update, claim, run, snooze, and archive agent todos. Approve or deny run proposals, run an LLM triage pass over the inbox, and purge archived rows. Write operations are CAS-guarded by the per-todo revision (fetched from getTodo); the store-wide revision from getTodosRevision is a cheap poll cursor, not a CAS token.
The agent routes are scoped by the request’s working directory (the .hoody project layer / record cwd / tool+workflow cwd) via the X-Hoody-Cwd header (or a body cwd on create). Per-request realm scoping is rejected with realm_scope_unsupported on these routes.
Lists master todos for the requesting cwd/config_dir, with a store-wide revision poll cursor. Typed filters ride the request body — there is no query-param filter alias.
curl -X GET " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos?page=1&limit=25 " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
-d ' {"open_only": true, "tags": ["P0", "security"]} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . listTodosIterator ({ open_only : true , tags : [ " P0 " , " security " ] }, { page : 1 , limit : 25 });
Name In Type Required Description pagequery integer No 1-based page number for pagination. limitquery integer No Maximum items per page (0 = no pagination). X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container (omitted = local). X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias of X-Hoody-Realm). Rejected on this route.
Optional typed filters forwarded to todos.list. All fields are optional; omit the body for the full list.
Name Type Required Description statesarray of string No Filter to these todo states. tagsarray of string No Filter to todos carrying these tags. querystring No Free-text filter over title/body. open_onlyboolean No When true, only open (non-terminal) todos. allboolean No When true, include archived/closed todos.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" title " : " Rotate staging TLS certs " ,
" body " : " STAGING cluster certs expire in 14 days. " ,
" tags " : [ " security " , " P1 " ],
" created_at " : " 2026-01-04T09:00:00Z " ,
" updated_at " : " 2026-01-12T14:32:10Z "
" id " : " todo_01HMZX8T2B6K1M5N7P9RWDEFGH " ,
" title " : " Refactor billing idempotency keys " ,
" created_at " : " 2026-01-05T11:20:00Z " ,
" updated_at " : " 2026-01-13T08:05:00Z "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy (e.g. hoody agent … → platform → proxy), not by connecting to the container directly.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded; the gateway throttled the request before dispatch. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
Returns the full todo record including timeline and proposals (todos.read).
curl -X GET " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . getTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' );
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container (omitted = local). X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias of X-Hoody-Realm). Rejected on this route.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" title " : " Rotate staging TLS certs " ,
" body " : " STAGING cluster certs expire in 14 days. " ,
" tags " : [ " security " , " P1 " ],
" id " : " prop_01HMZZ1QAE3V6X8K2B4NMD0FHJ " ,
" summary " : " Run certbot renew on staging nodes " ,
" created_at " : " 2026-01-12T14:00:00Z "
" text " : " Filed by on-call. " ,
" at " : " 2026-01-04T09:00:00Z "
" text " : " Started investigate. " ,
" at " : " 2026-01-12T14:00:00Z "
" created_at " : " 2026-01-04T09:00:00Z " ,
" updated_at " : " 2026-01-12T14:32:10Z "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request (too busy, or a per-client stream concurrency cap was hit). Honor Retry-After and retry.
Returns the store-wide revision counter (todos.revision) — a cheap poll cursor that moves on every persisted mutation. This is NOT the per-todo CAS token; updateTodo, archiveTodo, snoozeTodo, and claimTodo take each todo’s own revision from getTodo.
curl -X GET " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/revision " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . getTodosRevision ();
Name In Type Required Description X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
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 header; one of the two is required.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
"title": "Rotate staging TLS certs",
"body": "STAGING cluster certs expire in 14 days.",
"tags": ["security", "P1"]
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . createTodo ({
title : " Rotate staging TLS certs " ,
body : " STAGING cluster certs expire in 14 days. " ,
Name In Type Required Description X-Hoody-Cwdheader string No Per-request working-directory scope (defaults the body cwd when omitted). X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
Name Type Required Description titlestring Yes Todo title. bodystring No Todo body / description. priorityinteger No Optional priority band 0..4 (0 = P0 urgent … 4 = P4 someday); defaults to 2 when omitted. Must be a JSON integer in range. tagsarray of string No Optional tags. cwdstring No The todo’s working directory. Defaults to the X-Hoody-Cwd header when omitted.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap (default 8 MiB). Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Applies a CAS-guarded field patch / state transition to a todo (todos.update). Pass the current revision from getTodo; a stale revision is rejected.
curl -X PATCH " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . updateTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , {
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
Name Type Required Description revisioninteger Yes The todo’s own current revision (from getTodo — NOT the store-wide revision). titlestring No New title. bodystring No New body. statestring No New state transition. priorityinteger No New priority. rankinteger No New ordering rank. tagsarray of string No New tag set. cwdstring No Retarget the todo’s working directory.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" updated_at " : " 2026-01-13T09:15:00Z "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" message " : " todo_conflict: revision mismatch (refetch and retry) "
Error Code Title Description Resolution todo_conflictTodo revision conflict The supplied revision is stale (a concurrent update advanced the todo). GET the todo (getTodo) for its current revision — the per-todo CAS token, NOT the store-wide getTodosRevision — and re-issue the update.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Archives a todo (todos.archive). The body carries the CAS revision from getTodo.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/archive " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . archiveTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , { revision : 7 });
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
Name Type Required Description revisioninteger Yes The todo’s own current revision (from getTodo).
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Snoozes a todo until a wake time (todos.snooze). The body carries the RFC3339 wake_at and the CAS revision.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/snooze " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
"wake_at": "2026-07-04T09:00:00Z",
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . snoozeTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , {
wake_at : " 2026-07-04T09:00:00Z " ,
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
Name Type Required Description wake_atstring Yes Wake time, RFC3339 (e.g. 2026-07-04T09:00:00Z); an empty string clears the snooze. revisioninteger Yes The todo’s own current revision (from getTodo).
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" wake_at " : " 2026-07-04T09:00:00Z " ,
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Permanently and irreversibly removes archived todos (todos.purge). An empty body purges all archived tombstones for the cwd.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/purge " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . purgeTodos ({});
Name In Type Required Description X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
The body is an optional filter object forwarded to todos.purge. An empty body purges all archived tombstones for the cwd. No fields are documented.
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" code " : " admin_unauthorized " ,
" message " : " memory administration requires a valid admin token "
Error Code Title Description Resolution admin_unauthorizedRejected by the daemon’s own admin gate The request was refused by the server’s admin gate. Run the daemon with socket auth (--auth-token-path) and no separate admin capability so its own gate allows HTTP requests forwarded from the gateway. forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
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.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/messages " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
-d ' {"text": "Investigating — looks like certs are also stale on node-3."} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . postTodoComment ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , { text : " Investigating — looks like certs are also stale on node-3. " });
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
Name Type Required Description textstring Yes The comment body to append to the todo timeline.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" message_id " : " msg_01HN0ABCDEF1234567890ABCDE "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
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/proposal on the timeline; a succeeded job means the turn was dispatched, not finished.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/message " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
-d ' {"text": "Please draft a run plan for the cert rotation, then post a proposal."} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . messageTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , { text : " Please draft a run plan for the cert rotation, then post a proposal. " });
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
Name Type Required Description textstring Yes The message that both comments and prompts the orchestrator.
" job_id " : " job_01HN0Z9K8Q5WX2AB3CD4EFGHJK "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Claims a todo for the caller (todos.claim). The CAS revision is required for a fresh claim; only the lease’s existing owner may refresh without it.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/claim " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . claimTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , { revision : 7 });
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
Name Type Required Description revisioninteger No The todo’s own current revision (from getTodo). Required for a fresh claim; only the lease’s existing owner may refresh without it.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" lease_owner " : " agent_01HN0LEASEOWNER1234567890 " ,
" lease_expires_at " : " 2026-01-13T13:00:00Z " ,
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Releases a claimed todo (todos.release).
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/release " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . releaseTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , {});
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
The body is an optional JSON object forwarded to the daemon todos.release RPC. No fields are documented.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
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.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/run " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . runTodo ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , {});
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
The body is an optional JSON object forwarded to the daemon todos.run RPC. No fields are documented.
" job_id " : " job_01HN0Z9K8Q5WX2AB3CD4EFGHJK " ,
" session_id " : " sess_01HN0RUNNER1234567890ABCDE "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" code " : " admin_unauthorized " ,
" message " : " memory administration requires a valid admin token "
Error Code Title Description Resolution admin_unauthorizedRejected by the daemon’s own admin gate The request was refused by the server’s admin gate. Run the daemon with socket auth (--auth-token-path) and no separate admin capability so its own gate allows HTTP requests forwarded from the gateway. forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Cancels an in-flight orchestrator run for a todo (todos.cancel_run).
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/cancel-run " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . cancelTodoRun ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , {});
Name In Type Required Description idpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
The body is an optional JSON object forwarded to the daemon todos.cancel_run RPC. No fields are documented.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
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.)
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/proposals/prop_01HMZZ1QAE3V6X8K2B4NMD0FHJ/approve " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . approveTodoProposal ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , ' prop_01HMZZ1QAE3V6X8K2B4NMD0FHJ ' , {});
Name In Type Required Description idpath string Yes Path identifier. pidpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
The body is an optional JSON object forwarded to the daemon todos.approve_proposal RPC. No fields are documented.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" proposal_id " : " prop_01HMZZ1QAE3V6X8K2B4NMD0FHJ " ,
" job_id " : " job_01HN0Z9K8Q5WX2AB3CD4EFGHJK " ,
" session_id " : " sess_01HN0RUNNER1234567890ABCDE "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" code " : " admin_unauthorized " ,
" message " : " memory administration requires a valid admin token "
Error Code Title Description Resolution admin_unauthorizedRejected by the daemon’s own admin gate The request was refused by the server’s admin gate. Run the daemon with socket auth (--auth-token-path) and no separate admin capability so its own gate allows HTTP requests forwarded from the gateway. forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
Denies a run proposal on a todo (todos.deny_proposal). No worker is spawned.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/todo_01HMZX7P5V3J8N9K4Q2WXABCDE/proposals/prop_01HMZZ1QAE3V6X8K2B4NMD0FHJ/deny " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . denyTodoProposal ( ' todo_01HMZX7P5V3J8N9K4Q2WXABCDE ' , ' prop_01HMZZ1QAE3V6X8K2B4NMD0FHJ ' , {});
Name In Type Required Description idpath string Yes Path identifier. pidpath string Yes Path identifier. X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
The body is an optional JSON object forwarded to the daemon todos.deny_proposal RPC. No fields are documented.
" id " : " todo_01HMZX7P5V3J8N9K4Q2WXABCDE " ,
" proposal_id " : " prop_01HMZZ1QAE3V6X8K2B4NMD0FHJ " ,
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" message " : " request must arrive through the Hoody proxy "
Error Code Title Description Resolution forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.
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.
curl -X POST " https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/todos/triage " \
-H " Authorization: Bearer <token> " \
-H " X-Hoody-Cwd: /home/user/projects/acme " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . agent . todos . triageTodos ({});
Name In Type Required Description X-Hoody-Cwdheader string No Per-request working-directory scope. X-Hoody-Config-Dirheader string No Per-request --config-dir override. X-Hoody-Containerheader string No Per-request bound remote container. X-Hoody-Realmheader string No Per-request realm selector. Rejected on this route. realmquery string No Per-request realm selector (query alias). Rejected on this route.
The body is an optional JSON object forwarded to the daemon todos.triage RPC. An empty body triages the whole inbox. No fields are documented.
" job_id " : " job_01HN0TRIAGE1234567890ABCDEF "
" message " : " invalid request "
Error Code Title Description Resolution bad_requestBad request The request was malformed or carried invalid parameters. Correct the request body or query parameters. realm_scope_unsupportedRealm scope unsupported A per-request realm header was supplied to a route that has no realm dimension to scope. Omit the realm header on this route, or open a session to scope by realm.
" code " : " admin_unauthorized " ,
" message " : " memory administration requires a valid admin token "
Error Code Title Description Resolution admin_unauthorizedRejected by the daemon’s own admin gate The request was refused by the server’s admin gate. Run the daemon with socket auth (--auth-token-path) and no separate admin capability so its own gate allows HTTP requests forwarded from the gateway. forbiddenForbidden (not via the Hoody proxy) The request did not reach the service through the public endpoint. Reach the agent through hoody-proxy, not by connecting to the container directly.
" message " : " resource not found "
Error Code Title Description Resolution not_foundNot found The requested resource does not exist. Verify the path and identifier.
" code " : " payload_too_large " ,
" message " : " request body exceeds the configured size limit "
Error Code Title Description Resolution payload_too_largePayload too large The request body exceeds the configured size cap. Reduce the request body below the configured limit; split a large payload into smaller requests.
" message " : " request rate limit exceeded "
Error Code Title Description Resolution rate_limitedToo many requests The per-client request rate limit was exceeded. Honor the Retry-After header and retry; reduce the request rate.
" code " : " internal_error " ,
" message " : " internal server error "
Error Code Title Description Resolution internal_errorInternal error An unexpected error occurred while handling the request. Retry; if persistent, inspect the daemon logs.
" code " : " service_unavailable " ,
" message " : " service unavailable "
Error Code Title Description Resolution service_unavailableService unavailable The daemon could not service the request. Honor Retry-After and retry.