Storage for the things agents make.
Code, documents, designs, memory, datasets and checkpoints, versioned on every write and traceable to the agent, model and session that produced them. Reachable over native Git, an S3-compatible API, or the SDK.
| Artifact | Version | Produced by | Derived from | Tier | Written |
|---|---|---|---|---|---|
| reports/q3-summary.md | v12 | analyst-v4 ses_8f2a | sales/q3.parquet, analyst-v4/memory.md | hot | 4s ago |
| analyst-v4/memory.md | v148 | analyst-v4 ses_8f2a | analyst-v4/memory.md v147 | hot | 4s ago |
| app/src/routes.ts | v31 | swe-7 ses_c01d | app/src/routes.ts v30 | hot | 12s ago |
| design/onboarding.fig | v6 | designer-2 ses_b77e | design/onboarding.fig v5 | hot | 1m ago |
| adapters/sft-run-19.safetensors | v1 | trainer job_19 | sales/q3.parquet, evals/suite-4.jsonl | cold | 2h ago |
| sales/q3.parquet | v3 | ingest ses_2210 | none | cold | 3d ago |
Stores
Code was the first thing agents made. It is no longer most of it.
- Generated code
- Whole repos or single files. Clone and push over Git, or stream files through the API with no checkout.
- Documents
- Markdown, PDFs, spreadsheets, drafts. Line diffs for text, structural diffs for JSON and tables.
- Designs and media
- Images, video, renders and design files. Large objects are chunked and deduplicated across versions.
- Agent memory
- Memory files, scratchpads and tool logs, versioned per agent and per session, so a mind can be replayed or rolled back.
- Datasets and evals
- Fork a dataset, run a job, keep the lineage between the input and the score.
- Model checkpoints
- Adapters and full weights from post-training runs, tied to the data and config that produced them.
Writes
Every write is a commit. Every commit knows where it came from.
- Write through any door. An SDK call, a
git push, or an S3PutObject. The result is reachable through all three afterwards. - Versioned by content. Each write is hashed, deduplicated and committed with a quorum across replicas. Branch, fork and diff any artifact, including binaries.
- Traceable later. Attach the agent, model, session and parents on write. Ask the lineage graph: what made this, and what did it go on to make?
import { ArtifactStorage } from '@constal/artifact-storage'
const store = new ArtifactStorage({ org: 'acme', key })
const report = await store.put('reports/q3-summary.md', body, {
producedBy: { agent: 'analyst-v4', session: 'ses_8f2a' },
derivedFrom: ['sales/q3.parquet@v3', 'analyst-v4/memory.md@v148'],
})
report.version // 12
report.sha256 // 9e1f…c3a0
Limits and pricing
Thousands of agents writing at once is the normal case. You pay for bytes and bandwidth.
| Total storage | Unlimited |
|---|---|
| Artifacts per org | Unlimited |
| API and Git rate limits | None |
| Concurrent writes per artifact | Contact us |
| Max artifact size | Contact us |
| Version history | Unlimited |
| Sync with GitHub, S3, GCS | Yes |
| Hot storage (touched in 7 days) | Contact us |
|---|---|
| Cold storage | Contact us |
| Inbound (put, push) | Contact us |
| Outbound (get, clone, fetch) | Contact us |
| Lineage queries, diffs, webhooks | Free |
| Seats, requests | Not billed |
| Bring your own cloud | Contact us |
Storage is deduplicated across versions, so you pay for unique bytes. Metered hourly, invoiced monthly. Commitment discounts and dedicated tenancy on enterprise plans.
Durability
Your users expect their work to still be there.
Writes commit with a quorum across replicas before they are acknowledged. Failover is transparent, migrations have no downtime, and nothing in the write path is shared between tenants.
- Uptime SLA
- Contact us
- Replicas per write
- Contact us
- Per-tenant encryption keys
- Yes
- Audit log on every read and write
- Yes
- SOC 2 Type II
- Contact us
- Data residency
- Contact us
Give your agents somewhere to keep their work.
Create an org, mint a key, make a versioned write. Contact us for preview storage allowances.
npm i @constal/artifact-storage
pip install constal-artifact-storage
go get constal.ai/sdk/artifact-storageGet an API key