---
title: "Block製Buzzを自己ホスト：人とAIエージェントが自律的に協働する次世代共有ワークスペースの構築"
description: "Blockが開発したAI協働スペース「Buzz」のNostrリレーを、Cloudflare DNSを介してUbuntu VPS上に自己ホストする方法を解説します。暗号鍵による安全な認証のもと、人間と各種AIエージェントがチャンネルやプロジェクトの履歴を共有し、自律的に連携するセキュアな作業環境を構築しましょう。"
canonical_url: "https://techvoyage.dev/ja/article/self-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues"
last_updated: "2026-10-20T09:53:48.325Z"
---

複数のAIエージェントと協働する際、最も厄介な障害となるのが「文脈（コンテキスト）の断片化」です。会話が異なるツールに分散していると、最終的には人間が仲介役（ルーター）となり、Claude Codeの会話をコピーしてGemini CLIに貼り付け、さらにGemini CLIの出力をコピーしてHermes Agentに貼り付けるといった作業に追われることになります。このような手間は、人間の同僚が同じチームに加わることで、さらに増大します。

![チャットチャンネルとアクティブなAIエージェントを表示するBuzz協働ワークスペースのユーザーインターフェース](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-workspace-interface.webp)

オープンソースの協働ワークスペースである**Buzz**は、人間のチームとAIエージェントを単一の統合された環境にシームレスに融合させます。ここでは、人間の同僚とAIエージェントが同じタスクやプロジェクトの履歴を共有し、お互いにスムーズに仕事を引き継ぐことができます。

## Blockの「Buzz」とは？協働型AIエージェント・ワークスペース

Buzzは、Block（ジャック・ドーシーが率いる企業）が開発したオープンソースの協働ワークスペースであり、人間とAIエージェントが同じチャンネルやプロジェクトを共有して作業を行います。以下のような革新的な主要機能を備えています。

- **共有コンテキスト：** 人間とエージェントはチャンネルを通じて共同作業を行います。会話やプロジェクトの全履歴はチャンネル内に集約されます。
- **エージェント間通信：** エージェント同士は、異なるマシン間でさえも直接通信が可能です。あるエージェントが別のエージェントを@-メンションして仕事を引き継いだり、コードをクロスチェックしたりできます。
- **メンション駆動型アクティベーション：** エージェントは@-メンションされた時のみ作動し、それ以外はバックグラウンドで待機します。メンションされると、チャンネル内の関連文脈を読み取って作業を開始します。
- **統合されたアイデンティティ：** 人間とエージェントは同じアイデンティティ・システムを使用し、暗号鍵（クリプトグラフィック・キー）によって認証されます。
- **コマンドの委任：** 人間の同僚に対して、自分のエージェントに命令を下す権限を付与できます。これにより、チーム全体で互いのデジタルアシスタントに指示を出し、活用し合うことが可能になります。
- **セルフホスト対応：** サーバーをご自身でホストするため、データは完全に自身の管理下に置かれます。参加者の選定や運用ルールの定義も自由に行えます。

## 暗号技術とNostrに支えられたBuzzのアーキテクチャ

![暗号技術とNostrを搭載したBuzz協働ワークスペースのアーキテクチャ図](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-nostr-cryptographic-architecture.webp)

- **Nostrリレーがサーバーとして機能：** メッセージ、ワークフロー、リポジトリ、その他のイベントは暗号署名および検証され、Nostrリレーサーバーに保存されます。Nostrプロトコルは、WebSocketおよびREST APIを介した通信をネイティブにサポートしています。
- **統合された暗号化アイデンティティ：** 人間とエージェントは、それぞれ独自の暗号鍵を使って認証を行います。このアイデンティティはクライアント側で管理され、サーバーに保存されることはありません。
- **ファーストクラスとしてのエージェント：** すべてエージェントは、独自のアイデンティティ、チャンネルメンバーシップ、および監査証跡（オーディット・トレイル）を保持します。エージェントは、Agent Communication Protocol (ACP) を介してワークスペースに接続します。
- **分散型Gitリポジトリ：** コードリポジトリはS3互換のオブジェクトストレージに保存され、タスク、プルリクエスト、コードレビューはNostrのイベントログ内で追跡されます。したがって、BuzzのGitリポジトリはGitHubではなく、Nostrリレー上でホストされます。
- **NostrクライアントとしてのBuzzアプリ：** BuzzはNostrリレーとは独立しており、リレーのURLに接続するデスクトップ/モバイル用のクライアントアプリケーションです。
- **インフラ構成：** PostgreSQLデータベースがイベント保存と全文検索を処理し、RedisがPub/Subメッセージングを管理、S3互換のMinIOがメディアストレージとして使用されます。

## BlockのBuzzリレーをLinux VPSに自己ホストする方法

### 0. 前提条件

- Linux VPS
- ドメインがサーバーを指していること
- DockerおよびDocker Composeプラグイン
- Cloudflareアカウント（無料プラン）

このガイドでは、[Cloudflare WARPでHermes Agentをプライベート ネットワークに公開する方法](/article/exposing-hermes-agent-to-private-network-using-cloudflare-warp)を使用して、Cloudflareのプライベートネットワークの背後にあるUbuntu VPS上でNostrリレーを実行します。構成は、Docker Compose内の4つのサービス（リレー、PostgreSQL、Redis、MinIO）と、HTTPS用のCaddyです。

<article-card description="インバウンドのファイアウォールポートを開くことなく、Cloudflare WARPとZero Trustを使用してHermes Agentをグローバルに安全に公開し、アクセスする方法を学びます。" image="https://inimages.techvoyage.dev/articles/Exposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP/JA-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp" image-alt="Cloudflare Zero TrustとWARPトンネルを使用してHermes Agentをプライベートネットワークに安全に公開する様子" label="関連ガイド" min-read="8" title="Cloudflare WARPでHermes Agentをプライベート ネットワークに公開する方法" to="/article/exposing-hermes-agent-to-private-network-using-cloudflare-warp">



</article-card>

### 1. Cloudflare DNSとAPIトークン

#### Cloudflare APIトークンの作成

1. 右上のユーザーアイコンのドロップダウンメニューから、**Profile**をクリックします。
2. **API Tokens**をクリックします。

![APIトークン作成メニューを表示するCloudflareのユーザープロファイルページ](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/cloudflare-profile-api-tokens.webp)

1. **Create Token**をクリックします。
2. **Edit zone DNS**のテンプレートを使用します。
3. テンプレートを以下のように構成します：

  - **Permissions**: Zone — DNS — Edit
  - **Zone Resources**: Include — Specific zone — `example.com`
4. **Continue to summary**をクリックします。
5. **Create Token**をクリックします。
6. 生成されたトークンはページを閉じると再表示されないため、必ずコピーしておいてください。
7. ターミナルで生成されたトークンが動作するか確認します：

```bash
curl "https://api.cloudflare.com/client/v4/user/tokens/verify" -H "Authorization: Bearer YOUR_TOKEN_HERE"
```

#### DNSレコード

- Aレコードを作成し、プロキシステータスを「**DNS only**」（DNSのみ）に設定します。

![プロキシステータスをDNSのみに設定してCloudflareダッシュボードでBuzzドメインのDNS Aレコードを設定する様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/cloudflare-dns-a-record-configuration.webp)

### 2. UbuntuへのDockerのインストール

以下のコマンドを実行して、UbuntuにDockerをインストールします：

```bash
# 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. クローンと設定

```bash
git clone https://github.com/block/buzz.git

cd buzz/deploy/compose
cp .env.example .env
nano .env
```

`.env`ファイルをグループごとに編集します：

- **ドメイン設定:**

```text
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進数（Hex）に変換します。
- **シークレット（Secrets）の設定:**
  - [オンラインツール](/ja/tools/secret-key-hex)を使用するか、`openssl rand -hex 32`を実行（計7回実行）して、シークレットキーを生成します。
  - すべての`CHANGE_ME`プレースホルダーを置き換えます：`BUZZ_RELAY_PRIVATE_KEY`、`BUZZ_GIT_HOOK_HMAC_SECRET`、Postgres/Redis/Typesenseのパスワード、およびS3のアクセスキー/シークレットキー。
  - プレースホルダーが残っていると、コンテナが再起動ループに陥る最も一般的な原因になります。`grep CHANGE_ME .env`を実行して、変更漏れがないか確認してください。

```text
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
```

- **その他の設定:**
  - 先ほど生成したAPIトークンを環境変数`CLOUDFLARE_API_TOKEN`として追加します。これは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チャレンジを設定します。DNS-01は、プラグインが**パブリックDNS**にTXTレコード`_acme-challenge.buzz.pafor.me`を書き込み、Let's Encryptがパブリックインターネット経由でそのレコードを確認してドメインの所有権を検証する仕組みです。そのため、`pafor.me`がCloudflareアカウント上でパブリックゾーンとして登録されている必要があります（Zero Trust/WARPのプライベートDNS内だけに存在するプライベートホスト名では動作しません）。プライベートにしか解決できない場合、DNS-01は失敗し、別の証明書取得アプローチが必要になります。
- Caddyfileに以下を追記します：

```yml
{
  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
```

- Dockerfile.caddyを以下の内容で作成します（compose.caddy.ymlから呼び出されます）：

```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
```

- Cloudflareモジュールを含むイメージを使用し、APIトークンを渡すように`compose.caddy.yml`を編集します：

```yml
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コンテナの起動

```bash
docker compose -f compose.yml -f compose.caddy.yml up -d

#Check the Docker status
docker compose ps
```

![docker compose psを実行してBuzzサービスのコンテナ稼働状態を表示するターミナル画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/docker-compose-ps-status-terminal.webp)ブラウザを開き、`http://buzz.pafor.me`にアクセスしてリレーが正常に稼働しているか確認します。

![自己ホストしたBlockのBuzzリレーからの正常な応答を表示するブラウザの検証画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-relay-running-browser-verification.webp)### ステップ 5：初日からの自動バックアップ設定

```bash
mkdir -p /buzz_backups
crontab -e
```

毎晩データベースのダンプを出力するcronジョブを設定します：

```text
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`は恒久的なものとして厳重に管理してください。このキーで署名されたイベントは、キーが変更されると検証に失敗します。データベースをリストアしても、新しい鍵と組み合わせた場合は同じリレーとして認識されません。

## BuzzデスクトップクライアントとNostrアイデンティティのセットアップ

[https://github.com/block/buzz/releases](https://github.com/block/buzz/releases) からBuzzデスクトップアプリをダウンロードして起動します。プロファイルの設定を進め、「Join or create a community」のページまで進みます。

![コミュニティへの参加または作成を行うBuzzデスクトップクライアントの初期セットアップ画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-setup-community.webp)

「Join a community」をクリックし、ご自身のパブリックキー（公開鍵）をコピーします。

![コミュニティに参加する前に公開鍵アイデンティティを表示するBuzzクライアント画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-join-community-public-key.webp)

**VPS上**で以下のコマンドを実行し、自身を最初のメンバーとして追加します：

```bash
docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere
```

コミュニティURLに`wss://buzz.pafor.me`を入力し、「Next」をクリックします。

![Buzzデスクトップアプリに自己ホストしたコミュニティリレーのURLを入力する様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-input-community-url.webp)

表示名を入力し、「Next」ボタンをクリックします。

![表示名を入力するBuzzアプリのプロファイル設定画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-profile-name-input.webp)

### チャンネルとAIエージェント

チャンネルはタスクやプロジェクトごとのグループです。タスクごとにチャンネルを作成し、人間とAIエージェントをそこに参加させます。

チャンネル内のすべてのアクティビティは自動的に共有されるため、各メンバーに個別に指示を繰り返す必要はありません。すべてのエージェントは「@」を使ってメンションでき、該当のメッセージ履歴を読み込みます。また、エージェント同士が互いにメンションし合うことも可能です。

事前に設定されたエージェントにダイレクトメッセージ（DM）を送信してみましょう

![Buzz協働デスクトップクライアントでAIエージェントにダイレクトメッセージを送信する様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-dm-agent.webp)

チャンネルを作成し、いくつかのエージェントを追加してみましょう

![Buzzデスクトップアプリ内で新しいタスクまたはプロジェクトのチャンネルを作成する様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-create-channel-dialog.webp)

![新しく作成したチャンネルに人間のメンバーとAIエージェントを追加する様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-add-agents-to-channel.webp)

![統合されたチャット履歴とプロジェクトタスクを表示するアクティブなチャンネル画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-channel-view.webp)

![コラボレーションプロジェクトチャンネルに統合されたアクティブなAIエージェントの詳細ビュー](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-channel-active-agents.webp)### エージェント・ランタイムの有効化

プリセットされたランタイムは、`~/.local/bin`などの標準ディレクトリにある起動用バイナリ（例：`hermes-acp`）の自動検出に依存しています。非標準の場所にツールがインストールされている場合、Buzzはそれを検出できません。

Kimi Codeの場合、エージェントIDはkimiであり、Buzzは`~/.local/bin/kimi`にあるバイナリを探します。以下のようにシンボリックリンクを作成することで解決できます。

```text
ln -s kimi-cli /Users/<user>/.local/bin/kimi
```

これにより、Kimi Codeがエージェントのランタイム一覧に表示されます。

![Kimiを含む設定済みのAIエージェントランタイムを表示するBuzzアプリの設定画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-settings-agent-runtimes-list.webp)

### プロジェクトとリポジトリ

まず、Settings → Experimentsで「**Projects**」機能を有効化します：

![Buzzの設定タブで実験的機能である「Projects」を有効にする様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-settings-experiments-projects.webp)

現時点では、プロジェクトの作成は`buzz-cli`を介して行う必要があります（将来のリリースではUIから直接作成可能になる予定です）。

#### buzz-cliのインストール

**VPS上**で以下のコマンドを実行し、`buzz-cli`をインストールします：

```bash
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`のアイデンティティとなります。

```bash
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の設定を行います：

```bash
# 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`が正常に設定されているか確認します：

```bash
buzz channels list
```

![アクティブなチャンネルを一覧表示してbuzz-cliの構成を確認するターミナルコマンド実行画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-cli-channels-list-terminal.webp)

#### buzz-cliによるプロジェクト作成

```bash
# --channel refers to the UUID of the channel
buzz repos create --id TestKOA --name 'Display Name' --channel "bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b"
```

プロジェクトは作成者（オーナー）しか削除できません。`buzz-cli`で作成された「Display Name」プロジェクトは、現在のCLIに削除コマンドが実装されていないため、この方法では削除できません。

Buzzデスクトップアプリに戻り、プロジェクトが作成されていることを確認します。

![プロジェクトの正常な作成を確認するBuzzデスクトップアプリのプロジェクト画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-project-view.webp)

リポジトリがProjectsビューに追加されると、それ以降はUI右上隅の「+」ボタンから簡単にリポジトリを追加できるようになります。

![Buzzデスクトップクライアントのプラスアイコンを使用して新しい開発プロジェクトを追加する様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-add-project-button.webp)

#### 既存のGitリポジトリの登録

Gitリポジトリが存在するマシンに`git-credential-nostr`をインストールします。これには**Git 2.46以上**とRustのビルド環境（toolchain）が必要です。詳細についてはこちらの[Readme](https://github.com/block/buzz/tree/main/crates/git-credential-nostr)を参照してください。

```bash
cargo install --path crates/git-credential-nostr
```

Buzzリレーでの認証用に`git-credential-nostr`を設定します：

```bash
# 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リレー上にリポジトリを作成します：

```text
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`（認証ヘッダー不足）のエラーが発生します。これを解決するには、リポジトリIDをBuzzのチャンネルに関連付ける（バインドする）必要があります。チャンネルのメンバーシップに基づいてGitの書き込み権限（ACL）が制御されるためです。

```bash
buzz repos bind --id koa-email-routing --channel <CHANNEL_UUID>

# push the code again
git push
```

Buzzデスクトップアプリでプロジェクトを確認した際、以下のようにGitの読み込みに失敗する場合があります。これはデスクトップアプリが**Git 2.46以上**を要求するためであり、アプリを直接起動した際に古いバージョンのGitが検出されていることが原因です。

![ローカルのGitバージョンが2.46未満であるためにBuzzクライアントで発生したGit読み込みエラー画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-git-version-error.webp)

シェルの設定ファイル等で、`launchctl setenv PATH "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"`のようにPATH環境変数をエクスポートし、シェル経由でBuzzアプリを起動してください。詳細についてはこちらの[Issue](https://github.com/block/buzz/issues/5348)を参照してください。

```bash
open -a Buzz
```

Buzzアプリで「Projects」を再度確認すると、無事にリポジトリの詳細が読み込まれているはずです。

![Gitリポジトリの詳細とコミットログが正常に読み込まれたBuzzデスクトップ画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-repository-details-loaded.webp)

## QRコードによるBuzzモバイルアプリとの同期

BuzzモバイルアプリとのペアリングはHTTPSプロトコルのみを受け付けます。また、VPS上ではデフォルトで`buzz-pair-relay`が起動していません。

```bash
cd ~/buzz
cargo install --path crates/buzz-pair-relay
```

以下を`compose.yml`に追加し、`buzz-pair-relay`サービスを定義します：

```yml
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_PAIR_RELAY_PORT`を追記します：

```text
BUZZ_PAIRING_RELAY_URL=wss://buzz.pafor.me/pair
BUZZ_PAIR_RELAY_PORT=5000
```

Buzzデスクトップの「Settings」から「**Mobile**」を開きます：

![モバイルデバイスの設定タブを表示するBuzzアプリの設定ダイアログ](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-settings-mobile-tab.webp)

「Start pairing」をクリックするとQRコードが生成されます。モバイルデバイスのBuzzアプリでこのQRコードをスキャンし、「Code Match」をクリックするとペアリングが完了します。

![Buzzモバイルアプリとの同期用にデスクトップクライアントで安全なペアリングQRコードを生成する様子](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-desktop-client-pairing-qr-code.webp)

モバイルアプリ上のエージェントは、デスクトップアプリ側で対応するエージェントが稼働している場合のみ利用可能です。エージェントを動作させるには、デスクトップマシンを起動しておく必要があります。

![同期されたアクティブなAIアシスタントエージェントを表示するBuzzモバイルアプリ画面](https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/buzz-mobile-app-active-agents.webp)

## おわりに

BuzzはいくつかのバグやUIの制限があり、大規模な本番環境への導入には時期尚早ですが、少人数のチームや個人の開発者にとっては非常に刺激的なツールです。人間とAIが真に同僚として協働する、自律的な「AIネイティブ」な未来のワークスペースをいち早く体験することができます。

## 参考資料

- [Buzz releases](https://github.com/block/buzz)
- [Introducing Buzz](https://block.xyz/inside/introducing-buzz-where-humans-and-agents-work-together)
- [What is buzz](https://www.hostinger.com/tutorials/what-is-buzz)
- [How to self-host Buzz (Miget)](https://miget.com/blog/how-to-self-host-buzz)
