Skip to main content

権限リクエスト

デフォルト動作(deny-all

config/copilot.phppermission_approve"deny-all"(デフォルト)の場合、Copilot::run()Copilot::start() では権限リクエストは自動で 拒否 されます。 テキスト生成中心の用途では権限を必要としないことが多いため、安全なデフォルトです。

設定できる値

ユーザー入力プロンプトを受け付ける場合、"approve-safety""approve-all" は危険です。 必ず false または "deny-all" を使ってください。 read-only 権限でも Laravel プロジェクトのコードが読まれる可能性があります。

PermissionHandler::approveAll()

PermissionHandler::approveAll() はすべてのリクエストを自動許可します。

PermissionHandler::approveSafety()

PermissionHandler::approveSafety() は高リスクの権限(shell, write)のみ拒否し、他を自動許可します。
これでも完全に安全とは限りません。 厳密に制御したい場合はカスタムハンドラを実装し、$request['kind'] を見て判定してください。

PermissionHandler::denyAll()

PermissionHandler::denyAll() はすべて拒否します。

Client を直接使う場合

CopilotClient を直接使う場合は、公式 SDK と同様に onPermissionRequest の指定が 必須 です。

カスタムハンドラ

リクエスト種別ごとに許可・拒否を制御するにはクロージャを渡します。 $request$invocation は以下のような配列です。

$request

kindtoolCallId 以外のフィールドは kind によって変わります。

$invocation

Response

権限判定結果は配列で返します。 PermissionRequestResultKind クラスを使うと読みやすくなります。

プロトコル詳細

Protocol v3(現在のデフォルト)では、権限リクエストは JSON-RPC リクエストではなくセッションイベント(permission.requested)として配信されます。 SDK は内部でこれを処理し、session.permissions.handlePendingPermissionRequest RPC で応答します。 SessionConfig の使い方は変わりません。 onPermissionRequest にハンドラを渡せば、プロトコル差分は SDK が吸収します。

PermissionRequestResultKind

['kind' => 'approve-once'] の形式で直接返すこともできますが、PermissionRequestResultKind を使うと分かりやすくなります。

利用可能なメソッド

Laravel\Prompts\select を使いたい場合は PermissionRequestResultKind::select() で選択肢を取得できます。

no-result

ハンドラが結果を返せない場合(例: 非対話環境)は no-result を返せます。 no-result を返すと RPC 呼び出しをスキップし、Copilot CLI 側のデフォルト拒否が適用されます。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年4月29日