SNA

権限

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 CodePreToolUse フックを使います。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 はゲートのデフォルト評決を制御します。

モード意味
defaultsafe-tool allowlist にない全ツールでプロンプト
acceptEditsファイル編集は自動承認、それ以外はプロンプト
bypassPermissionsすべて自動承認 (テスト環境、デモ用)

モードはセッション単位で、POST /agent/set-permission-modePATCH /agent/session でスレッド途中で切り替えられます。

Safe-tool allowlist

設定された allowlist にマッチするツール (Read、Glob、Grep、ListFiles など) は権限ゲートを完全にスキップします。イベントもラウンドトリップ も発生しません。allowlist はランタイムごとに異なりますが正規化されて いるため、アプリ設定では 1 つのリストだけを管理すれば十分です。

目次