Hermes Agent は Nous Research によるオープンソースの AI エージェントであり、起動されたエントリーポイントによって役割が固定される、長時間稼働する単一の Python プロセスとして構築されている。配布物は三つのコンソールスクリプトを公開している。CLI とゲートウェイコントローラー用の hermes、バッチ実行用の hermes-agent、そして Agent Client Protocol アダプター用の hermes-acp である。最後のものは、Hermes 自身のゲートウェイが他のエージェントをホストできるのと同様に、外部の IDE が Hermes をホストできるようにする。その結果、多数のサーフェスが一つのランタイムと一つの永続化レイヤーの前に並ぶ構成になっている。
Dive into Claude Code:現在および将来の AI エージェントシステムの設計空間 は、これを OpenClaw と並んで Claude Code との独立した比較対象として用いており、両者の中間に位置するものと特徴づけている。信頼のトポロジーでは OpenClaw に近く、プロセスのトポロジーでは Claude Code に近い。OpenClaw がブローカーを中心に置くのに対し、Hermes は「ブローカーをどこに置くか」という問いに「ブローカーを置かない」ことで答えている、と著者らは指摘している。
機能
エージェントループは AIAgent.run_conversation 内の同期的な while ループであり、デフォルトで 90 回の反復回数と、それとは別の反復予算によって制限される。その予算を使い切ると、ツールを取り除いた要約呼び出しを一度だけ行い、エージェントが思考の途中で終了するのではなく締めくくりのメッセージを返せるようにする。tools/ 以下のツールファイルはインポート時に自己登録されるため、ツールの追加にはレジストリ呼び出しが一つあればよい。また、一つのアシスタントメッセージが複数のツール呼び出しを返した場合は並列に実行され、逐次実行へのフォールバックも備えている。
ツールの認可は一つのファイルに集約されており、manual、smart、off の三つのモードを公開している。その下には無条件のハードラインパターンによる最低限の防御があり、rm -rf /、mkfs、ブロックデバイスへの生の dd、フォーク爆弾、システムのシャットダウンといった破壊的なコマンドをモードに関係なくブロックする。smart モードは補助 LLM によるリスク評価を実行し、ソース内のコメントはその設計の着想元として OpenAI Codex の smart approvals を挙げている。Hermes は多数のサーフェスにまたがるため、同じ承認フローが四通りに描画される。CLI のプロンプト、Telegram・Discord・QQBot 上のゲートウェイ承認キーボード、IDE クライアント向けの ACP パーミッションのラウンドトリップ、そして無人実行のための cron 専用モードである。
五つの拡張サーフェスが説明されている。そのうち三つは Claude Code のものと同じレベルにあり、ライフサイクルフックを持つ汎用プラグイン、同梱のスキル、config.yaml で設定する MCP サーバーである。残りの二つは別の軸を拡張するもので、メモリとモデルプロバイダーのバックエンド全体を、周辺のイベントをインターセプトするのではなくその場で差し替えられるようにする。フックはプロセス内の Python コールバックでも、設定駆動の外部シェルコマンドでもよく、一つのフックマネージャーを通じてディスパッチされる。Hermes が stdio の MCP サーバーを起動する際には、起動前に子プロセスの環境変数を少数のシステム変数の許可リストに制限し、パッケージ名を OSV のマルウェアデータベースと照合する。
コンテキスト管理は、トークン予算による末尾保護を備えた一つの補助 LLM 要約器で行われ、その前にツール出力の刈り込み処理が走る。要約には「参照のみ」を示す前置きが付けられ、コンパクションは新しい指示ではなく背景的なコンテキストであり、永続メモリファイルが引き続き正となることをエージェントに伝える。注入の前に、AGENTS.md、.cursorrules、SOUL.md などのコンテキストファイルはインジェクションパターンや不可視の Unicode 文字についてスキャンされ、検出された場合はファイルの内容がブロックを示すマーカーに置き換えられる。
委任は delegate_task ツールを通じて行われ、スレッドプール内で子エージェントのインスタンスを起動する。親は子が要約を返すまでブロックする。並行数はデフォルトで子三つ、深さは一段に制限されており、末端の子はオプトインしない限り自身で委任することはできない。また子は常に永続メモリを無効にして実行されるため、親のノートを読むことも書くこともできない。これとは別に、カンバンのサブシステムが SQLite ベースの作業キューを提供しており、複数のワーカープロファイルがタスクを取得(claim)し、ハートビートを送り、完了させる。古くなった取得の回収機能や、二回連続で試行に失敗した場合の自動ブロックも備えている。
エージェント型ソフトウェア:AI エージェントはソフトウェアのパラダイムをいかに再構築しているか は同じフレームワークを別の視点から読み解いており、 知覚・記憶・行動型のエージェントアーキテクチャの具体的な実現例として、また本番システムにおける自己進化の原則について 同論文が見出した最も完全な実現例として扱っている。同論文が特に取り上げているのは閉じた学習ループである。複雑な タスクを完了した後、エージェントは再利用可能な独自の Skills を自律的に作成する。これは成功した戦略を捉えた パラメータ化された手続き的モジュールであり、上記の五つの拡張サーフェスの一つである同梱のスキルとは別物である。 そしてそれらのスキルは使用中に自己改善し、呼び出された際に不十分だと判明すれば、エージェントが自動的にそのスキルに パッチを当てる。同論文は、この作成・使用・弱点検出・自己パッチのサイクルが人間の介入なしに動作すると説明し、 これをエージェント型システムを従来のソフトウェアから区別する動的な性質とみなしている。また、LLM による要約を伴う FTS5 ベースの会話検索で実現されたセッション横断のエピソード記憶と、サブエージェントへの委任を、広く展開された システムにおけるマルチエージェント協調の初期の実例として挙げている。
採用とエコシステム
セッションの状態とマルチエージェントのボードは、型付きのワイヤープロトコルではなくディスク上の SQLite ファイルに永続化される。WAL モードのデータベースを用い、全セッションメッセージにわたる全文検索と、コンパクションによって引き起こされた分割を記録する親セッションのチェーンを備えている。分析した著者らは、これにより追加の作業なしにセッション横断の検索と並行読み取りのサポートが得られると指摘している。会話の途中でゲートウェイが再起動した場合、セッションは次のメッセージが到着した時点で、デフォルト 1 時間のウィンドウを持つトランスクリプトの鮮度判定ロジックに基づいて自動的に再開される。組み込みの cron スケジューラーと Webhook サブスクリプションの仕組みにより、エージェントはスケジュール式や外部の HTTP イベントに基づいて無人で実行でき、cron セッションは永続メモリを無効にして実行される。配布物にはバックグラウンドのキュレーターループも同梱されており、エージェントが作成したスキルをレビューし、古くなったものを決して削除することなくアーカイブする。その対象範囲は限定されており、同梱のスキルとハブからインストールされたスキルには手を出さない。
メッセージングのサーフェスは二層のアダプターシステムによって駆動され、ツリー内のアダプターに加えて、Google Chat、IRC、Teams をカバーするプラグイン層がある。分析論文の著者らは、プロジェクト自身のドキュメントが実装から乖離している箇所を二つ指摘している(承認モードの分類と、委任の深さのデフォルト値)。そして、ドキュメントではなくソースを引用していると述べている。