コンテンツにスキップ

安全性

コマンド承認、利用統計の収集と共有、内部ネットワークアクセス、シークレット保護、編集前スナップショットを設定する。承認モードの既定は smart、承認タイムアウトの既定は 300 秒で、設定ファイル側には無条件拒否ルール approvals.deny がある。ブラウザー操作に関する項目は別画面の Browser、エージェントにサイトへサインインさせるための認証情報は パスワードとログイン にある。

設定サイドバーの「安全性」を選ぶと、次の 3 つの子項目が開く。画面を開いた直後は先頭の「承認」が表示される。

子項目主な内容
承認承認モード、承認タイムアウト、MCP 再読み込みの確認、コマンド許可リスト
プライバシーとネットワーク利用統計の収集と共有、シークレットを伏せる、プライベート URL を許可
チェックポイントファイルチェックポイント

複数のプロファイルを持つ環境では、画面上部に「適用対象」チップが表示され、どのプロファイルの config.yaml へ書き込むかを選べる(プロファイルが 1 つだけなら表示されない)。

設定 > 安全性 > 承認 画面

画面表示(主)内部キー(サブ)製品既定値推奨
承認モードapprovals.modesmartsmart。全件を自分で確認するなら manual
承認タイムアウトapprovals.timeout300 秒300秒(既定のまま)
MCP 再読み込みの確認approvals.mcp_reload_confirmオンオン
コマンド許可リストcommand_allowlist空頻用する低リスク操作のみ

このほか、設定画面には表示されない設定ファイル専用のキーとして approvals.deny と、後述の 無人実行時の承認ポリシー(approvals.single_query_mode / approvals.unattended_mode)がある。

画面表示(主)保存値(内部)既定動作
Manualmanualいいえ承認対象コマンドを毎回人が確認する。全件を自分で確認したい場合
Smartsmartはいフラグ付きコマンドを LLM レビュアーが審査し、低リスクのみ自動承認する
Offoffいいえ承認プロンプトを省略する。隔離された使い捨て環境以外では非推奨

製品既定値は smart。off でも、致命的な破壊操作のハードブロック、後述の approvals.deny、sudo の標準入力保護など一部の防御は残る。ただし人による確認を失うため、安全と同義ではない。

危険パターンに一致(フラグ付き)したコマンドは、会話本体とは別の LLM レビュアーが独立に審査する。判定は 3 通りに分かれる。

  • 低リスク ─ 自動承認して実行する。
  • 明確に危険 ─ 自動拒否する。拒否は「再試行・言い換え禁止」としてエージェントへ返る。対話中の画面では、この拒否をその 1 回に限り人が上書き承認できる。
  • 不明・審査への干渉が疑われる ─ 自動判断せず、従来どおり人への手動プロンプトへエスカレーションする。

判定はそのコマンド 1 回限りで有効になる。自動承認がパターン単位で保存されることはなく、同じ危険パターンに一致する後続コマンドも毎回個別に審査される。またコマンド文字列は信頼できない入力として扱われ、シェルコメントを除去したうえで区切り記号に包んで渡し、コマンド内に埋め込まれた指示を無視するようレビュアーへ明示する。レビュアーの呼び出しに失敗した場合は手動プロンプトへフォールバックする。

すべて確認したい場合(manual へ戻す)

Section titled “すべて確認したい場合(manual へ戻す)”
  • 前提: Hermes Desktop の設定画面を開ける。
  • 操作: 設定 > 安全性 > 承認 の「承認モード」で manual を選ぶ。ステータスバーの承認モードメニュー(手動 / スマート / オフ)からも切り替えられる。
  • 期待結果: 以後、承認対象コマンドごとに毎回確認プロンプトが表示される。
  • 失敗時: 切り替えたのに自動承認が続く場合は、操作したプロファイルと会話中のプロファイルが一致しているかを確認する(次項)。

デスクトップの承認モードは、プロファイル単位で保持・同期される。ステータスバーの承認モードメニューで、いま使っているプロファイルのモードだけを切り替えられるため、たとえば作業用プロファイルは smart、検証用プロファイルは manual のような使い分けができる。プロファイルの概念は プロファイル管理 を参照。

承認タイムアウトと許可リスト

Section titled “承認タイムアウトと許可リスト”

承認タイムアウトは確認待ちの秒数。時間内に応答がなければ拒否される(フェイルクローズ)。既定は 300 秒。メッセージング経由の承認はプッシュ通知で届き、すぐに気づけないことがあるため、通常は既定のままでよい。

コマンド許可リストはカンマ区切りのパターン一覧。たとえば systemctl を登録すると、その語に一致する危険コマンドが将来のセッションでも自動承認される可能性がある。rm, sudo, パッケージ公開、クラウド変更など範囲の広いパターンを登録しない。

  • オン: MCP ツールセットを再構築する前に確認する。
  • オフ: 確認せず再読み込みする。

MCP のツール定義が変わると、モデルが利用できる外部操作も変わる。また、ツールスキーマがシステムプロンプトに含まれるため、再読み込み後のターンではプロンプトキャッシュが作り直される。オンのままにし、サーバー名、実行コマンド、URL、公開ツールを確認する。

無条件拒否ルール(approvals.deny)

Section titled “無条件拒否ルール(approvals.deny)”

ユーザー定義の拒否ルール。許可リストの逆で「エージェントに絶対実行させないコマンド」を明示する。設定画面には項目がなく、~/.hermes/config.yaml に直接書く。

approvals:
deny:
- "git push --force*"
- "*curl*|*sh*"
  • パターンは fnmatch グロブ(* ? [...])で、大文字小文字を区別せずコマンド全体と照合される。
  • 照合は危険パターン検出と同じ正規化・難読化解除済みのコマンド変形に対して行われるため、クォート分割(git pu""sh など)でルールをすり抜けることは難しい。
  • 一致したコマンドは --yolo や /yolo、承認モード: off よりも先に評価され、無条件でブロックされる。製品同梱のハードラインブロックリストの、ユーザーが編集できる対応物にあたる。
  • ブロック結果は「再試行・言い換え禁止」としてエージェントへ返り、何も実行されない。
  • YAML の都合上、パターンは必ずクォートする。先頭の * は裸で書くと YAML として解釈に失敗する。

推奨の使い方は「承認は smart で自動化しつつ、絶対に実行させたくないコマンドをここで明示する」構成。承認疲れを減らしながら、force push やパイプ経由のスクリプト実行のような一線だけは越えさせない運用ができる。なお、このルールが守るのはホストに到達する実行バックエンドで、もともとホストに触れない隔離コンテナ実行はこのガードの対象外。

無人実行時の危険コマンドの扱い

Section titled “無人実行時の危険コマンドの扱い”

人が承認プロンプトに応答できない実行経路では、承認待ちがタイムアウトまで止まってしまう。次のキーで、その経路ごとに危険コマンドを即座に拒否するか自動承認するかを明示できる。いずれも設定画面には項目がなく、~/.hermes/config.yaml に直接書く。

内部キー製品既定値対象
approvals.cron_modedenyスケジュール済みジョブ(cron)の実行
approvals.single_query_modedeny単発クエリ(hermes -q)の実行
approvals.unattended_modedenyWebhook・Microsoft Graph Webhook・API サーバーなど、承認チャネルを持たないプログラム向けプラットフォームからのセッション

deny は該当コマンドをその場でブロックし、エージェントに別の方法を探させる(フェイルクローズ)。approve はその経路の危険コマンドをすべて自動承認する。既定の deny のままにし、隔離環境で無人実行するときだけ approve を検討する。

承認待ちのコマンドを拒否するとき、/deny <理由>(複数まとめてなら /deny all <理由>)で一言の理由を添えられる。理由はそのままエージェントへ伝わるため、単に「拒否された」ではなく「なぜ拒否されたか」に基づいて別の進め方へ軌道修正させられる。コマンドの一覧と使える場所は スラッシュコマンド一覧 を参照。

プラグインの pre_tool_call フックが approve アクションを返すと、そのツール呼び出しは危険コマンドと同じ人間の承認ゲートへエスカレーションされる。プラグインが独自の判断でブロックするのではなく「この操作は人に確認させる」と宣言できる仕組みで、エージェント側から承認をスキップする手段はない。承認の記憶粒度はプラグインが指定するルールキー単位(未指定ならツール名と理由の組み合わせ)で管理され、人が応答できない非対話コンテキストではフェイルクローズする。

画面表示(主)内部キー(サブ)製品既定値推奨
利用統計を収集する─(プロファイル単位で保存)オフ任意
利用統計を Nous と共有する─(プロファイル単位で保存)オフ任意。収集がオンのときだけ操作できる
シークレットを伏せるsecurity.redact_secretsオンオン
プライベート URL を許可security.allow_private_urlsオフオフ

Hermes の使われ方の集計を、このコンピューターに保存するか、さらに Nous と共有するかを決める 2 つのトグル。設定はプロファイル単位で保存される。

  • 利用統計を収集する: 件数のみをこのコンピューターに保存する。画面の説明では、メッセージ、ファイル、パス、エラーテキストは一切含まない。
  • 利用統計を Nous と共有する: 収集した統計を、このプロファイル用のランダムな ID を付けて 1 日 1 回 Nous に送信する。1 回限りのインストール記録を除き、オプトイン前の統計は送信されない。収集がオフのあいだは操作できない(無効表示になる)。
  • 集計される内容: リンクを開くと、集計の対象(セッションの長さや結果、使用したモデルとトークン合計、使用したツールや設定、クラッシュや起動速度、OS や RAM の範囲など)の一覧が表示される。共有する前に内容を確認する。

バックエンドが古くて利用統計の設定に対応していない場合は、トグルが無効表示になり「この設定を変更するには Hermes バックエンドを更新してください。」と表示される。

  • オン: API キー、トークン、パスワードに見えるパターンを、ツール出力が会話コンテキストやログへ入る前に可能な限り伏せる。
  • オフ: 検出文字列をそのまま扱う。レダクター自体の診断以外では非推奨。

完全な漏えい防止を保証する機能ではないため、ログやファイルに平文シークレットを置かない運用も必要。実行中プロセスが値を保持する場合があるため、変更後は新しいセッションで確認する。

localhost、ループバック、LAN、社内ネットワーク、クラウドメタデータなどへのアクセスに関係する。

  • オフ(既定): Web 取得などの一般的な URL 取得処理で内部アドレスを拒否する。
  • オン: 一般ツールが内部 URL へ到達できる。

この項目は security.allow_private_urls で、Web 取得など一般ツールに効く。ブラウザーツールで内部 URL を開けるかは別のキー browser.allow_private_urls(画面表示「ブラウザーのプライベート URL」)で制御し、クラウドブラウザー利用時にローカルブラウザーへ自動で切り替える browser.auto_local_for_private_urls とあわせて Browser 画面の「ローカル・プライベート URL」にある。

ローカル開発サーバーを操作するときだけ必要範囲で有効化する。内部管理画面やメタデータエンドポイントへの意図しないアクセスに注意する。

画面表示(主)内部キー(サブ)製品既定値推奨
ファイルチェックポイントcheckpoints.enabledオフコード編集ではオン
  • オン: ファイル変更前に、実プロジェクトの .git とは別の共有シャドウ Git ストアへスナップショットを作る。
  • オフ: チェックポイント処理を行わない。

変更が多いコーディング作業ではオンを推奨する。保持数は 詳細 > 出力の制限 で設定する。Git コミットやバックアップの代替ではない。

ファイル書き込みの保護(概要)

Section titled “ファイル書き込みの保護(概要)”

write_file と patch によるファイル書き込みは、実行前に保護パスの拒否リストと、環境変数 HERMES_WRITE_SAFE_ROOT による任意の書き込みサンドボックスで検査される。~/.ssh/ などの OS 資格情報ディレクトリや、auth.json・.env などの資格情報ファイルは設定に関係なく常時拒否され、承認プロンプトを経ずに即ブロックされる。公式セキュリティドキュメントは、この層を含む 8 層の防御モデルを説明している。設定変更時の安全確認の進め方は 安全に設定するための確認事項 を参照。

© 2026 Hermes Desktop ガイド(非公式)。引用・部分転載は、出典として本ページへのリンクを添えていただければ歓迎します。記事全文の無断複製・転載はご遠慮ください。