Open contents5.6Capacity, input, and execution limits

PART 5Connect, operate, and recover5.6

Capacity, input, and execution limits

Limits and input units for attachments, Media, HTML, documents, messages, Asks, Workflows, Project Database, Triggers, waits, Session startup, and lists, with ways to reduce, split, or re-check oversized content.

A Session attachment and a Project Media publication can have different limits even for the same file. Choose the destination and file type before using these tables.

A KiB is 1,024 bytes, a MiB is 1,024 KiB, and a GiB is 1,024 MiB. Byte limits are not character limits: a UTF-8 character can occupy multiple bytes. "Characters" means Unicode characters. These are input and storage constraints, not guarantees of execution time or availability.

Attachments and Project Media

TargetLimit
Attached image20 MiB / file
Attached PDF50 MiB / file
Attached video200 MiB / file
Attachments in one message send10 files, 250 MiB combined
Attachment availability24 hours from the start of upload
Project Media image20 MiB / file
Project Media PDF50 MiB / file
Project Media video2 GiB / file
Project Media total per Project20 GiB
WebUI Media upload20 files at a time (unfinished uploads count)

The 2 GiB Project Media limit is for video only; it does not apply to images or PDFs. Unsupported formats and encrypted PDFs are rejected even when they fit within the size limit. Attachments are not automatically published as Project Media, and a Media canonical URL is not an external public share.

An attachment cannot be used after it expires. In the WebUI composer, each attachment card shows Available until with the expiry time, and an expired attachment blocks sending with An attachment has expired. Attach it again or remove it before sending. The server also rejects expired attachments at send time. Attach the file again, or remove it before sending.

Content limits apply in addition to byte size. For example, a 20-minute MP4 attachment or a 501-page PDF is rejected even if the file is small.

TargetContent limit
Images12,000 pixels for width and height, 100,000,000 total pixels, and 64 animation frames
PDFs500 pages; decompressed PDF streams are also limited to 64 MiB
Attached video10 minutes
Project Media video60 minutes
All video3,840 pixels wide and 2,160 pixels high; this is not an equivalent-area rule for rotated dimensions

Resize oversized images to the resolution you need, split PDFs to the relevant pages, and adjust video length or bitrate. Do not rename a file extension to bypass format checks. See Media and WebUI attachments.

HTML and Shared Documents

TargetLimit or format
One Project HTML file5 MiB (5,242,880 bytes)
Project HTML total per Project50 MiB and 500 files
Project HTML pathUp to 512 bytes for the whole path under html/, 128 bytes per segment, and 8 levels deep. Segments allow only lowercase ASCII letters, digits, ., _, and -, and cannot start with .
Share HTML expiry1, 7, or 30 days; default 7
Shared Document1 MiB
Document kind nameUp to 32 characters; starts with a lowercase letter and contains lowercase letters, digits, _, or -
Ordinary doc IDUp to 64 characters; starts with a lowercase letter or digit and contains lowercase letters, digits, _, or -
mindmap200 nodes
brainstorm100 ideas; each title up to 50 Unicode code points and each description up to 200

An HTML file over 5 MiB is rejected before upload, for that file only, and the reason appears in html/_errors.md. Other HTML files keep syncing, but pages that reference the rejected file may not render correctly. Reduce or split the file and save it again.

Publish finished files such as images and PDFs as Media and reference them from HTML or documents. Base64-embedding a large file in HTML counts against the HTML limit. When a document grows too large, split it into independently readable documents and connect them with WikiLinks.

PROJECT.md and REPORT.md have reserved purposes and uppercase paths. A correct path can still fail to save because of frontmatter syntax or permissions. See Shared Documents, HTML, and Markdown blocks.

Messages, Asks, and Meetings

TargetLimit
Project Chat message body100,000 bytes
Ask question2,000 bytes
Ask body100,000 bytes
Each Ask option200 bytes
Ask answer text32,000 bytes
Meeting title1–120 characters
Meeting participantsUp to 50 names, each 1–120 characters
Meeting bodyNot whitespace-only; up to 100,000 bytes

Do not pack long material into an Ask question or options. Put the decision summary and references in the body. A Workflow Decision's rendered body is also subject to the Ask body limit.

Workflows

TargetLimit or condition
One Bundle file1 MiB
Whole Bundle4 MiB and 128 files
Relative path inside a Bundle1–256 UTF-8 bytes
Workflow Steps1–64
Direct dependencies of one StepUp to 32
Dependency edges in a WorkflowUp to 256; cycles are not allowed
Rendered Session Step prompt100,000 bytes
Completion and Run output128 KiB and a maximum JSON depth of 32
Attempt feedback bodyNon-empty after trimming whitespace, at most 8,192 bytes
Run input128 KiB and a maximum JSON depth of 32
error of a failed completionNon-empty, at most 4 KiB
Free text in chat workflow runsShortened to 100-character previews marked truncated: true
Published Workflow compositionOne level. Use a published Workflow from the same owner, or a published Team Workflow addressed as team:<slug>

The Bundle file limit is separate from the prompt limit after inputs and dependency outputs are rendered. A short template can exceed the runtime limit when it expands a large input. Store long outputs in Project documents and return only small values and references from Step outputs. When a Step's completion would push the Run output over its limit, that Step fails with workflow_completion_limit_exceeded and the Run becomes attention_required. Publish a corrected Revision that stores large artifacts in the Project and returns references, then start a new Run.

Inputs and outputs must match the declared schema. Objects use additionalProperties: false, so select only the required keys when passing one Workflow's output to another. Undeclared keys and type mismatches are rejected even when the size is within limits. See CLI and Workflow reference for syntax.

Project Database

TargetLimit or condition
SQL input and migration file100 KiB
QueryOne SELECT, INSERT, UPDATE, or DELETE statement
Query paramsJSON array of up to 100 strings, referenced by positional ?
Query resultUp to 1,000 rows and 1 MiB of decoded output
MigrationUp to 100 statements, with a separate allowlist from queries
One WebUI page25, 50, or 100 rows
Migration ID1–128 characters; starts with a lowercase letter or digit and contains lowercase letters, digits, _, or -

An oversized query result is rejected rather than returned partially. Select the columns and rows you need, using WHERE and an appropriate LIMIT. The 100-parameter limit counts values supplied to placeholders, not rows written.

Live queries do not overlap within one Project. Do not repeatedly send a mutation that is still in progress or whose outcome is unknown; follow the error's read guidance to inspect current state. Build migrations from the parent version in schema.sql, then explicitly apply the synchronized file (Database).

Triggers and scheduled follow-ups

TargetCondition
Project Trigger intervalAt least 300 seconds. The end time is optional; if supplied, it cannot precede the start and is inclusive. Without it, the Trigger runs until paused or deleted
Scheduled follow-up to an existing Session: delay before the first message1 second to 30 days with chat session schedule create --after; the outer aachat session schedule create --at takes a timestamp
Scheduled follow-up to an existing Session: repeat interval60–86,400 seconds (--repeat-after takes 1 minute to 24 hours; --every takes 60–86,400 seconds), counted from completion of the turn the reservation starts
WebUI scheduling inputsThe Session composer's When and a Trigger's Scheduled follow-up take a whole number from 1 to 1,440 minutes. With Repeat on, both use the same number of minutes as the repeat interval
Calendar TriggerIANA timezone, local time, and one or more weekdays (no duplicates); a supplied end date is inclusive
Document matchExact equality on string, number, or boolean frontmatter values in the same Project; multiple conditions are ANDed; fires at most once

A Trigger starts a fresh Session or Published Workflow. A scheduled follow-up adds a turn to an existing Session. Their interval limits and stop controls differ. Preview time schedules before creating them and check the actual next occurrences. See Triggers for end times and stop controls, and Sessions for creating and cancelling scheduled follow-ups.

Session startup, waits, and workspaces

TargetLimit or condition
Startup check in chat session runWaits up to 40 seconds for the new Session to leave starting, then returns startup
Waiting while the agent runtime is not connectedWaiting for the connection has no timeout. An accepted Session remains queued and starts automatically when the runtime connects.
Targets of chat wait --all1–100 (direct child Sessions, top-level Workflow Runs in that Project, and Project Asks)
Free space before a Fresh or Workflow Session starts20 GiB. If space is short, inactive workspaces of the same agent are reclaimed once; if still short, the Session fails with workspace_capacity_insufficient
One chat result report submission1–50 items and up to 1 MiB of stdin

startup.state = preparing only means preparation did not finish within 40 seconds; it is not a failure. runtime_offline means that agent's aachat up is not connected. See "A Session does not start" in Troubleshooting.

Search, lists, and text reads

TargetLimit or default
Results of query-based message search (Web search, aachat find, and similar)An excerpt of up to 240 characters around the match; … marks where text was cut
chat session read --matchCase-insensitive literal search within one Session. Excerpts up to 600 characters; --last defaults to 50, maximum 100. Follow next_page for older matches
Free text in chat list rows (body, failure reason, and so on)Truncated to a 100-character preview. Read the full text through the returned detail read (detail_read)
aachat listsDefault 20 items, maximum 100 (check CLI for per-command defaults)
chat session list and aachat session listDefault 10 items, maximum 100
chat workflow runsDefault 4 items; filter with --state <state>
Text read with aachat ... --full12 KiB (12,288 bytes) per page by default, split on UTF-8 boundaries; --max-bytes allows up to 64 KiB

Search results are not the full message. To read the full text, jump to the message from the result or use a normal read such as chat read. The first instruction of a Trigger-started Session is excluded from message search (find); read it in that Session's transcript.

Pagination is specific to the surface

SurfaceHow to continue
chat read listsRead data.items. When data.next_page is a command locator ({kind, program, argv}), run its argv with program as-is. next_page is null on the last page (CLI)
aachat read lists (project read, project document, session list, session read, ask list, Workflow lists, and the rest)Run next_page.argv with program as-is; next_page is null on the last page (CLI)
aachat inboxContinue the unread Project list with the data.next_page command locator, which includes --before. Read individual Project history with aachat project read
--full textUse the returned continuation locator. Offset and checksum detect content that changed between pages
Project Database WebUINumbered pages with 25 / 50 / 100 rows; changing table or sort changes the query (Database)
chat inbox / bounded Session decision / matched excerptsThese are bounded views, not a cursor-based full history. Use the suggested history read; chat inbox does not paginate (Sessions, CLI)

Do not interchange cursors, page numbers, and row limits, or treat the first page as the entire result.

When a limit error appears

First identify the destination, input, or result that exceeded its limit. File size, UTF-8 bytes, a rendered prompt, and decoded SQL output measure different things. Reduce the content or move it into referenced artifacts, then verify the operation's result.

Within these limits, permissions, supported formats, Project status, disk capacity, and provider availability can still prevent an operation. Consult Permissions and Troubleshooting. If an operation's outcome is unknown, establish whether the original request was accepted before submitting changed content as another request.