List or watch agents
const url = 'https://example.com/apis/nodus.dev/v1/namespaces/example/agents';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/apis/nodus.dev/v1/namespaces/example/agentsParameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”The project.
Query Parameters
Section titled “ Query Parameters ”Responses
Section titled “ Responses ”OK
object
Agent is a durable agent definition: a system prompt, the Claude access it runs on and its cost cap. Each run executes the agent loop in its own Sandbox, and a change to the spec applies to the runs created after it.
object
object
object
object
object
object
object
AgentSpec describes an Agent.
object
Env configures tool processes. Store credentials in project Secrets and use valueFrom.secretKeyRef.
EnvVar is one environment variable: a literal value or a Secret key.
object
Name matches ^[A-Za-z_][A-Za-z0-9_]*$.
Value is the literal value.
EnvVarSource names where an env value comes from.
object
SecretKeySelector selects one key of a Secret.
object
Key is the key within it.
Name is the Secret.
Image is the Sandbox image each run’s tools execute in; nodus/agent-tools when empty.
MaxParallelAgents caps concurrent subagents in one shared sandbox, from 1 to 32; 8 when zero. The parent chooses the actual count for each task within this ceiling.
MaxTokens bounds the output of each model call; 8192 when zero.
MaxToolCalls bounds the tool calls of one turn; 50 when zero.
AgentModel is spec.model.
object
Access is Nodus (legacy managed Claude, the default), OnDemand or BYOK. Hosted is reserved and rejected.
APIKeyField selects a key in APIKeySecret; defaults to ANTHROPIC_API_KEY or OPENAI_API_KEY. A Secret containing exactly one value may use any field name.
APIKeySecret names the project Secret holding the model API key. Required for BYOK.
BaseURL is an HTTPS API base including /v1, for BYOK only. Empty uses the protocol’s official API.
Families limits the Claude families the router may pick (haiku, sonnet, opus, fable); every family when empty. Access Nodus only.
Name selects an OnDemand catalog model (or endpoint/name) or a BYOK model id. Required for OnDemand and OpenAI BYOK; Anthropic BYOK defaults to Sonnet.
Port is reserved for future hosted inference; currently rejected.
Protocol is Anthropic or OpenAI. BYOK defaults to Anthropic.
Sandbox is reserved for future hosted inference; currently rejected.
Workspace is reserved for future hosted inference; currently rejected.
Network sets egress for the container.
object
Egress is the outbound network policy.
object
Allow lists DNS names or *.suffix patterns (AllowList only; at most 128).
Policy is Deny, AllowList or Open.
Presets add curated host lists such as python-packages or huggingface.
PerRunMaxCostUSD is the model cost cap of each Nodus or OnDemand run, 0.01 to 1000; “1.00” when empty. A run is created with the cap its Agent has at that moment and keeps it. Before each model call the run checks that the call at its largest, the whole request as input and spec.maxTokens of output, fits under the cap; when it does not, the run waits (MaxCostReached) and makes no more calls. BYOK has no Nodus token charge; the provider account has separate budgets.
Secrets mounts project Secrets in the shared sandbox, using the Sandbox secret delivery contract.
SecretMount mounts one Secret, optionally pinned to a version. The bare name is accepted on write.
object
Name is the Secret.
Version pins a version; unset pins the latest at admission.
State is Running (the default) or Stopped, which refuses new runs and leaves the queued ones alone.
System is the system prompt of every turn, up to 64 KiB.
object
object
Example generated
{ "apiVersion": "example", "items": [ { "apiVersion": "example", "kind": "example", "metadata": { "annotations": { "additionalProperty": "example" }, "creationTimestamp": "example", "deletionGracePeriodSeconds": 1, "deletionTimestamp": "example", "finalizers": [ "example" ], "generateName": "example", "generation": 1, "labels": { "additionalProperty": "example" }, "managedFields": [ { "apiVersion": "example", "fieldsType": "example", "fieldsV1": { "additionalProperty": "example" }, "manager": "example", "operation": "example", "subresource": "example", "time": "example" } ], "name": "example", "namespace": "example", "ownerReferences": [ { "apiVersion": "example", "blockOwnerDeletion": true, "controller": true, "kind": "example", "name": "example", "uid": "example" } ], "resourceVersion": "example", "selfLink": "example", "uid": "example" }, "spec": { "env": [ { "name": "example", "value": "example", "valueFrom": { "secretKeyRef": { "key": "example", "name": "example" } } } ], "image": "example", "maxParallelAgents": 1, "maxTokens": 1, "maxToolCalls": 1, "model": { "access": "example", "apiKeyField": "example", "apiKeySecret": "example", "baseURL": "example", "families": [ "example" ], "name": "example", "port": 1, "protocol": "example", "sandbox": "example", "workspace": "example" }, "network": { "egress": { "allow": [ "example" ], "policy": "example", "presets": [ "example" ] } }, "perRunMaxCostUSD": "example", "secrets": [ { "name": "example", "version": 1 } ], "state": "example", "system": "example" } } ], "kind": "example", "metadata": { "continue": "example", "remainingItemCount": 1, "resourceVersion": "example", "selfLink": "example", "shardInfo": { "selector": "example" } }}default
Section titled “ default ”An error: a metav1.Status whose reason is a registered code.
Status is the error body of every API response: a Kubernetes metav1.Status (so kubectl and client-go understand it) plus three top-level extensions that those clients ignore (ADR-028).
object
object
object
Docs is the URL of the code’s docs page.
Fix says what to do next, for example a CLI command or the field to change.
object
object
RequestID identifies the request in logs and support tickets.
Example generated
{ "apiVersion": "example", "code": 1, "details": { "causes": [ { "field": "example", "message": "example", "reason": "example" } ], "group": "example", "kind": "example", "name": "example", "retryAfterSeconds": 1, "uid": "example" }, "docs": "example", "fix": "example", "kind": "example", "message": "example", "metadata": { "continue": "example", "remainingItemCount": 1, "resourceVersion": "example", "selfLink": "example", "shardInfo": { "selector": "example" } }, "reason": "example", "requestId": "example", "status": "example"}