Artifacts
The Artifacts page at Dashboard → Artifacts is the record of what your runs produced — summaries, output links, media, and a comment thread per artifact — with PIN-protected public sharing built in.
These are run artifacts: one per agent run that produced reviewable output, whether the run came from a direct invocation or a pipeline step. They're distinct from a project's per-phase pipeline artifacts (the versioned outputs documented at Artifact versioning & backtrack) — a project's detail page shows both, side by side.
The list
The table shows the newest run artifacts with sortable/searchable columns: title, status (succeeded / failed), agent, transport (with a link to the owning project when the run was a pipeline step), and created time. The underlying endpoint is GET /v1/run-artifacts with agent, project_id, transport, limit (1–500), and offset filters, tenant-scoped to your workspace.
Click a row for the detail page. A run's detail page also links straight to its artifact when one exists (GET /v1/runs/{run_id}/artifact, 404 when none).
The detail page
Recap
The headline section: an overview stats strip (when the run recorded recap stats, cost included), a tool-usage chart, and the structured recap — summary markdown, per-file changes, commands, commits, outputs, and embedded media (images / audio / video). Every section is optional; older artifacts fall back to plain summary markdown plus the outputs grid.
Comments
A threaded comment section under each artifact. Post a comment (POST /v1/run-artifacts/{id}/comments with { "body_md": "…", "author": "…", "parent_id": null }) and the producing agent replies asynchronously — the reply lands as a later comment with author_kind: "agent"; the page polls the detail endpoint until it arrives. Use it to ask the agent about its own output ("why did you pick this palette?") without spawning a new run.
Sharing
The Share panel mints a public, PIN-protected link:
- Toggling share on generates a token and a PIN. The public URL is
https://catent.io/a/{token}; the PIN is shown only to you (share_pinis an owner-only response field) — send it out-of-band. - Visitors open the link, enter the PIN, and see a censored public shape of the artifact: recap, outputs, media — never owner fields, never your workspace.
- Rotate (
{ "enabled": true, "rotate": true }) invalidates the old token/PIN pair; toggling share off kills the link.
Wire-level: POST /v1/run-artifacts/{id}/share, then the public reads at GET /v1/public/run-artifacts/{token} (PIN via the X-Artifact-Pin header; 401 PIN required, 403 wrong PIN, 404 not shared) and GET /v1/public/run-artifacts/{token}/media?key=…&pin=… for the embedded media. The public routes are the only unauthenticated surface in the API — deliberately, so the share page needs no portal session.
Artifacts on the project page
A project's detail page groups run artifacts under the phase that produced them (inside each phase's pipeline-artifact card) with the leftovers under Other runs — so the pipeline view and the produced-output view stay one page.
Next
- Portal → Runs — the runs that produce these artifacts.
- Artifact versioning & backtrack — the pipeline artifact model.
- Portal → Projects — both artifact families on one page.