Identity that outlives the session
An agent has its own address, role, mailbox and history. The session dies and is reborn; it stays who it was.
Open source · MIT · macOS
Trama is a message broker between long-running Claude sessions. Identity that outlives the session, a durable mailbox, and a scheduler that decides who runs, when, and with which context.
In daily use on a real operation, across two clients and five projects. No signed build yet — for now you build it from source.
One request of yours, three agents, and the whole trail on one screen — with the cost running next to its ceiling.
Without Trama
With Trama
An LLM session is passive: it only computes when something invokes it. So “the Manager sends a message to the Orchestrator” is not peer-to-peer communication — it is something else, and confusing the two builds a pretty chat that stalls on the first asynchronous message.
The illusion of two peers talking is really a turn scheduler over passive sessions. That primitive is what Trama gives you.
Money
The last 24 hours' total sits pinned at the top of the window, with the share of the client closest to its own cap next to it — the 24 h cap is per client, and comparing it to the total would give a reassuring number exactly when there are many.
Mirrored board
Every scan writes the state of the cards to your disk. The screen opens instantly, doesn't spend the client's API quota on each click, and keeps answering with the tracker down — which is exactly when someone will look.
Level 3
An orchestrator can create temporary workers for technical work. Each is born in a git worktree of its own, commits to its own branch, and is retired when done. The worktree goes; the branch stays, for you to review.
Timeline
A 12 h, 24 h or 7-day window, with the total turns and the spend for the period. By default it shows only the notable — what stopped, what changed on the board, what got delegated, what recovered on its own — with routine behind a checkbox.
History
A full-text index over every message that crossed the bus — your instructions, orchestrator reports, escalations, worker conversations. It answers as you type.
Guards
Two agents that can message each other will message each other forever. The ceilings are cost per conversation, per client over 24 h, and per turn — and the last one is the only that acts while the turn runs.
Thread interrompida: limite de saltos atingido (7 > 6). Provável laço entre agentes.
And the conversation closes: no new message enters it. A guard that fires silently is worse than the loop — you'd find out from the invoice.
The edges of the graph are derived from each agent's role and client. There is no connection table for anyone to edit, and no prompt instruction asking the model to behave. An agent of one company reaching an agent of another is impossible by construction.
Every item here exists because its absence cost something.
An agent has its own address, role, mailbox and history. The session dies and is reborn; it stays who it was.
Open sprint, label filter, blocker graph: it runs in code, it's deterministic and costs no tokens. The model only wakes when there's something to decide.
Every project starts by recording what it would have written. Turning on real writes is an explicit decision, per project.
A network blip retries on its own with growing backoff. A configuration error stops and waits for you, because repeating won't help.
The status transition is the lock: no work starts without it. That's what keeps two people — or two agents — off the same card.
Orchestration continues with the laptop closed. The window reaches it through an SSH tunnel the app brings up and reopens if it drops. An agent can be marked to run on your machine instead, with its disk and its PATH.
A turn that fails, is interrupted or times out returns the work to the mailbox. Closing the app mid-turn loses nothing and duplicates nothing — and orphaned turns rejoin the queue on the next start.
An agent can carry on from a Claude Code conversation that has been running for months. Context no system prompt can recreate.
Delivering to a mailbox is a valid operation: nothing fails, the screen says “sent”, and the message waits forever for an archived agent. One screen lists these, and says why for each.
Clients, projects and agents leave the list without leaving the history, and come back with one click. There is no permanent deletion, on purpose: turns, messages and board writes point at those records.
A conversation as Markdown, with cost, hops and tokens in the header; spending as CSV, one row per agent per day, to split by client in a spreadsheet. The file is born on the window's machine, not the core's.
The whole interface, switchable on the spot. Plus light, dark or the system theme — following the system even when it turns at night.
SQLite on disk. No cloud of ours, no account, no sign-up.
The app sends nothing anywhere. There is no “anywhere”.
Tracker credentials go to the system keychain, or a 0600 file on a server without one.
The core runs as a service on a machine you own, and the window reaches it over an SSH tunnel.
macOS on Apple Silicon. The core also runs on Linux.
The repository is still private. Until it isn't, installation is arranged directly.
There is no Apple-signed build yet. Built by you, the app runs without warnings; downloaded ready-made, Gatekeeper would complain — which is why the download button arrives when the signature does.
Free
MIT licence. There is no paid plan, no account, no usage limit and no reduced edition. The running cost is what you'd already pay Anthropic for the turns — and this app exists largely so that number doesn't surprise you.