Skip to content
Hoody.com

Agent Workflows let you manage multi-step workflow definitions and run them onto live sessions. Use these endpoints to list, read, create, replace, hide, and delete workflow definitions, dispatch a workflow run onto a session, and snapshot, inspect, cancel, or resume workflow runs. Definitions are realm-scoped to the gateway’s own realm; a client-supplied realm is ignored on definition and hide routes.

The base URL for every endpoint on this page is: https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu

List the workflow definitions visible to the requesting cwd/config_dir (name, summary, step briefs, system flag). The result is realm-scoped to the gateway’s own realm; a client-supplied X-Hoody-Realm/?realm= is ignored.

Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows?page=1&limit=20" \
-H "X-Hoody-Cwd: /home/user/projects/hoody" \
-H "X-Hoody-Config-Dir: /home/user/.hoody"
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.
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.

Read one workflow definition. Returns the validated definition in the {output, is_error} tool envelope. With ?include_revision=true the output’s first line is revision: r1:<64hex> — the optimistic-concurrency baseline to send back as expected_revision on putWorkflow.

Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/build?include_revision=true" \
-H "X-Hoody-Cwd: /home/user/projects/hoody"
NameInTypeRequiredDescription
namepathstringYesPath identifier.
include_revisionquerybooleanNoIf "true", the tool output’s first line is revision: <opaque> — pass that value as putWorkflow’s expected_revision to guard against concurrent edits; the JSON below it is unchanged. Strictly parsed: exactly one value, "true" or "false"; anything else (empty, "TRUE", "1", repeated) is a 400 bad_request.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.

Create or replace one workflow definition. The body carries the definition object; the {name} path value is authoritative. The daemon validates the definition strictly before writing atomically (unknown fields rejected, the loader’s structural gate enforced). The system flag is authoritative from the embedded defaults — a caller cannot forge it.

Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/build" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/projects/hoody" \
-d '{
"definition": {
"name": "build",
"summary": "Compile and run the project'\''s test suite.",
"entry_point": "lint",
"steps": [
{ "id": "lint", "brief": "Run linter" },
{ "id": "test", "brief": "Run tests" }
]
},
"expected_revision": "r1:4f2c8a1b9d3e7f0a5c6b8d2e9f1a4c7b8d0e2f4a6c8b0d2e4f6a8c0b2d4e6f80"
}'
NameInTypeRequiredDescription
namepathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.
FieldTypeRequiredDescription
definitionobjectYesThe full workflow definition object (steps, entry_point, summary). Validated strictly server-side before an atomic write.
expected_revisionstringNoThe revision: value from getWorkflow (?include_revision=true). If the stored workflow changed since that read, the upsert is refused with [revision_conflict] and nothing is written. Omit to save unconditionally.
expected_absentbooleanNoCreate-only guard: refuse with [already_exists] (writing nothing) if any workflow with this name already exists. Mutually exclusive with expected_revision.

Delete one user workflow definition. System workflows are refused (they re-seed on boot; hide them instead via hideWorkflow).

Terminal window
curl -X DELETE "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/build" \
-H "X-Hoody-Cwd: /home/user/projects/hoody"
NameInTypeRequiredDescription
namepathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.

Hide or un-hide a workflow. Hiding is the only way to remove a system workflow from view — system workflows are re-seeded on every boot and can never be deleted. Pass hidden: false in the body to un-hide. Realm-scoped to the gateway’s own realm so a hide stays realm-private.

Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/release/hide" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/projects/hoody" \
-d '{ "hidden": true }'
NameInTypeRequiredDescription
namepathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.
FieldTypeRequiredDescription
hiddenbooleanNotrue (default) to hide the workflow; false to un-hide it.

Snapshot of in-flight and recently-finished workflow runs. The registry exposes Snapshot(), not Subscribe() — poll this endpoint to track a run’s progress; live events also flow on the owning session’s stream.

Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/runs?page=1&limit=20" \
-H "X-Hoody-Cwd: /home/user/projects/hoody"
NameInTypeRequiredDescription
pagequeryintegerNo1-based page number for pagination.
limitqueryintegerNoMaximum items per page (0 = no pagination).
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.

Get one workflow run by id, including per-step outcomes (step id, status, duration, tokens, and error) that the leaner list snapshot omits. Returns 404 when the run id is no longer retained (evicted or never existed), or belongs to another realm or account.

Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/runs/01HZX8R9C2QF7G3W4K5N6P7Q8R" \
-H "X-Hoody-Cwd: /home/user/projects/hoody"
NameInTypeRequiredDescription
run_idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.

POST /api/v1/agent/sessions/{id}/workflows/{name}/runs

Section titled “POST /api/v1/agent/sessions/{id}/workflows/{name}/runs”

Dispatch a workflow run onto a live session. Returns a job_id; run_id is null during the brief dispatch window and is populated once the workflow loop registers the run (observe workflow_start on the session’s stream). Run events flow on the owning session’s WS/SSE attach; there is no per-run event bus.

Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/sessions/01HZX8R5T1V3B7X9Y2Z4N6P8Q0/workflows/build/runs" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/projects/hoody" \
-d '{
"prompt": "Run the nightly build.",
"inputs": {
"branch": "main",
"verbose": "true"
}
}'
NameInTypeRequiredDescription
idpathstringYesPath identifier.
namepathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.
FieldTypeRequiredDescription
promptstringNoOptional input text fed to the workflow run ($(workflow.prompt)).
inputsobjectNoOptional run-time values for the workflow’s declared input parameters (declared name → string value; resolves to $(input.&lt;name&gt;) in every step). A workflow with a REQUIRED declared parameter cannot run without these. Values must be strings; a non-string value is a 400.

POST /api/v1/agent/workflows/runs/{run_id}/cancel

Section titled “POST /api/v1/agent/workflows/runs/{run_id}/cancel”

Cancel an in-flight workflow run.

Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/runs/01HZX8R9C2QF7G3W4K5N6P7Q8R/cancel" \
-H "X-Hoody-Cwd: /home/user/projects/hoody"
NameInTypeRequiredDescription
run_idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.

POST /api/v1/agent/workflows/runs/{run_id}/resume

Section titled “POST /api/v1/agent/workflows/runs/{run_id}/resume”

Resume a terminal (failed or cancelled) workflow run on a live session. Committed steps replay from the run’s recorded journal and execution continues live from the first incomplete step. The resuming session must match the run’s realm, owner, working directory, and container binding.

Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.icu/api/v1/agent/workflows/runs/01HZX8R9C2QF7G3W4K5N6P7Q8R/resume" \
-H "Content-Type: application/json" \
-H "X-Hoody-Cwd: /home/user/projects/hoody" \
-d '{ "session_id": "01HZX8R5T1V3B7X9Y2Z4N6P8Q0" }'
NameInTypeRequiredDescription
run_idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container.
X-Hoody-RealmheaderstringNoPer-request realm selector.
realmquerystringNoPer-request realm selector — query alias of the X-Hoody-Realm header.
FieldTypeRequiredDescription
session_idstringYesA live session matching the run’s realm, owner, working directory, and container binding.