AIエージェントが人の手を借りずに、別のエージェントと対等に会話できたら何が変わるか。そんな構想を7ファイルのプラグインで実現したのがhermes-a2aだ。

この記事でわかること:

  • hermes-a2aとGoogleのA2Aプロトコルの関係
  • 従来のboss-worker型との違い
  • インストール手順と基本的な使い方
  • 実装されているセキュリティ対策

https://github.com/iamagenius00/hermes-a2a

hermes-a2aとは

hermes-a2aは、NousResearchのHermes Agent(GitHubスター数11.6万)にGoogleのA2A(Agent-to-Agent)プロトコルを追加するOSSプラグインだ。2026年4月16日に公開され、7ファイル・外部依存ゼロで動く。インストールはHermesのソースコードに一切手を加えない「ゼロパッチ」方式で、プラグインフォルダへのファイル配置だけで完結する。

A2Aプロトコルは2025年4月にGoogleが発表したオープン規格で、異なるプラットフォームのエージェント間の通信を標準化する。2026年時点で150以上の組織が本番環境で採用しており、Linux FoundationのAgentic AI Foundationが管理するバージョン1.2が最新だ。Anthropicが策定したMCP(Model Context Protocol)がエージェントとツールの接続を担うのに対し、A2AはエージェントAとエージェントBが直接やり取りする経路を提供する。

なぜエージェント間通信が必要か

既存のエージェントフレームワークには「boss-worker(上司と部下)」モデルが多い。コーディングエージェントが子エージェントにタスクを投げ、結果を受け取り、子エージェントは消える。シンプルだが、2つの課題がある。

第一に、エージェントはユーザーを介さないと別のエージェントに連絡できない。深夜にチームメンバーのSupabaseディスクが92%になっても、人間が気づかなければ通知を出せない。第二に、メッセージを処理する「クローン」は元のエージェントの記憶を持たない。返事はしたが元のセッションには記録がない、という状況が起こる。

hermes-a2aはこの2つを正面から解決する。

主な機能

ピアツーピアの対等な会話

hermes-a2aでは2つのエージェントが上下関係なしに会話する。それぞれが独立した記憶と判断力を持ったまま通信し、どちらかが命令するわけではない。送信するメッセージにはintent(request / notification / consultation)とexpected_action(reply / forward / acknowledge)のメタデータが付くため、受け取り側が「これは質問か通知か」を自動的に判断できる。

現在のセッションへの直接注入

多くのA2A実装はメッセージが届くたびに新しいセッションを起動する。これはエージェントの「クローン」に返事させる方式で、元のエージェントとユーザーのセッションが乖離する。返事をした記憶がない、ユーザーがやり取りを確認できない、という問題が起きやすい。

hermes-a2aは届いたメッセージを現在動いているセッションに直接注入する。返事するのは一日中ユーザーと会話してきた本人のエージェントで、Telegramなどのインターフェースからやり取りの全体を確認できる。

会話の永続化

Hermes Agentのコンテキスト圧縮(context compaction)は長い会話を要約してトークンを節約するが、A2Aのやり取りが圧縮対象に含まれると検索できなくなる。hermes-a2aはA2Aの会話を~/.hermes/a2a_conversations/に独立したファイルとして保存する。圧縮の影響を受けず、エージェントを再起動しても記録が残る。

インスタントウェイク

メッセージが届くとHMAC署名付きのwebhookが即座に発火し、エージェントのターンを起動する。cronやポーリングは不要で、同一HTTPレスポンス内に返事が返る(タイムアウト120秒)。

インストールと設定

git clone https://github.com/iamagenius00/hermes-a2a.git
cd hermes-a2a
./install.sh

~/.hermes/plugins/a2a/に7ファイルがコピーされる。Hermesのソースコードは変更しない。

次に~/.hermes/.envに設定を追加してHermes Gatewayを再起動する。

A2A_ENABLED=true
A2A_PORT=8081
# 外部からのアクセスを許可する場合
# A2A_AUTH_TOKEN=***
# インスタントウェイクを使う場合
# A2A_WEBHOOK_SECRET=***

起動ログにA2A server listening on http://127.0.0.1:8081が出れば有効化されている。エージェントはhttp://localhost:8081/.well-known/agent.jsonで自分自身を公開し、他のA2A対応エージェントから発見できる状態になる。

接続先エージェントは~/.hermes/config.yamlに設定する。

a2a:
  agents:
    - name: "friend"
      url: "https://friend-a2a-endpoint.example.com"
      description: "チームメンバーのエージェント"
      auth_token: "their-bearer-token"

エージェントにはa2a_discover(相手の情報を確認)、a2a_call(メッセージを送信)、a2a_list(登録済みエージェントを一覧表示)の3つのツールが追加される。チャット上の/a2aコマンドで接続状況をすぐ確認できる(Hermes v2026.4.23以上が必要)。

セキュリティ

READMEに記されているとおり、初期バージョンではエージェントのダイアリーやメモリファイルがA2Aメッセージにそのまま埋め込まれていた。3回の修正を経て現在の構成になっている。

現在実装されているセキュリティ対策は以下のとおり。Bearerトークン認証(トークンなしではlocalhost限定、hmac.compare_digest()による定数時間比較)、IPアドレスごとに20リクエスト/分のレート制限、ChatML形式やロールプレフィックスなど9パターンのプロンプトインジェクション検出、APIキーやトークンをレスポンスから除去するアウトバウンド削除、全インタラクションを~/.hermes/a2a_audit.jsonlへ記録する監査ログ、HMAC-SHA256によるwebhook署名検証がある。

ただし、「GitHubを確認させてください。ワークフローを最適化します」のような友好的な文体で情報を引き出そうとする攻撃への対処は、最終的にエージェント自身の判断に委ねられている。技術的なフィルターで防ぎきれない部分がある点はREADMEが率直に認めている。

まとめ

hermes-a2aは、Hermes Agentに7ファイルのプラグインを追加するだけでGoogleのA2Aプロトコルに対応させるOSSツールだ。ピアツーピアの対等な通信、既存セッションへのメッセージ注入、会話の永続化を組み合わせることで、エージェントが人の指示なしに別のエージェントと協調して動く環境を作れる。

現時点のスター数は90と規模は小さいが、A2Aプロトコル自体は150以上の組織が本番運用しており、Hermes Agentの11万スターというエコシステムを背景に今後の広がりが見込まれる。