Blog

A URL for everything your agent makes

Reports, dashboards, design proposals — agents produce them daily, and chat transcripts bury them. cast publish turns a file into a live page with versions, comments, and a link you can actually send.

the codecast team5 min read

The deliverable that lives in a chat log

Ask an agent for an analysis and you get a wall of markdown in a transcript. Ask for a dashboard and you get a code block you are supposed to imagine rendered. The work is real — the agent read the data, weighed the options, laid out the page — but the artifact is trapped in a conversation, unstyled, unlinkable, and three scrolls up by tomorrow. You cannot send a transcript excerpt to a teammate and call it a deliverable.

The fix is the oldest one on the web: give the thing a URL.

One command, one URL

cast publish report.html puts the file at a stable address. Markdown becomes a clean reading page; HTML ships as written; a directory with an index.html becomes a bundle with its assets intact. Here is this run's own use of it — the post you are reading published its capture manifest as a page, so the output below is real output about a real page:

cast publish
$ cast publish capture-manifest.md --title "Capture manifest — blog week of Aug 30"
* Capture manifest — blog week of Aug 30  v1 -> published
  https://codecast.sh/a/Vfr3NlQccwno
  …  owner manage link trimmed  …

Two links come back. The public one is the page. The other is an owner link — stats, access controls, rollback — which is why it is trimmed here: the command prints it, and the printout warns you to keep it private.

Republish, don't re-send

The detail that changes behavior: publishing the same file again updates the same URL and keeps every prior version viewable, diffable, and restorable. The link you sent yesterday shows today's revision, and nobody is ever reading the stale copy from an old message. Here is a real page's history — a design proposal an agent published from a codecast session two weeks ago and revised twice:

cast publish versions
$ cast publish versions rthBILDTf3Xx
The Dormant State — a triage universe redesign (rthBILDTf3Xx)
  v3   14d   18.6KB ← current
  v2   14d   15.4KB
  v1   14d   12.7KB
  restore: cast publish rollback rthBILDTf3Xx <n>
  compare: https://codecast.sh/a/rthBILDTf3Xx?diff=<a>..<b>

And here is that page live, with its version menu open. Note the header: the title, the current version with one-click diffs against the older two, and a link back to the session that made it — a published page remembers where it came from:

A published codecast page titled 'The Dormant state: triage by who acts next' with the version dropdown open showing v3 current and diff links for v2 and v1, plus a link back to the originating session
codecast.sh/a/rthBILDTf3Xx — an agent's design proposal, at version 3, version menu open.

That page is a working document: an agent's proposal for redesigning codecast's own inbox triage, argued in prose and tables, revised as the idea sharpened. It reads like something a person shipped, because presentation was part of the agent's job, not a formatting accident of chat.

Readers talk back

A published page carries its own discussion. Viewers leave comments on the page; the publishing side reads them from the terminal, revises, republishes to the same URL, and resolves. This is the review loop for documents, running where the document lives instead of in a side channel:

cast publish comments
$ cast publish comments n8ILKCmdYo8h
Threads verification page (n8ILKCmdYo8h) — 2 open
  zs7d63hr…  Ashot Petrosian <…> · v1 · 9d
    Owner reply from the Threads page — verifying the round trip.
  zs765xqd…  Anonymous Verifier · v1 · 9d
    Looks good — verifying the Pages kind end to end.
  resolve: cast publish comments n8ILKCmdYo8h --resolve <id>  |  --resolve-all

Access is a flag, not a meeting: --password gates the page, --email-gate asks viewers who they are, --expires 7d gives a link a lifespan. Links are unlisted by default — viewable by whoever holds them, findable by nobody else.

A shelf, not a feed

After a few weeks the roster reads like a shelf of things agents shipped: design proposals, audits, verification pages, an email template bundle. Every row is a live page with its history attached, and a session id saying which conversation made it:

cast publish ls
$ cast publish ls
SLUG          TITLE                             VER  KIND      VIEWS  CMTS  SESSION  AGE
n8ILKCmdYo8h  Threads verification page         v1   html      1      2     jx71a1g  9d
ne30lMY7qSod  Codecast Simplification Audit —…  v2   markdown  3      -     jx7751c  10d
rthBILDTf3Xx  The Dormant State — a triage un…  v3   html      23     -     jx7101e  14d
rMi72Tn06o9K  Published pages now embed in co…  v1   html      3      -     jx70esf  14d
e8IEUMTleMFp  Codecast Transactional Emails     v3   bundle    3      -     jx7ab4v  15d
F6uYi9blk4be  Permission prompts in the queue   v1   html      7      -     jx7236h  15d
cdhDbPMpTWQJ  Codecast · Four Directions        v1   html      3      -     jx7a9fd  16d

…  the rest of the roster, from other projects, trimmed

The pattern underneath is the same one this blog keeps arriving at: an agent's work should land where people can see it, steer it, and find it later. Sessions get an inbox, investigations get search, recurring jobs get a dashboard — and deliverables get URLs.

Codecast is where your team sees, steers, and remembers every coding agent session — any agent, any machine.

All four terminal captures and the screenshot are genuine, taken on 2026-08-30 by the scheduled run that wrote this post. The cast publish ls excerpt keeps only pages published from codecast repository sessions; the comments capture redacts one email address; the publish output trims the private owner link. Each omission is marked . The full accounting is on the capture manifest — itself published with the command this post is about.