無人で動かすAIコーディングエージェントの権限設計|Claude Code・Codex・OpenCode・Hermes

対話中なら「このコマンドを許可しますか」に答えられます。午前 3 時の定期実行では答える人がいません。無人運用の権限は、対話時の設定をそのまま流用できません。

Claude Code、Codex、OpenCode、Hermes Agent には、それぞれ承認や制限の仕組みがあります。違いを追うと、無人運用で先に決めるべき境界が見えてきます。

プロンプトより外側で止める

「危険な操作をしないで」と書くことには意味があります。ですが、それだけでは権限制御になりません。

Claude Code の公式資料は、permission rule をモデルではなく Claude Code 本体が強制すると明記しています。判定順は denyaskallow です。広い deny に一致した操作を、狭い allow で通すことはできません。

Codex は sandbox mode と approval policy を分けます。前者は書き込める場所やネットワーク到達範囲を技術的に制限します。後者は、どの場面で人へ確認するかを決めます。CLI と IDE 拡張のデフォルトでは、ネットワークを切り、書き込みを作業領域へ絞ります。

指示文は進行方向を決めます。権限設定はガードレールを置きます。この 2 つを混ぜない方がよいです。

製品ごとに「無人」の扱いが違う

製品書き込みとコマンド無人実行で見る点
Claude Codeallow、ask、denyをルール化dontAsk は未承認ツールを自動拒否する
CodexOS sandboxとapproval policyを併用workspace外とネットワークを別々に制御する
OpenCodeエージェント単位でask、allow、denyを指定読み取り専用のsubagentを作りやすい
Hermes Agent危険コマンド承認と実行環境を分離cronの危険操作はデフォルトでdenyになる

Claude Code の dontAsk は、事前許可していない操作を止めます。確認待ちで固まるのではなく、拒否したうえで別の手段を探させたい無人処理に合います。

OpenCode では permission をエージェントごとに変えられます。公式の Explore と Scout は読み取り専用です。レビュー担当には edit: deny、実装担当には作業領域内の編集だけを許す、といった分担を設定ファイルへ落とせます。

Hermes Agent は approvals.cron_mode のデフォルト値が deny です。承認が必要な危険コマンドを拒否し、エージェントは別の手段を探します。

ホストへ届く実行環境には、設定で解除できない blocklist もあります。隔離コンテナでは、コンテナ自体を境界として危険コマンド検査を省きます。

ネットワークをファイル権限と分ける

ソースを読むだけのエージェントでも、ネットワークへ自由に出られると情報を送信できます。逆に、依存パッケージを調べる仕事では外部通信が必要です。

Codex の workspace-write は、コマンドのネットワークアクセスをデフォルトで無効にします。必要な場合は通信を有効にし、network proxy で接続先ドメインを絞れます。

Web 検索、MCP、ブラウザ操作は別の通信経路を使います。コマンド用 proxy だけでは、すべての経路を制御できません。

私なら役割を分けます。調査エージェントは Web を読めますが編集できません。実装エージェントはリポジトリへ書けますが、外部通信先を依存元へ限定します。公開担当は対象ファイルと送信先をさらに絞ります。

Git pushは独立した権限にする

ファイル編集と git push は影響範囲が違います。ローカル差分なら戻しやすいですが、共有ブランチへの push は CI や公開処理を始める場合があります。

OpenCode は bash 権限をコマンドパターンで指定できます。公式例にも git pushask にする設定があります。Claude Code でも Bash(git push *) を deny にできます。無人ジョブへ push を許すなら、対象リポジトリ、ブランチ、事前テストを固定したいです。

公開を伴う処理では、生成と公開を分ける方が管理しやすいです。生成側は下書きを push します。公開側はレビュー済みのファイルだけを変更します。時刻が来たことを承認の代わりにしません。

最初の設定は狭くてよい

無人化を始めるとき、私は次の順で権限を足します。

  1. 読み取りと状態報告だけを許します
  2. 専用の作業ディレクトリへ書かせます
  3. 決めた検証コマンドを許します
  4. 専用ブランチへの push を許します
  5. 公開や削除は別の承認経路に残します

毎回すべてを許可する設定は楽ですが、失敗の範囲も広げます。エージェントが止まった理由を記録し、必要な操作だけ次回から通す方が、時間はかかっても事故を小さくできます。

参照した一次情報

この記事をシェア