mcpField
A
agent-comm

agent-comm

ローカル
github.com/keshrathAI・エージェント94 週間前に更新

agent-comm について

agent-comm は、並行して作業する AI コーディングエージェント向けの、エージェント非依存の調整サービスです。メッセージ、共有状態、活動の可視化に加え、ファイル編集や競合しうるコマンドを調整するフックを備えています。

主な機能

  1. 01エージェント登録と能力検索
  2. 02直接、チャンネル、ブロードキャストのメッセージ
  3. 03アトミック CAS 対応の共有キー値状態
  4. 04リアルタイムダッシュボードと活動フィード
  5. 05ファイルとコマンドを調整するフック
  6. 06MCP、REST、WebSocket の各トランスポート

活用シーン

  1. 01同じコードベースでのコーディングエージェントの連携
  2. 02スキルや能力に基づくタスクの割り当て
  3. 03ロック、進捗、作業状態の共有
  4. 04編集の重複やコマンド競合の防止

MCP 対応

MCP サーバーは、エージェントの登録と検索、メッセージ、チャンネル、受信箱のポーリング、共有状態のツールを公開します。フック、ダッシュボード、カスタムクライアント向けに REST と WebSocket インターフェースも提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"keshrath-agent-comm": {
"command": "npx",
"args": [
"-y",
"agent-comm"
]
}
}
}
起動コマンドnpx -y agent-comm

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmagent-comm1.3.12

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

agent-comm

License: MIT Node.js Tests MCP Tools REST Endpoints

エージェントに依存しない相互通信システムです。 AI コーディングエージェント(Claude Code、Codex CLI、Gemini CLI、Aider、または任意のカスタムツール)が互いに対話し、状態を共有して、リアルタイムで作業を調整できます。

ライトテーマダークテーマ
概要ダークテーマ

理由

同じコードベースで複数の AI エージェントを実行すると、あるターミナルでコードレビューを行い、別のターミナルで実装し、さらに別のターミナルでテストをしていても、エージェント同士は互いの存在を認識できません。その結果、作業が重複したり、マージコンフリクトが発生したり、コンテキストを見落としたりします。

agent-comm がない場合agent-comm がある場合
検出エージェントは互いの存在を認識できませんエージェントがスキルを登録し、能力を基に互いを検出します
調整同じファイルを編集して、コンフリクトが発生しますファイルや領域をロックし、作業を分担します
コミュニケーションなし — 各エージェントが状況を把握できずに作業しますメッセージ、チャンネル、ブロードキャストでやり取りできます
状態の共有作業が重複し、コンテキストを見落としますアトミック CAS 対応の共有 KV ストア
可視性何が起きているのかわかりませんリアルタイムのダッシュボードとアクティビティフィードですべてを表示します

agent-comm は、エージェント間で共有する通信レイヤーを提供します。

  • エージェントは名前、能力、スキルを登録し、ほかのエージェントから検出できるようにします
  • スキルやタグを使って互いを検出し、タスクを動的に振り分けます
  • 重要度(low/normal/high/urgent)と任意の ACK を指定して、メッセージ(ダイレクト、ブロードキャスト、チャンネルベース)を交換し、作業を調整します
  • ブロッキング待機(comm_poll)で受信トレイをポーリングするため、処理中に届いたほかのエージェントからのシグナルを、ビジーループなしで受け取れます
  • ロック、フラグ、進捗管理に使える状態(アトミック CAS 対応のキーバリューストア)を共有します
  • コミット、テスト結果、ファイル編集などのアクティビティイベントを共有フィードに記録します
  • 進捗がないまま稼働している(ハートビートは正常)スタック状態のエージェントを検出します
  • システムレイヤーの file-coord フック(下記参照)を使ってファイル編集を直列化し、共有ファイルで並行作業するエージェント同士が互いの変更を上書きできないようにします
  • アクティビティフィードタブを含む、すべての状況をリアルタイムで表示するウェブダッシュボードを提供します

MCP(stdio トランスポート)に対応しているエージェント、または HTTP リクエストを送信できるエージェント(REST API)であれば利用できます。

MCP ツールだけでなく、フックを使う理由

MCP ツール(comm_state など)は、エージェントが連携するための 基本機能 を提供しますが、連携を 強制 するものではありません。エージェント自身が、ツールを呼び出すことを忘れないようにする必要があります。ベンチでは、モデルの裁量に任せた場合の挙動を測定しました。その結果、厳密な手順を促すプロンプトを使っても、Claude は最初のロック取得時にはプロトコルに従うものの、その後は「役に立とうとしてタスクを終わらせる」行動に戻ってしまいます。 ソフトな連携は信頼できません。

解決策は、scripts/hooks/ に付属する 2 つの PreToolUse フックです。file-coord はすべての Edit/Write/MultiEdit をインターセプトし、REST の POST /api/state/file-locks/<path>/cas でファイルをロックします(別のエージェントがロックを保持している場合は編集をブロックします)。bash-guard は git commit、git push、npm install、npm test、ビルド、マイグレーション、開発サーバーの起動をインターセプトし、別のセッションの WIP と競合する場合にブロックまたは警告します。これにより、プロトコルはエージェントが無視するかもしれないプロンプトではなく、インフラになります。

ベンチの主要なパイロットは multi-term-commit です。同じプロジェクトで 2 つのターミナルセッションを使う際に日常的に生じる問題を直接再現しています。セッション A が 2 つのファイルを編集しますが、コミットはしません。続いてセッション B が別の 2 つのファイルを編集し、git commit -am "my work" を実行します。フックがなければ、B のコミットに A の WIP が気づかれないまま含まれてしまいます。フックがあれば、B のコミットは bash レイヤーで、次に取るべき行動を示すメッセージとともにブロックされ、B は選択的なステージング、変更の復元、または連携を行います。ベンチの結果は次のとおりです。

単純な方法(フックなし)フックあり
コミットの純度混在 — bar.js、baz.js、foo.js、qux.js純粋 — baz.js、qux.js
実時間91.0 秒78.8 秒(-13%)
合計コスト$0.774$0.591(-24%)
結果A の WIP が B の名前で気づかれないままコミットされたクリーンなコミット。上書きなし

このフックは、より安全なだけでなく、高速で、しかも低コストです。 理由は、共有ワークスペースでエージェント同士が連携できないと、古い状態を読み取ってタスクの途中で混乱し、リトライや再考が発生するためです。アクセスを直列化し、競合を早期に明らかにすることで、こうした無駄な思考をなくせます。npm run setup を実行すると、両方のフックが自動的にインストールされます。Claude Code、OpenCode、その他のカスタム MCP クライアントへの手動インストールについては、セットアップ → ファイル連携を参照してください。測定方法については、bench/README.mdを参照してください。

agent-comm の仕組み

agent-comm は、3 種類のトランスポート(AI ホスト向けの MCP stdio、フック、ダッシュボード、カスタムスクリプト向けの REST + WebSocket)を公開する単一の Node プロセスであり、WAL モードの SQLite データベースをバックエンドに使用します。Claude Code(またはその他のホスト)の設定にインストールされたフックは、localhost:3421 の REST エンドポイントを呼び出して、ファイルロックを取得し、誰が何を編集したかを照会し、プレゼンスをブロードキャストします。同じポートのダッシュボード UI では、すべてのエージェント、メッセージ、チャンネル、共有状態のエントリをリアルタイムで確認できます。複数の AI ホストが同時に接続し、同じ状況を共有できます。

graph TD
    A["Agent A<br/>(Claude Code)"] -->|MCP stdio| COMM
    B["Agent B<br/>(Codex CLI)"] -->|MCP stdio| COMM
    C["Agent C<br/>(Custom script)"] -->|REST API| COMM
    HK["PreToolUse hooks<br/>(file-coord, bash-guard)"] -->|REST cas| COMM

    subgraph COMM["agent-comm"]
        D["Agents<br/>Register, discover, heartbeat"]
        E["Messages<br/>Direct, broadcast, channels, threads"]
        F["State<br/>Namespaced KV with CAS"]
        G["Events<br/>Real-time pub/sub"]
        D --> DB["SQLite DB<br/>WAL mode, FTS5 search"]
        E --> DB
        F --> DB
        DB --> WS["WebSocket"]
    end

    WS --> UI["Dashboard UI<br/>http://localhost:3421"]

クイックスタート

npm からインストール
npm install -g agent-comm
またはソースからクローン
git clone https://github.com/keshrath/agent-comm.git
cd agent-comm
npm install
npm run build
オプション 1:MCP サーバー(MCP 対応のあらゆる AI ホスト向け)

agent-comm は stdio MCP サーバーとして動作するため、MCP 対応のあらゆるホストで使用できます。 テスト済みのホストには、Claude Code、Cline、OpenCode、Cursor(状態の読み取り専用)、 Windsurf、Codex CLI、Aider、Continue.dev があります。各ホスト向けの設定例は docs/SETUP.mdにあります。

汎用 MCP 設定:

{
  "mcpServers": {
    "agent-comm": {
      "command": "npx",
      "args": ["agent-comm"]
    }
  }
}

これをホストの MCP 設定ファイルに追加してください(パスはホストによって異なります。 Claude Code の場合は ~/.claude.json、OpenCode の場合は ~/.config/opencode/config.json、Cursor の場合は ~/.cursor/config.json などです。 詳しくは docs/SETUP.md の各ホストのセクションを参照してください)。

接続するホストにかかわらず、最初の MCP 接続時にダッシュボードが http://localhost:3421 で自動的に起動します。

オプション 2:スタンドアロンサーバー(REST/WebSocket クライアント向け)
node dist/server.js --port 3421
オプション 3:自動セットアップ(Claude Code)
npm run setup

MCP サーバーを ~/.claude.json に登録し、フックスクリプト(ライフサイクル+ファイル調整+bash ガード)をインストールして、権限を設定します。その他のホスト:ホストごとの統合手順については docs/SETUP.md を参照してください。ツール呼び出し前フックをサポートするホストであれば、どのホストでも同じ file-coord.mjs スクリプトを変更せずに使用できます。

MCP ツール(7)

ツール説明
comm_register名前、機能、メタデータ、スキル、自動参加チャンネルを指定して登録します
comm_agentsエージェント管理 — アクション:list、discover、whoami、heartbeat、status、unregister
comm_sendメッセージを送信します — ダイレクト(to)、チャンネル、ブロードキャスト、返信(reply_to)、転送(forward)
comm_inbox受信トレイを読み取ります(ダイレクト+チャンネルメッセージ、未読フィルター、importance フィルター、thread_id によるスレッド表示)
comm_poll新しい受信トレイメッセージが届くまで待機します(timeout_ms と importance フィルターをサポート)
comm_channelチャンネル管理 — アクション:create、list、join、leave、archive、update、members、history
comm_state共有キーと値の状態 — アクション:set、get、list、delete、cas

REST API

すべてのエンドポイントは JSON を返します。ループバック限定です。外部からの Host/Origin ヘッダーには 403 を返し、リクエストボディは application/json である必要があり、ワイルドカード CORS は許可されません。詳細は完全な API リファレンスを参照してください。

GET  /health                              Server status + uptime
GET  /api/agents                          List online agents
GET  /api/agents/:id                      Get agent by ID or name
GET  /api/agents/:id/heartbeat             Agent liveness (status + heartbeat age)
GET  /api/channels                        List active channels
GET  /api/channels/:name                  Channel details + members
GET  /api/channels/:name/members          Channel member list
GET  /api/channels/:name/messages         Channel messages (?limit=50)
GET  /api/messages                        List messages (?limit=50&from=&to=&offset=)
GET  /api/messages/:id/thread             Get thread
GET  /api/search?q=keyword                Full-text search (?limit=20&channel=&from=)
GET  /api/state                           List state entries (?namespace=&prefix=)
GET  /api/state/:namespace/:key           Get state entry
GET  /api/feed                              Activity feed events (?agent=&type=&since=&limit=50)
GET  /api/overview                        Full snapshot (agents, channels, messages, state)
GET  /api/export                          Full database export as JSON

POST   /api/messages                      Send a message (body: {from, to?, channel?, content})
POST   /api/state/:namespace/:key         Set state (body: {value, updated_by})
POST   /api/state/:namespace/:key/cas     Atomic compare-and-swap (file-coord hook uses this)
DELETE /api/messages                       Purge all messages
DELETE /api/messages                       Delete messages by filter
DELETE /api/messages/:id                   Delete a message (body: {agent_id})
DELETE /api/state/:namespace/:key          Delete state entry
DELETE /api/agents/offline                 Purge offline agents
POST   /api/cleanup                       Trigger manual cleanup
POST   /api/cleanup/stale                 Clean up stale agents and old messages
POST   /api/cleanup/full                  Full database cleanup

エージェントの可視性とステータス

comm_agents の action: "heartbeat" は任意の status_text パラメーターを受け付けます。これにより、エージェントはオンライン状態を維持するための呼び出しと同時に、表示ステータスを更新できます。

// MCP call — heartbeat + status update in one
comm_agents({ "action": "heartbeat", "status_text": "implementing auth module" })

// Clear status text (pass null)
comm_agents({ "action": "heartbeat", "status_text": null })

// Plain heartbeat — status text unchanged
comm_agents({ "action": "heartbeat" })

ライフサイクルフックをサポートするホスト(Claude Code、OpenCode、フック API が提供される予定の Cursor/Codex)では、scripts/hooks/ に同梱されているライフサイクルフックスクリプトによって、ハートビート、登録、ステータスが自動化されます。Agent ツールによって起動されたサブエージェントも、SubagentStart を通じて同じ登録を引き継ぐため、メインセッションと並んでダッシュボードに表示されます。フックをサポートしないホスト(2025 年時点の Cursor、Windsurf、Aider)でも MCP ツールを使用できます。エージェントはホストの指示ファイルから comm_register と comm_agents heartbeat を呼び出す必要があります。カスタム MCP クライアントやスクリプトは、REST エンドポイントを呼び出すか、comm_heartbeat を直接使用して、進行状況をリアルタイムに表示できます。

REST エンドポイント GET /api/agents/:id/heartbeat は、外部監視用にエージェントの稼働情報(ステータス、ハートビート経過時間(ms/s)、ステータステキスト)を返します。

通信パターン

ダイレクトメッセージ
sequenceDiagram
    participant A as Agent A
    participant S as agent-comm
    participant B as Agent B

    A->>S: comm_send(to B, content review PR 42)
    Note over S: Store in SQLite, emit event
    B->>S: comm_inbox()
    S-->>B: message from A
    B->>S: comm_reply(message_id 1, LGTM merging)
CAS による共有状態(分散ロック)
sequenceDiagram
    participant A as Agent A
    participant S as agent-comm
    participant B as Agent B

    A->>S: comm_state(action cas, key deploy-lock, new agent-a)
    S-->>A: swapped true
    B->>S: comm_state(action cas, key deploy-lock, new agent-b)
    S-->>B: swapped false
    Note over B: Lock held by agent-a, back off

ダッシュボード

メッセージビュー

ウェブダッシュボードは http://localhost:3421 で自動的に起動し、エージェント、メッセージ、チャンネル、共有状態、アクティビティフィードをリアルタイムで表示します。すべてのビューと機能については、ダッシュボードガイドを参照してください。


テスト

npm test              # 288 tests across 16 files
npm run test:watch    # Watch mode
npm run test:e2e      # E2E tests only
npm run test:coverage # Coverage report
npm run check         # Full CI: typecheck + lint + format + test

環境変数

変数デフォルト説明
AGENT_COMM_PORT3421ダッシュボードの HTTP/WebSocket ポート
AGENT_COMM_HOST127.0.0.1ダッシュボードのバインドアドレス(ネットワークに公開するには 0.0.0.0 を指定)
AGENT_COMM_RETENTION_DAYS7古いデータが自動削除されるまでの日数(1~365)

ドキュメント

ライセンス

MIT — LICENSE を参照してください

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。