Shipfox

Limits and Defaults Reference

Look up Shipfox gate attempt caps, job timeouts, concurrent step caps, log budgets and retention, output grouping caps, environment-map limits, workspace secret and variable caps, and agent session caps.

This page is the canonical home for shared operational limits. Other pages describe the behavior and link here for the numbers. Self-hosted deployments can change the values marked configurable.

Workflow execution

LimitDefaultConfigurableDetails
Gate attempts per gating step5 (including the first execution)1 to 1,000 per restart rule, in YAMLgate.on_failure.max_attempts sets how many times the gating step can run. Each rule in a list of on_failure rules has its own value. The selected rule's value is compared with the total runs of the step, whichever rules caused the earlier restarts. The first run counts as attempt 1. If you omit the field, a new run uses five. Active and rerun executions with no persisted limit retain the legacy limit of three. When the selected rule's attempts are used up, the job fails with restart_exhausted. When no rule applies, the job fails with the error of the step. You cannot remove the limit. See Feedback loops.
Job execution_timeout6 hoursPer job, in YAMLWall-clock bound on one job execution, including gate retries. Authored values range from 1 second through 24 hours. When the time ends, the job fails with timed_out. See Job fields.
Concurrent steps per job20Self-host: WORKFLOWS_MAX_CONCURRENT_STEPS, from 1 through 64Counts background steps and other steps of one job together. A step above the limit waits, in file order, for a free slot. The workflow file cannot change the limit. See Jobs and steps.
Cancelled step stop period10 secondsNocancel sends SIGTERM to a run or action step, then SIGKILL after this period. See Jobs and steps.
Run timeout30 daysNo (not authorable)Outer bound on a whole run, including its listening jobs. Time spent waiting for a concurrency group does not count toward this timeout. A listening job's timeout is capped by it.
Manual triggers per workflow1NoSee Trigger fields.
Concurrency with listening jobsNot supportedNoA workflow cannot use concurrency when it has a listening job. See Concurrency fields.

Step outputs

LimitDefaultConfigurableDetails
Output bytes per step256 KiB total, 64 KiB per valueNoThe runner enforces both caps; Workflows also rejects persisted step output above the 256 KiB total cap. See Step outputs.
Declared outputs per step128 entriesNoThe outputs: map on one step.
Agent output re-prompts2NoAn agent step missing a declared output is re-prompted this many times before the step fails.

Persisted step outputs use JSON-safe values. Tool mappings convert safe CEL integers to JSON numbers. They reject unsafe integers, non-finite numbers, unsupported objects, cyclic values, and values nested beyond 64 levels.

Job outputs

LimitDefaultConfigurableDetails
Output bytes per job256 KiB total, 64 KiB per valueNoA job fails when materialized outputs exceed the cap. See Job fields.
Declared outputs per job128 entriesNoThe outputs: map on one job. See Job fields.
Structured output nesting64 levelsNoStructured values deeper than this fail as non-JSON-safe outputs.

Persisted typed job outputs use JSON-safe values. CEL integers become JSON numbers when they are safe integers and decimal strings otherwise. Timestamps become ISO 8601 strings. Unsupported or cyclic values fail the execution. The total is measured as UTF-8 bytes of the complete serialized outputs object, including output keys and JSON syntax.

Workflow outputs

LimitDefaultConfigurableDetails
Output bytes per run256 KiB total, 64 KiB per valueNoA run fails with status reason output_too_large when its evaluated outputs exceed the cap. See Top-level fields.
Declared outputs per workflow128 entriesNoThe top-level outputs: map.

Workflow outputs use the same JSON-safe encoding as job outputs.

Workflow document

LimitDefaultConfigurableDetails
env entries per map128NoApplies to each of the workflow, job, and step env maps. See Environment variables.
env serialized size32 KiBNoThe JSON-serialized size of one env map.
Parts per agent prompt64NoThe items of one prompt list, counting strings and file references. See Split a prompt into parts.

Workspace settings

LimitDefaultConfigurableDetails
Secrets and variables per workspace10,000Self-host: SECRETS_MAX_PER_WORKSPACEOne cap counts secrets and variables together. See Manage secrets and variables.

Workflow chaining

LimitDefaultConfigurableDetails
Child-run depth5NoA run at depth 5 cannot start another workflow. The start_workflow_run tool returns run-depth-exceeded.
Descendant runs per root run100NoShipfox rejects another child after the run tree reaches 100 descendants. The start_workflow_run tool returns run-tree-limit-exceeded.

Logs

LimitDefaultConfigurableDetails
Per-job log budget32 MiB + 1 MiB per minuteSelf-host: LOG_BUDGET_BASE_BYTES, LOG_BUDGET_RATE_BYTES_PER_MINUTEThe budget limits the log output that Shipfox keeps. It does not stop the job. After the job reaches the budget, later output is dropped, so later attempts can have incomplete logs or no logs. A capped record marks the boundary. Steps that run at the same time share the budget, so they use it up faster. See Inspect logs.
Log file on the runner16 MiB per step attemptNoThe runner writes a plain-text copy of each run, action, and checkout step attempt's log to a file. log_path gives the file's path. When the log is larger than the limit, the file keeps only the end of it, and its first line starts with [shipfox] Log truncated:. This limit is separate from the per-job log budget. See the Contexts reference.
Log retention90 daysSelf-host: LOG_RETENTION_DAYSPersisted logs are deleted from the database and object storage after this window.
Output group nesting32 levelsNoPast the cap a group is flattened into plain output. Wrap output in ::group::<name> / ::endgroup:: marker lines to create collapsible sections.
Output group name1 KiBNoThe runner byte-truncates longer marker names before upload. Direct log records over the cap are rejected at the record level.

Agent sessions

LimitDefaultConfigurableDetails
Session transcript segment64 MiB compressedSelf-host: AGENT_SESSION_BLOB_CAP_BYTESOne committed segment per reported attempt; a larger compressed blob fails the commit and the attempt. Transcripts are encrypted at rest with the workspace envelope-crypto scheme and are never client-readable.
Session retention90 daysSelf-host: AGENT_SESSION_RETENTION_DAYSSession rows and their transcript objects are deleted after the run terminates and this window elapses.
Superseded segment grace10 minutesSelf-host: AGENT_SESSION_SEGMENT_GRACE_SECONDSPruning of superseded segments is deferred by this window so concurrent fork snapshot reads keep their object.

A resumed transcript is byte-exact, so the model provider can reuse its prompt cache. That reuse happens only inside the provider's cache window. Rapid successive segments, such as batched listening events or short hops between dependent jobs, get it. Outside the window the provider processes the full conversation again; the resumed conversation itself is unchanged. See Agent session fields for the field contract.

Was this page helpful?
Edit this page on GitHub

On this page