holler 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 ./holler