🚀 はじめに
Hermes Agentを触り始めた皆さん、こんな経験ありませんか?
- 昨日教えたことを今日には忘れてる…
- サブエージェントにタスクを投げたのに、何もわかってない…
- 設定ファイルが多すぎて、どこに何を書けばいいのか混乱…
実はこれ、すべて3つの考え方を理解すれば解決します。この記事では、筆者が実際に踏み抜いた地雷と、そこから得た「ゼロから使える実践知識」をまとめました。
🔗 対象読者
- Hermes Agentをインストールしたばかりの方
- 「記憶させる」方法がイマイチわからない方
- マルチエージェントの使い方で詰まっている方
- とにかく最短で使いこなしたい方
🧠 第1章:記憶システム — エージェントは「自分で判断して」覚える
❌ 最大の誤解
「え、言ったこと全部覚えてるんじゃないの?」
→ 違います。 Hermesはエージェント策定型記憶を採用しています。つまり、エージェント自身が「これは重要だ」と判断したことだけを長期記憶に書き込みます。
これはバグではなく設計思想です:
- トークン節約:全量書き込みは推論コストが跳ね上がる
- ノイズ防止:試行錯誤や中間的な考えは長期保存に値しない
✅ 正しい覚えさせ方
重要なことは明示的に指示しましょう:
私の好みを記憶して:すべてのコードはPython 3.11を使うこと。
現在の進捗を保存して:データクレンジングと特徴量エンジニアリングが完了。次はモデル学習。
📁 記憶ファイルの使い分け(超重要)
| ファイル | 入れるもの | 書く人 |
|---|---|---|
| SOUL.md | 永続的なルール・行動指針 | あなた |
| USER.md | あなたの好み・習慣 | エージェント |
| MEMORY.md | 作業メモ・環境情報 | エージェント |
🔴 鉄則:絶対にSOUL.mdに書くべき固定ルールをMEMORY.mdに入れないこと。MEMORY.mdはエージェントが自動整理・圧縮する可能性があります。
容量管理の目安:
- MEMORY.md:上限2,200文字 → 1,800文字以内が快適
- USER.md:上限1,375文字 → 1,100文字以内が快適
🛠️ 第2章:スキルシステム — 繰り返し作業を「型」に落とし込む
スキルとは?
コードでもプラグインでもありません。「再利用可能な標準作業手順書(SOP)」です。
優れたスキルに必要な4要素:
| 要素 | 内容 |
|---|---|
| トリガー | どんな時にこのスキルを使うべきか |
| 手順 | 具体的に何をどうやるか |
| 検証方法 | 成功したかどうかの判断基準 |
| 注意点 | 過去にハマった罠 |
📝 初心者が覚えるべき4つのスキルコマンド
① 新規作成:
このデータ処理フローを skill として保存して。名前は data-pipeline。
トリガー条件、手順、検証方法、注意点を含めて。
② 記憶から昇華:
デプロイ手順を覚えているよね。それを deploy-workflow という skill にして。
③ ピンポイント修正(全体を書き直さない):
stock-daily-report スキルを更新して。注意点に以下を追加:
「金曜の引け後データは土曜朝まで遅延する可能性あり」
④ 定期監査:
全スキルをレビューして。重複は統合、不明瞭なものは書き直し、古いものは更新。
先にレポートを出して、確認後に実行して。
🔄 スキルと記憶の連動(上級テク)
SKILL.md の中に記憶の確認ステップを埋め込みましょう:
## 手順
1. MEMORY.md にこのAPIに関する特記事項がないか確認
2. あれば優先して従う
3. 実行後、新たに発見した注意点をMEMORY.mdに追記
🤖 第3章:マルチエージェント — 複数エージェントで並列処理
🔢 並列数の黄金律
2つから始めて、最大3つまで。 専門家の明言です。
- 理論上の最大並列数を追うより、コストと品質管理が重要
- API制限・IPブロック防止の観点からも2〜3が安全圏
💀 初心者が最も踏む地雷
サブエージェントは、メインエージェントの会話内容を一切知りません。
サブエージェントは真っ新な会話コンテキストから起動します。
❌ ダメな例:
「さっきのTypeError、直しといて」
✅ 正しい例:
delegate_task(
goal="api/handlers.py の TypeError を修正",
context="""
ファイルパス: /home/user/myproject/api/handlers.py
エラー: 47行目 TypeError: 'NoneType' object has no attribute 'get'
原因: parse_body() が Content-Type ヘッダー不在時に None を返す
プロジェクト: Python 3.11 + Flask
"""
)
🎯 役割分担が最も効果的
SOUL.md または AGENTS.md に明記:
## マルチエージェント協業ルール
- Planner Agent: タスク分解と進捗管理のみ。実行しない
- Executor Agent: データ取得・処理のみ。意思決定しない
- Reviewer Agent: 品質チェックと検証のみ。修正しない
👤 第4章:プロファイル — 1台で複数のHermesを独立運用
プロファイルは完全に隔離されたHermes環境です。設定・記憶・セッション・スキル、すべて独立しています。
| コマンド | 内容 |
|---|---|
hermes profile create mybot |
完全新規プロファイル |
hermes profile create work --clone |
APIキーとモデル設定のみ引継ぎ(記憶は新規) |
hermes profile create backup --clone-all |
記憶含めて完全複製 |
活用例:
# ターミナル1:コーディングアシスタント
coder chat
# ターミナル2:リサーチアシスタント(記憶もスキルも完全独立)
research chat
🏭 第5章:本番デプロイ チェックリスト
-
hermes doctorでエラーなし -
APIキーは
.envに記述(config.yamlには書かない) -
GATEWAY_HEARTBEAT=true設定済み -
ユーザーホワイトリスト設定済み(
TELEGRAM_ALLOWED_USERS) -
承認モード設定済み(
smart/manual) -
サーバータイムゾーン確認済み(
timedatectlで要確認) - Cronジョブは本番投入前に手動検証済み
📊 トラブルシューティング早見表
| 問題 | 原因 | 解決策 |
|---|---|---|
| エージェントが覚えない | セッションが短すぎる / 重要と判断されず | 「長期記憶に保存して」と明示 |
| サブエージェントが背景を知らない | contextが未設定 | contextにファイルパス・エラー内容・依存関係を全部書く |
| Cronが動かない | タイムゾーン不一致 / Gateway未起動 |
timedatectl 確認 → Gateway確認 → 手動実行 |
| APIコスト爆増 | 並列数が多すぎる | 2〜3に制限、サブタスクは安価なモデルで |
| Tirithが邪魔 | 承認モードが厳しすぎる |
smart モードに変更 |
🔧 デバッグコマンド集
hermes doctor # 総合診断 — まずこれを実行
hermes memory status # 記憶システムの状態確認
hermes mcp status # MCP接続の状態確認
hermes cron list # 全Cronジョブ一覧
hermes cron run [ジョブ名] # Cronジョブの手動テスト実行
hermes debug share # 匿名化デバッグレポート生成
✅ まとめ
Hermes Agentは魔法ではありません。本質はたった3つです:
- 記憶:「忘れた」を解決する → でも大事なことは自分から明示する
- スキル:「これどうやるんだっけ」を解決する → 繰り返しパターンをSOP化
- サブエージェント:「1人じゃ無理」を解決する → ただし完全なコンテキストが必須
初心者の8割は「記憶は自動だと思い込む」と「サブエージェントに背景を伝えない」でつまずきます。この2つを押さえれば、8割の痛みは消えます。
まずは 「長期記憶に保存して」 と 「context に全部書く」、この2つから始めてみてください。