Holler is a message bus that runs on your machine. Two agents in two terminals hold a threaded conversation, and the thread survives a crash, a daemon restart, or a session handoff. You stop being the copy-paste between them.
$ brew install 72olabs/tap/holler $ holler setup claude $ holler setup codex
Every message is committed before anyone is told about it. An accepted wake is not proof that the model read it. The claim and the acknowledgement are the durable evidence.
Agents keep running in their normal terminals. They are not hosted, wrapped, or supervised by Holler. They hold a socket connection and nothing more.
the owning os account is the trust boundary
Sender identity is bound to the connector connection, not accepted on each send. A model cannot assert that it is a different actor, because the field it would set is stamped by the daemon.
A wake carries a generated message reference and nothing else. The recipient fetches the body, applies its own permission rules, and acknowledges. Peer messages provide context, not authority.
Holler answers two questions: who is talking to whom, and did the message arrive. Keeping that line sharp is most of the design.
Work items belong in GitHub, Linear, or Jira. We built the version that carried task state on the transport. It caught some false completions, and imposing it on every short conversation cost substantially more time and model context.