Interface ResourceControls

Resource limits applied to the entire agency run. The onLimitReached policy determines whether a breach is fatal.

interface ResourceControls {
    maxTotalTokens?: number;
    maxCostUSD?: number;
    maxDurationMs?: number;
    maxAgentCalls?: number;
    maxStepsPerAgent?: number;
    maxEmergentAgents?: number;
    maxValidationRetries?: number;
    onLimitReached?: "error" | "warn" | "stop";
}

Properties

maxTotalTokens?: number

Maximum total tokens (prompt + completion) across all agents and steps. The lightweight agent() helper maps this to a per-call completion-token cap (maxTokens) instead of the run total.

maxCostUSD?: number

Maximum USD cost cap across the entire run.

maxDurationMs?: number

Wall-clock time budget for the run in milliseconds. The lightweight agent() helper maps this to a per-call request timeout (requestTimeout) instead of the whole-run budget.

maxAgentCalls?: number

Maximum number of agent invocations (across all agents).

maxStepsPerAgent?: number

Maximum steps per individual agent invocation.

maxEmergentAgents?: number

Maximum number of emergent agents the orchestrator may synthesise.

maxValidationRetries?: number

Maximum number of retries when structured output validation fails.

When agency({ output: someZodSchema }) is set and the LLM returns text that does not parse or validate against the schema, the agency will retry the generation up to this many times, each time appending an error feedback hint to the prompt so the model can self-correct. agent({ responseSchema }) reads the same setting for generate() (agent() does not apply output; it warns at construction). The retry runs under generate() and a session's send(); stream() and a session's stream() finalize the one run they streamed. A final text that a beforeReturn approval replaced with a different one is not retried: the replacement is returned, with parsed undefined when it does not match. A replacement equal to the strategy's text counts as an approval without modifications, and is retried as that is.

Defaults to 1 (one extra attempt = two total calls). Set to 0 to disable retries entirely. Also used by default-runtime agent().generate() with responseSchema. Session sends take their own maxValidationRetries, defaulting to 0.

onLimitReached?: "error" | "warn" | "stop"

Action taken when any resource limit is breached.

  • "stop" — gracefully stop and return partial results.
  • "warn" — emit a limitReached event and continue.
  • "error" — throw an error and halt immediately.