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