Limits and Errors

Limits on actions, executions, and calls, and the errors the actions API returns.

Limits

LimitValue
Triggers per action16
Trigger expression size16 KiB
Expressions in a trigger view64
session.schedule entries8
every in a session.schedule entryWhole minutes, at least 1m
turns.window24h
A view as the agent reads it4 KiB
Configuration size352 KiB
Event and handler output size1 MiB
Samples per validateAction call100
Page size (first)1 to 100
maxInvocations24
timeout24h
retryDelay and maxRetryDelay12h
responseTimeout10m
completionTimeout24h
Tools an MCP server references128
Tool levels below a first call8
Calls beneath one call1,024
Agents in one call chain3
Output uses per invocation256
Transcript events per invocation4,096
Starlark source64 KiB
Starlark steps per invocation1,000,000
graphql, cel, and tools calls per Starlark invocation64 each
A cel expression from Starlark16 KiB; aggregate CEL cost 100,000

Errors

Errors follow the API error format. Reads of an identifier that was never created return null rather than an error. A request refused because it conflicts with what is recorded, such as rerunning a replay or an unfinished execution, replaying a replay, or answering an approval request twice, has code BAD_REQUEST and is not retriable: the same request is refused the same way.

SituationResult
updateAction, deleteAction, cancelExecution, rerunExecution, or replayExecution on an identifier that was never createdError with code NOT_FOUND.
Invalid trigger, configuration, policy, or execution setting on create, update, or validationError whose message names the rejected setting, for example retry delay cannot exceed the maximum retry delay.
More than 16 triggers, or no trigger, tool block, kind skill, or kind mcp, on create, update, or validationError an action accepts at most 16 triggers, or an action requires a trigger, a tool block, kind skill, or kind mcp.
A name already used by another action, or a tools or skills entry that cannot be resolvedError; the write is rejected.
An invalid schedule, cron, timezone, every, or session.ends, or a schedule trigger without a name or resuming by inputError whose message names the rejected setting, for example session.schedule[0].every: every 1m30s: must be whole minutes.
session.ends, session.schedule, or a schedule trigger in a deployment without a schedulerError this deployment has no scheduler: session.ends, session.schedule, and schedule triggers are unavailable.
A session turn that reports COMPLETED before the session's end, or OPEN in its final turnThe turn fails with action_output_invalid. An agent is offered only the allowed status.
A skill whose name is also a tool name the action's model seesError tool and skill names must be distinct within one action.
An agent's call to a tool or skill version it does not pinPermission error carrying the code tool_not_declared.
A call to a tool whose session is closedError with code INVALID_STATE_TRANSITION carrying session_closed; nothing runs or is recorded.
A skill load whose input is not an empty objectError a skill load takes an empty input object.
invokeAction on a disabled, deleted, or unpublished tool, a native tool that acts for its caller, or without INVOKE permissionError that is not retriable, with code NOT_SUPPORTED or ACCESS_DENIED, whose actionError extension carries the reason's code, such as action_not_callable or action_access_denied, with a message and hint; nothing runs or is recorded.
startAction on a disabled, deleted, or unpublished action, one without a tool block, a tool with a session, from inside an execution, without INVOKE permission, or with input that fails the schemaError that is not retriable, with code NOT_SUPPORTED, ACCESS_DENIED, or BAD_REQUEST, whose actionError extension carries the reason's code, such as action_not_callable, start_not_supported, action_access_denied, or action_input_invalid, with a message and hint; nothing is queued or recorded. In gRPC, the status carries them as an ErrorInfo detail: reason is the code, and metadata.hint the hint. From inside an MCP request, run the action with invoke instead, on a server that lists it.
startAction of a native tool that acts for its caller, such as program, invoke, read_turn_input, or a harness tool, or rerunExecution of a call to oneError that is not retriable, with code NOT_SUPPORTED and actionError code start_not_supported: such a tool runs only as its caller's call. Nothing is queued or recorded.
startAction with an executionId already used with a different principal, action, version, or inputError with code ALREADY_EXISTS, not retriable; an execution identifier names one start.
An invocation of a started execution after its starter was revoked, may no longer invoke the action, or its token expiredThe execution fails with action_access_denied; nothing of the invocation runs.
invokeAction with input that fails the tool's schema, or a call that failsA FAILED execution whose invocation.error carries the code and a hint; the caller can still commit.
A write conflict, passed deadline, or interrupted transaction during a callRetryable error; roll back and retry in a new transaction.
Kind workflow.starlark, a tool block on a kind other than tool, agent, or a native tool's, or kind tool without oneError; kind tool with config {runtime, src} replaces workflow.starlark.
An agent whose schemas do not combine into its turn outcome, whose limits could derive more than 256 uses, or whose references read tool.input while it has triggersError whose message names the rule.
An action named after a native tool, such as graphql, cel, or read_turn_inputError; the names are reserved for native tools.
Update or delete of a deleted actionError; the action is immutable after pending: DELETED.
rerunExecution of an intake record whose action is disabled or deleted, at a version without a session, or at a version whose triggers are no longer publishedError whose message names the reason; nothing is created.
rerunExecution on a non-terminal source, or executionId reuse with different valuesError; the source must be terminal and an execution identifier names one rerun.
replayExecution on an unfinished execution, a call another execution made, a replay, an intake record, an action that is not kind agent or mcp, or with a version whose session does not match the source'sError whose message names the reason; nothing is created.
rerunExecution of an MCP server's requestError; a request runs only when its endpoint serves it. Replay it instead.
rerunExecution or replayExecution of a draft's preview, an execution with a draftError; no version holds the draft it ran. Preview the draft again.
rerunExecution or replayExecution without INVOKE on the action, or rerunExecution from inside an executionError; nothing is queued or recorded. From inside an MCP request, run the action with invoke instead, on a server that lists it.
rerunExecution of a call to a tool with a session, or of a call or start whose action is no longer callableError whose message names the reason; nothing is queued. Call the tool again instead.
replayExecution with executionId reuse with different valuesError; an execution identifier names one replay.
cancelExecution on an execution processing a session turnError; close the session instead.
Explicit null on an update field outside executionError; omit the field to preserve it.
An execution listing with intake: true and, in the gRPC ListActionExecutions, a session_id or parent_execution_idError; intake records run no turn and make no call.
Cursor from a different filter, or first outside 1 to 100Error.

Because operations inside one actions block share a transaction, an error in any of them aborts all of them.

Previous
MCP Servers