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_pin is 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