チュートリアル29:セキュリティ徹底解説
Tutorial 29: Security Deep Dive — easy-to-understand guide based on official docs
チュートリアル29:セキュリティ徹底解説
エージェント使いの皆さん、おかえりなさい!今日はヘルメットを被って、Hermes Agentのセキュリティモデルについて徹底的に掘り下げていきます。セッションを安全に保つために舞台裏で何が起きているのか気になったことがあるなら、このチュートリアルはまさにうってつけです。
全体像:8層の防御
Hermesは単一の鍵に頼っているわけではありません。代わりに、多層防御アプローチを採用しており、8つの異なるセキュリティ層で構成されています。城を想像してみてください:堀を越えられたとしても、まだ城壁、門、そして内部の衛兵が待ち構えています。
ラインナップはこちら:
- ユーザー認可 — 誰がエージェントと話せるか
- 危険なコマンドの承認 — 破壊的なアクションに対する人間の確認
- ファイル書き込みの安全性 — ファイル操作に対する拒否リストとサンドボックス
- コンテナ分離 — Docker/Singularity/Modalによるサンドボックス化
- MCP資格情報フィルタリング — サブプロセスからシークレットを保護
- コンテキストファイルスキャン — プロジェクトファイル内のプロンプトインジェクションを検出
- セッション間分離 — セッションが互いのデータを覗き見できない
- 入力サニタイズ — 作業ディレクトリパラメータを介したシェルインジェクションをブロック
どの層も重要ですが、今日は最も頻繁に触れることになる層に焦点を当てます:危険なコマンドの承認です。
危険なコマンド承認の仕組み
Hermesはコマンドを実行する前に、厳選された危険パターンのリストと照合します。一致するものがあれば、次に何をするかをあなたが決定できます。
この動作は ~/.hermes/config.yaml の approvals セクションで制御します:
approvals:
mode: smart # smart | manual | off
timeout: 300 # ユーザー応答を待つ秒数
cron_mode: deny # deny | approve
single_query_mode: deny # deny | approve
mcp_reload_confirm: true # MCPツールをリロードする前に確認
destructive_slash_confirm: true # /clear、/new などの前に確認
3つの承認モード
mode キーには3つの選択肢があります:
| モード | 動作 |
|---|---|
| smart(デフォルト) | 補助LLMを使用してリスクを評価します。低リスクのコマンド(python -c "print('hello')" など)は自動承認されます。明らかに危険なものは自動拒否されます。不明確なケースは手動プロンプトにエスカレーションされます。 |
| manual | 危険なコマンドについては常に承認を求めます。例外はありません。 |
| off | すべての承認チェックを無効にします。--yolo で実行するのと同じです。 |
⚠️ 警告:
approvals.mode: offに設定すると、すべての安全プロンプトが無効になります。CI/CDパイプラインや使い捨てコンテナなど、信頼できる環境でのみ行ってください。
YOLOモード:大きな赤いボタン
YOLOモードは、現在のセッションにおけるすべての危険なコマンド承認プロンプトをバイパスします。3つの方法で有効化できます:
- CLIフラグ:
hermes --yoloまたはhermes chat --yolo - スラッシュコマンド:セッション中に
/yoloと入力 - 環境変数:
HERMES_YOLO_MODE=1を設定
/yolo コマンドはトグルです — 使用するたびにオン/オフが切り替わります:
> /yolo
⚡ YOLOモードON — すべてのコマンドが自動承認されます。注意して使用してください。
> /yolo
⚠ YOLOモードOFF — 危険なコマンドには承認が必要になります。
YOLOが有効な間、Hermesはそれを忘れられないようにします。セッション開始時に赤いバナーが表示され、ステータスバーには ⚠ YOLO フラグメントが表示され、トグルするたびにライブで更新されます。
⚠️ 危険: YOLOモードはすべての危険なコマンドの安全チェックを無効にします — ただし ハードラインのブロックリストは除きます。生成されるコマンドを完全に信頼できる場合にのみ使用してください(例:使い捨て環境での十分にテストされた自動化スクリプト)。
このバージョンの新機能:よりスマートな設定キー
2つの新しい設定キーに特に注目です:
mcp_reload_confirm(デフォルト:true)— trueの場合、/reload-mcp はMCPツールセットを再構築する前に確認を求めます。なぜか?再構築するとプロバイダーのプロンプトキャッシュが無効になり、次のメッセージで完全な入力トークンが再送信されるためです。これは事前に承認したいコストかもしれません。
destructive_slash_confirm(デフォルト:true)— trueの場合、破壊的なセッションコマンド(/clear、/new、/reset、/undo)は会話状態を破棄する前にプロンプトを表示します。3つのオプションがあるダイアログが表示されます:一度だけ承認 / 常に承認 / キャンセル。Telegram、Discord、Slackでは、ネイティブのはい/いいえボタンを介してルーティングされます。その他の場所では、テキストにフォールバックします。
TUIもこの設定を /clear、/new、/reset モーダルで尊重します。また、自動化している場合は、HERMES_TUI_NO_CONFIRM=1 でそのモーダルを完全にスキップできます。
ヘッドレスセッション:Cronと単発クエリ
cronジョブや一回限りの hermes chat -q セッションが危険なコマンドに遭遇したらどうなるでしょうか?プロンプトに答える人間は誰もいません。
そこで cron_mode と single_query_mode の出番です:
deny(デフォルト)— コマンドをブロックします。エージェントは別の方法を見つける必要があります。approve— そのコンテキストではすべてを自動承認します。
両方ともデフォルトで deny になっているのには理由があります:誰も見ていないときに安全側に倒れるのが賢明です。
まとめ
Hermes Agentのセキュリティモデルは、邪魔をせずにコントロールを提供することに重点を置いています。スマート承認モードは退屈な処理を自動的に処理し、マニュアルモードは必要なときに完全な監視を提供します。そして、信頼できる環境にいるなら、YOLOモードでスピーディーに進めます。
ただ忘れないでください:大いなる力には大いなる責任が伴います。YOLOは賢く使いましょう!
次回は、特定のワークフローに合わせて承認システムをカスタマイズする方法を探ります。それまで、お気をつけて!
📖 公式ドキュメント
この記事は Hermes Agent の公式ドキュメントに基づいています:公式ドキュメント › user-guide/security