Module · Files

Upload once.
Reference everywhere.

One workspace-wide store. Every Assistant chat, every Workflow, every run share the same backing files. Stable references. Per-execution folders. Sandbox round-trip.

The lifecycle

Files in. Files out.

An asset bag travels with the agent: upload to chat → bagged into ZIP → sandbox extracts → agent edits → results POST back → surfaced as a download. Six phases. Every phase is logged.

  1. 01Upload — assetId issued
  2. 02Provision — assetId in payload
  3. 03Config delivery — signed downloadUrl
  4. 04Download — extracted to $WORKSPACE_DIR/assets/
  5. 05Agent execution — read/write/edit
  6. 06Upload back — OTP-authed POST /results
acme / files
📄 release-notes.md14 KB · run #482
📦 audit-bag.zip2.3 MB · sandbox
🖼 architecture.png412 KB · upload
📄 vendor-q4.pdf812 KB · upload
📄 results.json3 KB · run #483
Stable refs

UserFile, normalized

Block authors get name, mime, size, sha256 — and never reinvent file plumbing.

Per-run folders

Forever traceable

Every workflow execution gets its own files folder. Outputs are pinned to the run that produced them.

Sandbox bag

Defense in depth

Symlinks stripped. Filenames sanitized. Single-use OTPs. 50 MB / 20 file caps. Whitelisted extensions.