Add Martha to Buzz
Put a Martha agent in a Buzz channel: mentioned like a colleague, answering in-thread from your documents, signing its own messages with its own key.
One command. It needs no install of its own — npx fetches and runs it:
npx -y @aiaiai-pt/martha-cli channels install-harness buzzThen in Buzz Desktop: New agent → runtime "Martha".
That's the whole integration. The command writes a runtime definition into Buzz's own app-data directory — the supported way to register any ACP agent, no PR and no plugin — and Buzz picks it up the next time it lists runtimes.
Already using Goose or Claude Code in Buzz?
Then you know the shape. The one difference: Martha's credential says which Martha and which agent, because a Martha tenant has many agents. Set that up once, below, and Buzz's Edit Agent stays empty.
You need a Martha agent for it to be
The runtime is the adapter; the agent is yours. From nothing, three commands:
# 1. point the CLI at your Martha
npx -y @aiaiai-pt/martha-cli init
# 2. create the agent, give it its tools and its documents, save it as a profile
npx -y @aiaiai-pt/martha-cli principals bootstrap --mode agent --agent support \
--prompt "You answer support questions from our handbook." \
--intents rag --collections "Handbook" --save-profile support
# 3. register the runtime, naming that profile
npx -y @aiaiai-pt/martha-cli channels install-harness buzz --use-profile supportStep 2 prints what the agent actually got — its tools, and the collections it can read — and says so plainly when either is empty, because an agent with retrieval tools and no documents will tell your channel it can't read anything.
Step 3 bakes the profile name into the runtime definition. The credential behind that name stays in ~/.martha/credentials.json on that machine, mode 0600. Nothing is typed into Buzz.
One profile per agent
A baked profile is the default for every agent on the Martha runtime, because the definition is shared. Running two different Martha agents? Give the second one MARTHA_PROFILE=<its own profile> in Edit Agent → env vars — per-agent env wins over the definition.
Verify before you trust it
npx -y @aiaiai-pt/martha-cli channels preflight buzz --agent support --relay wss://your-relayEvery precondition, each with the one command that fixes it, and a non-zero exit if any fails — the binaries, the credential, the agent's hosting and takeover, its principal, relay reachability, its channel identity and membership. A check it cannot evaluate reads WARN, never FAIL: "I could not verify this" is not "this is missing".
Rather paste than run
install-harness writes one JSON file. Here it is, if you would sooner drop it in yourself or use Buzz's Settings → Agent runtimes → custom harness form:
{
"id": "martha",
"label": "Martha",
"command": "martha",
"args": ["acp-serve", "--post-reply"],
"env": {
"BUZZ_ACP_MULTIPLE_EVENT_HANDLING": "queue",
"BUZZ_ACP_SUBSCRIBE": "all",
"BUZZ_ACP_KINDS": "9,46010,40007,7"
},
"installInstructionsUrl": "https://docs.martha.nomadriver.co/buzz",
"installHint": "npx -y @aiaiai-pt/martha-cli channels install-harness buzz"
}Save it as martha.json in Buzz's custom_harnesses directory:
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/xyz.block.buzz.app/custom_harnesses/ |
| Linux | ~/.local/share/xyz.block.buzz.app/custom_harnesses/ |
| Windows | %APPDATA%\xyz.block.buzz.app\custom_harnesses\ |
Add MARTHA_PROFILE to that env block, or set MARTHA_CLIENT_ID / MARTHA_CLIENT_SECRET per agent in Edit Agent. martha channels install-harness buzz --print prints the same file without writing it.
Why those three env values are not decoration
BUZZ_ACP_MULTIPLE_EVENT_HANDLING=queue— Buzz's default cancels the in-flight turn when a new message arrives. Right for a local model that can weave the new message into what it is doing; wrong for a turn that runs in Martha, which would simply be lost.BUZZ_ACP_SUBSCRIBE=all— the default (mentions) filters every message that does not@mentionthe agent, so a DM, a thread reply and a follow-up question all vanish.BUZZ_ACP_KINDS— mandatory alongsideall, or the subscription is a wildcard and typing indicators arrive as prompts. The set is chat, approval and reminder, plus reactions — which the adapter treats as feedback on an existing answer and answers with silence.
What Buzz keeps
Everything about identity and lifecycle. Buzz mints the agent's Nostr keypair into your OS keyring, computes its owner attestation, spawns the adapter, and attaches it to channels. Martha ships a runtime definition and martha acp-serve — no vendored binaries, no second agent lifecycle, no key material in our process. The reply is posted by Buzz's own CLI, signed with the agent's own key.
The model dropdown is not the model
Buzz will offer a model list and may warn that it could not load live models. Ignore it: the model is on the Martha agent definition. Whatever Buzz shows is display only.
Then talk to it
Add the agent to a channel and ask it something. It follows the conversation — a DM, a thread reply, a follow-up — without being re-mentioned each time.
Full reference, including running the adapter on a server with --emit compose|k8s: Put an agent in a Buzz channel.