Artifact Store (MinIO)¶
MinIO is where agents save files — reports, logs, generated documents, images. When an agent creates something, it uploads it here, and the system generates a download link for the user.
What it stores¶
Content |
Who writes it |
Example |
|---|---|---|
Generated artifacts |
Ephemeral agents (Zombie) |
PDFs, CSVs, code files |
Execution logs |
Any agent (if |
JSON logs per request |
Uploaded files |
Tools that produce output |
Charts, images, exports |
How it’s included¶
MinIO is added automatically when you create a project with --with-semantic-layer:
abi-core create project my-app --with-semantic-layer
# MinIO runs on port 9000 (API) and 9001 (console)
In compose.yaml:
services:
my-app-minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
ports:
- 9000:9000 # S3-compatible API
- 9001:9001 # Web console
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin
Configuration¶
Agents connect to MinIO via environment variables:
environment:
- ARTIFACT_ENDPOINT=http://my-app-minio:9000
- ARTIFACT_ACCESS_KEY=minioadmin
- ARTIFACT_SECRET_KEY=minioadmin
- ARTIFACT_BUCKET=abi-artifacts
For execution logs:
environment:
- LOG_TO_ARTIFACT_STORE=true
- LOG_AGENT_NAME=orchestrator
- LOG_BUCKET=abi-logs
Upload artifacts from an agent¶
from abi_core.common.artifact_store import upload_artifact
# Upload a file
artifact = await upload_artifact(
content=pdf_bytes,
filename="quarterly-report.pdf",
content_type="application/pdf",
metadata={"agent": "reporter", "task_id": "task-42"},
)
# Returns: {"filename": "quarterly-report.pdf", "url": "...", "bucket": "abi-artifacts"}
Generate download URLs¶
The Orchestrator generates pre-signed URLs so users can download artifacts:
from abi_core.common.artifact_store import generate_download_urls, format_artifact_links
# Generate temporary download URLs (valid for 1 hour)
await generate_download_urls(artifacts)
# Format as markdown links for the response
links = format_artifact_links(artifacts)
# "📎 quarterly-report.pdf: https://minio.../presigned-url"
Access the web console¶
Open http://localhost:9001 in your browser. Login with minioadmin / minioadmin.
From there you can:
Browse buckets and files
Download artifacts manually
Check storage usage
Manage access policies
Buckets¶
Bucket |
Content |
|---|---|
|
Files generated by agents (reports, exports, etc.) |
|
Execution logs (JSON, one file per request) |
How the Orchestrator uses it¶
After a workflow completes:
Ephemeral agents upload their output to
abi-artifactsOrchestrator collects artifact metadata from A2A responses
Generates pre-signed download URLs
Includes links in the synthesized response to the user
event: result
data: {"conclusion": "Report generated successfully.",
"artifacts": [{"filename": "report.pdf", "download_url": "https://..."}]}
Production notes¶
Change
MINIO_ROOT_USERandMINIO_ROOT_PASSWORDin productionUse a persistent volume for
/data(already configured in compose)Pre-signed URLs expire after 1 hour by default
MinIO is S3-compatible — you can swap it for AWS S3 by changing the endpoint