Shipfox
Reference

Limits and Defaults Reference

Look up Shipfox gate attempt caps, job timeouts, log budgets and retention, output grouping caps, environment-map limits, 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)NoNew runs use five when no authored limit is set. Active and rerun executions with no persisted limit retain the legacy limit of three. When the cap is exhausted and the gate still fails, the step is marked failed and the job stops. 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. See Job fields.
Run timeout30 daysNo (not authorable)Outer bound on a whole run, including its listening jobs. A listening job's timeout is capped by it.
Manual triggers per workflow1NoSee Trigger 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 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.

Logs

LimitDefaultConfigurableDetails
Per-job log budget32 MiB + 1 MiB per minuteSelf-host: LOG_BUDGET_BASE_BYTES, LOG_BUDGET_RATE_BYTES_PER_MINUTEPast the budget, the job is capped and further output is dropped. A capped record marks the boundary. See Inspect logs.
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