Works with Claude Code and Codex
When the agent finishes, one command reads the session on your machine and writes the story: a permanent page — every step in plain English, the commands, diffs and test output underneath. Anyone with the link can read it; nothing publishes until you say yes.
Get started — pick your agent
$ npx taleseal seal
# finds your newest Claude Code session, shows what
# it will publish, and waits for your yes
https://taleseal.com/t/example$ npx taleseal seal --codex
# finds your newest Codex rollout, shows what
# it will publish, and waits for your yes
https://taleseal.com/t/examplefree · readers need no account · pages are unlisted
The moment it’s made for
The dashboard says 3%. Where is 12% coming from?
Every query it ran, on one page:
taleseal
Churn impact of the pricing change
succeeded8 queries · every result kept
✓ settled by the evidence, not by rank
The page behind the link
taleseal turns the finished transcript into a page you and your team can read — what was done, and how:
The verdict, first
What happened and whether it held — before a single line of detail.
Plain English, not a log
Chapters written for a reader, not a scroll through raw output.
The actual output, kept
Under every claim, the command, diff or test result that backs it.
A reader skims it in thirty seconds. They need no account — a tale is reachable only by its link.
Read the example taleWhere a tale goes
In a pull request
“Why did the agent change this?”Attach the tale. Reviewers read the reasoning and the test output right next to the diff.
In Slack
“Did the nightly run actually work?”Paste the link. It unfurls with the verdict; the receipts are one click deeper.
On a schedule
“Nobody watched it run.”Unattended agents seal their own tales from a hook with --yes. You read what happened, not the scrollback.
Sealed means sealed
That is what makes it worth citing. There is no edit after sealing, for anyone, ever — a tale can be withdrawn, never rewritten.
Nothing leaves your machine until you say yes. The CLI shows you exactly what it is about to publish first.
Get started
Sign up and copy your API key from the dashboard. It is shown once.
Sign up freeRun npx taleseal login and paste the key. It is saved on your machine, so you never type it again.
After a run, npx taleseal seal. It shows exactly what it is about to publish, waits for your yes, then prints the link.
npx taleseal seal --preview prints the tale of your newest session: title, steps, evidence, anything the redactor caught. It runs locally: nothing leaves your machine, and no key is needed.
For agent builders
Claude Code and Codex sessions seal straight from the transcript, nothing to integrate. For everything else, the SDK writes the tale as your agent works — or your framework’s OpenTelemetry exporter does it for you.
Using an AI coding agent? Point it at taleseal.com/integrate — it can complete the integration and verify it end-to-end.
npm install @taleseal/sdk
or bun add · pnpm add · yarn add
The whole tale buffers locally while the run happens; publish() sends one POST at the end and returns the link. Nothing touches the server until then.
import { openTale } from "@taleseal/sdk";const tale = openTale({ agent: "refunds", title: "Nightly refund sweep",});tale.beat({ title: "Checked 214 refunds", prose: "Three flagged for manual review.",});tale.evidence({ kind: "command", command: "refunds sweep --live", output: "checked 214 · flagged 3 · 41s",});tale.outcome("3 flagged for review", { destination: "#finance" });const { url } = await tale.publish();console.log(url); // → https://taleseal.com/t/8fj2…
a teammate · 16:02
AI says the pricing change cut churn 12%. Sending it to leadership 🎉