メインコンテンツへスキップ

SessionConfig

SessionConfigクラスで様々な設定が可能です。 Copilot::run(prompt: '...', config: $config)やCopilot::start(function (CopilotSession $session) { ... }, config: $config)のように使用します。 単純にモデルを指定したいだけのようなSessionConfigクラスを使うまでもない時は配列での指定も可能です。Copilot::run(prompt: '...', config: ['model' => 'auto']) remoteSession設定は公式SDK 1.0.26で削除されました。SessionConfigとResumeSessionConfigでは指定できません。

検出ルート

skillDirectories、agentDirectories、hookDirectories、instructionDirectories は、それぞれスキル・カスタムエージェント・ファイルフック・カスタム指示の検出専用ルートです。これらを指定しても、エージェントに一般的なファイルアクセス権限は付与されません。通常のファイルアクセス先を追加する場合は additionalDirectories を使います。 検出ルートは enableConfigDiscovery の有効・無効にかかわらず指定できます。相対パスは指定時の有効な workingDirectory を基準に一度だけ解決され、後から作業ディレクトリが変わってもルートは移動しません。省略または null は既定の検出元を変更せず、[] はSDKが明示したルートだけをクリアします。スキル・エージェント・フック・指示ファイルそれぞれのソース無効化設定や Managed Settings は引き続き適用されます。

作業ディレクトリの信頼

trustWorkingDirectoryを指定すると、セッション作成時に作業ディレクトリを信頼済みとしてマークします。
  • WorkingDirectoryTrust::Sessionは現在のセッションだけディレクトリを信頼します。
  • WorkingDirectoryTrust::Userは信頼設定を永続化し、後続のセッションでもディレクトリを信頼します。
省略時は信頼状態を変更しません。trustWorkingDirectoryは新規セッション作成時のみ利用でき、ResumeSessionConfigには指定できません。

メモリの注入モード

メモリ設定は実験的機能です。
MemoryConfigurationはセッション間のメモリ機能を制御します。modeオプションでランタイムがメモリを注入する場所を指定します。
  • MemoryMode::SystemPrompt(system-prompt)はシステムプロンプトへメモリを注入します。modeを省略した場合の既定値です。
  • MemoryMode::UserPrompt(user-prompt)は生成されるユーザーメッセージへメモリを注入します。

アプリ管理のメモリストア

MemoryConfigurationのstoreMemoryにクロージャーを渡すと、ランタイムが保存しようとしたメモリをアプリ側で受け取って保存できます。クロージャーにはStoredMemory(sessionId、subject、fact、citations、reason)と、キャンセルを確認できるsignalを持つMemoryStoreCallOptionsが渡されます。
  • storeMemoryを使う場合はenabledをtrueにします。falseのままだと例外になります。
  • storeMemory自体はRPCペイロードに含まれず、SDKはセッション作成・再開時にhasMemoryStore: trueだけを送ります。
  • クラウドセッションでは使用できません。
  • ランタイムはメモリを想起せず、vote_memoryも利用できなくなります。保存したメモリの想起はsystemMessageなどを使ってアプリ側で補ってください。
  • コールバックのsignalはタイムアウトや切断時にキャンセルされ、その後に返った結果は破棄されます。

権限モード

権限モードは実験的機能です。
permissionModeを指定すると、セッション作成・再開時に権限モードをランタイムへ伝えます。省略するとランタイムの既定のままです。PermissionMode enumまたは文字列で指定でき、ResumeSessionConfigでも同じように指定できます。クラウドセッションでは未対応です。
  • PermissionMode::Manual(manual)は通常の承認フローで権限リクエストを処理します。
  • PermissionMode::Assisted(assisted)は権限リクエストにLLMによる安全性の推奨を付けます。クライアントは問題ないと判断されたリクエストを自動承認できます。
  • PermissionMode::AllowAll(allow-all)はツール・パス・URLの権限リクエストを自動承認します。
作成・再開の応答に適用結果が含まれている場合、$session->permissionModeResult()で取得できます。successは適用に成功したか、modeは適用後の権限モードです。応答に含まれない場合はnullを返します。

自動モードの回復

autoModeRecovery: trueを指定すると、アクティブなリクエストの自動回復をランタイムに依頼します。既定値はfalseです。この機能にはonAutoModeSwitchRequestハンドラーが必須で、指定しないと例外になります。回復の再試行や巻き戻しはランタイムが行うため、アプリ側でプロンプトを再送する必要はありません。
autoModeRecoveryは作成時・再開時の両方で指定します。ランタイムがcapabilities.ui.autoModeRecoveryをtrueとして応答しない場合、セッションは切り離され例外になります。この機能を使わない場合、既存のonAutoModeSwitchRequestによる将来のメッセージ向けの切り替え動作は変わりません。

Managed Settingsの適用除外

excludedManagedSettingsには、ランタイムが取得するManaged Settingsから除外する設定パスを配列で指定します。ホストがmanagedSettingsで直接注入する設定には影響しません。セッション再開後も除外を適用するには、ResumeSessionConfigにもexcludedManagedSettingsを再指定してください。
セッション再開時にはResumeSessionConfigクラスを使用します。SessionConfigとほとんど同じですが少しだけ違います。ResumeSessionConfigは設定を変えたい項目のみ指定します。他は新規セッション開始時の設定が引き継がれます。 SDKは同じセッションオプションを作成時と再開時の両方のRPCペイロードに送信します。これにはBYOKのプロバイダーとモデル、メモリ、enableMcpApps、interactiveUser、autopilot、sandboxConfig、excludedManagedSettings、検出ルート、そしてonMcpAuthRequest・onExitPlanModeRequest・onAutoModeSwitchRequestなどのハンドラーが含まれます。再開時はResumeSessionConfigまたは同じキーを持つ配列で指定してください。クロージャーやプロバイダーオブジェクトは永続化されないため、再開のたびに再度指定する必要があります。

Autopilot の自動継続

Autopilot オプションは実験的機能です。
autopilotでAutopilotモード中の自動継続ポリシーを設定できます。セッションモード自体は変更しません。新規SDKセッションでは、省略時に自動継続が有効になり、maxContinuesは5です。maxContinuesに0を指定すると通常の自動継続を無効にできます。
再開時もResumeSessionConfigまたは配列で同じautopilotキーを使用します。warm resumeでは省略した項目の現在値が保持されます。runtime再起動後のcold resumeでは設定を再指定してください。

サンドボックス設定

サンドボックス設定は実験的機能です。
sandboxConfigでセッションのCLIサンドボックスを設定します。SDKは作成時と再開時の両方のリクエストでこの設定を送信します。既存コードとの互換性のためsandboxもエイリアスとして受け付け、両方を指定した場合はnullでないsandboxConfigを優先します。
authとcredentialsを使うと、資格情報の値を公開せずにサンドボックス内のプロセスへ資格情報を渡せます。
  • authはgitとghへの資格情報注入を有効にします。
  • credentials.envVarsは環境変数名と、マスクされた値を受け取れるHTTPSホスト(injectHosts)を対応付けます。実際の資格情報値は設定に含めないでください。
Revolution\Copilot\Types\Rpc名前空間のSandboxConfig、SandboxConfigAuth、SandboxCredentialsConfig、SandboxMaskedEnvVar、SandboxConfigUserPolicyExperimental、SandboxConfigUserPolicyExperimentalSeatbeltなどの型付きオブジェクトも使用できます。ネットワークの許可/拒否ルールはCLIのサンドボックス機能とバージョンに依存します。

キャンバスプロバイダー

キャンバスは実験的機能です。
canvasesでキャンバスを宣言し、canvasHandlerでopenとactionのリクエストを処理します。エージェントがキャンバスを開いたりアクションを呼び出したりすると、ランタイムはreverse-RPCでハンドラーを呼び出します。requestCanvasRenderer: trueを指定するとレンダラーとしてオプトインし、ランタイムはこの接続用のキャンバスエージェントツールをモデルに提供します。キャンバスを表示できないSDK呼び出し元がクリーンな状態を保つため、デフォルトはoffです。
関連オプション:
  • requestExtensions: true は拡張機能サーフェスへのオプトインです。ランタイムは拡張機能管理ツールをこの接続のセッションに接続します。デフォルトはoffです。
  • extensionInfo: new ExtensionInfo(source: 'github-app', name: 'my-extension') は、この接続上のキャンバスプロバイダーのための安定した拡張機能IDを設定します。ランタイムは接続ごとのIDの代わりに${source}:${name}を使用します。配列での指定も可能です。
Canvas を再開する場合も、canvases と canvasHandler を再度指定します。canvasHandler は PHP プロセス内でのみ使用され、RPC payload には宣言メタデータだけが送られます。ResumeSessionConfigではopenCanvasesも指定できます。セッションが中断された時に開いていたキャンバスのスナップショットを渡すと、ランタイムはキャンバスの状態を再ハイドレートできるため、再度開く必要がありません。開いている状態は $session->openCanvases() で取得でき、session.canvas.opened / session.canvas.closed イベントに合わせて更新されます。

SessionFsプロバイダー

スキルとファイルシステムのコールバック

skillProviderを使うと、アプリケーションが管理するソースからスキルを読み込めます。コールバックはそのセッションに属し、Copilotランタイムにはシリアライズされません。クラウドセッションではカスタムスキルプロバイダーはサポートされていません。
SkillProviderCallOptions::$signalでコールバックのキャンセルトークンを取得できます。キャンセルは協調的に行われるため、コールバック側でシグナルを監視し、保留中の処理を自らキャンセルしてください。コールバック配列の代わりにRevolution\Copilot\Contracts\SkillProviderを実装することもできます。 sessionFsProviderも同じセッション単位の設定を使用します。テキスト用のコールバックはreadFile(path)とwriteFile(path, content, mode)です。バイナリファイルをサポートするにはreadFileBytes(path)とwriteFileBytes(path, bytes, mode)の両方を指定するか、SessionFsBinaryProviderを実装します。これらのコールバックは元のバイト列をそのまま受け取り・返し、JSON-RPC上のbase64エンコードはSDKが処理します。ファイルシステムへのアクセスは、アプリケーションが公開を意図したパスに限定してください。

sessionFsでセッション状態全体を委譲する

クライアントオプションsessionFs(session_fsでも可)を指定すると、Copilot CLIのセッション状態(session-stateファイルやセッションごとのSQLiteデータベース)を独自のストレージへ委譲できます。この場合、すべてのセッション設定でcreateSessionFsProviderが必須です。createSession()とresumeSession()の両方で、セッションのIDが確定した後・ランタイムへのリクエスト送信前に呼び出されます。
Copilotファサードを使う場合はconfig/copilot.phpでsession_fsを設定します。initialCwd、sessionStatePath、conventions(posixまたはwindows)は必須です。項目が不足している場合やconventionsの値が不正な場合はInvalidArgumentExceptionになります。 createSessionFsProviderはClosureで、SessionConfigとResumeSessionConfigの配列/fromArray()/toArray()でも使えます。返すプロバイダーはオブジェクトでもcallableの配列でも構いません。オプションの機能ごとにインターフェースがあります。 プロバイダーが宣言したcapabilitiesを満たさない場合はInvalidArgumentExceptionになります。プロバイダーがサポートしていない操作を呼び出すとUNKNOWNエラーが返ります。プロバイダーは例外をスローして失敗を通知します。codeがENOENT(またはerrno 2)の例外はENOENTになり、それ以外はUNKNOWNになります。transaction()からSessionFsSqliteTransactionFailureをスローするとerrorClass(busyOrLocked、fatal、postCommitAmbiguous)を通知できます。 クライアントオプションsessionFsが無い場合、createSessionFsProviderは呼び出されず、従来のsessionFsProvider(readFile/writeFile)がそのまま使えます。

マルチテナント向け empty モード

クライアント設定のmodeをemptyにすると、Copilot CLI のホスト環境やセッション間状態に依存する機能を既定で無効にします。省略時は従来どおりcopilot-cliです。empty モードでは永続化先としてbase_directory、session_fs、または外部サーバーのurlのいずれかを指定してください。
empty モードでは各セッションにavailableToolsの指定が必要です。ToolSetを使うとソース修飾付きのツールフィルター(builtin:、custom:、mcp:)を組み立てられます。BuiltInTools::Isolatedは、ホストのファイルシステム・環境・ネットワーク・セッション間アクセスを持たない、単一セッション内で完結する組み込みツールだけを許可します。
ツール名は/^[a-zA-Z0-9_-]+$/に一致するか、ワイルドカード*である必要があります。それ以外の場合、ToolSetはInvalidArgumentExceptionをスローします。 empty モードではセッションテレメトリー、永続 MCP OAuth token storage、embedding retrieval/cache、instruction discovery、file hooks、host git operations、session store、skills、memory、experimental mode が安全側の既定値になります。明示したセッション設定はこれらの既定値より優先されます。GitHub cache store は empty モードの既定値でもセッション設定でもありません。SDK はセッション作成・再開のリクエストで enableGitHubCacheStore を送信しなくなり、配列設定に残ったキーは無視します。systemMessageのreplaceはそのまま利用でき、それ以外のモードではenvironment_contextセクションを除去します。CLI プロセスではCOPILOT_DISABLE_KEYTAR=1を設定します。 クラウド実行は Cloud Sessions、Plugin Directory は Plugin Directories を参照してください。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年11月9日