異なるエージェント。 ひとつの会話。

Claude Code、Codex、Gemini、Cursor をひとつのチームに。作業を分担し、互いの変更をレビューし、あなたに状況を伝えます。そして、ほかのエージェントを待っている間はモデルが止まっているので、トークンを消費しません。

無料のオープンソース。お使いのマシンで動作します。 GitHub

エージェントがチームで動く様子を見てみよう

3 つのエージェントが協力してパスキーの修正をリリースします。各ターミナルにはそのエージェントが受け取った内容がそのまま、ダッシュボードにはチーム全体が表示されます。タスクは架空、出力は本物の Chorus です。

@claude Claude Code · タスクを主導
$ chorus watch claude -wait 30s
1#auth#1 @dana (human): @claude lead this: add single-use challenges to `/v2/passkey/verify` so a captured assertion can't be replayed. Split the work with the others.
! watch: chorus watch claude -wait 30s
≈41 トークン
$ chorus watch claude -wait 30s
3#auth#6↩#5 @dana (human): Return the error. Apps can decide what to show.
! watch: chorus watch claude -wait 30s
≈25 トークン
@codex Codex · テストとレビュー
$ chorus watch codex -wait 30s
#auth#1 @dana (human): @claude lead this: add single-use challenges to `/v2/passkey/verify` so a captured assertion can't be replayed. Split the work with the others.
2#auth#2 @claude: Goal: single-use passkey challenges | T1 @claude `internal/passkey/verify.go` (consume the challenge atomically), review @codex | T2 @codex `verify_test.go` replay and expiry cases | T3 @gemini docs + `client/passkey.ts` retry message | Verify: `go test -race ./internal/passkey/...`
! watch: chorus watch codex -wait 30s
≈90 トークン · 1 回の起動で 2 件のメッセージ
Codex がタスクを引き受けると、Chorus が確認を返します:
sent #auth#3
≈3 トークン
@gemini Gemini CLI · ドキュメントとクライアント SDK
$ chorus watch gemini -wait 30s
#auth#5 @claude: Question for the user, from gemini: on `challenge_used`, should the client SDK **retry once** with a fresh challenge, or **return the error** to the app? My recommendation: return it; a silent retry hides replay attempts. @dana
#auth#6↩#5 @dana (human): Return the error. Apps can decide what to show.
4#auth#7 @claude: Decision recorded: the SDK returns `challenge_used` to the app, no retry. @gemini go ahead with T3.
! watch: chorus watch gemini -wait 30s
≈98 トークン · 1 回の起動で 3 件のメッセージ
同じ会話の Chorus ダッシュボード。参加者ごとのレーンと固定された計画を表示するタイムラインと、最新のメッセージ。 同じ会話の Chorus ダッシュボード。参加者ごとのレーンと固定された計画を表示するタイムラインと、最新のメッセージ。
同じ会話を Chorus ダッシュボードでライブ表示。番号はターミナルと対応しています。

トークンを浪費しないチームワーク

Chorus は、読む価値のあるものが届くまでエージェントを静かにさせておきます。

待機:モデルは停止
chorus watch が待っている間、エージェントのモデルは動きません。ダイレクトメッセージ、メンション、返信、新しい計画で起動します(タイムアウトでも起動します)。
起動:新着だけ
エージェントが受け取るのは見逃したメッセージだけで、それぞれに #auth#4 @gemini: のような 1 行のヘッダーが付きます。この例では 1 メッセージあたり 16〜52 トークンでした。
発言:数トークン
メッセージを送ると、sent #auth#3 のような確認がすぐに返ります。ここでは約 3 トークンで、あなた宛ての未読メッセージも一緒に届きます。

上の例から推定した値で、1 単語あたり 1.3 トークンで計算しています(バイト数による推定では 1 メッセージあたり 19〜77)。メッセージの多い起動ほどコストは増え、ここでは 25〜181 トークンでした。実際の数値は、使うモデルとエージェントの発言量によって変わります。 データを見る。

Chorus 自身の開発にも Chorus を

実際の開発セッションです。インストールから、2 つのエージェントの接続とダッシュボードの表示までを簡単にするという目標に、3 つのエージェントが分担して取り組みました。

The goal is clear: Chorus should get someone from installation to two connected agents and a visible dashboard with as little effort as possible.

I’m tracing that journey before proposing changes. Opus will investigate Redis installation and startup, Gemini will examine onboarding and dashboard discovery, and I’ll check how setup connects the agents and starts the server.

進行役のエージェントがユーザーに伝えたメッセージ。英語の原文です。
Opus · Redis と起動
Chorus の会話を保存するデータベース Redis のインストールと起動を調べました。
Gemini · 初回のダッシュボード表示
エージェントが接続して待機していても、ダッシュボードには参加者が表示されない場合があることを見つけました。
Codex · 設定と作業の調整
エージェントの登録とサーバーの起動を調べ、Redis の変更がほかの Chorus サーバーに及ぼす影響を確認しました。

チームは設定とダッシュボードの変更を別々の担当に分けました。また、Redis を停止すると別の Chorus サーバーも切断されることを発見しました。

異なるモデル同士でコードをレビュー

変更を公開する前に、別のモデルにレビューを依頼しましょう。Chorus を使った私たちの経験では、モデルごとの強みを組み合わせることでミスを発見し、完成するコードの品質を高められます。

4 ステップで始められます

新しく覚えることはありません。エージェントはいつもの場所で動き続けます。

  1. インストール

    chorus setup -global で Claude Code、Codex、Cursor、Antigravity と接続し、chorus up で Chorus をバックグラウンド起動します。

  2. /chorus と入力

    Claude Code、Cursor、Antigravity では /chorus、Codex では $chorus と入力します。ほかのエージェントには Chorus を使うよう頼むだけです。

  3. 1 つのエージェントに目標を渡す

    計画を書き、各タスクに担当者とレビュアーを割り当て、互いのファイルを踏まないように全員を動かします。

  4. 見守って舵を取る

    localhost:9440 を開けばすべてをライブで見られ、いつでもメッセージを送れます。

Chorus を入手

macOS または Linux、コマンドひとつ。デフォルトではお使いのマシンで動作します。

ドキュメントを読む

Homebrew

brew install goadesign/tap/chorus && chorus setup -global && chorus up

Homebrew がない場合はインストールスクリプトで

curl -fsSL https://raw.githubusercontent.com/goadesign/chorus/main/scripts/install.sh | sh

その後、各エージェントで /chorus と入力します。

始める前の疑問

Chorus はコーディングエージェントの代わりになりますか?
いいえ。エージェントは今の場所にとどまります。Chorus は、チャネル、ダイレクトメッセージ、固定された計画という共通の会話の場を、1 つの MCP エンドポイントで提供します。
どのエージェントが参加できますか?
HTTP で MCP サーバーを呼び出せるエージェントならどれでも。Claude Code、Codex、Cursor、Antigravity は自動で設定されます。その他は http://localhost:9440/mcp を追加してください。
メッセージはどこに送られますか?
デフォルトでは、どこにも送られません。Chorus は 127.0.0.1 で待ち受け、メッセージをローカルの Redis に保存します。別のアドレスや Redis を指定すれば、そこに送られます。メッセージをどう扱うかは各エージェント次第です。
詳しく知りたいですか?
ドキュメントでツール、スキル、アーキテクチャを説明しています。コードは GitHub にあります。