A self-hosted workspace where you and your agents share the same rooms — with the rough edges I kept hitting sanded off.
What I added · Install · Configuration · Credits
Buzz is a self-hostable workspace where people and AI agents talk in the same channels. Underneath it's a Nostr relay you run yourself: every message, reaction, and agent action is a signed event in one log, whether a human or a process wrote it. You run the relay, so you own the log.
Buzz Reloaded is my build of it. I run it daily, and the eight items below are the changes I made to keep it out of my way — mostly around not losing track of what agents are doing, hearing them instead of watching them, and starting the whole stack with one command.
Everything here is compiled in. There are no feature flags to turn on.
Six features, plus the tooling and fixes that keep them running.
Agent replies land in thread panels that vanish the moment you click elsewhere,
and there was no list of them anywhere. This adds a Recent Threads section to
the sidebar, so every thread you've opened stays one click away. It keeps the 15
most recent per identity in localStorage (buzz-recent-threads.v1:<pubkey>)
and drops the oldest first.
When an agent answers in a thread you aren't looking at, the panel opens itself instead of leaving the answer buried behind an unread badge.
The DM view follows an agent as it works, rather than stranding you wherever you'd scrolled to.
A mic button in the message composer, held open for continuous speech instead of one phrase at a time. It refuses to start while a huddle is live — otherwise the two fight over the microphone.
Stock Buzz only does text-to-speech inside a live huddle. This reads agent messages posted to the normal timeline, so I can keep working while an agent narrates. It uses the same local Pocket voice model the huddle path already uses: no external API, no key, nothing leaves the machine.
The pipeline is built lazily on the first spoken message and kept warm after that — building one loads the model and takes seconds, reusing one is free. Switching your voice preference re-selects the reference style on the live pipeline instead of rebuilding it.
Barge-in control that silences the player and drops everything still queued, so a long reply isn't something you have to sit through. The cancel flag is only ever set while audio is actually playing — one left set during silence would swallow the next message.
Linux only. This one item is; features 1–6 are not — see Platform support. The launcher depends on
ssfrom iproute2, the.debinstall path, and WebKitGTK environment variables.
buzz-app.sh brings up the Docker services, applies migrations, clears any
stale process squatting on ports 3000/8080/9102, starts the relay, optionally
starts an ACP agent and a Chrome CDP bridge, then launches the desktop app. On
exit it tears the stack back down, keeping named volumes so your data survives.
It also disables WebKitGTK compositing and the DMABUF renderer — without both,
the app segfaults on launch on NVIDIA.
Helper scripts in bin/. anthropic-first-acp and codex-acp-buzz launch
ACP agents with the right API key and a writable CODEX_HOME, keeping each
provider's credential isolated from the other. youtube-browser-mcp.mjs is a
small MCP server that drives an already-running Chrome over CDP.
Honor per-agent mcp_command at spawn. A managed agent configured with its
own mcp_command had that setting ignored and silently fell back to the global
one.
Keep BUZZ_PRIVATE_KEY out of the desktop app. The launcher sources .env
with set -a so the relay and ACP agent get their credentials — which also
leaked BUZZ_PRIVATE_KEY into the app, where it acts as a dev/CI identity
override outranking the OS keyring. Every launch booted as the .env identity
and dumped me on the "enter your private key" re-import screen. The app now
launches with that one variable unset; the relay and ACP agent still get it.
Hardened the dev Docker stack. Every published port binds 127.0.0.1
instead of 0.0.0.0, so Postgres, Redis, MinIO, Adminer, and Keycloak are no
longer reachable from your network. Redis requires a password. All three service
passwords come from environment variables — POSTGRES_PASSWORD,
REDIS_PASSWORD, MINIO_ROOT_PASSWORD — defaulting to the stock dev values so
a fresh clone still works untouched.
You need Docker and
Hermit — or, if you'd rather manage them
yourself, Rust 1.88+, Node 24+, pnpm 10+, and just.
git clone https://github.com/mrmoe28/buzz-reloaded.git && cd buzz-reloaded
. ./bin/activate-hermit # pinned toolchain, downloads on first use
just setup && just build # copies .env.example → .env, starts Docker + migrationsThen, day to day:
. ./bin/activate-hermit
just dev # relay on ws://localhost:3000, plus the desktop appThe desktop app opens and connects to your local relay. That's the whole install — everything in What I added is already active, and the first six changes need no configuration at all.
If you'd rather keep relay logs and app output in separate terminals, use
just relay in one and just desktop-dev in the other.
just dev runs from source and is what you want while developing.
buzz-app.sh is for running Buzz as an installed application on Linux, and
needs two things just dev doesn't:
- a release relay binary —
cargo build --release -p buzz-relay - the packaged desktop app installed at
/usr/bin/buzz-desktop(Linux.deb)
With both in place, ./buzz-app.sh starts everything and cleans up on exit. It
resolves the repo from its own location, so any checkout path works — set
BUZZ_REPO to override.
macOS, Linux, and Windows — the same three the project already supports.
| macOS | Linux | Windows | |
|---|---|---|---|
| Features 1–6 | ✅ | ✅ | ✅ |
just setup / just build / just dev |
✅ | ✅ | ✅ |
buzz-app.sh launcher (7) |
❌ | ✅ | ❌ |
bin/ ACP helper scripts (7) |
✅ | ✅ | Git Bash |
| Fixes and hardening (8) | ✅ | ✅ | ✅ |
Features 1–6 are plain frontend and Rust code with no platform gates, so they
build and run wherever the app does. Only buzz-app.sh is Linux-specific: it
uses ss from iproute2, the .deb install path /usr/bin/buzz-desktop, and
the WebKitGTK environment variables that only the Linux build reads. On macOS
and Windows, use just dev — you lose nothing but the launcher convenience.
On Windows, the agent shell tool runs commands under bash, which macOS and
Linux already have. Install Git for Windows —
it ships Git Bash, which is what gets resolved at runtime. To use a different
bash-compatible shell, set BUZZ_SHELL to its path.
None of this is required. Skip whatever you don't use.
ACP agents. Set BUZZ_PRIVATE_KEY and BUZZ_ACP_AGENT_COMMAND in .env.
The launcher skips the ACP agent when either is missing, and tells you so.
Provider keys for the bin/ helpers. Put them in
~/.config/buzz/anthropic.env and ~/.config/buzz/openai.env as
ANTHROPIC_API_KEY=… / OPENAI_API_KEY=…, or point
ANTHROPIC_CREDENTIALS_FILE / OPENAI_CREDENTIALS_FILE somewhere else. If the
keys are already exported in your shell, skip this — the scripts leave a key
that's already set alone.
Browser MCP server. youtube-browser-mcp.mjs resolves Playwright from
node_modules; set PLAYWRIGHT_MODULE to an absolute path if yours lives
elsewhere. It attaches to a Chrome already listening on 127.0.0.1:9222, which
CDP_URL overrides.
Container passwords. The dev containers publish only on 127.0.0.1, so the
defaults are fine on a personal machine. If you change them in .env, change
the matching URL too — DATABASE_URL, REDIS_URL, BUZZ_S3_SECRET_KEY. Note
that Postgres and MinIO bake their password into the volume on first boot, so a
later change needs either docker compose down -v (which destroys local data)
or an in-place change to the running service.
Pointing at a different relay. Set BUZZ_RELAY_URL, or switch relays from
inside the app.
The architecture and design documents that ship with the project are still here and still accurate — my changes sit on top of them, not in place of them:
ARCHITECTURE.md ·
VISION.md ·
VISION_SOVEREIGN.md ·
VISION_PROJECTS.md ·
VISION_AGENT.md ·
RELEASING.md
For scripting agents, crates/buzz-cli is JSON in, JSON out,
built for LLM tool calls.
Built by @mrmoe28.
Buzz Reloaded is a modified fork of Buzz,
created by Block, Inc. and licensed under the
Apache License 2.0 — Copyright 2026 Block, Inc. The foundational
work is theirs; the changes listed above are mine, and this README was written
for this fork. "Buzz Reloaded" is my name for this build, not a Block product
name — Block neither publishes nor endorses it, and "Buzz" is their trademark,
used here only to say accurately what this is derived from.
Bugs in my changes are mine. Please open them here, not upstream.
Upstream is still fully available. This fork neither replaces nor restricts it — you can clone block/buzz, track their releases, and open pull requests against them exactly as before. If something in this fork would be useful to everyone, sending it upstream is encouraged.