Files
buzz/docs/getting-started/quickstart.md
T
npub1pejagjwzjh7y36gq97hxf62ry75u3s6c6grr0rumx2p4c5qsms9s7jdtgl 23f75dac90 docs: write full documentation content (Phase 2)
Fill all 31 stub pages scaffolded in Phase 1 with content migrated and
verified from the root docs, crate READMEs, and source code:

- getting-started/ (3): installation, quickstart, local relay (TESTING.md)
- architecture/ (8): ARCHITECTURE.md §1–§8, one page per section
- guides/ (9): development, testing, agents, workflows, self-hosting,
  nostr-clients (operational half of NOSTR.md), adding-event-kinds,
  adding-api-endpoints, releasing
- reference/ (5): CLI reference verified against buzz --help and
  crates/buzz-cli/src (18 groups / 87 subcommands; README drift noted),
  configuration, known-limitations (ARCHITECTURE §9 + conformance
  LIMITS.md + doc-debt list), NIPs index (13, NIP-CW canonical),
  design-docs index
- vision/ (6): VISION.md + 5 VISION_*.md migrated with aspirational
  banners and rewritten links

Root originals (ARCHITECTURE, NOSTR, TESTING, RELEASING, VISION*) get
pointer notes marking docs/ as canonical; deletion is a follow-up.
All relative links in the new tree verified to resolve.

Known limitations are documented honestly, never papered over:
rate limiting unenforced, WF-07/WF-08 workflow stubs, buzz-cli README
drift, one-line GOVERNANCE.md.

Note: pre-commit sadscan findings reviewed as false positives (dev-default
postgres URI and NIP-OA test vectors, both already on origin/main).

Co-authored-by: npub1pejagjwzjh7y36gq97hxf62ry75u3s6c6grr0rumx2p4c5qsms9s7jdtgl <0e65d449c295fc48e9002fae64e94327a9c8c358d206378f9b32835c5010dc0b@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1pejagjwzjh7y36gq97hxf62ry75u3s6c6grr0rumx2p4c5qsms9s7jdtgl <0e65d449c295fc48e9002fae64e94327a9c8c358d206378f9b32835c5010dc0b@sprout-oss.stage.blox.sqprod.co>
2026-07-07 12:14:33 -07:00

3.3 KiB
Raw Blame History

Quickstart

Zero to first message — start a relay, create a channel, send a message, then add an agent and @mention it. Everything below runs on one machine.

Prerequisites

git clone https://github.com/block/buzz.git && cd buzz
. ./bin/activate-hermit   # pinned toolchain; tools download on first use
just setup                # Docker services + migrations (.env from .env.example)

Start a local relay

The everyday developer path is one command:

just dev   # relay on ws://localhost:3000 + desktop app

The desktop app pops up connected to your local relay — you can create channels and chat from the UI immediately.

For the CLI-driven path (no desktop app), build the release binaries and run the relay directly:

cargo build --release -p buzz-relay -p buzz-cli -p buzz-admin
export PATH="$PWD/target/release:$PATH"
buzz-relay &                          # ws://localhost:3000
curl -s http://localhost:3000/health  # → ok

Port collisions and other gotchas are covered in Running a Local Relay.

Create your identity and a channel

GEN=$(buzz-admin generate-key)
export BUZZ_PRIVATE_KEY=$(echo "$GEN" | awk '/Secret key:/ {print $3}')

CHANNEL=$(buzz channels create --name "hello" --type stream --visibility open | jq -r '.channel_id')

Send and read messages

buzz messages send --channel "$CHANNEL" --content "first message 🐝"
buzz messages get --channel "$CHANNEL" --limit 5 | jq .

Every message is a signed Nostr event (kind:9) — the same shape whether a human or an agent sent it.

Add an agent and @mention it

Agents connect through the buzz-acp harness, which drives an ACP-speaking agent (goose, codex, claude code, buzz-agent) over stdio. Minimum recipe:

cargo build --release -p buzz-acp

# Mint a separate identity for the agent and add it to the channel
AGENT_GEN=$(buzz-admin generate-key)
AGENT_SK=$(echo "$AGENT_GEN" | awk '/Secret key:/ {print $3}')
AGENT_PUBKEY=$(echo "$AGENT_GEN" | awk '/Public key:/ {print $3}')
buzz channels add-member --channel "$CHANNEL" --pubkey "$AGENT_PUBKEY" --role member

# Run the harness as the agent (separate terminal)
export BUZZ_PRIVATE_KEY="$AGENT_SK"
export BUZZ_RELAY_URL=ws://localhost:3000   # buzz-acp wants ws://, not http://
export BUZZ_ACP_RESPOND_TO=anyone           # default is owner-only
export GOOSE_MODE=auto                      # required when the agent is goose
buzz-acp

Then, back under your own identity, mention the agent:

buzz messages send --channel "$CHANNEL" --content "Hey agent, reply PONG only."
# wait ~10–90s, then:
buzz messages get --channel "$CHANNEL" --limit 5 | jq '.[] | {pubkey, content}'

The full walkthrough — including troubleshooting the "agent sits idle" cases — is in Working with Agents.

Where to go next