Skip to content
Technical preview. This site is published for review. Everything on it, including the API, tokens and module protocol, is subject to change.
Limits

Limits

AutoFlow enforces the limits below. None of them is configurable per workflow except the schedule-to-complete timeout.

Payloads and values

LimitValueWhere it applies
Script size100 KiBStartWorkflowRequest.workflow_definition.
Workflow input256 KiBThe definition, args and kwargs marshaled together. Checked in AutoFlow, so a request over it is refused with INVALID_ARGUMENT.
Single string, bytes or sensitive value256 KiBAny value crossing the boundary between a workflow and AutoFlow. Enforced when the value leaves the workflow, not while it runs, so a concatenation can grow past it and fail later.
Integersigned 64-bitAny integer crossing that boundary. Starlark integers are arbitrary precision inside a workflow.
Action result256 KiBThe value an action resolves to, as recorded in history.
GitLab API response body240 KiBThe gitlab module reads the response up to the 256 KiB result cap minus a 16 KiB framing margin for the status and headers.
Module error message4 KiBThe Error.message a module returns.
Module file256 KiBEach Starlark file a module descriptor ships.
Annotations32 per workflow, value 1 KiBStartWorkflowRequest.annotations. Keys are unique and follow the Kubernetes annotation key format.

Channels

LimitValueWhere it applies
Channel values received10,000 per workflowAcross every channel of one workflow, for its whole life. A send past it is refused with RESOURCE_EXHAUSTED and never clears.
Single channel value64 KiB marshaledSendToWorkflowChannel and a module’s SendToChannel.
Channel name1 to 255 bytesNames a caller supplies. The __autocore_internal: prefix is reserved.
SendToChannel batch1 to 60 valuesOne message of a module’s send stream.

Time

LimitValueWhere it applies
Schedule-to-complete timeout30 days by default, 60 days at mostPer workflow, set with schedule_to_complete_timeout. The deadline cannot be disabled.
Token expirystart plus the timeout plus 1 hourThe tokens StartWorkflow returns, counted from the submission that created the workflow and recorded then, so re-minted tokens carry the same instant. Channel tokens the workflow mints for modules expire 1 hour after the workflow’s deadline.
Idempotency key retention76 daysCounted from the key’s first submission. A resubmission after that starts a fresh workflow under the same key.
Module registration30 minutesA remote module’s descriptor. It re-registers periodically to stay loadable.
Inline action attemptat most 500 msThe in-goroutine attempt of an inlineable action. On expiry its context is canceled; an attempt that then fails is queued as any other action, and one that still returns a value is recorded.
Claim-to-complete timeout60 sEach run of an action, each attempt of a poll and each load of a workflow’s modules, counted from when a worker starts it. On expiry the run’s context is canceled and an invocation that fails as a result is retried under its retry policy; a run that ignores the cancellation is not stopped, and a result it returns later still counts.
Data retention90 daysWorkflow executions, history events and signal deliveries are partitioned by week and whole buckets are dropped past the window.

Retention is also a ceiling on idle time, but one a workflow never reaches: the window exceeds the longest schedule-to-complete timeout by design, so the deadline, not retention, bounds the longest sleep or await a workflow definition can be written around.

Computation

LimitValueWhere it applies
Workflow thread steps100,000,000Each interpreter thread of a workflow, in Starlark computation steps, roughly a second of CPU. A warm resume carries the count and a cold replay reproduces it, so a runaway fails at the same instruction wherever it runs.
Module file thread steps10,000,000The thread that evaluates a loaded module file, a tenth of a workflow thread’s budget.
Transform source8 KiBThe source text of one derived_action transform.
Transform chain8 layersHow many transforms may wrap one invocation.
Transform steps1,000,000One run of a whole transform chain. Every layer spends from it.
Transform output256 KiBThe result a transform produces, checked inside the activity.
Poll predicate cost100,000 CEL unitsOne evaluation of a poll check.

Identifiers and API

LimitValueWhere it applies
Workflow key1 to 255 bytesReturned by StartWorkflow, presented by every other RPC.
Idempotency key1 to 255 bytesStartWorkflow and SendToWorkflowChannel. Required; the __autocore_internal: prefix is reserved.
Workflow token, channel token1 byte to 4 KiBEvery RPC that addresses an existing workflow.
Token bindingexactly 64 bytesStartWorkflowRequest.token_binding.
RPC rate60,000 calls per namespace per minuteAll four RPCs together. Over the limit is RESOURCE_EXHAUSTED.
SendToChannel rate1,000 batches per module agent per minuteA module’s send stream. A batch over the limit ends the stream with RESOURCE_EXHAUSTED.
Last updated on