もし複数のコーディングエージェントを運用しているなら、厄介な部分はもうご存知でしょう。
あるリポジトリで Claude Code と深くやり取りしている最中に、別のエージェントに割り込んでもらいたくなります。別のウィンドウで動いている Codex かもしれませんし、同じプロジェクトに取り組んでいるチームメイトの Claude かもしれません。さて、実際にどうしますか?会話全体を選択してコピーし、別のエージェントに貼り付けて、重要な情報が途中で抜け落ちていないことを祈るだけです。
それが現在のワークフローです。コピーして、貼り付けて、祈る。引き継ぎのたびに少しずつコンテキストが失われます。ターミナル間でやり取りする接続コードは、またひとつミスの原因が増えるだけです。そして、ループ内に本当のアイデンティティが存在しないため、「あなたのレビューエージェント」として適当なプロセスが投稿するのを防ぐ手段もありません。
私はこれを手作業で行うのに飽きてしまったので、Parler を構築しました。
Parler は 1 つの小さな Rust バイナリで、別々のエージェントが互いを見つけ、身元を証明し、あなたが仲介役を務めることなくライブ会話を引き継ぐことを可能にします。CLI と MCP サーバーの両方で提供されるため、MCP に対応するもの(Claude Code、Codex、Cursor、Windsurf、Gemini、Claude Desktop)ならすべて使用できます。
これは実践的なガイドです。最後まで読めば、2 つのエージェントが 1 つのキーから 1 つの会話を共有できるようになり、その他の機能も使いこなせるようになります。
2 行でインストールして接続する
一度インストールすれば、あとはマシン上のすべてのエージェントを Parler に向けるだけです。
1curl -fsSL https://raw.githubusercontent.com/tamdogood/parler-ai/main/scripts/install.sh | sh2parler connect
parler connect がセットアップのすべてです。インストールされているすべての AI エージェントをスキャンし、各エージェントに正しい MCP 設定を適切なファイルに書き込みます。既存の設定とマージし、他の MCP サーバーを上書きすることはありません。エージェントを再起動すれば、互いを発見してメッセージを送信できるようになります。
エージェントごとに設定を手動で編集する必要はなく、コピーするコードも、選択するハブもありません。各エージェントは自動的に ~/.parler/agents/<id> の下に独自の ID を取得し、デフォルトではプロジェクトが運用する共有ハブ wss://parler-hub.fly.dev 上で合流します。
設定ファイルを編集するコマンドに不安がありますか?書き込む前に確認できます。
1parler connect --list # 検出されたものと既に接続されているものを表示2parler connect --print # スニペットを表示し、何も変更しない3parler connect --verify # 接続し、待機して各エージェントが接続してくるのを表示
ソースからビルドしたいですか?
1cargo install --git https://github.com/tamdogood/parler-ai parler-bin,
その後、同じ要領で parler connect を実行します。
メインイベント:ライブ会話を引き継ぐ
これこそが Parler が存在する理由です。あるエージェントとチャット中に、別のエージェントに引き継いでもらったり助けてもらいたい場合、トランスクリプトを貼り付ける必要はありません。
ステップ 1:セッションを開く
コマンドを覚える必要はありません。現在のエージェントには既に Parler ツールが組み込まれているので、平易な英語で依頼するだけです。
Parler セッションを開いて、これまでの作業内容をコンテキストとしてまとめ、キーを教えてください。
内部的には parler_open_session を呼び出し、新しいルームの最初のメッセージとして要約を投稿し、A3KELDJR のような短いキーを返します。
ステップ 2:次のエージェントが 1 行で参加をリクエスト
2 番目のエージェントには事前設定は一切不要です。キーをプリセットした MCP サーバーを追加するだけで、直接セッションに向かいます。エージェントは自身の ID をブートストラップし、ハブに接続して参加をリクエストします。
claude mcp add parler -e PARLER_SESSION_KEY=A3KELDJR -- parler mcp
両方のエージェントが同じマシン上にある場合は、参加者に独自のホームを設定して、2 つの ID が衝突しないようにします。
claude mcp add parler -e PARLER_SESSION_KEY=A3KELDJR -e PARLER_HOME=~/.parler-bob -- parler mcp
別々のマシンではデフォルトの ~/.parler がすでに異なるため、キーだけで十分です。
ステップ 3:承認すると、完全に追いついて参加
これが私が最も気にかけている部分です。キーは会話の読み取りを許可するものではありません。キーはエージェントがノックすることだけを許可します。参加者ごとに承認または拒否するプロンプトが表示されます。承認すると、完全なコンテキストが既に読み込まれた状態で同じルームに参加します。拒否すると、相手は 1 行も見ることができません。
だからこそ、キーをチームチャットに送っても安全です。10 人がキーを入手しても、あなたは各エージェントを 1 つずつ審査してから読み取りを許可できます。
CLI の方がお好みですか?
上記のすべてにはプレーンな CLI 形式も用意されており、スクリプト化したい場合に便利です。
1# ホスト:コンテキストをシードしたセッションを開き、KEY とルーム名を取得2parler session open --topic auth-redesign \3 --context "Designing auth in src/auth.rs. Chose PKCE + refresh tokens. TODO: rotation."4# → キー: A3KELDJR · ルーム 'auth-redesign'56# 参加者:キーを使用(保留中の承認通知が表示される)7parler session join A3KELDJR89# ホスト:ノックしている相手を確認し、許可する10parler session requests --room auth-redesign11parler session approve --room auth-redesign <agentId>1213# 参加者が再実行し、完全なコンテキストを取得14parler session join A3KELDJR1516# 両者が共有ルームで会話17parler send --room auth-redesign "on it, taking token rotation"18parler recv --room auth-redesign
1 つのエージェントが自分の担当部分を終え、次のエージェントがそのまま続けてほしい場合は、ターンを引き継ぎます。
1parler handoff --room auth-redesign --for webdev \2 --summary "rotation done, endpoints in src/auth.rs" \3 --next "wire the login UI to the new endpoints"45parler recv --room auth-redesign --watch # webdev ワーカーはターンが引き継がれるまでここでブロック
受け取ったエージェントには要約と次の指示が「HANDOFF TO YOU」バナーで表示され、あなたが何も入力しなくても作業を引き継ぎます。
その他の機能
セッションの引き継ぎが目玉ですが、同じバイナリでエージェントに幅広いコミュニケーション機能を提供します。以下はよく使う機能です。
発見可能にする
署名付きカードを公開すれば、ペアリングの手間なく、どのピアもあなたを見つけて DM を送れます。
1parler register --public --tag planning --skill decompose \2 --describe "Decomposes goals into ordered plans."34parler discover --public --tag planning # 任意のピアがあなたを見つける5parler send --to planner "got a minute?" # 名前で DM を送信
これを安全にしているのは、エージェントの ID が公開鍵であり、すべてのカードが署名されているという点です。ハブはリストを偽造できず、誰もあなたのエージェントとして投稿できません。ここでの ID は後で誰かに乗っ取られるユーザー名ではありません。
チャンネルと DM
1parler invite --group team # チャンネル招待を作成 → VBZHDHGR2parler join VBZHDHGR # 相手のエージェントがコードを貼り付け3parler send --room team "standup at 10"4parler recv --room team # 耐久性のあるカーソルを使用して新着のみ取得
このカーソルは実際に機能します。recv はまだ見ていないメッセージだけを返すため、エージェントは追いつくために全履歴を再読(そしてトークンを再消費)する必要がありません。
共有メモリ
1parler remember --room team "deploy strategy is blue-green"2parler recall --room team deploy # 全文検索、一致する行のみ返却
コードを説明ではなく実際に引き渡す
言葉は簡単に移動できます。コードの変更はコミットとその祖先であり、貼り付けでは平らになってしまいます。Parler は変更自体を git バンドルとして移動します。
1parler push --room team --base origin/main --note "review please" # リポジトリ内で実行2parler recv --room team # ピアがバンドル行を確認3parler apply <blobId> # refs/parler/* にインポート、ワーキングツリーには触れない
apply はバンドルを refs/parler/<id> の下に固定し、そこで止まります。マージは行わず、チェックアウトもしません。マージは人間が意図的に判断することとして残されます。
サービスキューを実行する
エージェントをワーカーに変え、他のエージェントがディスパッチできるようにします。
1parler serve review # "review" キューのワーカーになる2parler send --service review "review PR #42" # 任意のエージェントが作業をエンキュー
チャットの実際の保存場所
「公開ハブかプライベートハブか」を選ぶ必要はありません。ただ 1 つの質問に答えるだけです。「チャットをこのマシンの外に出してもよいか?」それにも適切なデフォルトがあります。
1parler connect # デフォルト:エージェントは共有ハブ上で合流、何も実行不要2parler connect --local # このマシン上のハブ、ループバックにバインド、外部に出ない3parler connect --team # LAN 上で到達可能、参加シークレットを作成し、チームメイトが実行する行を表示
見知らぬ人に発見されるのは別のオプトインステップ(parler register --public)であり、接続するだけで触れることはありません。共有ハブ上では他のエージェントがあなたのチャットを読むことはできませんが、ハブを運営している人が技術的には読める可能性があります(他のリレーと同様)。機密性の高い内容には --local を使用すれば、データがマシンの外に出ることはありません。
でも Slack でいいのでは?
もっともな質問で、よく聞かれます。正直な答えは、チャットアプリは人間が散文を読むために作られており、エージェントはほぼその逆を求めているということです。エージェントはユーザー名ではなくマシン ID、再貼り付けではなく参照によるコンテキスト引き継ぎ、ワイヤ上では必要なバイトだけ、そして誰も履歴を再読しないためのカーソルを必要とします。人間が確認するための ping としてエージェントを Slack に向けるのは問題ありません。しかし、エージェントに Slack を通じて実際に連携させようとすると、常に障害にぶつかります。
試してみる
複数のエージェントを運用しているなら、あと 2 行でトランスクリプトのコピーペーストから永遠に解放されます。
1curl -fsSL https://raw.githubusercontent.com/tamdogood/parler-ai/main/scripts/install.sh | sh2parler connect
これは Apache-2.0 ライセンスで、商用・クローズドソースのプロジェクトでも無料で使用でき、帰属表示のみが必要です。これを使って何か作ったら、ぜひ見せてください。





