Hermes Agent Hooks 完全解説|自動化トリガーとセキュリティ設計【2026年版】

Hermes Agent Hooks 完全解説|自動化トリガーとセキュリティ設計【2026年版】

Hermes Agent をセキュアに業務運用したい――そう考えるエンジニアが必ず突き当たるのが「Hooks をどう設計するか」という壁です。公式ドキュメントは存在しますが、日本語の解説記事はほぼゼロ。私たちも社内導入時に手探りで設計しました。

この記事では、株式会社FyveがHermes Agent をクライアント環境に組み込んだ実体験をベースに、Hooks の仕組み・主要フックポイント・実装例・セキュリティ視点・アンチパターンまでを整理します。Claude Code Hooks を触ったことがある方なら「Hermes ではどう違うか」という観点でも読めるようにしました。

Hermes Agent Hooks のライフサイクル(session-start から session-end までのフロー)

Hermes Agent Hooks とは何か

Hooks とは、Hermes Agent のライフサイクル上の特定イベントで自動実行されるスクリプト(または外部コマンド)のことです。エージェント本体のコードを変更せずに、入力検証・ログ収集・通知・ブロック判定などを差し込めます。

私たちの理解では、Hooks の役割は大きく3つに分かれます。

  • 監視(Observe): 何が起きたかをログ・監査基盤に記録する
  • 変換(Transform): 入出力を書き換える(マスキング・正規化など)
  • 遮断(Block): ポリシー違反のリクエストやツール呼び出しを止める

この3層を意識すると、Hooks の責任範囲が明確になり、スクリプトの肥大化を防げます。

主要なフックポイント

Hermes Agent では、エージェントの動作タイミングに応じた複数のフックポイントが用意されています。公式ドキュメント(hermes-agent.nousresearch.com/docs/user-guide/features/hooks)に沿って、私たちが実務で使う頻度が高いものを整理します。

session-start / session-end

セッション開始・終了時に呼ばれます。私たちは session-start で「実行コンテキストの初期化」と「禁則ルールの注入」、session-end で「監査ログのフラッシュ」と「一時ファイルのクリーンアップ」を行っています。

user-prompt-submit

ユーザーがプロンプトを送信した直後に呼ばれます。入力検証の主戦場です。社外秘キーワード・個人情報・社内コードネームなどを正規表現で検知し、必要に応じてブロックや警告に回します。

tool-use-pre / tool-use-post

エージェントがツールを呼び出す直前・直後に発火します。私たちが最重要視しているフックです。pre 側で「このツールを今このコンテキストで使ってよいか」を判定し、post 側で「出力に機密が含まれていないか」をチェックします。

実装例:5つの典型パターン

ここからは、私たちが現場で使い回している実装パターンを紹介します。設定は基本的にJSONで宣言し、実体はシェルスクリプトや小さなPythonスクリプトに切り出すのが運用上ラクです。

1. 入力検証(user-prompt-submit)

{
  "hooks": {
    "user-prompt-submit": [
      {
        "name": "validate-input",
        "command": "./hooks/validate_input.sh",
        "on_failure": "block"
      }
    ]
  }
}

シェル側で禁止キーワードを正規表現で検査し、ヒットしたら非ゼロで終了させればブロックされます。

2. ログ取得(session-start / session-end)

#!/usr/bin/env bash
set -euo pipefail

TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
echo "{\"ts\":\"$TS\",\"event\":\"session-start\",\"session\":\"$HERMES_SESSION_ID\"}" \
  >> /var/log/hermes/audit.jsonl

JSON Lines で吐いておくと、後段の SIEM や Loki にそのまま流せます。

3. 機密データブロック(tool-use-post)

ツールの出力に API キー・JWT・メールアドレスが混入していないかを検知し、検出時はマスキングするか、セッションを停止します。

4. Slack 通知(任意のフックポイント)

curl -s -X POST "$SLACK_WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -d "{\"text\":\":robot_face: Hermes session $HERMES_SESSION_ID started\"}"

運用初期は「session-start」「ブロック発火時」だけ通知し、ノイズが多ければ絞ります。

5. 自動コミット(session-end)

エージェントが生成・編集したファイルを session-end フックで git にコミットしておくと、後追いレビューが格段に楽になります。私たちは「Hermes が触ったコミット」だけを別ブランチに切る運用にしています。

Hooks の3層分類(観察 Observe / 変換 Transform / 遮断 Block)

セキュリティ視点:Hooks はスキル肥大化攻撃の防波堤

Hermes Agent のセキュリティ懸念として近年議論されているのが、いわゆる「スキル肥大化(skill bloat)攻撃」です。攻撃者がエージェントに大量のスキルを読み込ませ、本来の意図と異なるツールを呼ばせる攻撃面を指します。

Hooks はこの攻撃に対する一次防衛ラインとして機能します。具体的には、tool-use-pre フックで「現在のセッション目的にそぐわないツール呼び出し」を弾く、user-prompt-submit フックで「スキル読み込みを誘発する不審なプロンプトパターン」を検出する、といった設計です。詳しくは Hermes Curator によるスキル肥大化マネジメント の記事も合わせて読むと、運用ポリシーまで含めた全体像が掴めます。

セキュリティ監査 #7826 との関係

Hermes Agent のセキュリティ監査 #7826 では、Hooks の未設定環境で High 指摘がついた項目がいくつか報告されています。要点は「Hooks が無いと、入力・ツール呼び出し・出力のいずれも野放しになる」というシンプルな話で、裏を返せばHooksを最低限実装するだけで多くの High 指摘は緩和されます。監査内容の全体像は Hermes Agent セキュリティ監査 #7826 の記事に詳しくまとめています。

Claude Code Hooks との比較

Claude Code を触っている方ほど、Hermes Agent Hooks は「似ているが微妙に違う」と感じるはずです。私たちが実装してハマったポイントを整理します。

  • イベント名: Claude Code は PreToolUse / PostToolUse / Stop など。Hermes は tool-use-pre / tool-use-post / session-end と命名規則が異なる
  • 失敗時の挙動: Claude Code は exit code でブロックを表現するが、Hermes は設定側で on_failure を明示する設計
  • 環境変数: Claude Code は CLAUDE_* 系、Hermes は HERMES_* 系。スクリプトの使い回しには変換が必要
  • スコープ: Hermes はセッションレベルのフック(session-start / session-end)が一級市民として整理されている

Hermes Agent の機能網羅的な比較は Hermes Agent の隠れた便利機能15選 にも記載しているので、Hooks 以外も含めて移行を検討する方は参考になるはずです。

Hermes Agent Hooks のアンチパターン4選(インライン秘密埋め込み・無限ループ・CPU過負荷・全フック同一スクリプト)

やってはいけないアンチパターン

運用してみて「これはやらない方がいい」と確信したアンチパターンを共有します。

1. インライン秘密の埋め込み

JSON 設定に API キーやトークンを直書きするのは厳禁です。設定ファイルは Git に乗りやすく、レビュー時に流出します。環境変数か Secrets Manager から読み込む構成に統一しましょう。

2. 無限ループ

tool-use-post フックの中で再びエージェントを呼び出す設計は、容易に無限ループを生みます。フックの中からエージェントを再帰呼び出ししない、をルール化しています。

3. CPU過負荷スクリプト

フックは同期実行される設計のため、重い処理を入れるとセッション全体が固まります。重い解析は非同期キュー(Redis Streams など)に投げ、フック自体は軽く保つのが鉄則です。

4. 全フックに同じスクリプトを刺す

「とりあえず全イベントでログを取る」と始めると、ログが爆発してノイズに埋もれます。session-start / session-end / ブロック発火時の3点に絞るだけで、十分な可観測性が得られます。

導入の進め方(最小構成)

これからHooksを入れる方向けに、私たちが最初に組む最小構成を示します。

  1. session-start / session-end でJSONログを吐く
  2. user-prompt-submit で禁止キーワードの正規表現チェック
  3. tool-use-pre でツール許可リスト判定
  4. ブロック発火時のみ Slack 通知

この4つだけでも、セキュリティ監査の High 指摘の多くはカバーできます。あとは現場の要件に合わせて段階的に増やしていく、で十分です。

まとめ

Hermes Agent Hooks は、エージェント運用の安全性と可観測性を一段引き上げる仕組みです。最初から完璧を目指す必要はなく、最小構成から始めて、セッションログ・入力検証・ツール許可リスト・通知の4点を押さえるだけでも、運用品質は大きく変わります。Claude Code から移行する方は、命名規則と失敗時挙動の差分にだけ注意してください。

株式会社Fyveでは、Hermes Agent を業務にどう組み込むかの設計から、Hooks を含むセキュリティ運用までを支援しています。Hermes Agent をセキュアに業務運用したいエンジニアの方の参考になれば幸いです。

[ FREE DISCOVERY ]

Hermes Agent を本気で活用するなら

「Hermes Agent を自分で使いこなしたい」「自社の業務に組み込みたい」
— そんな方は、まず初回無料相談でお話ししてみませんか。

個人・副業の方お悩み相談・レクチャー・伴走無料相談を予約 →法人・経営者の方導入・運用・開発サポート無料相談を予約 →
← 記事一覧に戻る