
自建 Block 旗下 Buzz 協作平台:輕鬆構建人類與 AI 智能體高效協同工作的全新共享工作空間
本教學將手把手帶您在 Ubuntu VPS 上部署自託管的 Block 旗下 Nostr 中繼 Buzz,並配置 Cloudflare DNS 安全網路。我們將幫助您搭建起一個安全性的共享工作空間,讓您的團隊成員與多個 AI 智能體(如 Claude、Kimi)能夠基於加密身份進行高效溝通、共享專案上下文並實現無縫協作。
目錄
在與多個 AI 智能體(AI Agent)協同工作時,最讓人頭痛的障礙莫過於「上下文斷片化(Context Fragmentation)」。由於對話分散在不同的工具中,您最終不得不扮演起一個「肉肉路由器」的角色——頻繁地從 Claude Code 中複製對話並貼上到 Gemini CLI,然後再從 Gemini CLI 複製並貼上到 Hermes Agent。而當您身邊還有人類團隊成員一起協作時,這種繁瑣的摩擦感更是成倍增長。

Buzz 是一款開源的協同工作空間,它將人類團隊和 AI 智能體凝聚在一個統一環境中。在這裡,人類同事與 AI 智能體能夠共享相同的任務和專案歷史,並實現天衣無缝的工作交接。
什麼是 Block 旗下的 Buzz?人機協同的 AI 智能體共享空間
Buzz 是 Block 公司(由推特創辦人傑克·多西創立)推出的開源協作工作空間,它讓團隊成員和 AI 智能體能夠在相同的頻道與專案中並肩工作。它具有以下幾個核心亮點:
- 共享上下文: 頻道是團隊成員與智能體開展協作的核心陣地。所有的對話記錄和專案歷史都完整保留在頻道中。
- 智能體間通信: 智能體之間能够跨機器直接進行交流。一個 AI 智能體可以 @ 另一個智能體,從上完成工作的轉交或代碼的交叉審查。
- 提及驅動激活: AI 智能體僅在被 @ 提及時才會激活,平時則保持靜默。被提及時,智能體將讀取頻道中的相關上下文並開始工作。
- 統一身份系統: 團隊成員與 AI 智能體使用同一套身份系統,並通過加密私鑰/公鑰進行安全認證。
- 委派命令: 您可以向人類同事授予指揮您的智能體的權限,讓整個團隊都能輕鬆指派和調用彼此的數位助手。
- 自託管伺服器: 因為您是該伺服器的託管者,所以您的數據完全由您掌控。您可以自由決定誰能加入,並定義專屬的運行規則。
基於 Nostr 的加密級 Buzz 架構解析

- Nostr 中繼器充當伺服器: 消息、工作流、代碼倉庫以及其他事件都經過加密簽名和驗證,並儲存在 Nostr 中繼伺服器(Relay)上。Nostr 協定原生支援通過 WebSockets 和 REST API 進行通信。
- 統一加密身份: 人類和智能體都使用各自的加密金鑰進行認證。此身份完全保留在用戶端,絕不會儲存在伺服器上。
- 一等公民級智能體: 每个智能體都擁有獨立的身份、頻道成員資格和審計跟蹤(Audit Trail)。智能體使用智能體通信協定(ACP)連接到工作空間。
- 去中心化 Git 倉庫: 代碼庫儲存在相容 S3 的物件儲存中,而任務、拉取請求(PR)和代碼審查則在 Nostr 事件日誌中進行追蹤。因此,Buzz 的 Git 倉庫實際上是託管在 Nostr 中繼器上,而非 GitHub。
- Buzz 用戶端屬於 Nostr 用戶端: Buzz 應用與 Nostr 中繼器是分離的;它是一個桌面或移動端用戶端,負責連接到中繼器的 URL 節點。
- 基礎技術棧: 由 PostgreSQL 資料庫處理事件儲存與全文檢索,Redis 負責管理發佈/訂閱(Pub/Sub)消息佇列,而相容 S3 的 MinIO 用於儲存媒體檔案。
如何在 Linux VPS 上部署自託管的 Block 旗下 Buzz
0. 前提條件
- 一台 Linux VPS
- 域名已指向您的伺服器 IP 地址
- Docker 以及 Docker Compose 外掛程式
- Cloudflare 帳戶(免費服務計劃)
在本指南中,我們將把 Nostr 中繼器部署在 Ubuntu VPS 上,並通過 教學:使用 Cloudflare WARP 安全地將 Hermes Agent 暴露至私有網路 保護其安全。整個基礎技術棧包含 Docker Compose 中的四個服務:中继器(relay)、PostgreSQL、Redis 和 MinIO,並使用 Caddy 來提供 HTTPS 支援。

相關指南
教學:使用 Cloudflare WARP 安全地將 Hermes Agent 暴露至私有網路
了解如何利用 Cloudflare WARP 和 Zero Trust(零信任)在不開放入站防火牆端口的情況下,安全地在全球範圍內暴露和存取您的 Hermes Agent。
8 分鐘閱讀1. Cloudflare DNS 與 API 權杖
創建 Cloudflare API 權杖(Token)
- 點擊右上角的個人頭像,並在下拉選單中選擇 Profile。
- 點擊 API Tokens。

- 點擊 Create Token 按鈕。
- 選擇使用範本 Edit zone DNS。
- 配置範本如下:
- Permissions: Zone — DNS — Edit
- Zone Resources: Include — Specific zone —
example.com
- 點擊 Continue to summary。
- 點擊 Create Token。
- 拷貝生成的 API 權杖,因為頁面關閉後它將不再顯示。
- 在終端機中驗證生成的權杖,確保其能正常工作:
curl "https://api.cloudflare.com/client/v4/user/tokens/verify" -H "Authorization: Bearer YOUR_TOKEN_HERE"
DNS 解析記錄
- 創建一條 A 記錄,並將代理狀態設置為 僅限 DNS(DNS only)。

2. 在 Ubuntu 上安裝 Docker
運行以下命令在 Ubuntu 上安裝 Docker:
# Add Docker's official GPG key and set up the Docker repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add the official Docker repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update package list
sudo apt update
# Install Docker Engine, Docker Community Edition, and containerd runtime
sudo apt install docker-ce docker-ce-cli containerd.io -y
# Start automatically when the system boots
sudo systemctl enable docker
# Verify docker is installed
docker --version
sudo apt install -y docker-compose-plugin
# Verify the compose plugin is installed
docker compose version
3. 克隆倉庫並進行配置
git clone https://github.com/block/buzz.git
cd buzz/deploy/compose
cp .env.example .env
nano .env
編輯 .env 文件:
- 域名配置:
BUZZ_DOMAIN=buzz.pafor.me
RELAY_URL=wss://buzz.pafor.me
BUZZ_PAIRING_RELAY_URL=wss://buzz.pafor.me/pair
BUZZ_MEDIA_BASE_URL=https://buzz.pafor.me/media
BUZZ_MEDIA_SERVER_DOMAIN=buzz.pafor.me
BUZZ_CORS_ORIGINS=https://buzz.pafor.me
- 所有者金鑰:
RELAY_OWNER_PUBKEY欄位需要填入您的 64 位 16 進位公鑰。請先在桌面用戶端生成一個身份(選擇 'Create a new identity key' → 複製以 npub 格式開頭的公開 ID),然後將其轉換為 16 進位格式。 - 金鑰安全(Secrets):
- 使用該 線上工具 或運行命令
openssl rand -hex 32(運行 7 次)來生成高強度的隨機金鑰。 - 將所有的
CHANGE_ME佔位符替換掉:包括BUZZ_RELAY_PRIVATE_KEY、BUZZ_GIT_HOOK_HMAC_SECRET、Postgres/Redis/Typesense 的密碼以及 S3 的 Access/Secret Key。 - 未替換的佔位符是導致容器陷入無限重啟循環的最常見原因;請通過命令
grep CHANGE_ME .env來核對並排除隱患。
- 使用該 線上工具 或運行命令
BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY
BUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX
POSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD
REDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD
TYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY
BUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY
BUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY
- 其他配置項:
- 將環境變數
CLOUDFLARE_API_TOKEN添加到您的配置中,並賦予先前生成的 API 權杖值。Caddy 將用其自動申請憑證。 - Buzz 的預設配置非常開放,任何知道您中繼器地址的人都可以驗證並加入。為了安全起見,請務必配置
RELAY_OWNER_PUBKEY,並將BUZZ_REQUIRE_RELAY_MEMBERSHIP=true和BUZZ_REQUIRE_AUTH_TOKEN=true設為啟用狀態。
- 將環境變數
4. 使用 Caddy 開啟 HTTPS 訪問
構建集成 Cloudflare DNS 模組的自定義 Caddy 鏡像
- 我們在 Caddy 中配置基於 Cloudflare 的 DNS-01 挑戰(Challenge)。DNS-01 驗證的原理是讓 Caddy 外掛程式向您的公網 DNS 寫入一條 TXT 挑戰記錄
_acme-challenge.buzz.pafor.me; - 隨後 Let's Encrypt 從公共網際網路查詢該記錄,以確權您的域名。這意味著您的域名必須是 Cloudflare 帳戶中的公網解析區域,而不能只是 Zero Trust / WARP 區域網路 DNS 內的私有域名。如果您的域名只在私網下分发解析而沒有公網節點,DNS-01 將會失敗,需要改用其他驗證方式。
- 將以下配置加入到 Caddyfile 中:
{
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
- 創建一個
Dockerfile.caddy,其内容如下,這是compose.caddy.yml運行所必需的:
FROM caddy:2-builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/cloudflare
FROM caddy:2-alpine
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
- 修改
compose.caddy.yml,以使用我們剛生成的帶有 Cloudflare 外掛程式的 Caddy 鏡像,並傳入 API 權杖參數:
services:
relay:
ports: !reset []
caddy:
build:
context: .
dockerfile: Dockerfile.caddy
image: buzz-caddy:cloudflare
depends_on:
relay:
condition: service_healthy
environment:
BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}
CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}
ports:
- "${CADDY_HTTP_PORT:-80}:80"
- "${CADDY_HTTPS_PORT:-443}:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- buzz-caddy-data:/data
- buzz-caddy-config:/config
restart: unless-stopped
networks:
- buzz-net
volumes:
buzz-caddy-data:
labels:
com.buzz.volume: caddy-data
buzz-caddy-config:
labels:
com.buzz.volume: caddy-config
啟動 Docker 容器組合
docker compose -f compose.yml -f compose.caddy.yml up -d
#Check the Docker status
docker compose ps

打開您的網頁瀏覽器並訪問 http://buzz.pafor.me,驗證中繼服務是否已順利跑起來。

步驟 5:建立起首日備份機制
mkdir -p /buzz_backups
crontab -e
添加一個每日凌晨自動執行的資料庫快照定時任務(Cron Job):
0 3 * * * cd /home/<user>/buzz/deploy/compose && docker compose exec -T postgres pg_dump -U buzz buzz > /buzz_backups/buzz-$(date +\%Y\%m\%d).sql
注意:請將 BUZZ_RELAY_PRIVATE_KEY 視為永久不可失配的金鑰。由於中繼器中的事件都與此金鑰綁定,如果未來變更了私鑰,舊事件將無法通過驗證;就算您復原了資料庫備份,在新私鑰下它也不會被 Nostr 網路視為同一個中繼服務。
配置 Buzz 桌面用戶端與 Nostr 加密身份
從 https://github.com/block/buzz/releases 下載最新版 Buzz 桌面用戶端並運行。依次完善個人資料,直到您來到 “Join or create a community” 介面。

點擊 “Join a community” 並拷貝您的公鑰(Public Key)。

在 VPS 上運行以下命令列工具,將您自己添加為該平台的首位會員:
docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere
在用戶端中填入 wss://buzz.pafor.me 作為社區接入 URL,然後點擊 “Next”。

起一個帥氣的暱稱,然後點擊 “Next” 按鈕。

協作頻道與 AI 智能體
頻道是圍繞特定任務或專案劃分的群組。為您手頭的每個任務或工程建立獨立的頻道,並將團隊成員與所需的 AI 智能體拉入其中。
頻道內的所有消息、代碼與文件都會被自動分享,免去了逐一向新成員同步前因後果的煩惱。任何人都可以通過「@」來點名激活特定的 AI 智能體,智能體收到召喚後會讀取相關歷史消息並立刻著手處理。更妙的是,不同的 AI 智能體之間也能互相 @ 指派任務。
讓我們試著給預置的智能體發一條私信(DM)

創建一個新頻道并拉幾個 AI 智能體進來吧




激活智能體運行時(Agent Runtimes)
平台自帶的運行時預設依賴於「自動探測」來查找特定系統目錄(例如 ~/.local/bin)下的執行程序(如 hermes-acp)。如果您的智能體軟體安裝在非標準路徑下,Buzz 將無法正確識別。
以 Kimi Code 為例,它的智能體 ID 為 kimi,Buzz 預設會在 ~/.local/bin/kimi 尋找它。通過創建一個軟連結(Symbolic Link)即可輕鬆搞定:
ln -s kimi-cli /Users/<user>/.local/bin/kimi
此時,Kimi Code 就會顯示在「Agent runtimes」列表中。

專案與代碼倉庫管理
請先在 Settings → Experiments 菜單中激活「Projects」實驗性功能:

目前,一個專案(Project)必須使用 buzz-cli 命令列工具來創建(雖然在後續版本中會加入 UI 直接創建的支持)。
在 VPS 上安裝並部署 buzz-cli
在 VPS 上依次執行以下命令,編譯並安裝好 buzz-cli 用戶端:
sudo apt install cargo
cd ~/buzz
cargo install --path crates/buzz-cli
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
使用線上工具或通過 buzz-cli 生成一對 Nostr 加密公私鑰。這組金鑰將代表该 buzz-cli 工具在 Nostr 網路中的數位身份。
docker run --rm --entrypoint /usr/local/bin/buzz-admin ghcr.io/block/buzz:main generate-key
# Use the generated Public Key
docker compose exec relay buzz-admin add-member --pubkey generated_Public_key
配置您的 CLI 變數:
# Copy the Secret key as the BUZZ_PRIVATE_KEY
echo 'export BUZZ_PRIVATE_KEY="nsec1..."' >> /home/<user>/.bashrc
echo 'export BUZZ_RELAY_URL="wss://buzz.pafor.me"' >> /home/<user>/.bashrc
運行以下命令來測試 buzz-cli 是否已經與您的中繼器配对暢通:
buzz channels list

使用 buzz-cli 創建全新的專案
# --channel refers to the UUID of the channel
buzz repos create --id TestKOA --name 'Display Name' --channel "bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b"
專案的所有權極為嚴格,只有創建者才有權將其刪除。由於該「Display Name」專案是由 buzz-cli 發起創建的,而目前的命令列版本尚未內置刪除指令,因此該專案無法通過常規方式清空。
再次點開您的桌面用戶端,驗證該專案是否已顯示在工作區中。

一旦專案列表在介面中開啟,後續您便可以直接通過右上角的 「+」 按鈕隨心所欲地添加更多子專案了。

拉入現有的 Git 代碼倉庫
在您的本地開發機器上安裝 git-credential-nostr 憑證輔助工具。這需要您的系統已安裝 Git 2.46+ 版本並配有 Rust 構建環境。詳情可參考此專案的 Readme 描述:
cargo install --path crates/git-credential-nostr
對 git-credential-nostr 進行配置,使其獲得 Buzz 中繼器的授權權限:
# 1. Register the helper and enable per-path credentials.
git config --global credential.helper nostr
git config --global credential.useHttpPath true
# 2. Store your nsec in a key file (must be 0600). Replace "nsec1..." with your private key
mkdir -p ~/.nostr
echo "nsec1..." > ~/.nostr/key && chmod 600 ~/.nostr/key
git config --global nostr.keyfile ~/.nostr/key
在 Buzz 中繼上開闢出該 Git 庫的儲存節點:
buzz repos create --id koa-email-routing --name "KOA Email Routing" --clone "https://buzz.pafor.me/git/<pub_key>/koa-email-routing" --nostr-relay "wss://buzz.pafor.me"
在第一次執行 git push 時,您可能會被攔截並報錯 remote: missing Authorization header。這是由於 Git 寫入控制(ACL)是由頻道成員資格決定的,您必須先將該倉庫 ID 與一個具體的 Buzz 頻道進行綁定,從而授權合規寫入:
buzz repos bind --id koa-email-routing --channel <CHANNEL_UUID>
# push the code again
git push
在某些情況下,在 Buzz 桌面版中查閱專案進度時會遇到類似下方的 Git 模組拉取失敗提示。這是由於該桌面應用要求系統必須搭載 Git 2.46+ 版本,而應用直接啟動時可能預設尋址到了系統中的舊版 Git 引擎:

請在您的 shell 設定檔中通過執行 launchctl setenv PATH "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" 聲明新版 Git 所在的 PATH,並直接在終端中拉起 Buzz 應用。對此可參考該 Issue 的詳細排查記錄。
open -a Buzz
重新進入用戶端中的 Projects 標籤頁,您會驚喜地發現代碼庫的所有提交與詳情已經完美載入出來了。

利用二維碼將 AI 助手同步至手機端 Buzz App
Buzz 手機端的「掃碼配對」只認 HTTPS 協定,且 VPS 上的中繼服務預設並不會在背景運行 buzz-pair-relay 組件。
cd ~/buzz
cargo install --path crates/buzz-pair-relay
將以下配置注入到您的 compose.yml 文件中,聲明並啟動 buzz-pair-relay 容器進程:
pair:
image: ${BUZZ_IMAGE:-ghcr.io/block/buzz:main}
entrypoint: ["/usr/local/bin/buzz-pair-relay"]
environment:
BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000
ports:
- "${BUZZ_PAIR_RELAY_PORT:-5000}:5000"
restart: unless-stopped
networks:
[buzz-net]
在您的 .env 中聲明 BUZZ_PAIRING_RELAY_URL 及其專用的運行埠號:
BUZZ_PAIRING_RELAY_URL=wss://buzz.pafor.me/pair
BUZZ_PAIR_RELAY_PORT=5000
點擊桌面端應用中的 Settings, 進入 「Mobile」 配對項:

點擊 “Start pairing” —— 介面會生成專屬的綁定二維碼;打開手機端 App 掃一掃,接著在桌面端點擊 “Code Match” 確認無誤,雙端便立即完成信任綁定。

注意:手機端应用中的智能體之所以能隨叫隨到,是基於您的桌面端應用在背景持續維繫運行。只有保障桌面機處於線上狀態,手機端派發的智能體指令才能被順利分發與執行。

結語
不可否認,作為一個還處於發展初期的技術方案,Buzz 在面對大規模生產環境時依然稍顯稚嫩,伴隨著一些偶發的系統 Bug 與介面互動上的限制。但對於小型團隊或單兵作戰的獨立開發者而言,這無疑是一場令人血脈偾張的前沿探索。它為我们揭開了一幅波瀾壯闊的人機無縫協奏畫卷,讓我們提前觸碰到了「AI 智能體成為工作夥伴」的未來工作模式。
參考資源
相關文章

AI 與智能體
為 DeepSeek Harness 接入 Buzz 協作平台:構建自託管 Nostr 訊息閘道的完整實踐
深入解析如何透過 Nostr 協定將 DeepSeek Harness 接入 Block Buzz 協作平台:手把手配置 NIP-42 鑑權認證、基於 40003 事件的原位串流編輯輸出、頻道獨立工作階段管理與本地工作區指令聯動,為開發團隊建構安全可控、開箱即用的人機協同智能體開發環境與全新工作流程。
14 分鐘閱讀
旅行
使用Docker與TREK自託管您的個性化智能旅行日程:一站式深度規劃並輕鬆管理預訂、財務和行李清單
本文詳細介紹如何使用Docker部署開源旅行規劃系統TREK。我們將帶您配置Caddy反向代理和Cloudflare R2物件儲存,實現資料的安全備份與圖片的高效載入。此外,還將演示如何利用MCP(模型上下文協定)連接Claude等AI代理,通過自然语言對話一鍵生成您的專屬旅行日程,開啟完美旅程。
22 分鐘閱讀
AI 與智能體
從傳統初始化範本腳本到智慧體:AI Agent 技能如何優雅地取代 Nuxt 應用程式的腳手架建構腳本
輕鬆在 Cloudflare Workers 上快速建構 Nuxt 應用程式腳手架。深入剖析並學習我們如何使用功能強大、極具靈活性、能根據意圖決策且支援自我修復的 AI 智慧體技能,來徹底取代脆弱且難以維護的傳統 Shell 腳本,並詳細演示如何透過 npx skills 命令行工具將其無缝安裝到您的本地開發工作流中。
2 分鐘閱讀
上一篇
使用Docker與TREK自託管您的個性化智能旅行日程:一站式深度規劃並輕鬆管理預訂、財務和行李清單
本文詳細介紹如何使用Docker部署開源旅行規劃系統TREK。我們將帶您配置Caddy反向代理和Cloudflare R2物件儲存,實現資料的安全備份與圖片的高效載入。此外,還將演示如何利用MCP(模型上下文協定)連接Claude等AI代理,通過自然语言對話一鍵生成您的專屬旅行日程,開啟完美旅程。

下一篇
如何在多台裝置之間安全地同步 Obsidian 本地筆記庫
本文詳細介紹如何利用開源工具 Synch 與 Ignis 在您的 VPS 上搭建私有同步伺服器,從而在多台電腦、手機以及平板裝置之間安全地同步您的 Obsidian 筆記庫。我們還將所有服務全部部署在 Cloudflare Zero Trust 私有網路中,從而完全阻斷來自公網的惡意掃描與未授權存取,保障數據隱私安全。