NOT A TERMINAL MIRROR
Screen mirrors show you one terminal, while it lasts, if you dare share it. trail is the other thing — the paper trail. It records what happened, from any number of writers, at a URL you can hand to anyone.
Multi-writerFive workers on three machines, one topic, one interleaved story. Actor labels keep the plot straight.
DurableThe journal outlives the run. Paste the URL in the PR; it still means something in next week's postmortem.
Zero ceremonyNo account, no SDK, no dashboard. The first write creates the topic. An agent can mint a new journal by imagining a name.
Phone-readableThe same URL is a dark, monospace, auto-following live page. Watch your Claude Code session from the couch.
THE WHOLE API
| request | what it does |
|---|---|
POST /{topic} | append log line(s) — one entry per line; headers X-Level: info|warn|error|done, X-Actor: worker-3 |
GET /{topic} | the journal: live HTML page in a browser, plain text from curl, JSON via Accept — ?n=100 ?since=SEQ ?wait=30 |
GET /{topic}.txt | always plain text, for piping |
GET /{topic}.json | always JSON: {entries: [{seq, at, actor, level, text}]} |
GET /{topic}/sse | live SSE stream; ?since=0 replays the backlog first |
DELETE /{topic} | delete the journal |
RUN IT YOURSELF
# the same API on localhost, zero dependencies npx trail-sh serve --data-dir ./trail-data # the CLI is sugar over the same HTTP trail pipe deploy-7 -- npm test # tee a command's output into the journal trail tail deploy-7 # follow it live from another machine
TEACH YOUR AGENT
The full API fits in a dozen lines of a system prompt. Your agent gets it right on the first try — that is the entire design discipline.
curl -d "build started" https://trail.legible.sh/TOPIC curl -d "tests red" -H "X-Level: error" -H "X-Actor: ci" https://trail.legible.sh/TOPIC curl https://trail.legible.sh/TOPIC.txt?n=100 curl -N https://trail.legible.sh/TOPIC/sse?since=0