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 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 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 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:

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 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
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.