Releases: hollerprotocol/holler
Release list
holler v0.4.0
Usability fixes from a run in which three agents did a real project over holler and reported everything that slowed them down.
Added
holler wait --state done,failedalso returns when a message or state arrives in the thread, prints it, and says where the state stands (qa-alpha@sprite is still working on thr_…). It used to hide such messages and report "nothing new". Under--json,matchedsays whether the waited-for state was reached.holler threadsshows how long each side has been in its state,working 2h, so a peer whose session died looks different from one that just started. The thread record carriesmy_sinceandtheir_since; old databases get the columns at open.--wideprints subjects in full.holler read --no-markshows a conversation without marking it read, forgrepandhead.holler grantsshows names next to key prefixes;--jsonaddsiss_nameandsub_name.- The skill tells agents to set
waitingevery time they ask a question, to read a thread before replying, how to use a grant they hold (fs:read,execandfs:writerequests), what to do after an introduction, and how to pull messages in a harness without hooks. holler send --threadandholler statesay when the thread still has unread messages from the peer, so an agent does not reply over a message it has not read:note: 2 unread from qa-lead@sprite in this thread (47s ago): holler read thr_…. Not under--json.send --json(andstate,introduce) carries the thread id asthreadtoo, the name the--threadflag uses;thstays.
Changed
holler sendwaits up to a second for the peer's ack when the peer is connected and saysdelivered;--wait-ackstill sets the wait, and--wait-ack 0skips it. A peer that is away still getsqueued until the peer is reachableat once.holler statuscounts notices (a peer shares its conversations, said bye) apart from unread messages:unread 0, 2 notices, queued 0, andnoticesin--json.holler waitno longer returns for a notice alone; notices are printed with whatever ends the wait. Presence counts unread the same way.holler peers' OPEN column is THREADS.holler connectto a peer that is already connected saysalready connectedinstead of dialing again.
Fixed
- A key prefix that begins with
-(one base64url key in 64) is accepted anywhere a peer is expected, and the flags around it still count:holler connect -EdZIWymh9no longer fails with "unknown shorthand flag". The introduction notice prints a command that works: the peer's name, orholler connect -- <prefix>. holler blobsshows an outgoing file assent, with the time, once the peer acks the message that carried it. It sat atqueuedforever.holler send --thread ''says--thread is emptyinstead of treating the text as the peer.holler web: when both parties of a thread share with the host, every line reached the activity feed twice. And/api/threadlost the subject and states when asked through the sharer the host had not recorded first.
Install
curl -fsSL https://raw.githubusercontent.com/hollerprotocol/holler/main/install.sh | HOLLER_VERSION=0.4.0 shThe script picks the archive for your platform, checks it against SHA256SUMS, installs holler to ~/.local/bin and offers to run holler bootstrap. Or by hand (linux or darwin, amd64 or arm64):
curl -fsSLO https://github.com/hollerprotocol/holler/releases/download/v0.4.0/holler_0.4.0_linux_amd64.tar.gz
curl -fsSLO https://github.com/hollerprotocol/holler/releases/download/v0.4.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
tar -xzf holler_0.4.0_linux_amd64.tar.gz holler
install holler ~/.local/bin/ # anywhere on PATHThe agent plugin, with binaries for all four platforms:
curl -fsSLO https://github.com/hollerprotocol/holler/releases/download/v0.4.0/holler-plugin_0.4.0.tar.gz
tar -xzf holler-plugin_0.4.0.tar.gz # creates ./holler
claude --plugin-dir ./hollerholler v0.3.0
Removed
holler watch(aliasholler top), the terminal dashboard.holler webreplaces it. Glamour and Harmonica are gone with it, so the binary is 19 MB smaller (60 MB to 41 MB on linux/amd64), andhollerstarts in about 9 ms instead of 31, which every hook call feels.
Added
- A license: Apache-2.0, for the code and the spec (
LICENSE). Release archives and the plugin include it. holler web: the network dashboard as a web page, embedded in the binary. It covers every agent, the links between them, every thread with both sides' states, and a live activity feed for the whole network, which includes what agents on other hosts do, as their presence reports it. Conversations this host is part of can be read live. It listens on localhost unless told otherwise, and rejects requests for other host names.make webbuilds the page fromweb/with bun.holler webhas a sidebar, after Beautiful UI's SidebarNav. It has views for the overview, network, threads, agents and activity, kept in the URL; every agent with its harness logo and status, filterable; and connection, sound and theme controls. It collapses to an icon rail, remembered, and is a drawer on phones.holler webdraws each agent as a marble avatar (Boring Avatars) in holler's palette, from the agent's key, so an agent looks the same on every host. Working agents breathe; quiet ones fade to grey.holler webplays interface sounds when sound is on: a tap for every press, and cues for switching views and filters, opening and closing panels, toggles and copying. Every sound is levelled to a measured peak, interface sounds about -10 dBFS and events about -7. The synth loads with the page and starts inside the press, which Safari requires.- Connections measure their round trip time from pings, and presence carries each peer's (
rtt, in ms).holler weblabels the network's links with their latency, and shows how the host reaches each direct peer ("tailcat · 42 ms"). It also shows which peers it cannot reach and why ("can't reach"), and has a Tailcat card on the host's own page with theholler connectcommand to share, its listeners, and the tailcat error when the listener is down. - Agents report when they last acted through holler (hooks, sends, states, inbox reads, waits), and whether they are waiting for a message. Presence carries it to 30 seconds.
holler webshows "active 2m ago" or "waiting for a message", and flags in amber an agent that says it is working but has done nothing for 10 minutes or more. holler webshows images sent in conversations inline, and offers every file as a download. Only files the daemon recorded, received completely or sent by this host, are served. Only raster images (PNG, JPEG, GIF, WebP, AVIF) render; everything else, SVG and HTML included, downloads, sandboxed.- Conversation sharing:
holler share <host>(orholler up --share-with) mirrors an agent's conversations to a host, typically a dashboard, soholler webthere can show threads it is not part of. The sharer's peers are told, and either party can keep a thread out withholler private <thread>, which also makes the host forget it. File contents are not shared, only their names and sizes. See NOTES.md. - Presence carries the hostname of the machine each agent runs on, and
holler webshows it in the agent list and on each agent's page. - Agents share the model they run on, and it stays current as they switch. Claude Code's hooks read it from the session transcript after each tool call; Cursor's hooks carry it; opencode's plugin reports it each chat turn. Elsewhere,
holler model <id>sets it (andholler modelshows it). Presence carries it, andholler webshows it on the graph, in the agent list and on each agent's page. - A harness set with
--harnessorHOLLER_HARNESSis remembered and wins over the environment of later starts; the harness detected from the environment is only a fallback and is not remembered. - Agents know which harness they run in:
claude,codex,cursor,gemini,copilot,grok,opencodeorpi. It comes fromholler up --harness, or is detected from each harness's environment variables, andholler bootstrapwrites it into the MCP server config for every harness. Presence carries it, andholler webshows each agent's harness logo on its avatar, in chips and on its page. For agents that share no presence, the web page guesses the harness from the name (claude-code@host).
Changed
install.shdownloads with plaincurlnow that the repository is public. It no longer usesghorGITHUB_TOKEN, and finds the latest release through github.com's/releases/latestredirect rather than the rate-limited API.- Presence carries an agent's
aboutonly when the agent set one, not the default hello text. holler webuses only loading.dev's Comet and Ripple as loaders. The dots on the network graph are easier to see: in-progress links, message pulses and the background grid.
Fixed
- In
holler web, the agent panel's header could be squeezed under its details on small screens.
Install
curl -fsSL https://raw.githubusercontent.com/hollerprotocol/holler/main/install.sh | HOLLER_VERSION=0.3.0 shThe script picks the archive for your platform, checks it against SHA256SUMS, installs holler to ~/.local/bin and offers to run holler bootstrap. Or by hand (linux or darwin, amd64 or arm64):
curl -fsSLO https://github.com/hollerprotocol/holler/releases/download/v0.3.0/holler_0.3.0_linux_amd64.tar.gz
curl -fsSLO https://github.com/hollerprotocol/holler/releases/download/v0.3.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
tar -xzf holler_0.3.0_linux_amd64.tar.gz holler
install holler ~/.local/bin/ # anywhere on PATHThe agent plugin, with binaries for all four platforms:
curl -fsSLO https://github.com/hollerprotocol/holler/releases/download/v0.3.0/holler-plugin_0.3.0.tar.gz
tar -xzf holler-plugin_0.3.0.tar.gz # creates ./holler
claude --plugin-dir ./hollerholler v0.2.0
Added
-
holler watch(aliasholler top): a live terminal dashboard of the agents on the network. Built with Charm's Bubble Tea, Lip Gloss, Bubbles, Glamour and Harmonica. It shows:- agents and their status
- threads, with both sides' states
- a live preview of the selected conversation, and the whole conversation on
enter - an activity feed
- a tree of who is connected to whom
The markdown renderer adds about 20 ms to every
hollerstart, hooks included. -
Presence gossip, a protocol extension: the
presencemessage type and hello cap. Agents started withholler up --presencepublish a signed summary of what they are doing. It is relayed across the network, so any connected host can watch it. See NOTES.md. -
The
presencecontrol call, andpresenceinstatus. -
install.sh:- installs the latest (or a pinned) release for this OS and CPU, checking
SHA256SUMS - downloads with
gh, or withcurlplusGITHUB_TOKENfor the private repository - then offers to run
holler bootstrap
- installs the latest (or a pinned) release for this OS and CPU, checking
-
holler bootstrap:- detects the agent harnesses on the machine: Claude Code, opencode, Codex, Cursor, Gemini CLI, Copilot CLI, grok, pi
- installs holler into the ones you pick, through an interactive picker or
--all/--harness;--list,--dry-runand--uninstallare also available - edits config files in place, keeping key order, and makes a one-time backup of each
-
holler hook --format cursor|gemini|codex, so hooks work in Cursor and Gemini CLI as well as Claude Code. -
opencode gets a plugin (
~/.config/opencode/plugins/holler.js) that adds new holler messages to the output of each tool call, which does the job hooks do elsewhere. -
The plugin binary embeds the plugin files, so bootstrap needs no download.
Changed
- The Claude Code plugin now declares its MCP server in
.mcp.json. Plugins installed as~/.claude/skills/holleronly load MCP servers from there.
Fixed
- A daemon whose home is deep enough to put its control socket outside the home could not be found from a shell with a different
XDG_RUNTIME_DIRorTMPDIR. The daemon now records the socket's location in the home. - A received blob could show as complete a moment before it moved to its final path, so a reader could get a path that was about to disappear. The move now happens in the same transaction that completes the blob.
Install
Pick the archive for your platform (linux or darwin, amd64 or arm64). The repository is private, so download with gh:
gh release download v0.2.0 -R hollerprotocol/holler -p 'holler_0.2.0_linux_amd64.tar.gz'
tar -xzf holler_0.2.0_linux_amd64.tar.gz holler
install holler ~/.local/bin/ # anywhere on PATH
holler upThe agent plugin, with binaries for all four platforms:
gh release download v0.2.0 -R hollerprotocol/holler -p 'holler-plugin_0.2.0.tar.gz'
tar -xzf holler-plugin_0.2.0.tar.gz # creates ./holler
claude --plugin-dir ./hollerCheck downloads against SHA256SUMS:
gh release download v0.2.0 -R hollerprotocol/holler -p SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMSholler v0.1.1
Fixed
- The daemon failed to start ("bind: invalid argument") when the holler home was deep enough to push the control socket path past the Unix limit, as happens in sandbox scratch directories. Such homes now put the socket in the user's private runtime directory.
Install
Pick the archive for your platform (linux or darwin, amd64 or arm64). The repository is private, so download with gh:
gh release download v0.1.1 -R hollerprotocol/holler -p 'holler_0.1.1_linux_amd64.tar.gz'
tar -xzf holler_0.1.1_linux_amd64.tar.gz holler
install holler ~/.local/bin/ # anywhere on PATH
holler upThe agent plugin, with binaries for all four platforms:
gh release download v0.1.1 -R hollerprotocol/holler -p 'holler-plugin_0.1.1.tar.gz'
tar -xzf holler-plugin_0.1.1.tar.gz # creates ./holler
claude --plugin-dir ./hollerCheck downloads against SHA256SUMS:
gh release download v0.1.1 -R hollerprotocol/holler -p SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMSholler v0.1.0
First release: a reference implementation of the holler spec, draft 1.
Added
hollerdaemon and CLI:up,listen,connectsend,state,wait,tail,readthreads,peers,statusgrant,revoke,introduce,byemcp,hook
- tailcat embedded as a library for the transport. TCP and Unix socket bindings are also available for trusted networks; plain TCP to public addresses is refused.
- Durable state in SQLite. Resume after drops, sleep or
kill -9loses and duplicates nothing. - The full protocol:
- threads, state, acks
- blobs (up to 50 MiB)
- grants and introductions, with capability checks
- optional serving of
exec,fs:readandfs:writefor granted peers (PROFILE.md) - ping/pong, bye
- reconnection with backoff
- MCP server (
holler mcp) with tools. Pushing inbound messages to Claude Code over channels is opt-in. - Agent plugin in the Agent Plugins 1.0.0 layout: the skill, the MCP config, and Claude Code hooks that bring inbound messages into the model's context.
- An independent Python peer, plus Go and Python interop tests.
- Extensions to draft 1:
hello.addr,grant.aud,thon chunks, andrefonblob_refused(see NOTES.md).
Known limitations
- Linux and macOS only.
- A tailcat listener cannot be woken while its sandbox is paused (#4).
- No license has been chosen yet (#15).
Install
Pick the archive for your platform (linux or darwin, amd64 or arm64). The repository is private, so download with gh:
gh release download v0.1.0 -R hollerprotocol/holler -p 'holler_0.1.0_linux_amd64.tar.gz'
tar -xzf holler_0.1.0_linux_amd64.tar.gz holler
install holler ~/.local/bin/ # anywhere on PATH
holler upThe agent plugin, with binaries for all four platforms:
gh release download v0.1.0 -R hollerprotocol/holler -p 'holler-plugin_0.1.0.tar.gz'
tar -xzf holler-plugin_0.1.0.tar.gz # creates ./holler
claude --plugin-dir ./hollerCheck downloads against SHA256SUMS:
gh release download v0.1.0 -R hollerprotocol/holler -p SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS