コードベース所有マップ
Hermes は大きなリポジトリですが、たいていの変更はちょうど一つのサブシステムだけに触れます。このページは、各サブシステムがどのソースディレクトリを持ち、それを変更する前にどのドキュメントを読めばよいかを対応づけたものです。読み始めるべきドキュメント、変更を入れるべき場所、そして対応するテストディレクトリを探すのに使ってください(テストはソースと同じ形に並んでいます。tools/ のコードは tests/tools/ で、プラグインは tests/plugins/<type>/ でテストされます)。
| サブシステム | ソースディレクトリ | ドキュメントの入口 |
|---|---|---|
| エージェントの中核(ループ、トランスポート、圧縮) | agent/, run_agent.py |
エージェントループ, コンテキストの圧縮とキャッシュ |
| プロンプトの組み立て | agent/prompt_builder.py, agent/system_prompt.py |
プロンプトの組み立て |
| モデルプロバイダとトランスポート | agent/transports/, plugins/model-providers/, hermes_cli/models.py |
プロバイダを追加する, モデルプロバイダプラグイン, プロバイダのランタイム |
| 組み込みツール | tools/ |
ツールを追加する, ツールのランタイム |
| メッセージングのゲートウェイ | gateway/, plugins/platforms/ |
ゲートウェイの内部構造, プラットフォームアダプタを追加する |
| CLI | hermes_cli/ |
CLI を拡張する |
| プラグインの仕組み | plugins/ |
Hermes プラグインを作る |
| スキル(同梱・追加) | skills/, optional-skills/ |
スキルを作る |
| cron / 定時実行のジョブ | cron/ |
cron の内部構造 |
| セッションの保存 | hermes_state.py, hermes_state_*.py |
セッションの保存 |
| ブラウザまわり一式 | tools/browser_tool.py, tools/browser_supervisor.py, tools/browser_cdp_tool.py |
ブラウザのスーパーバイザ |
| 送信ファイアウォール | agent/proxy_sources/iron_proxy.py |
送信プロキシの内部構造 |
| ACP(IDE 連携) | acp_adapter/ |
ACP の内部構造 |
| デスクトップアプリ | apps/desktop/ |
デスクトップ用プラグイン SDK, worktree UI の開発 |
| TUI | ui-tui/, tui_gateway/ |
worktree UI の開発 |
| ドキュメントサイト | website/ |
開発に参加する |
| テスト | tests/, tests-js/ |
開発に参加する → 提出の前に |
このマップから自然に導かれる決まりがいくつかあります。
- 変更はそのサブシステムの中で完結させます。 中核のファイルを書き換えないと成り立たないプラグインは、設計が怪しいというサインです。代わりに、汎用のプラグイン用インターフェースのほうを広げてください(リポジトリの
AGENTS.mdにある変更の評価基準を参照)。 - 触ったソースディレクトリに対応するテストディレクトリを、そのつど丸ごと走らせます。
plugins/platforms/telegram/を変更したら、たまたま思いついたテストファイルだけでなくtests/plugins/platforms/全体が緑になっている必要があります。 - 二つのサブシステムにまたがるときは、狭いほうが変更を引き受けます。 エージェントの中核に分岐を足すより、アダプタやプラグインの側で直すほうを選んでください。中核は細くくびれた部分であり、そこへ足したものの代金は API 呼び出しのたびに支払うことになります。