AIエージェントを日常的に使っていると、「昨日教えたこと、もう忘れてるのか…」という場面に頻繁に出くわします。
自分の場合、Claude CodeやChatGPTでプロジェクト固有のルールを毎回説明し直すのが地味にストレスでした。セッションが切れるたびにリセットされる記憶。これは多くのAIエージェントが抱える根本的な問題です。
NousResearch (Hermesモデルファミリーの開発元)が2026年2月にリリースしたHermes Agent は、この「エージェントの健忘症」に正面から取り組んだオープンソースプロジェクトです。本記事では、その永続メモリの設計を中心に、何が新しいのかを整理します。
Hermes Agentとは?
Hermes Agentは、NousResearchが開発したMITライセンスのオープンソースAI エージェントです。「チャットボットラッパー」や「コーディング補助ツール」ではなく、サーバー上で自律的に動作し、使うほど賢くなるエージェント実行環境を目指しています。
主な特徴:
- 永続メモリ: セッションを跨いで学習内容を保持
- 自動スキル生成: 複雑なタスクの解法を自動でスキル化して再利用
- マルチプラットフォーム: Telegram / Discord / Slack / WhatsApp / Signal / Email / CLIに対応
- 200+モデル対応: OpenRouter、Nous Portal、OpenAI、Anthropic等を切り替え可能
- 複数の実行環境: ローカル、Docker 、SSH、Modal、Daytona、Singularity
GitHub Starsは7,700超。単なるプロトタイプではなく、実用を意識した設計になっています。
メモリの3層構造
Hermes Agentのメモリ設計は3つの層で構成されています。ここが一番の特徴です。
第1層: 短期メモリ(セッション内)
アクティブな会話のコンテキストを管理します。LLM
のコンテキストウィンドウに収まる範囲で情報を保持し、長くなりすぎた場合は /compress コマンドで圧縮できます。
これは他のエージェントでも一般的な仕組みですが、Hermes Agentの場合は次の第2層との連携が鍵です。
第2層: 長期メモリ(セッション跨ぎ)
SQLiteのFTS5(Full-Text Search 5)を使ったセッション検索と、LLMによる要約を組み合わせています。
具体的な仕組み:
- 過去のセッション内容をSQLiteに保存
- FTS5で全文検索可能な状態を維持
- 定期的にLLMが内容を要約し、
MEMORY.mdとUSER.mdに書き出す - 新しいセッション開始時に、関連する過去の記憶を自動で引き出す
MEMORY.md にはタスクや技術的な知識が、USER.md にはユーザーの好みや環境情報が蓄積されます。この分離はシンプルですが実用的です。
第3層: スキル化(経験の再利用)
ここが他のメモリフレームワークと一線を画すポイントです。
Hermes Agentは、複雑なタスクを完了した後、その解法を自動的に「スキル」として保存します。スキルは ~/.hermes/skills/ に格納され、類似のタスクに再度直面したときに自動で呼び出されます。
つまり、「記憶」ではなく「能力」として経験が蓄積される。単に「あの時こうやった」と覚えているだけでなく、「同じ種類の問題を解ける手順」として定着するわけです。
Mem0 / memUとの設計比較
以前の記事 でMem0とmemUのメモリ設計を比較しましたが、Hermes Agentはまた違ったアプローチを取っています。
| 観点 | Mem0 | memU | Hermes Agent |
|---|---|---|---|
| メモリ構造 | ハイブリッド(ベクトル+グラフ) | 3層(エピソード/セマンティック/手続き) | 3層(短期/長期/スキル) |
| 検索方式 | ベクトル類似度+グラフ走査 | ハイブリッド検索 | FTS5全文検索+LLM要約 |
| 保存先 | ベクトルDB+グラフDB+SQLite | SQLite+ベクトルDB | SQLite(FTS5)+ファイル |
| スキル化 | なし | 手続き記憶として概念化 | 自動生成+再利用 |
| 利用形態 | ライブラリとして組み込み | ライブラリとして組み込み | 完全なエージェント実行環境 |
| ライセンス | Apache 2.0 | MIT | MIT |
大きな違いは、Mem0とmemUが「メモリライブラリ」であるのに対し、Hermes Agentは「メモリ機能を内蔵したエージェント実行環境」であることです。
Mem0は既存のアプリケーションに記憶機能を追加する用途に適しています。一方、Hermes Agentは「エージェントそのもの」を提供します。目的が違うので、単純な優劣はつけられません。
個人的に面白いと思ったのは、Hermes AgentがベクトルDBを使わずにFTS5で全文検索している点です。ベクトル検索は意味的な類似度には強いですが、具体的なコマンド名やエラーメッセージの検索にはFTS5のほうが正確です。エージェントの記憶として使う場合、「あのエラーメッセージの解決策」を引っ張り出すケースが多いので、この選択は理にかなっています。
agentskills.ioスタンダード
Hermes Agentのスキルシステムは agentskills.io というオープンスタンダードに準拠しています。
これは、Anthropicが策定しエージェント間でスキルを共有するためのオープン仕様で、Claude Code、OpenAI Codex、Gemini CLI、GitHub Copilot、Cursorなど26以上のプラットフォームに採用されています。Hermes Agentが自動生成したスキルを他のエージェントでも使えるようにしたり、コミュニティが作ったスキルをHermes Agentに取り込んだりできます。
70以上のバンドル・オプショナルスキル(MLOps、GitHubワークフロー、リサーチ等、15以上のカテゴリ)が用意されており、CLIから確認できます:
| |
スキルの閲覧と管理はこのコマンドで行います。/skills を実行すると、バンドルスキルと自動生成されたスキルの一覧が表示されます。
セットアップ
インストールは思ったより簡単です。前提条件はGitだけで、Python 3.11とuvは自動でインストールされます。
対応OS: Linux、macOS、WSL2(Windowsネイティブは非対応)
インストールコマンド:
| |
このスクリプトがPython 3.11、uv(パッケージマネージャ)、および依存パッケージを自動でセットアップします。
初期設定は対話式で進めます:
| |
APIキーの設定(OpenRouter / Nous Portal / OpenAI等)とデフォルトモデルの選択を行います。
モデルの切り替えはセッション中でもできます:
| |
コード変更なしでモデルを切り替えられるのは、複数のモデルを試したいときに便利です。
ゲートウェイ: マルチプラットフォーム対応
Hermes Agentの面白い設計の一つが「ゲートウェイ」です。Telegram、Discord、Slack等の各プラットフォームへのメッセージ配信を、1つのプロセスで統合管理します。
| |
gateway setup でTelegramのBotToken やDiscordのAPIキーを登録し、gateway start で一括起動します。ユーザーはどのプラットフォームからメッセージを送っても、同じエージェント(同じ記憶)とやり取りできます。
個人的には、Telegramから質問して、後でSlackから続きを聞ける、というのが実用的だと感じました。チャットプラットフォームに依存しない記憶の一貫性は、地味ですが重要です。
セキュリティと実行環境
自律的に動くエージェントである以上、セキュリティは重要です。Hermes Agentは以下の仕組みを提供しています:
- コマンド承認システム: 危険なコマンドの実行前にユーザーの承認を求める
- DMペアリング: チャットプラットフォーム上でのユーザー認証
- コンテナ分離: Docker / Singularity / Modal での隔離実行
- 読み取り専用ルートファイルシステム: コンテナ環境でのファイルシステム保護
特にDocker実行環境は、ローカル環境を汚さずにエージェントを動かしたい場合に便利です。
まとめ
Hermes Agentの設計で注目すべきポイントは3つです:
- FTS5+LLM要約の組み合わせ: ベクトルDBに依存せず、SQLiteだけで実用的な長期記憶を実現
- 経験のスキル化: 「覚えている」から「できるようになる」への進化
- プラットフォーム非依存の記憶: ゲートウェイ経由でどのチャットからでも同じ記憶にアクセス
「エージェントの記憶」は、今のAI開発で最もアクティブに研究されている領域の一つです。Mem0がベクトル+グラフDBハイブリッドのライブラリアプローチ、memUが3層アーキテクチャのフレームワークアプローチ、そしてHermes Agentが完全なエージェント実行環境アプローチ。それぞれ異なるレイヤーで問題を解こうとしています。
自分みたいに「エージェントに毎回同じことを説明するのが面倒」という人は、まずHermes Agentを試してみると、エージェントメモリの可能性が実感できると思います。
