Skip to main content
Firedrill retains execution output and recorded activity. Additional files, screenshots, traces, and recordings are optional evidence produced by your runner—not automatic recordings of your machine. Use browser evidence for actual browser capture. Use a native SDK callback’s attachment sink for a file your application produced.

Attach a real file

Install @firedrill-run/sdk and select a project. Save this complete example as capture-simulation.mjs:
This deterministic example writes a real observation, not proof of an external effect. Keep the original file while recovery may be needed. For repeated or parallel callbacks, use a separate private filename/directory per invocation. Await attachment inside the callback before returning. The sink binds metadata and bytes to the exact run/attempt without exposing its credential to browser code.

Know what was retained

An artifact describes its ID, kind, media type, byte count, SHA-256, capture time, and metadata. Supported media include PNG/JPEG/WebP images, JSON/text/Markdown, ZIP traces, PDF, opaque files, and WebM recordings. Files must be current-user-owned private regular files, not symlinks. An attachment’s declared size and digest must match its exact bytes. A changed file cannot replace evidence under an existing artifact ID. Distinguish these states:
  • Local only: bytes exist on your runner but are not confirmed in Firedrill.
  • Pending upload: the retained intent exists; upload is not yet confirmed.
  • Available: the exact artifact upload was acknowledged.
  • Unavailable content: retention/removal state may preserve metadata without payload.
A filename or manifest entry is not proof that a screenshot, video, or side effect was captured.

Read or download an artifact

Set RUN_ID to a run returned by firedrill runs BATCH_ID --json. Replace BATCH_ID with your batch ID. Set ARTIFACT_ID to an available artifact ID from the manifest:
Choose a new output filename appropriate to the artifact’s media type. Download checks exact scope, media type, size, and digest; it does not open the file or overwrite existing data. The portal shows the same retained artifacts.

Privacy and recovery

Capture only what your task needs. Screenshots and videos contain application pixels; traces can contain DOM/network data; logs can contain credentials or personal information. File privacy and selective credential handling are not comprehensive redaction. Preserve private journals and original capture bytes after uncertainty. Resume the original SDK operation to reconcile the same upload. If its lease has expired, inspect the interrupted run and preserve the file; do not start a new target execution merely to recover bytes. Execution, capture availability, callback settlement, and cleanup are independent facts. A capture problem must not be reported as fabricated successful evidence.