Buzz relay live on tailnet (door 3000) — Portainer on 9443, full compose stack (relay+postgres+redis
2026-09-14 22:177 messagesclaude-20260914_buzz...
ASSISTANT (claude-code, glm-5.3-flash)
# Session note — 2026-09-14 (Docker + Portainer + Buzz relay setup)
Assistant: Claude Code (glm-5.3-flash). Machine: harsheen-precision-3541
(Ubuntu 24.04, tailnet IP 100.93.26.64). Purpose: record what was decided and
built, so nothing depends on this chat surviving.
## 1. What was installed (first-time Docker on this machine)
- docker.io 29.1.3 + docker-compose-v2 (Ubuntu apt), user harsheen added to
docker group (GID 125). Run docker without sudo via: sg docker -c "..."
- Portainer CE 2.45.0: container "portainer", door 9443 (self-signed TLS),
also 127.0.0.1:9000. Admin user "admin" created via --admin-password flag
(bypasses the 5-min setup-token timeout that kept expiring).
CRITICAL: needs --trusted-origins or browser logins get 403:
--trusted-origins=https://100.93.26.64:9443,https://localhost:9443,https://tcharts.openalgo.theworkpc.com
- Access: https://100.93.26.64:9443 from any tailnet device (Mac, Android).
## 2. Buzz relay — running (block/buzz)
- Used deploy/compose bundle in git-projects/buzz with PREBUILT image
ghcr.io/block/buzz:main (no source build). run.sh start.
- 5 containers: buzz-prod-relay-1 (door 3000 only), postgres-17, redis-7,
minio (+minio-init), network buzz-prod_buzz-net. Postgres/Redis/MinIO
publish NO host ports.
- .env at /home/harsheen/git-projects/buzz/deploy/compose/.env — contains all
generated secrets AND the owner identity nsec (comment). Treat as keychain;
back up. Open mode (BUZZ_REQUIRE_AUTH_TOKEN=false, membership=false) — safe
because reachable only via Tailscale/localhost.
- Relay v0.2.1, liveness 200, NIP-11 doc OK, community auto-ensured at startup
from RELAY_URL host (100.93.26.64:3000), community id cea05ca8-f81f-4a43-a786-8644fe2c3794.
- Owner: RELAY_OWNER_PUBKEY=097347b31d6f92dc7eb631232d62416dfdabdcdeacde8487a2ca8029ce3bac43
bootstrapped at relay start ("Relay owner bootstrapped" in logs).
- Relay serves NIP-11 JSON at / (no web client). Clients: desktop app
(desktop-v0.5.23), mobile, buzz-cli.
## 3. Agent onboarding (how agents join the hive)
1. Generate keypair per agent: sudo docker exec buzz-prod-relay-1
/usr/local/bin/buzz-admin generate-key
2. Add as member: cd git-projects/buzz/deploy/compose && sg docker -c
"./run.sh add-member <pubkey-hex> --role member"
3. Agent connects with BUZZ_RELAY_URL=ws://100.93.26.64:3000 +
BUZZ_PRIVATE_KEY=<secret-hex> via buzz-cli, or the ACP harness (sprig)
bridging Claude Code / Goose / Codex.
- Ollama (door 11434) is an LLM backend, not an agent: wire it as the model
behind a harness process to put it in a room.
## 4. Port notes (lesson from the failed docker experiment)
Doors in use before this: 53 80 443 631 2222 4827 5050 5101 5200-5307 5400
5555-5557 8765-8767 11434. Chosen: 9443 (Portainer), 3000 (relay), 9000
(localhost only). Always check `ss -tln` before starting anything; never
touch 80/443 (nginx + Let's Encrypt, tcharts etc.). nginx pattern:
per-vhost file in /etc/nginx/sites-enabled/, path-location proxying with
relative-asset apps (e.g. /office -> portainer needs a prefix-stripping
proxy_pass; draft at /tmp/tcharts.new.conf, not applied).
## 5. Local database conventions
- Turso central chat archive (chat-archive-hnsi, wrapper .gemini/turso_chat_db.py,
env in ~/.hermes/.env): chat_sessions + chat_history, HTTP pipeline mode for
concurrent writers. This note saved under session claude-20260914_buzz-relay-setup.
- Local mirror: /home/harsheen/local-database/hermes/hermes-mirror.sqlite
(mirror.py; Hermes state.db is the single writer). Per-agent folder
convention: /home/harsheen/local-database/<agent>/.
- Session note also saved at /home/harsheen/local-database/claude-code/.
## 6. Open items
- Buzz Desktop not installed yet (deb at github.com/block/buzz/releases,
desktop-v0.5.23, amd64).
- No agents joined the relay yet; owner identity is the only member.
- Memos (usememos/memos) clone exists in git-projects/memos, still not run.
- /tmp/portainer-admin-pw.txt holds the Portainer admin pw — change in UI.
2026-09-14 22:17
USER (claude-code, glm-5.3-flash)
Request: install Buzz locally with a visible dashboard; how Hermes/Ollama/other agents join the relay; save session note to Turso + local-database.
2026-09-14 22:17
ASSISTANT (claude-code, glm-5.3-flash)
# Session note — 2026-09-14 (agent harness on the relay)
Continuation of the buzz-relay-setup note. Assistant: Claude Code.
## What is running now
Container `buzz-agent-harness` (project `buzz-harness`), image
ghcr.io/block/buzz-sprig:main — Block's official all-in-one agent box
(buzz-acp harness + buzz-agent + buzz-dev-mcp + buzz CLI, no build needed).
- Identity: agent pubkey f3b8beaccb6bfa83e0ba8968274ebb2578271c229f23438cac8aa4607bf872ab
(secret in .env as AGENT_PRIVATE_KEY; added to relay via `./run.sh add-member --role member`,
added to channel #general via `buzz channels add-member --role bot`).
- Brain: buzz-agent → Ollama at 127.0.0.1:11434, model gpt-oss:120b-cloud
(openai-compat provider; only model present, has tools capability).
- Owner gate: BUZZ_ACP_AGENT_OWNER = Harsheen's owner pubkey; respond-to owner-only.
Owner can also say `!cancel` / `!rotate` / `!shutdown` (exact body, with @agent mention).
- network_mode: host (Ollama binds 127.0.0.1 only; host net = zero new doors).
- First channel `general` (55a458ef-74b3-4fa9-8043-7b50d90912b1) created with
the OWNER key via buzz CLI (relay had zero channels after bootstrap).
- End-to-end verified: owner mention → agent → Ollama → reply in #general.
## Gotchas (for the next time)
- Relay is Host-scoped: connect with ws://100.93.26.64:3000, NOT 127.0.0.1 (404).
- The sprig image's entrypoint always execs buzz-acp; to use the CLI run
`docker run --rm --entrypoint buzz ...` with BUZZ_RELAY_URL + BUZZ_PRIVATE_KEY.
- Channel membership is separate from relay membership; harness discovers only
channels it is a channel-member of, but auto-subscribes on live add-member events.
## Files
- /home/harsheen/git-projects/buzz/deploy/compose/harness.yml (the run file)
- /home/harsheen/git-projects/buzz/deploy/compose/.env (AGENT_PRIVATE_KEY added)
## Managing it
- Logs: sg docker -c "docker logs -f buzz-agent-harness" (also visible in Portainer)
- Restart: sg docker -c "docker compose -p buzz-harness -f harness.yml up -d --wait"
- Next agents: same recipe — buzz-admin generate-key → run.sh add-member →
owner adds them to a channel (buzz CLI or desktop).
2026-09-14 23:49
ASSISTANT (claude-code, glm-5.3-flash)
# Session note — 2026-09-14 (agent harness on the relay)
Continuation of the buzz-relay-setup note. Assistant: Claude Code.
## What is running now
Container `buzz-agent-harness` (project `buzz-harness`), image
ghcr.io/block/buzz-sprig:main — Block's official all-in-one agent box
(buzz-acp harness + buzz-agent + buzz-dev-mcp + buzz CLI, no build needed).
- Identity: agent pubkey f3b8beaccb6bfa83e0ba8968274ebb2578271c229f23438cac8aa4607bf872ab
(secret in .env as AGENT_PRIVATE_KEY; added to relay via `./run.sh add-member --role member`,
added to channel #general via `buzz channels add-member --role bot`).
- Brain: buzz-agent → Ollama at 127.0.0.1:11434, model gpt-oss:120b-cloud
(openai-compat provider; only model present, has tools capability).
- Owner gate: BUZZ_ACP_AGENT_OWNER = Harsheen's owner pubkey; respond-to owner-only.
Owner can also say `!cancel` / `!rotate` / `!shutdown` (exact body, with @agent mention).
- network_mode: host (Ollama binds 127.0.0.1 only; host net = zero new doors).
- First channel `general` (55a458ef-74b3-4fa9-8043-7b50d90912b1) created with
the OWNER key via buzz CLI (relay had zero channels after bootstrap).
- End-to-end verified: owner mention → agent → Ollama → reply in #general.
## Gotchas (for the next time)
- Relay is Host-scoped: connect with ws://100.93.26.64:3000, NOT 127.0.0.1 (404).
- The sprig image's entrypoint always execs buzz-acp; to use the CLI run
`docker run --rm --entrypoint buzz ...` with BUZZ_RELAY_URL + BUZZ_PRIVATE_KEY.
- Channel membership is separate from relay membership; harness discovers only
channels it is a channel-member of, but auto-subscribes on live add-member events.
## Files
- /home/harsheen/git-projects/buzz/deploy/compose/harness.yml (the run file)
- /home/harsheen/git-projects/buzz/deploy/compose/.env (AGENT_PRIVATE_KEY added)
## Update 2026-09-15 — three agents now in #general
- Agent 1 (buzz-agent-harness): Ollama local, gpt-oss:120b-cloud. Working.
- Agent 2 (buzz-agent-deepseek): DeepSeek API key wired (in .env),
endpoint api.deepseek.com/v1. BLOCKED: the endpoint TLS-connects but never
responds from this network (curl 45s timeout, 0 bytes). Harness + key are
correct; it answers when the endpoint recovers. Fallback if it stays dead:
Ollama cloud serves deepseek-v4.1-flash.
- Agent 3 (buzz-agent-ollama-cloud): Ollama cloud key in .env, ollama.com/v1.
Model switched kimi-k2.7-code → glm-5.3-flash on user request; confirmed
working ("I'm powered by GLM... trained by Z.ai").
- All three: owner-only gate (owner 097347b3...), member+bot role in #general.
- Next agents: same recipe — buzz-admin generate-key → run.sh add-member →
owner adds them to a channel (buzz CLI or desktop).
- Junie CLI (JetBrains) joins natively via `junie --acp=true` — offered, not
started yet.
## Managing it
- Logs: sg docker -c "docker logs -f buzz-agent-harness" (also visible in Portainer)
- Restart: sg docker -c "docker compose -p buzz-harness -f harness.yml up -d --wait"
- Next agents: same recipe — buzz-admin generate-key → run.sh add-member →
owner adds them to a channel (buzz CLI or desktop).
2026-09-15 00:37
ASSISTANT (claude-code, glm-5.3-flash)
# Session note — 2026-09-14 (agent harness on the relay)
Continuation of the buzz-relay-setup note. Assistant: Claude Code.
## What is running now
Container `buzz-agent-harness` (project `buzz-harness`), image
ghcr.io/block/buzz-sprig:main — Block's official all-in-one agent box
(buzz-acp harness + buzz-agent + buzz-dev-mcp + buzz CLI, no build needed).
- Identity: agent pubkey f3b8beaccb6bfa83e0ba8968274ebb2578271c229f23438cac8aa4607bf872ab
(secret in .env as AGENT_PRIVATE_KEY; added to relay via `./run.sh add-member --role member`,
added to channel #general via `buzz channels add-member --role bot`).
- Brain: buzz-agent → Ollama at 127.0.0.1:11434, model gpt-oss:120b-cloud
(openai-compat provider; only model present, has tools capability).
- Owner gate: BUZZ_ACP_AGENT_OWNER = Harsheen's owner pubkey; respond-to owner-only.
Owner can also say `!cancel` / `!rotate` / `!shutdown` (exact body, with @agent mention).
- network_mode: host (Ollama binds 127.0.0.1 only; host net = zero new doors).
- First channel `general` (55a458ef-74b3-4fa9-8043-7b50d90912b1) created with
the OWNER key via buzz CLI (relay had zero channels after bootstrap).
- End-to-end verified: owner mention → agent → Ollama → reply in #general.
## Gotchas (for the next time)
- Relay is Host-scoped: connect with ws://100.93.26.64:3000, NOT 127.0.0.1 (404).
- The sprig image's entrypoint always execs buzz-acp; to use the CLI run
`docker run --rm --entrypoint buzz ...` with BUZZ_RELAY_URL + BUZZ_PRIVATE_KEY.
- Channel membership is separate from relay membership; harness discovers only
channels it is a channel-member of, but auto-subscribes on live add-member events.
## Files
- /home/harsheen/git-projects/buzz/deploy/compose/harness.yml (the run file)
- /home/harsheen/git-projects/buzz/deploy/compose/.env (AGENT_PRIVATE_KEY added)
## Update 2026-09-15 — three agents now in #general
- Agent 1 (buzz-agent-harness): Ollama local, gpt-oss:120b-cloud. Working.
- Agent 2 (buzz-agent-deepseek): DeepSeek API key wired (in .env),
endpoint api.deepseek.com/v1. BLOCKED: the endpoint TLS-connects but never
responds from this network (curl 45s timeout, 0 bytes). Harness + key are
correct; it answers when the endpoint recovers. Fallback if it stays dead:
Ollama cloud serves deepseek-v4.1-flash.
- Agent 3 (buzz-agent-ollama-cloud): Ollama cloud key in .env, ollama.com/v1.
Model switched kimi-k2.7-code → glm-5.3-flash on user request; confirmed
working ("I'm powered by GLM... trained by Z.ai").
- All three: owner-only gate (owner 097347b3...), member+bot role in #general.
- Next agents: same recipe — buzz-admin generate-key → run.sh add-member →
owner adds them to a channel (buzz CLI or desktop).
- Junie CLI (JetBrains) joins natively via `junie --acp=true` — offered, not
started yet.
## Update 2026-09-15 (2) — real agent runtimes + agent-to-agent talk
User preference: NOT buzz-agent runtimes. Now:
- goose-local (buzz-agent-goose-local): GOOSE runtime v1.50.0, Ollama local
gpt-oss:120b-cloud. Binary at /home/harsheen/opt/goose (MUSL build — the
glibc one fails on the Alpine sprig image with "No such file or directory").
GOTCHA: goose appends /v1 itself — OPENAI_HOST must be http://127.0.0.1:11434
(NOT /v1) and https://ollama.com (NOT /v1).
- goose-cloud (buzz-agent-goose-cloud): goose v1.50.0, Ollama cloud glm-5.3-flash.
- deepseek (buzz-agent-deepseek): unchanged (buzz-agent runtime; endpoint still
dead from this network).
- junie (buzz-agent-junie): PREPARED but blocked on token. Junie CLI 3218.3
unpacked at /home/harsheen/opt/junie (launcher script + junie-app). Joins via
`--acp=true,-a,<JUNIE_AUTH_TOKEN>`; JUNIE_AUTH_TOKEN=REPLACE_ME in .env needs
the user's junie.jetbrains.com/cli token. Keypair + relay membership done
(pubkey d716a11a00b72e1b89bfc64128fe5840f4689e7b74bdf3a81d38d07a01ab0b99);
service defined in harness.yml but not started until token is set.
- Agent-to-agent: all four use BUZZ_ACP_RESPOND_TO=allowlist listing the other
three (owner implicit). VERIFIED: goose-local used buzz CLI to find
goose-cloud and @mention it; goose-cloud (GLM) replied in-channel. No loop.
- Bind mounts: /home/harsheen/opt/{goose,junie} mounted read-only at same path
in the sprig containers.
## Managing it
- Logs: sg docker -c "docker logs -f buzz-agent-harness" (also visible in Portainer)
- Restart: sg docker -c "docker compose -p buzz-harness -f harness.yml up -d --wait"
- Next agents: same recipe — buzz-admin generate-key → run.sh add-member →
owner adds them to a channel (buzz CLI or desktop).
2026-09-15 01:12
ASSISTANT (claude-code, glm-5.3-flash)
# Session note — 2026-09-14 (agent harness on the relay)
Continuation of the buzz-relay-setup note. Assistant: Claude Code.
## What is running now
Container `buzz-agent-harness` (project `buzz-harness`), image
ghcr.io/block/buzz-sprig:main — Block's official all-in-one agent box
(buzz-acp harness + buzz-agent + buzz-dev-mcp + buzz CLI, no build needed).
- Identity: agent pubkey f3b8beaccb6bfa83e0ba8968274ebb2578271c229f23438cac8aa4607bf872ab
(secret in .env as AGENT_PRIVATE_KEY; added to relay via `./run.sh add-member --role member`,
added to channel #general via `buzz channels add-member --role bot`).
- Brain: buzz-agent → Ollama at 127.0.0.1:11434, model gpt-oss:120b-cloud
(openai-compat provider; only model present, has tools capability).
- Owner gate: BUZZ_ACP_AGENT_OWNER = Harsheen's owner pubkey; respond-to owner-only.
Owner can also say `!cancel` / `!rotate` / `!shutdown` (exact body, with @agent mention).
- network_mode: host (Ollama binds 127.0.0.1 only; host net = zero new doors).
- First channel `general` (55a458ef-74b3-4fa9-8043-7b50d90912b1) created with
the OWNER key via buzz CLI (relay had zero channels after bootstrap).
- End-to-end verified: owner mention → agent → Ollama → reply in #general.
## Gotchas (for the next time)
- Relay is Host-scoped: connect with ws://100.93.26.64:3000, NOT 127.0.0.1 (404).
- The sprig image's entrypoint always execs buzz-acp; to use the CLI run
`docker run --rm --entrypoint buzz ...` with BUZZ_RELAY_URL + BUZZ_PRIVATE_KEY.
- Channel membership is separate from relay membership; harness discovers only
channels it is a channel-member of, but auto-subscribes on live add-member events.
## Files
- /home/harsheen/git-projects/buzz/deploy/compose/harness.yml (the run file)
- /home/harsheen/git-projects/buzz/deploy/compose/.env (AGENT_PRIVATE_KEY added)
## Update 2026-09-15 — three agents now in #general
- Agent 1 (buzz-agent-harness): Ollama local, gpt-oss:120b-cloud. Working.
- Agent 2 (buzz-agent-deepseek): DeepSeek API key wired (in .env),
endpoint api.deepseek.com/v1. BLOCKED: the endpoint TLS-connects but never
responds from this network (curl 45s timeout, 0 bytes). Harness + key are
correct; it answers when the endpoint recovers. Fallback if it stays dead:
Ollama cloud serves deepseek-v4.1-flash.
- Agent 3 (buzz-agent-ollama-cloud): Ollama cloud key in .env, ollama.com/v1.
Model switched kimi-k2.7-code → glm-5.3-flash on user request; confirmed
working ("I'm powered by GLM... trained by Z.ai").
- All three: owner-only gate (owner 097347b3...), member+bot role in #general.
- Next agents: same recipe — buzz-admin generate-key → run.sh add-member →
owner adds them to a channel (buzz CLI or desktop).
- Junie CLI (JetBrains) joins natively via `junie --acp=true` — offered, not
started yet.
## Update 2026-09-15 (2) — real agent runtimes + agent-to-agent talk
User preference: NOT buzz-agent runtimes. Now:
- goose-local (buzz-agent-goose-local): GOOSE runtime v1.50.0, Ollama local
gpt-oss:120b-cloud. Binary at /home/harsheen/opt/goose (MUSL build — the
glibc one fails on the Alpine sprig image with "No such file or directory").
GOTCHA: goose appends /v1 itself — OPENAI_HOST must be http://127.0.0.1:11434
(NOT /v1) and https://ollama.com (NOT /v1).
- goose-cloud (buzz-agent-goose-cloud): goose v1.50.0, Ollama cloud glm-5.3-flash.
- deepseek (buzz-agent-deepseek): unchanged (buzz-agent runtime; endpoint still
dead from this network).
- junie (buzz-agent-junie): LIVE, verified. Junie CLI 26.09.3 (3218.3) at
/home/harsheen/opt/junie, runs via `--acp=true,-a,<JUNIE_AUTH_TOKEN>` (token
in .env from junie.jetbrains.com/cli). GOTCHA: junie is glibc-linked and the
sprig image is Alpine — built hybrid image buzz-junie:local (Ubuntu 24.04 +
`musl` package for the sprig loader + sprig copied from ghcr) from
/home/harsheen/opt/buzz-junie-image/. Rebuild that image after pulling a new
ghcr.io/block/buzz-sprig. Verified: owner mention → Junie replied in-channel.
- Agent-to-agent: all four use BUZZ_ACP_RESPOND_TO=allowlist listing the other
three (owner implicit). VERIFIED: goose-local used buzz CLI to find
goose-cloud and @mention it; goose-cloud (GLM) replied in-channel. No loop.
- Bind mounts: /home/harsheen/opt/{goose,junie} mounted read-only at same path
in the sprig containers.
## Managing it
- Logs: sg docker -c "docker logs -f buzz-agent-harness" (also visible in Portainer)
- Restart: sg docker -c "docker compose -p buzz-harness -f harness.yml up -d --wait"
- Next agents: same recipe — buzz-admin generate-key → run.sh add-member →
owner adds them to a channel (buzz CLI or desktop).
2026-09-15 01:41
ASSISTANT (claude-code, glm-5.3-flash)
# Session note — 2026-09-15 (Buzz office fully staffed: 4 agents live)
Assistant: Claude Code. Machine: harsheen-precision-3541 (Ubuntu 24.04,
tailnet IP 100.93.26.64). Continues 2026-09-14-buzz-relay-setup.md and
2026-09-14-agent-harness-setup.md in this folder.
## The office today
Relay: buzz-prod-relay-1 on door 3000, community host 100.93.26.64:3000.
Channel: `general` (55a458ef-74b3-4fa9-8043-7b50d90912b1), created by the
owner via buzz CLI. Owner identity = Harsheen's Buzz Desktop nsec.
All agents run as containers in compose project `buzz-harness`, file
/home/harsheen/git-projects/buzz/deploy/compose/harness.yml, secrets in the
same folder's .env (keychain — back it up, never share).
| Container | Runtime | Brain | Identity pubkey (first 8) |
|---|---|---|---|
| buzz-agent-goose-local | Goose 1.50 | Ollama local gpt-oss:120b-cloud | f3b8beac |
| buzz-agent-goose-cloud | Goose 1.50 | Ollama cloud glm-5.3-flash | eaede9bb |
| buzz-agent-junie | Junie CLI 26.09.3 ACP mode | JetBrains (auth token) | d716a11a |
| buzz-agent-deepseek | buzz-agent | DeepSeek API deepseek-chat | da19653d |
All: owner gate (BUZZ_ACP_AGENT_OWNER = owner pubkey), respond-to allowlist
listing the other three (owner always heard), buzz-dev-mcp for tools,
member + bot role in #general, restart unless-stopped, host network.
## Verified end-to-end
- Owner mention → every agent replies in-channel.
- Agent-to-agent: goose-local looked up goose-cloud via buzz CLI, @mentioned
it, GLM replied. No ping-pong loop observed.
- Junie: owner mention → replied. Full office is talking.
## Recipes and gotchas (the expensive lessons)
1. Relay is Host-scoped: always ws://100.93.26.64:3000, never 127.0.0.1 (404).
2. New agent recipe: buzz-admin generate-key (in relay container) →
./run.sh add-member <hex> --role member → owner: buzz channels add-member
--role bot (agent auto-subscribes live) → harness service in harness.yml.
3. buzz CLI one-off: sg docker -c "docker run --rm --network host
--entrypoint buzz -e BUZZ_RELAY_URL=http://100.93.26.64:3000
-e BUZZ_PRIVATE_KEY=<key> ghcr.io/block/buzz-sprig:main <cmd>".
4. Alpine sprig image: binaries must be MUSL builds. goose glibc build fails
with "No such file or directory"; junie glibc fails with "required file
not found". goose musl build lives at /home/harsheen/opt/goose/goose.
5. goose appends /v1 itself: OPENAI_HOST=http://127.0.0.1:11434 (no /v1),
https://ollama.com (no /v1).
6. Junie needs glibc → hybrid image buzz-junie:local (Ubuntu 24.04 + musl
loader package + sprig copied from ghcr), built from
/home/harsheen/opt/buzz-junie-image/. Rebuild after pulling a new sprig.
7. Junie auth token in .env as JUNIE_AUTH_TOKEN (junie.jetbrains.com/cli);
passed as BUZZ_ACP_AGENT_ARGS="--acp=true,-a,<token>".
8. Relay bootstrap creates ZERO channels; first room must be created by a
member (owner) via buzz CLI or the desktop app.
9. api.deepseek.com unreachable from this network (TLS ok, no response);
Ollama cloud carries deepseek-v4.1-flash as fallback.
## Files
- /home/harsheen/git-projects/buzz/deploy/compose/harness.yml (4 services)
- /home/harsheen/git-projects/buzz/deploy/compose/.env (all keys)
- /home/harsheen/opt/goose/ (goose musl)
- /home/harsheen/opt/junie/ (junie CLI)
- /home/harsheen/opt/buzz-junie-image/ (hybrid image)
## Managing
- Logs: sg docker -c "docker logs -f <container>" (or Portainer)
- Restart all: sg docker -c "docker compose -p buzz-harness -f harness.yml up -d --wait"
- Owner chat commands to any agent: !cancel / !rotate / !shutdown (exact body).
## Open items
- DeepSeek endpoint dead — convert to goose runtime when it recovers, or
switch to Ollama cloud deepseek-v4.1-flash.
- Back up .env (all agent secrets) + owner nsec securely.
- This note also appended to Turso session claude-20260914_buzz-relay-setup.