権限
Claude Code と Codex の権限要求を同じ流れで扱います。
Claude Code と Codex はどちらもツール単位の権限ゲートをサポートしますが、 プロトコルは異なります。SNA は両方を 1 つの API にそろえます。
フロー
エージェントがツールを呼び出す
│
▼
ランタイムが権限要求を生成
│
▼
SessionManager が `permission_needed` イベントを emit ──► UI がプロンプトを表示
│
▼
UI が POST /agent/permission-respond { approved: bool } を呼ぶ
│
▼
SessionManager が pending 要求を解決
│
▼
ランタイムが決定を受け取り、ツールを実行 (または拒否)権限要求が保留中の状態でセッションが削除された場合、SNA はその要求を 拒否として処理してからセッションを削除します。
ランタイムごとの配線
- Claude Code は
PreToolUseフックを使います。CLI は各ツール呼び出しを 評価するために別の Node プロセスを spawn します。SNA はpackages/core/dist/scripts/hook.jsを同梱しており、このスクリプトが サーバに blocking なpermission-requestを POST して応答を待ちます。 - Codex は stdio 上の JSON-RPC で話し、
approval/request通知 を emit します。SNA はapproval/respondで応答します。
アプリはこのプロトコル差を直接見る必要がありません。両方とも同じ
permission_needed イベントとして表面化し、同じ
POST /agent/permission-respond エンドポイントで応答します。
モード
permissionMode はゲートのデフォルト評決を制御します。
| モード | 意味 |
|---|---|
default | safe-tool allowlist にない全ツールでプロンプト |
acceptEdits | ファイル編集は自動承認、それ以外はプロンプト |
bypassPermissions | すべて自動承認 (テスト環境、デモ用) |
モードはセッション単位で、POST /agent/set-permission-mode か
PATCH /agent/session でスレッド途中で切り替えられます。
Safe-tool allowlist
設定された allowlist にマッチするツール (Read、Glob、Grep、ListFiles など) は権限ゲートを完全にスキップします。イベントもラウンドトリップ も発生しません。allowlist はランタイムごとに異なりますが正規化されて いるため、アプリ設定では 1 つのリストだけを管理すれば十分です。