Hermes Agent 入門 — 初心者のためのハンズオンガイド|2026-09 版
第 2 章

アーキテクチャ全体像 — 部品の地図と ~/.hermes/

CLI・ゲートウェイ・メモリ・スキル・実行環境がどうつながるかを 1 枚の地図にする

この章で分かること

これは何か

この章に「これ 1 つを実行すれば分かる」という単一のコマンドはない。地図なので、代わりに地図を確かめる 4 つの入り口を覚えておくと後で役立つ。

Hermes という 1 つのプロダクトの正体・思想については 第 1 章 に譲る。この章が扱うのは「その中身はどんな部品からできていて、部品同士がどう繋がっているか」という構造だけである。結論を先に言うと、Hermes は 1 つの中核(AIAgent、会話ループの心臓部)に、CLI・ゲートウェイ・cron などの複数の入り口と、ターミナル・ブラウザ・Web・メモリなどの複数の道具箱がぶら下がる形をしている。

いつ使うのか

地図そのものを毎回意識する必要はないが、次の 4 つの場面では役に立つ。

特に迷いやすいのが「どのファイルに何を書けばいいか」の切り分けである。まず次の早見表で見当をつけ、詳細は各章に進む。

したいこと触る場所
エージェントの自己紹介・口調・性格を変えたいSOUL.md
エージェントに恒久的に憶えておいてほしい事実を足したいMEMORY.md / USER.md(第 5 章)
このプロジェクト固有のルールや構成を読ませたいプロジェクト直下の AGENTS.md(または .hermes.md)
使うモデルやターミナルバックエンドを変えたいconfig.yaml(第 3 章)
API キーやゲートウェイのトークンを設定したい.env(第 3 章、第 7 章)
動かない原因をまず切り分けたいlogs/errors.log と logs/gateway.log

全体アーキテクチャ — 1 つの中核と複数の入り口・道具箱

Hermes には CLI・メッセージングゲートウェイ・cron・エディタ連携(ACP)・バッチ実行など複数の「入り口」があるが、そのすべてが最終的に AIAgent(run_agent.py に実装された会話ループの中核)という単一のクラスに集約される。README が挙げる「Platform-agnostic core」という設計原則そのままに、CLI 用にもゲートウェイ用にも別のエンジンは存在しない。

CLI / TUI ゲートウェイ cron・バッチ 対話 メッセージ 定期実行 AIAgentコア プロンプト組み立て・ツール呼び出し制御 プロバイダ選択(18+ 系統) API モデルプロバイダ 18+ 系統の API (Anthropic 等) ツール実行 セッション記録 ツール実行環境 ターミナル・ブラウザ・Web・MCP など セッション保存 SQLite + FTS5 全文検索
図 2-1 CLI・ゲートウェイ・cron のどこから来た入力も同じ AIAgent コアに集約され、ツール群とモデルプロバイダ API へ橋渡しされる。

この図の各ボックスは後続の章で個別に深掘りする。CLI と対話操作は第 4 章、ゲートウェイは第 7 章、cron は第 8 章、モデルプロバイダの設定は第 3 章、ツール実行環境(ターミナルバックエンド)は第 10 章、ブラウザ・Web ツールは第 11 章、セッション保存とメモリの詳細は第 5 章を参照。この章で覚えておくべきなのは「入り口が何であれ、中核は 1 つ」という点だけである。

もう 1 つ、公式のアーキテクチャ図で覚えておくと得なのが「主要サブシステム」の一覧である。ツールシステムだけで 70 種類以上のツールが約 28 のツールセットにまとめられ、プロバイダ解決は 18 系統以上、メッセージングゲートウェイのアダプタは 25 種類以上に及ぶ(いずれも 2026-09 時点、v0.21.0)。数の大きさそのものより、「入口・中核・道具箱」という 3 層構造だけをこの段階では持ち帰ってほしい。

2 つの「住所」— リポジトリ本体と ~/.hermes/

初心者がまず混同しやすいのが、GitHub からクローンした(または install.sh がクローンした)リポジトリ本体と、セットアップ後に生成される ~/.hermes/ の違いである。前者はコード、後者はあなたのエージェントの実行時データであり、性質がまったく異なる。

ディレクトリ役割
agent/会話ループの内部実装(システムプロンプト組み立て・コンテキスト圧縮・プロンプトキャッシュ等)
hermes_cli/hermes コマンド本体(サブコマンド・設定・セットアップウィザード)
tools/ツール実装(1 ファイル 1 ツール。ターミナル・ファイル・Web・ブラウザ・委任など)
gateway/メッセージングプラットフォーム連携の中核(配信・セッション・DM ペアリング)
plugins/モデルプロバイダ・メッセージングプラットフォーム・メモリプロバイダのプラグイン集
skills/ / optional-skills/組み込みスキルと、明示インストールが要る公式オプションスキル
cron/スケジューラの実装(jobs.py, scheduler.py)
acp_adapter/VS Code / Zed / JetBrains 向け ACP サーバー

これは全ディレクトリの網羅ではなく、迷ったときに立ち返るための代表的なものだけを挙げている。全体は GitHub の NousResearch/hermes-agent を直接見るのが早い。ここで重要なのは「リポジトリはコードであり、1 つしかない」ということである。hermes update(内部的には git pull ベース)で更新されるのはこちら側で、あなたが日々使う SOUL.md・メモリ・設定・セッション履歴は一切含まれない。

対して ~/.hermes/ は インストール後に生成される、あなた専用の実行時データ である。しかも hermes profile create でプロファイルを増やすと、SOUL・スキル・メモリ・セッション・クレデンシャルがそれぞれ独立した状態で複数同時に存在しうる(設計原則でいう「Profile isolation」)。1 台のマシンに 1 つしかないリポジトリと、複数ありうる ~/.hermes/ という非対称性を、この章の一番の要点として持ち帰ってほしい。

~/.hermes/ の中身 — どのファイルが何をするか

~/.hermes/ の直下は、大きく 4 つの系統に分けて把握すると見通しがよい。

~/.hermes/ 識別・記憶 SOUL.md memories/ 設定・認証 config.yaml .env auth.json 実行時データ state.db sessions/ logs/ 拡張 skills/ cron/
図 2-2 ~/.hermes/ の直下は「識別・記憶」「設定・認証」「実行時データ」「拡張」の 4 系統に分けて把握すると迷わない。

とりわけ迷いやすい 5 つのファイルについて、公式ドキュメントの一覧表を要約せずに載せる。

ファイル中身誰が書くかいつ読まれるか
SOUL.mdエージェントの一次アイデンティティ(性格・トーン・文体)ユーザー。無ければ Hermes が起動時にファイルを自動生成し、既存ファイルは上書きしないsystem prompt スロット #1、セッション開始時
USER.mdユーザープロフィール(名前・役割・好み・コミュニケーションスタイル)エージェントが memory ツール経由で書く(write_approval でゲート可)セッション開始時に system prompt へ凍結スナップショットとして注入
MEMORY.mdエージェント自身のメモ(環境事実・プロジェクト規約・ツールの癖・学習内容)エージェントが memory ツール経由で書く(USER.md と同じゲート)同上
AGENTS.mdプロジェクトの指示・規約・アーキテクチャユーザー(またはプロジェクト著者)起動時にワーキングディレクトリから system prompt へ読み込み、サブディレクトリのネストされたコピーも段階的に発見
.hermes.md / HERMES.mdAGENTS.md 相当だが Hermes 固有かつ最優先ユーザー起動時に system prompt へ読み込み(AGENTS.md より優先)

プロジェクトコンテキストファイルは 1 セッションにつき 1 種類のみロードされ、優先順位は .hermes.md → AGENTS.md → CLAUDE.md → .cursorrules の「先勝ち」である。SOUL.md だけはこのチェーンと独立に常にロードされる。メモリの文字数上限・注入フォーマット・書き込み承認(write_approval)といった詳細は第 5 章に譲る。

config.yaml と .env の位置づけも、この地図の一部として押さえておきたい。設定の優先順位は「① CLI 引数 → ② config.yaml → ③ .env → ④ ハードコードされたデフォルト」で、ルールは単純に「秘密は .env、それ以外(モデル・ターミナルバックエンド・圧縮設定・メモリ上限・ツールセットなど)は config.yaml」である。auth.json は Nous Portal など OAuth 認証プロバイダの認証情報専用で、これも秘匿情報として .env 側と同じ扱いになる。実際に hermes setup でこれらを組み立てる手順は第 3 章で扱う。

1 ターンの流れ

「入り口」「中核」「道具箱」の 3 層が、実際の 1 往復の会話でどう動くかを時間軸で見ておく。

ユーザー発話 コンテキスト読み込み SOUL・AGENTS・メモリ システムプロンプト組み立て ツール呼び出しループ 結果次第で繰り返す 応答 ユーザーへ返信
図 2-3 システムプロンプトはセッション開始時に一度だけ組み立てられ、ツール呼び出しは応答が確定するまで繰り返されうる。

ここで押さえておくべき設計原則が「Prompt stability」である。system prompt はセッション中は変化しない「凍結スナップショット」として扱われる。ミッドセッションでエージェントが memory ツールでメモを書いても、ディスクには即座に保存される一方、system prompt に反映されるのは次のセッションからになる(プロンプトキャッシュを壊さないための意図的な設計)。ツール呼び出しの中身(どんなツールがあるか、どう選ばれるか)は第 6 章や第 9 章で扱う。

つまずきポイント

リポジトリと ~/.hermes/ を混同する — GitHub からクローンしたコード側に大事な設定を書き足しても、実行時にはまったく反映されない。あなたの設定・メモリ・スキルはすべて ~/.hermes/ 側にある。hermes update はコード側だけを更新する。

プロジェクトのルールを全部 AGENTS.md に書いてしまう — プロジェクトコンテキストファイルは 1 セッションにつき 1 種類しかロードされない。.hermes.md と AGENTS.md を両方置いても、読まれるのは優先順位が高い .hermes.md だけで、もう一方は静かに無視される。

API キーを config.yaml に平文で書いてしまう — config.yaml は非秘匿設定専用で、リポジトリ共有や画面共有の際にそのまま映り込みやすい。秘密は .env に置き、hermes config set OPENROUTER_API_KEY ... のようにキーの種類ごとの自動振り分けに任せる。

ドキュメント間の数値の食い違いをそのまま信じる — たとえば公式アーキテクチャ図の注記は「ターミナル 6 backends」と書かれているが、設定ドキュメント本文は「7 backends」と明記している(Vercel Sandbox を含む数え方の違い)。バージョン依存の数値は 1 箇所だけを見て確定させず、hermes doctor や設定ドキュメント本文で裏を取る癖をつけたい。

理解度チェック

Q1. GitHub からクローンしたリポジトリ本体と ~/.hermes/ の違いは何ですか?

リポジトリ本体は Hermes のコードそのもの(1 台のマシンに通常 1 つ、hermes update で更新)。~/.hermes/ はインストール後に生成される実行時データ(SOUL.md・メモリ・設定・セッション履歴など)で、hermes profile create によりプロファイルごとに独立して複数存在しうる。

Q2. プロジェクト直下に AGENTS.md と .hermes.md の両方があると、どちらが読まれますか?

.hermes.md(または HERMES.md)が優先される。優先順位は .hermes.md → AGENTS.md → CLAUDE.md → .cursorrules で、1 セッションにつき 1 種類のみロードされる。SOUL.md はこのチェーンとは独立に常にロードされる。

Q3. OpenRouter の API キーはどこに書くのが正しいですか?

~/.hermes/.env。config.yaml は非秘匿設定(モデル・ターミナルバックエンドなど)専用で、秘密情報は .env に置く。hermes config set OPENROUTER_API_KEY sk-or-... のようにコマンドで設定すれば、キーの種類に応じて自動的に振り分けられる。

Q4. セッション中にエージェントが memory ツールで新しいメモを書いた場合、そのメモは同じセッションの system prompt にすぐ反映されますか?

されない。system prompt への注入はセッション開始時に一度だけキャプチャされる「凍結スナップショット」であり、ミッドセッションで書いたメモリはディスクには即座に保存されるが、system prompt に反映されるのは次のセッションから。プロンプトキャッシュを壊さないための意図的な設計である。

まとめ

次章では、この地図を実際に自分のマシンへ展開する。install.sh が具体的に何をしているか、hermes setup の 3 つのモード、4 系統のモデルプロバイダの選び方を第 3 章で扱う。

ハンズオン 2-1 ~/.hermes/ を歩いて地図と照合する

  1. すでに Hermes をインストール済みなら、ターミナルで次を実行する。まだインストールしていない場合は、第 3 章でインストールした後にこのハンズオンへ戻ってくるとよい。
  2. ホームディレクトリ直下の .hermes の中身を一覧表示する。
ls -la ~/.hermes/

SOUL.md・config.yaml・.env・memories/・state.db・skills/・cron/・sessions/・logs/ が並んでいれば成功。図 2-2 の「識別・記憶」「設定・認証」「実行時データ」「拡張」のどの系統に属するかを 1 つずつ照合してみると、この章の地図が身体に馴染む。

ハンズオン 2-2 config.yaml の位置づけを hermes config で確かめる

  1. 現在の設定全体を表示する。
  2. 特定のキーの値だけを取得する。
hermes config
hermes config get model

1 つ目のコマンドで ~/.hermes/config.yaml に書かれている設定がまとまって表示され、2 つ目のコマンドで指定したキー(ここではモデル設定)の現在値だけが返る。どちらも読み取り専用で、実行しても状態は変わらない。API キーのような秘匿値は config.yaml ではなく .env 側にあるため、この一覧には出てこない点も併せて確認しておく。設定の変更方法や 4 系統のモデルプロバイダの選び方は第 3 章で扱う。

参考リンク