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

RPC(Remote Procedure Call)

公式SDKでは最近の新機能はapi.schema.jsonを元にした自動コード生成で対応しています。Laravel版では生成後の他言語版を参考に同じように実装しています。

ServerRpc

Clientに紐づくRPCクラス。

接続・モデル・ツール・アカウント

ping()とconnect()で接続を確認・開始し、registerExtensionLaunchProvider()で拡張機能の起動プロバイダーを登録します。モデル一覧・価格単位・組み込みカタログはmodels()、利用可能なツール一覧はtools()から取得できます。account()ではクォータ、認証状態、ログインユーザーの一覧、ログイン・ログアウトを扱い、accounts()ではMicrosoft Entra IDのトークン取得を行います。

MCP・コネクター・Secrets

mcp()はMCP設定の一覧・追加・更新・削除、有効化、検出、レジストリ検索、インストール計画と適用を提供します。connectors()ではコネクター機能とアカウント、カタログを確認できます。サーバー側でのコネクター操作はアカウント単位の一覧取得・更新が中心です。実験的なsecrets()->addFilterValues()は、ホストが生成した動的シークレットをCLIのredaction filterに登録し、session logsやexportsでマスクします。
このRPCはOAuthトークンを取得するものではなく、値はSDK内で永続化・追加ログ出力されません。ホスト側で取得した値を明示的に登録してください。

Skills・Plugins・Agents・Instructions・Extensions

各グループから探索や利用可能なパスの取得、設定変更、再読み込みを行えます。commands()は組み込みコマンド一覧、hooks()はセッション開始前のフック探索を提供します。SkillsとPluginsは有効化・無効化やインストール管理に対応し、Agentsは組み込みエージェント情報も取得できます。Extensionsは永続化された拡張機能を探索・有効化・無効化します。

カタログとインストール

catalog()で候補検索・製品の推奨取得・選択・フィード取得を行い、Skills・Plugins・MCPの各APIでインストール計画の確認、適用、状態照会やキャンセルを行います。計画と適用は別操作です。実際のインストール例は後半の各項目を参照してください。

セッション・ホスト・実行環境

sessions()は永続化済みセッションの検索、イベント読み取り、サイズ確認、削除・整理、forkを扱います。Workspaceの作成・読み込みやリモート制御も利用できます。host()はホストの起動、セッション公開・一覧・公開解除、認証、受付ポリシー変更、破棄を行います。これらのホストRPCは、SDKの高レベルなAHP(Agent Host Protocol)ホストAPIの基盤となっています。runtime()はランタイムのライフサイクルを扱います。

クラウドエージェントタスク(experimental)

cloudTasks()はクラウドコーディングエージェントのタスク作成・削除・取得、セッションログやリプレイの取得、共有状態の変更、タスクIDから開くセッションの解決を行います。各メソッドは対応するParams型または配列を受け取り、結果を型付きDTOで返します。作成結果のokがfalseの場合、サービスによる拒否理由はreasonとmessage、実行されたHTTPリクエストの失敗情報はstatusCode、errorMessage、errorPayloadJsonで確認できます。

Git・環境・サンドボックス・ポリシー

git()からブランチや作業ディレクトリ、Git remoteの情報を取得し、gitHubRepository()とgitHubOwners()からGitHubリポジトリや所有者を探索できます。environments()はMission Control環境、sandbox()とsandboxProxyCa()はサンドボックス対応状況やProxy CA、contentExclusion()は除外ポリシーの検証、managedSettings()とuserSettings()は設定を扱います。設定ファイルの個別キー削除と表示用の値のマスキングはsettings()から行えます。 gitHubRepository()->getById()はGitHubリポジトリIDからowner/nameを解決し、lookupBranchPullRequest()は指定したhead ownerとブランチを、優先順に指定したリポジトリで検索します。どちらもauthInfoをそのまま渡します。getById()の結果はrepositoryにowner/nameを含み、見つからない場合はnullです。Pull Request検索のstatusはfound、no-token、no-pr、lookup-failedのいずれかで、未知の値は文字列のまま保持されるため例外になりません。pullRequestは見つかった場合の連想配列で、それ以外はnullです。
gitHubFetch()は認証付きGitHub APIリクエストと名前付き操作を、gitHubRelease()はリリースの検索・スナップショット・資産ダウンロードと進捗確認を提供します。FetchではsessionIdでセッションの認証を選び、省略時はプロセスの認証が使われます。ホストが管理する認証バインディングを使う場合はauthOwnerIdを指定します。ReleaseのauthInfoはランタイムが管理する認証情報の選択子で、公開リリースの検索・ダウンロードは匿名でも実行できます。ダウンロード結果のpathは利用後に呼び出し側で削除してください。 FetchのallocateRequestId()、request()、executeOperation()と、ReleaseのabandonRequest()、getSnapshot()、downloadAsset()はExtensionsから呼び出せません。現在のLaravel SDKは両グループのcancel RPCを公開していないため、実行中の操作をSDKからキャンセルできません。abandonRequest()は未使用のRelease request IDを破棄する操作であり、実行中の操作を停止するものではありません。

ローカルモデル・HTTP推論・ファイルシステム

azureMl()はローカルモデルのカタログ・解決・ダウンロードと、その状態確認・キャンセル・削除を提供します。llmInference()はモデル層のHTTPリクエストをクライアント側へ中継する実験的APIです。sessionFs()はセッションのファイルシステム/SQLiteコールバックプロバイダーを登録します。

ネットワークコールバック(experimental)

network()->setProvider()で、クライアント側に登録したプロキシ解決・Kerberos認証コールバックをランタイムに通知します。通常はClientのnetworkオプションから自動登録されるため、直接呼び出す必要はありません。NetworkSetProviderRequestのコールバック項目は、対応するハンドラーが登録済みであることを示します。RPCの戻り値はありません。利用するランタイムはnetwork.setProvider RPCをサポートしている必要があり、未対応の場合はクライアント起動時に更新を案内する例外が発生します。詳しくは認証を参照してください。
scopeは省略するとconnectionです。runtimeは共有バックグラウンド通信も対象にしますが、同時にこのscopeを登録できる接続は1つだけです。

内部・実験的な RPC

公式SDKで内部用とされる次のRPCも、Laravelでは@experimentalとして公開しています。将来変更・削除される可能性があり、ランタイムの呼び出し元制限も適用されます。エージェントレジストリの作成・一覧・削除、認証URLのブラウザ起動、期限切れの大きなツール出力の整理、サンドボックスのパス許可警告を利用できます。一覧結果には接続資格情報は含まれません。

基本的な呼び出し例

元からSDKに含まれてた機能も自動コード生成版で再度追加されています。

機能別の使用例

以下に、上記の機能の代表的な呼び出し例をまとめています。

Agent Plugin catalog候補

catalog.search で agent-plugin-discovery を要求し、検索対象の kinds に plugin を指定すると Agent Plugin 候補を取得できます。標準形式 application/vnd.github.copilot-plugin 以外の application/vnd.anthropic.claude-plugin+json と application/agent-plugin+json を受け取るには、agent-plugin-discovery に加えて agent-plugin-formats を要求してください。 agent-plugin-confirmed-installation はインストールの可否とレビュー用プランを返す capability で、これも agent-plugin-discovery と併せて要求します。許可すると候補に installability が含まれ、値は installable、install-data-unavailable、feature-disabled、not-installable-kind のいずれかです。installPlan は installability が installable の場合にだけ含まれます。プランは確認用のデータであり、この catalog RPC がインストールを実行することはありません。 プランの sources は優先順に materialization、marketplace、repository の候補を含みます。Marketplace には名前とリポジトリ、直接の Repository にはリポジトリと任意のパスが記録されます。materializationだけのプランでは pluginName が省略され、components は空です。名前や実際に導入される内容は plugins.planInstall() が返すレビューで確認してください。 選択済み候補は plugins.planInstall() で副作用のない検証付きプランを作成できます。plugins.applyInstall() は利用者に明示的な確認を求め、許可された場合にプランを適用します。適用後のプラグインは無効状態で登録されます。 レビューの mcpServers は検証済みファイルが宣言するサーバー名、transport、リモートの場合のhostを示します。これは安全性の保証ではないため、利用者が内容を確認してから明示的な確認を行ってください。インストール済みプラグインの description はmanifest由来です。verifiedSource はGitHubリポジトリと固定commitを示し、commitに固定された直接インストールでのみ存在します。iconUrl は外部の未信頼コンテンツなので、取得時に認証情報やGitHub資格情報を送らないでください。資格情報そのものは拒否理由として返されません。 インストール結果の network-failure では、CatalogNetworkFailureReason、HTTP statusCode、任意の retryAfterSeconds と安全に表示できる message を確認できます。
Agent Finder の materialisation reference から計画する場合は catalog.planInstallFromReference() を使います。結果の outcome->kind は plugin-install-planned、skill-install-planned、refused のいずれかです。プラグインの計画は plugins.applyInstall() に渡し、スキルの計画は skills.applyInstall() に渡してください。

contentExclusion

セッション作成前に、コンテンツ除外ポリシーのJSONを検証できます。
policiesJson は未解析のJSON文字列のままCLIに渡されます。JSONの解析またはスキーマ検証に失敗した場合は、CLIからのRPCエラー(JsonRpcException)が発生します。 これはポリシー自体を検証するサーバースコープのRPCです。セッションの作業ディレクトリ内のパスを実際の除外ポリシーに照らして確認するには、セッションスコープの contentExclusion()->checkPaths() を使います。

managedSettings (experimental: 管理設定)

管理設定の読み取り、ポリシー解決、スキーマ取得、検証、合成プレビュー、キャッシュ破棄を行います。

settings (experimental: 設定ファイルの操作)

設定ファイルから指定したキーを削除し、表示用に秘匿値を置き換えます。removeRawKey()は読み込みに失敗したキーなど、正規の設定パスではないキーもそのまま削除できます。ファイルが解析できない場合は上書きせずstatusがinvalidになります。redactValueForDisplay()はbasePathで指定した設定ツリー上の位置を基に秘匿値をプレースホルダーへ置き換えるため、ユーザーへの表示やログ出力に使えます。

Runtime・Host のライフサイクル(experimental)

host.unpublishSession() は、所有する稼働中のホストから application publication を撤回します。公開を撤回しても、元のセッション履歴、worktree、実行中の作業は削除・停止されません。すでに公開されていない場合は unpublished が false になり、application 以外の publication はエラーになります。
host.dispose() は hostId を指定してホストリスナーを破棄します。
host.setSessionCreationPolicy() は、稼働中のホストでリモートの新規セッション受付を切り替えます。既存クライアントを切断せず、その後の受付だけに適用します。
SDKが起動したstdioランタイムでは、Client::stop() がセッションを切断した後、JSON-RPC接続とプロセスを閉じる前に runtime.shutdown を呼び出します。セッションの切断(session.detach)は全セッションで合計10秒の期限を共有し、期限を過ぎた切断はエラーとして戻り値に含めたうえで停止処理を続けます。ランタイムのクリーンアップ完了も最大10秒待ち、失敗時はエラーを戻り値に含めたうえで残りの停止処理を続けます。cli_url など外部ランタイムへの接続では、共有ランタイムを終了しないようこのRPCを呼び出しません。 CLIが対応するリクエストを特定できずid: nullのJSON-RPCエラーを返した場合、実行中のリクエストはすべて、引用値を除去して長さを制限した診断メッセージを含むJsonRpcExceptionで失敗します。接続は維持されますが、CLIがリクエストを処理済みの可能性もあるため、安全性を確認せずに自動再試行しないでください。CLIが読み取れない127階層を超える送信リクエストは送信前に拒否し、深すぎるハンドラー応答はJSON-RPCエラーに置き換えます。

SessionRpc

Sessionに紐づくRPCクラス。 以前のSDKではできなかったプランモードの利用なども可能です。

モデル・モード・名前・プラン

model()で現在のモデル確認や切り替え、reasoning effort・Auto tier・許可モデルの設定を行えます。mode()はモード、name()はセッション名、plan()はプラン本文とSQLite todoの読み書きを扱います。

ワークスペース・インストラクション・LSP

workspaces()はファイルの一覧・読み取り・書き込み・移動・削除やディレクトリ操作を提供します。instructions()でインストラクションの取得・再読み込み・探索、lsp()で言語サーバー設定の初期化を行えます。

Autopilot objective

autopilotObjective()->getState()はセッションの現在のAutopilot objective状態を型付きで返します。objectiveが存在しない場合、stateはnullです。Workspaceに保存されたobjectiveの有無を確認するworkspaces()->autopilotObjectiveExists()とは異なるAPIです。
setStayInAutopilot()でobjectiveの完了・一時停止時にinteractive modeへ戻る要求を抑制できます。この設定はクライアントのメモリ内に保持され、既定値はtrueです。valueにfalseを渡すと抑制を解除できます。接続し直した場合は再設定してください。

エージェント・Fleet・バックグラウンドタスク

agent()でエージェントの一覧・選択・再読み込み、fleet()でFleetを開始します。tasks()ではバックグラウンドエージェントやクライアント所有タスクの登録、進捗取得・更新、移行、メッセージ送信、キャンセル、削除を扱います。

MCP・Plugins・Extensions・Workflow

mcp()はサーバーの一覧・起動・停止・再読み込み、ツール・プロンプト・リソース、OAuth、sampling、動的ヘッダーの更新を扱います。plugins()とextensions()はセッション内の状態を管理し、customizations()はカスタマイズの再読み込みを行います。workflow()でワークフローを実行・照会し、diagnostics()とconnectors()で診断情報やコネクターを取得できます。

Tools・Permissions・Commands・UI

tools()とpermissions()はイベントで届いた保留中リクエストへの応答や設定を扱います。permissions()->clearResumeEscalation()は再開時に履歴から復元された権限昇格をメモリ内で解除し、成否を型付きで返します。commands()はコマンド一覧・実行・イベント応答、ui()はユーザー入力・elicitation・プラン承認などの要求への応答を提供します。completions()は入力候補を取得します。

Accounts・認証・Providers

accounts()はenumerate()によるアカウント/プロバイダー/ログインアカウントの列挙、get()・set()、begin()・advance()・cancel()による対話型ログインを扱います。gitHubAuth()はセッションの認証状態と資格情報、provider()とproviders()はモデル接続先やプロバイダーアダプター、connectors()はセッションのコネクター接続を扱います。

履歴・キュー・ログ・使用量

history()は会話の圧縮(圧縮設定を含む)・中断・引き継ぎ要約・切り詰め、queue()は保留項目の挿入・移動・編集・削除・即時送信を提供します。log()、eventLog()、usage()、quota()、limitPrediction()でログやイベント、使用量と上限情報を扱います。schedule()ではスケジュール済みプロンプトを確認・停止できます。

ライフサイクル・リモート・ホスト連携

sendMessages()は複数メッセージを1ターンで実行し、suspend()・shutdown()でセッションを停止します。interruptMainTurn()はメインターン、cancelAllBackgroundAgents()はバックグラウンドエージェントを個別に制御します。remote()とvisibility()はリモート公開・共有状態、sandbox()はセッションのサンドボックス、managedSettings()はセッションスコープの管理設定、contentExclusion()はパス判定、metadata()はクライアント所有メタデータ、canvas()はCanvas連携を扱います。

debug (experimental)

debug()->collectLogs()でセッションのイベントログ、プロセスログ、シェルログを .tgz アーカイブまたはディレクトリに収集できます。ログは既定で秘匿情報がリダクションされます。additionalEntriesでファイルやディレクトリを追加でき、redactionにはplain-text、events-jsonl、noneを指定できます。noneを指定するとリダクションされないため、追加する内容に注意してください。
DebugCollectLogsDestination::directory('/tmp/copilot-debug')を指定するとステージングディレクトリに出力できます。includeでは収集するログや参照パスを個別に指定でき、結果のentriesとskippedEntriesから収集内容を確認できます。宛先・追加エントリのパスはCLIサーバー側のパスです。stdioでCLIを起動する標準構成ではアプリと同じホストですが、TCPで別ホストのCLIサーバーに接続している場合、呼び出し側マシンではなくサーバー側のパスを指定してください。

contentExclusion (experimental)

セッションの作業ディレクトリ内にあるローカル絶対パスが、コンテンツ除外ポリシーの対象か確認できます。ファイルの内容を読み込んだり添付したりする前に呼び出してください。
checkPaths() は絶対パスのみを受け付け、パスはセッションの作業ディレクトリ内にある必要があります。checks は入力と同じ順序で返り、重複したパスもそのまま保持されます。サポートされないパス、ファイルシステム、またはポリシー評価が利用できない場合は available: false と空の checks が返ります。この場合、isExcluded() は常に true を返すため、すべてのパスを除外対象として扱ってください。available: true でも結果にないパスは安全側に倒して除外対象と判定します。

MCP Apps (experimental)

$session->rpc()->mcp()->apps()からMCP Apps用のRPCを呼び出せます。listTools()とcallTool()では、呼び出し元のMCPサーバー名originServerNameが必須です。callTool()の結果は自由形式のMCP結果として返されます。
readResource()はHTMLなどのリソースデータを返します。SDKはブラウザー描画やiframe操作を行わないため、取得した内容の描画は呼び出し側アプリケーションの責務です。

機能別の使用例

以下に、上記の機能の代表的な呼び出し例をまとめています。

remote (experimental: リモートセッションサポート)

詳細は Remote Sessions を参照してください。

sandbox (experimental: サンドボックス制御)

権限ハンドラでは、$request['sandboxPathGrant']がある場合に対象の保留中リクエストのrequestIdで呼び出します。このRPC自身が許可リクエストに応答するため、成功した場合は通常の応答を送らないようPermissionDecision::noResult()を返します。

metadata (experimental: セッション情報)

ローカルセッション管理(experimental)

同じ設定ディレクトリで管理をオプトインしたローカルセッションを、$session->rpc()->management()から設定・一覧・作成・メッセージ送信・クローズできます。setSessionCreationHandler()でホストコールバックを登録すると、create()からのreverse-RPCを受け取れます。コールバックはnewSessionIdと権限・モデル制限を保って子セッションを作成し、SessionManagementCreateResultを返す必要があります。 以下の例では、$sessionCreationHandlerはSessionManagementCreateHostRequestを受け取り、ホスト側で子セッションを作成してSessionManagementCreateResultを返すクロージャです。
message()のacceptedは配信の受け入れを示し、応答やタスク完了を意味しません。子セッションの作業完了を別途確認した後、作成した子だけを閉じる場合はclose()を使います。保存済み履歴は削除されません。

Session canvas

Canvas RPC は $session->rpc()->canvas() から呼び出します。list() は CanvasList の canvases、listOpen() は CanvasListOpenResult の openCanvases に一覧を返します。open() は OpenCanvasInstance、 action 呼び出しは CanvasActionInvokeResult を返します。close() の 戻り値はありません。
Canvas provider の reverse-RPC (canvas.open / canvas.close / canvas.action.invoke) は SessionConfig / ResumeSessionConfig の canvasHandler で処理します。Canvas の描画はホスト UI の責務です。

workflow

Copilot CLI 1.0.89 系で追加されたワークフロー、コネクター、診断などの実験的RPC APIも、SessionRpcから利用できます。これらの可変プロトコルpayloadはJSON互換の配列で渡し、レスポンスも配列として返します。各呼び出しには現在のsessionIdが自動で追加されます。
workflow()はCLIが提供する低レベルRPCを呼び出します。Node.js SDKのようにPHPクロージャーをワークフローとして登録・実行する高レベルAPIは、この同期では追加していません。これらの新しいRPCグループはCLIのバージョンに依存し、実験的であるため、対応するCLIでのみ利用してください。

SessionFS コールバック型

セッションスコープのファイルシステム操作のためのコールバック型(Request/Result)が定義されています。これらはCopilot CLIがクライアントにコールバックする際のリクエスト/レスポンスの型です。 SessionFsStatResult / SessionFsReaddirResult / SessionFsReaddirWithTypesResult は失敗時に使う任意の error(SessionFsError)を持ちます。

SessionFsハンドラー

ClientはsessionFs.readFile / readFileBytes / writeFile / writeFileBytes に加えて、appendFile、exists、stat、mkdir、readdir、readdirWithTypes、rm、rename、sqliteQuery、sqliteTransaction、sqliteExists の各リクエストをSessionのプロバイダーへ振り分けます。ファイル操作の失敗は ENOENT(ENOENTまたは errno 2)/ UNKNOWN のerrorとして返します。existsは例外時にfalse、statは失敗時にゼロ値+errorを返します。プロバイダーが対応していない操作はUNKNOWNエラー(SQLite系はJSON-RPCエラー)になります。sqliteQuery/sqliteExistsの例外はJSON-RPCエラー、sqliteTransactionの失敗は結果のerror(errorClass付き)として返します。 プロバイダー側のインターフェース(SessionFsFilesystemProvider、SessionFsSqliteCapableProvider、SessionFsSqliteProvider、SessionFsSqliteTransactionProvider)は、従来のSessionFsProvider(2メソッド)を壊さないよう別インターフェースとして追加されています。

SQLite コールバック型

SQLiteサポートを有効にするには、SessionFsSetProviderRequest の capabilities に SessionFsSetProviderCapabilities(sqlite: true) を渡します。
通常はこのRPCを直接呼ばず、ClientオプションsessionFs(またはconfig/copilot.phpのsession_fs)を指定するとClient::start()がsessionFs.setProviderを1回だけ送信します。セッションにはcreateSessionFsProviderが必要です(SessionConfigを参照)。 SessionFsSqliteQueryType enum(src/Enums/)はクエリ種別を表します:
  • Exec: DDL/複数ステートメント(結果なし)
  • Query: SELECT(行を返す)
  • Run: INSERT/UPDATE/DELETE(rowsAffected を返す)
これらの型クラスはsrc/Types/Rpc/に配置されています。

配列での引数指定

引数も返り値も専用のクラスを使っていますが引数は配列で指定することも可能です。

テスト

Copilot::fake()でのモックは使えないのでCopilot::expects('client')やCopilot::expects('start')でモックしてください。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年11月9日