Artifacts
Capture files a session produces to durable storage and get pre-signed download links that outlive the session.
What artifacts are
A session is ephemeral — when it is torn down, its filesystem is gone. Artifacts let you keep the files a session produced. You name the paths to capture; inis.run tars them out of the session, writes them to durable storage, and hands back pre-signed download links. The links need no auth header and outlive the session.
Typical uses: a generated report or chart, a model checkpoint, a CSV an agent built, the output of a batch job.
Capture on demand
Capture from a live session at any time. The call returns immediately with a
pending artifact; the upload runs in the background.
inis sessions artifacts capture <session-id> \
--path '/workspace/output/**' \
--path '/workspace/*.csv'art = session.capture_artifacts(["/workspace/output/**", "/workspace/*.csv"])
# poll until ready
art = client.artifacts.get(art.id)
for f in art.files:
print(f.path, f.url)let art = await session.captureArtifacts(["/workspace/output/**", "/workspace/*.csv"]);
art = await client.artifacts.get(art.id);
for (const f of art.files ?? []) console.log(f.path, f.url);Path syntax
- An exact path:
/workspace/report.pdf - A bare directory, captured recursively:
/workspace/output(same as/workspace/output/**) - A shallow glob:
/workspace/*.csv - A recursive glob:
/workspace/output/** - A bare relative path, resolved under the workspace:
output/**(same as/workspace/output/**)
Captures are scoped to the session workspace (/workspace) — the writable area
where session files live. Paths outside it are rejected. A capture has a
per-capture size cap (1 GiB by default) and a file-count cap (10,000). Exceeding
either fails the capture rather than truncating it.
Auto-capture on teardown
Declare the paths at create time and they are captured automatically when the
session is torn down — explicit destroy, idle timeout, or max-lifetime. Teardown
holds the session live just long enough to finish the capture, with a time cap so
it can never block forever; if the cap is hit the artifact is marked failed and
teardown proceeds.
inis sessions create --artifact-path '/workspace/output/**'{
"artifacts": { "paths": ["/workspace/output/**"] }
}Manifest
Getting an artifact returns its manifest:
{
"id": "art_…",
"session_id": "…",
"status": "ready",
"captured_at": "2026-06-23T18:00:00Z",
"expires_at": "2026-06-30T18:00:00Z",
"files": [
{ "path": "output/chart.png", "url": "https://…", "size_bytes": 20480, "content_type": "image/png" }
]
}status is pending, ready, or failed. The url on each file is a
pre-signed, direct-download link.
Retention
Artifacts are retained for 7 days by default, then purged from storage. Push the expiry forward (up to a 30-day cap) with extend:
inis artifacts extend <artifact-id> --ttl-days 30Delete early to free storage:
inis artifacts delete <artifact-id>Where files are stored
By default, files land in inis.run's own EU object store (built and run in Ireland). You can also send a capture to your own EU bucket — set the destination on the capture:
{
"paths": ["/workspace/output/**"],
"destination": { "type": "s3", "bucket": "my-eu-bucket", "region": "eu-central-1" }
}Bring-your-own-bucket keeps captured data entirely in storage you control. EU residency is a hard constraint — there is no US default.
Billing
Artifact storage is billed by GB-days: the total size of your stored artifacts multiplied by the days they are retained. Captures count against per-capture and per-customer size limits; purged artifacts stop accruing storage charges.