2026年 OpenClaw Exec Approvals を独占リモート Mac(SSH ヘッドレス)で運用する
デプロイ・運用 2026-05-09

2026年 OpenClaw Exec Approvals を独占リモート Mac(SSH ヘッドレス)で運用する:tools.exec・承認状態・無 UI フォールバックの意思決定マトリクス+FAQ

Exec Approvals(実行前の人間確認)と tools.exec を、独占リモート Mac の SSH ヘッドレス前提で矛盾なく回すための方針、承認キューの状態ファイル、GUI が無いときの保守的フォールバックを runbook 粒度でまとめます。

前提の立て方や launchd の健康診断は、 2026年最新 OpenClaw デプロイ・安定運用マニュアル と併読すると再現性が上がります。

1. 背景:ヘッドレス SSH だからこそ「承認」を設計資産にする

独占リモート Mac では、エージェントが tools.exec でシェルコマンドやスクリプトを起動できます。画面が無いと「ポップアップで承認」が使えない一方、監査要件では「誰がいつ何を許可したか」を残す必要があります。Exec Approvals は、そのギャップを 状態機械+永続キュー で埋めるためのレイヤです。

本稿のスコープは次の三点です。(1) tools.exec の許可モデルと承認ポリシーの対応、(2) 承認待ち・却下・期限切れを表す状態ファイルの置き場所と単一ライター規律、(3) UI が無いときの「拒否優先」フォールバックと運用者が SSH だけで完結する手順。

2. Exec Approvals と tools.exec の関係

概念的には、モデルがツール呼び出しを要求するとき、tools.exec は「実行系ツール」の入口です。Exec Approvals がオンなら、危険度の高いコマンドやポリシー外の引数は 保留(pending) に入り、承認者が明示的に 許可(approved) するまでプロセス起動やファイル破壊的オペレーションを起こしません。

2.1 推奨ポリシー(実務向け)

  • 本番・共有テナント:デフォルト deny、ホワイトリストされた読み取り専用コマンドのみ auto。それ以外は必ず pending。
  • 検証・個人専用:開発者本人のみ SSH できるなら auto を広げてもよいが、同一ホストに複数ボット/複数セッションがある場合は pending を維持。
  • 秘密情報:承認 UI が無い環境では、承認操作そのものを別チャネル(社内チャットの slash コマンド、署名付き webhook)に逃がし、Mac 上は状態ファイルの更新だけに限定する。

資格情報と監査ログの扱いは OpenClaw 安全運用(SecretRef/Lobster) のパターンと整合させると、承認ログと秘密の境界が崩れにくくなります。

3. 承認状態ファイル:単一ライターとアトミック更新

ヘッドレス運用では、承認キューは JSONL または SQLite 等の単一ストア に集約し、OpenClaw プロセス(または専用 sidecar)だけが書き込むようにします。複数プロセスが同時に書くと、pending が二重実行されたり、承認が失われたりします。

3.1 最低限のフィールド例

各リクエストに request_id、tool、argv ハッシュ、cwd、submitter(セッション ID や inbound チャネル)、status(pending/approved/rejected/expired)、ttl、監査用タイムスタンプを載せます。macOS では rename(2) による同ディレクトリ内の置換でアトミックにコミットするか、SQLite のトランザクションを使います。

3.2 SSH 運用者向けチェック

  • キューファイルのパスを OPENCLAW_STATE_DIR(仮)など環境変数で固定し、launchd の EnvironmentVariables と揃える。
  • 手編集が必要なら、エージェントを止めてから行うか、専用 CLI(openclaw approvals approve <id> 等)だけを許可する。
  • バックアップは「コピーではなくスナップショット+整合性検証」:承認済み ID と実際の exec ログを突合する。

4. 意思決定マトリクス(再現用)

次の表は、チームレビューに貼れる「条件 → 推奨設定」の一覧です。セルは運用ポリシー名としてそのまま議事録に転記できます。

条件 tools.exec 既定 Exec Approvals 無 UI 時のフォールバック
本番・複数人が SSH 可能 strict(読み取りのみ auto) 必須・TTL 短め 外部承認 webhook → 状態ファイル更新
個人専用・単一 SSH 鍵 moderate 破壊的操作のみ pending CLI 承認+監査ログ tail
CI 連携ボット(Inbound のみ) allowlist コマンドのみ ジョブ単位で batch approve 失敗時は reject+アラート、再実行は新 request_id
オフライン/ゲートウェイ不安定 deny へ自動降格 キューを凍結 既存 pending は expired へ(手動再発行)

5. 無 UI(ヘッドレス)の保守的フォールバック

GUI が無いときの鉄則は 「迷ったら実行しない」 です。具体的には、(1) 承認チャネルが応答しない間は pending のままタイムアウトし、モデルには「ブロックされた」旨を返す。(2) 設定不整合(状態ファイルが壊れている/バージョン不一致)は起動時にフェイルクローズ。(3) 緊急時だけ限定的に「break-glass」用のロールを別ファイルで定義し、使用後は必ずローテーションと事後監査。

SSH からの運用では、launchctl print でゲートウェイが生きているか、log show --predicate で exec 監査イベントが流れているかを週次で確認すると、承認レイヤの沈黙障害に早く気づけます。

6. FAQ

Q1. pending が溜まり続けてセッションが詰まる

TTL を設定し、期限切れは expired としてクローズ。モデル側には短いエラーテンプレを返し、ユーザーに「範囲を狭くして再依頼」を促します。同時実行数も tools.exec 側で上限を掛けます。

Q2. 承認と実際のコマンドが食い違う(TOCTOU)

承認対象は argv の正規化済みハッシュ とワーキングディレクトリまで含めます。承認後に引数が変わったら新しい request_id が必要、という規律をコード側で強制します。

Q3. 複数 OpenClaw インスタンスを同一 Mac で動かしたい

状態ファイルのパスをインスタンスごとに分離し、同じキューを参照しないようにします。共有が必要なら、キュー専用の単一プロセス(Redis ではなく「単一ライター」サービス)を挟むのが安全です。

7. なぜこの運用は Mac mini/macOS で噛み合いやすいか

承認キューと exec ログを同一ノードに置く構成では、ディスクの整合性・ファイルロック・タイムスタンプの挙動が安定していることが重要です。macOS は Unix ツールチェーンと launchd が素直に揃い、Apple Silicon の Mac mini は待機電力が非常に低く、ヘッドレスの OpenClaw を昼夜問わず回しても電気コストと騒音の負担が小さいです。Gatekeeper や SIP とも相性がよく、「承認されたコマンドだけが実ファイルに触れる」 という境界を運用で守りやすいのも利点です。

開発者にとっては、SSH と Homebrew、コンテナ類が前提通りに動き、承認用の小さな CLI や webhook 受け口をローカルに載せ替えるだけでスタックを完成させられます。リモート専用機として長期運用するなら、静音・低消費電力・クラッシュ率の低さを合わせ持つ Mac mini M4 は、コストパフォーマンスの観点でも現実的な第一選択になります。

本文のような「無 UI で安全に回す」設計を本気で運用に載せるなら、まず一台の信頼できる Mac mini に状態を集約し、監査と承認の単一ライター規律を守るのが最短ルートです。今すぐ手元に置ける構成を検討するなら、 SSHMac の Mac mini ライン からプランを確認するのがおすすめです。

おすすめプラン

M4.S 人気商品

10-Core 16GB 256GB
$105.9
/月〜
全プランを見る