## Sources

- Old OpenAPI path: `docs/openapi.json` at git ref `8ecd27b`
- ACP v1 API path: `~/misc/acp-docs/schema/schema.json` (`~/misc/acp-docs/schema/schema.unstable.json` for unstable methods)

| Path / Schema Property | ACP Equivalent |
| --- | --- |
| /v1/agents | UNIMPLEMENTED |
| /v1/agents/{agent}/install | UNIMPLEMENTED |
| /v1/agents/{agent}/models | session/new.result.models.availableModels (UNSTABLE; session-scoped) |
| /v1/agents/{agent}/modes | session/new.result.modes.availableModes (session-scoped) |
| /v1/fs/entries | UNIMPLEMENTED |
| /v1/fs/entry | UNIMPLEMENTED |
| /v1/fs/file | fs/read_text_file + fs/write_text_file (text-only, agent->client direction) |
| /v1/fs/mkdir | UNIMPLEMENTED |
| /v1/fs/move | UNIMPLEMENTED |
| /v1/fs/stat | UNIMPLEMENTED |
| /v1/fs/upload-batch | UNIMPLEMENTED |
| /v1/health | UNIMPLEMENTED |
| /v1/sessions | session/list (UNSTABLE) |
| /v1/sessions/{session_id} | session/new \| session/load \| session/resume (UNSTABLE) |
| /v1/sessions/{session_id}/events | UNIMPLEMENTED |
| /v1/sessions/{session_id}/events/sse | session/update (notification stream) |
| /v1/sessions/{session_id}/messages | session/prompt |
| /v1/sessions/{session_id}/messages/stream | session/prompt + session/update notifications |
| /v1/sessions/{session_id}/permissions/{permission_id}/reply | session/request_permission response |
| /v1/sessions/{session_id}/questions/{question_id}/reject | UNIMPLEMENTED |
| /v1/sessions/{session_id}/questions/{question_id}/reply | UNIMPLEMENTED |
| /v1/sessions/{session_id}/terminate | session/cancel (turn cancellation only) |
| AgentCapabilities | initialize.result.agentCapabilities |
| AgentCapabilities.commandExecution | UNIMPLEMENTED |
| AgentCapabilities.errorEvents | UNIMPLEMENTED |
| AgentCapabilities.fileAttachments | initialize.result.agentCapabilities.promptCapabilities.embeddedContext (partial) |
| AgentCapabilities.fileChanges | session/update.params.update(sessionUpdate=tool_call_update).content[].type=diff |
| AgentCapabilities.images | initialize.result.agentCapabilities.promptCapabilities.image |
| AgentCapabilities.itemStarted | session/update.params.update.sessionUpdate=tool_call \| *_message_chunk (no explicit item-start sentinel) |
| AgentCapabilities.mcpTools | initialize.result.agentCapabilities.mcpCapabilities |
| AgentCapabilities.permissions | session/request_permission (agent->client request) |
| AgentCapabilities.planMode | session/update.params.update.sessionUpdate=plan |
| AgentCapabilities.questions | UNIMPLEMENTED |
| AgentCapabilities.reasoning | session/update.params.update.sessionUpdate=agent_thought_chunk |
| AgentCapabilities.sessionLifecycle | session/new, session/load, session/list (UNSTABLE), session/resume (UNSTABLE), session/fork (UNSTABLE) |
| AgentCapabilities.sharedProcess | UNIMPLEMENTED |
| AgentCapabilities.status | session/update.params.update.tool_call.status \| tool_call_update.status |
| AgentCapabilities.streamingDeltas | session/update.params.update.sessionUpdate=agent_message_chunk |
| AgentCapabilities.textMessages | ContentBlock.type=text |
| AgentCapabilities.toolCalls | session/update.params.update.sessionUpdate=tool_call |
| AgentCapabilities.toolResults | session/update.params.update.sessionUpdate=tool_call_update |
| AgentError | JSON-RPC Error |
| AgentError.agent | Error.data._meta["sandbox-agent/agent"] (extension) |
| AgentError.details | Error.data |
| AgentError.message | Error.message |
| AgentError.session_id | Error.data._meta["sandbox-agent/sessionId"] (extension) |
| AgentError.type | Error.code (+ Error.data._meta["sandbox-agent/errorType"] for legacy string types) |
| AgentError.type.$ref(ErrorType) | Error.code (+ Error.data._meta["sandbox-agent/errorType"] for legacy string types) |
| AgentInfo | initialize.result.agentInfo + initialize.result.agentCapabilities |
| AgentInfo.capabilities | initialize.result.agentCapabilities |
| AgentInfo.capabilities.$ref(AgentCapabilities) | initialize.result.agentCapabilities |
| AgentInfo.credentialsAvailable | UNIMPLEMENTED |
| AgentInfo.id | initialize.result.agentInfo.name |
| AgentInfo.installed | UNIMPLEMENTED |
| AgentInfo.path | UNIMPLEMENTED |
| AgentInfo.serverStatus | UNIMPLEMENTED |
| AgentInfo.serverStatus.allOf[0] | UNIMPLEMENTED |
| AgentInfo.serverStatus.allOf[0].$ref(ServerStatusInfo) | UNIMPLEMENTED |
| AgentInfo.version | initialize.result.agentInfo.version |
| AgentInstallRequest | UNIMPLEMENTED |
| AgentInstallRequest.reinstall | UNIMPLEMENTED |
| AgentListResponse | UNIMPLEMENTED |
| AgentListResponse.agents | UNIMPLEMENTED |
| AgentListResponse.agents[] | UNIMPLEMENTED |
| AgentListResponse.agents[].$ref(AgentInfo) | UNIMPLEMENTED |
| AgentModeInfo | SessionMode |
| AgentModeInfo.description | SessionMode.description |
| AgentModeInfo.id | SessionMode.id |
| AgentModeInfo.name | SessionMode.name |
| AgentModelInfo | ModelInfo (UNSTABLE) |
| AgentModelInfo.defaultVariant | UNIMPLEMENTED |
| AgentModelInfo.id | ModelInfo.modelId (UNSTABLE) |
| AgentModelInfo.name | ModelInfo.name (UNSTABLE) |
| AgentModelInfo.variants | UNIMPLEMENTED |
| AgentModelInfo.variants[] | UNIMPLEMENTED |
| AgentModelsResponse | SessionModelState (UNSTABLE) |
| AgentModelsResponse.defaultModel | SessionModelState.currentModelId (UNSTABLE) |
| AgentModelsResponse.models | SessionModelState.availableModels (UNSTABLE) |
| AgentModelsResponse.models[] | SessionModelState.availableModels[] (UNSTABLE) |
| AgentModelsResponse.models[].$ref(AgentModelInfo) | SessionModelState.availableModels[] -> ModelInfo (UNSTABLE) |
| AgentModesResponse | SessionModeState |
| AgentModesResponse.modes | SessionModeState.availableModes |
| AgentModesResponse.modes[] | SessionModeState.availableModes[] |
| AgentModesResponse.modes[].$ref(AgentModeInfo) | SessionModeState.availableModes[] -> SessionMode |
| AgentUnparsedData | session/update.params.update._meta["sandbox-agent/unparsed"] (extension) |
| AgentUnparsedData.error | session/update.params.update._meta["sandbox-agent/unparsed"].error (extension) |
| AgentUnparsedData.location | session/update.params.update._meta["sandbox-agent/unparsed"].location (extension) |
| AgentUnparsedData.raw_hash | session/update.params.update._meta["sandbox-agent/unparsed"].rawHash (extension) |
| ContentPart | ContentBlock \| ToolCall \| ToolCallUpdate \| ToolCallContent |
| ContentPart.oneOf[0] | ContentBlock (type=text) |
| ContentPart.oneOf[0].text | ContentBlock.text |
| ContentPart.oneOf[0].type | ContentBlock.type="text" |
| ContentPart.oneOf[1] | ContentBlock (type=resource) with JSON payload |
| ContentPart.oneOf[1].json | EmbeddedResource.resource.text (mimeType="application/json") |
| ContentPart.oneOf[1].type | ContentBlock.type="resource" |
| ContentPart.oneOf[2] | session/update.params.update(sessionUpdate=tool_call) |
| ContentPart.oneOf[2].arguments | ToolCall.rawInput |
| ContentPart.oneOf[2].call_id | ToolCall.toolCallId |
| ContentPart.oneOf[2].name | ToolCall._meta["sandbox-agent/toolName"] (extension) |
| ContentPart.oneOf[2].type | session/update.params.update.sessionUpdate="tool_call" |
| ContentPart.oneOf[3] | session/update.params.update(sessionUpdate=tool_call_update) |
| ContentPart.oneOf[3].call_id | ToolCallUpdate.toolCallId |
| ContentPart.oneOf[3].output | ToolCallUpdate.rawOutput |
| ContentPart.oneOf[3].type | session/update.params.update.sessionUpdate="tool_call_update" |
| ContentPart.oneOf[4] | ToolCallContent (type=diff) |
| ContentPart.oneOf[4].action | ToolCall.kind (read->read, write/patch->edit) |
| ContentPart.oneOf[4].action.$ref(FileAction) | ToolKind (read\|edit) |
| ContentPart.oneOf[4].diff | Diff.newText / Diff.oldText |
| ContentPart.oneOf[4].path | Diff.path |
| ContentPart.oneOf[4].type | ToolCallContent.type="diff" |
| ContentPart.oneOf[5] | session/update.params.update(sessionUpdate=agent_thought_chunk) |
| ContentPart.oneOf[5].text | ContentChunk.content.text |
| ContentPart.oneOf[5].type | session/update.params.update.sessionUpdate="agent_thought_chunk" |
| ContentPart.oneOf[5].visibility | ContentChunk.content._meta["sandbox-agent/reasoningVisibility"] (extension) |
| ContentPart.oneOf[5].visibility.$ref(ReasoningVisibility) | ContentChunk.content._meta["sandbox-agent/reasoningVisibility"] (extension) |
| ContentPart.oneOf[6] | ContentBlock (type=image) |
| ContentPart.oneOf[6].mime | ImageContent.mimeType |
| ContentPart.oneOf[6].path | ImageContent.uri |
| ContentPart.oneOf[6].type | ContentBlock.type="image" |
| ContentPart.oneOf[7] | session/update.params.update._meta["sandbox-agent/status"] (extension) |
| ContentPart.oneOf[7].detail | session/update.params.update._meta["sandbox-agent/status"].detail (extension) |
| ContentPart.oneOf[7].label | session/update.params.update._meta["sandbox-agent/status"].label (extension) |
| ContentPart.oneOf[7].type | session/update.params.update._meta["sandbox-agent/status"].type (extension) |
| CreateSessionRequest | session/new.params (+ session/set_mode, session/set_model UNSTABLE, session/set_config_option, _meta extensions) |
| CreateSessionRequest.agent | session/new.params._meta["sandbox-agent/agent"] (extension; agent selection is out-of-band in ACP) |
| CreateSessionRequest.agentMode | session/set_mode.params.modeId (or session/new.params._meta["sandbox-agent/agentMode"]) |
| CreateSessionRequest.agentVersion | session/new.params._meta["sandbox-agent/agentVersion"] (extension) |
| CreateSessionRequest.directory | session/new.params.cwd |
| CreateSessionRequest.mcp | session/new.params.mcpServers |
| CreateSessionRequest.mcp.* | session/new.params.mcpServers[] |
| CreateSessionRequest.mcp.*.$ref(McpServerConfig) | McpServer |
| CreateSessionRequest.model | session/set_model.params.modelId (UNSTABLE) or session/set_config_option (category=model) |
| CreateSessionRequest.permissionMode | session/set_config_option.params (extension-defined option) or _meta |
| CreateSessionRequest.skills | session/new.params._meta["sandbox-agent/skills"] (extension) |
| CreateSessionRequest.skills.allOf[0] | session/new.params._meta["sandbox-agent/skills"] (extension) |
| CreateSessionRequest.skills.allOf[0].$ref(SkillsConfig) | session/new.params._meta["sandbox-agent/skills"] (extension) |
| CreateSessionRequest.title | session/new.params._meta["sandbox-agent/title"] (extension); session/update(session_info_update).title |
| CreateSessionRequest.variant | session/new.params._meta["sandbox-agent/variant"] (extension) |
| CreateSessionResponse | session/new.result |
| CreateSessionResponse.error | JSON-RPC error |
| CreateSessionResponse.error.allOf[0] | JSON-RPC error |
| CreateSessionResponse.error.allOf[0].$ref(AgentError) | JSON-RPC error |
| CreateSessionResponse.healthy | JSON-RPC success (no error) |
| CreateSessionResponse.nativeSessionId | session/new.result.sessionId |
| ErrorData | JSON-RPC Error |
| ErrorData.code | Error.code |
| ErrorData.details | Error.data |
| ErrorData.message | Error.message |
| ErrorType | Error.code (+ Error.data._meta["sandbox-agent/errorType"] for legacy string values) |
| EventSource | session/update.params._meta["sandbox-agent/source"] (extension) |
| EventsQuery | UNIMPLEMENTED |
| EventsQuery.includeRaw | UNIMPLEMENTED |
| EventsQuery.limit | UNIMPLEMENTED |
| EventsQuery.offset | UNIMPLEMENTED |
| EventsResponse | Stream of session/update notifications |
| EventsResponse.events | session/update notifications |
| EventsResponse.events[] | SessionNotification |
| EventsResponse.events[].$ref(UniversalEvent) | SessionNotification (+ JSON-RPC envelope) |
| EventsResponse.hasMore | UNIMPLEMENTED |
| FileAction | ToolKind (read->read, write/patch->edit) |
| FsActionResponse | UNIMPLEMENTED |
| FsActionResponse.path | UNIMPLEMENTED |
| FsDeleteQuery | UNIMPLEMENTED |
| FsDeleteQuery.path | UNIMPLEMENTED |
| FsDeleteQuery.recursive | UNIMPLEMENTED |
| FsDeleteQuery.sessionId | UNIMPLEMENTED |
| FsEntriesQuery | UNIMPLEMENTED |
| FsEntriesQuery.path | UNIMPLEMENTED |
| FsEntriesQuery.sessionId | UNIMPLEMENTED |
| FsEntry | UNIMPLEMENTED |
| FsEntry.entryType | UNIMPLEMENTED |
| FsEntry.entryType.$ref(FsEntryType) | UNIMPLEMENTED |
| FsEntry.modified | UNIMPLEMENTED |
| FsEntry.name | UNIMPLEMENTED |
| FsEntry.path | UNIMPLEMENTED |
| FsEntry.size | UNIMPLEMENTED |
| FsEntryType | UNIMPLEMENTED |
| FsMoveRequest | UNIMPLEMENTED |
| FsMoveRequest.from | UNIMPLEMENTED |
| FsMoveRequest.overwrite | UNIMPLEMENTED |
| FsMoveRequest.to | UNIMPLEMENTED |
| FsMoveResponse | UNIMPLEMENTED |
| FsMoveResponse.from | UNIMPLEMENTED |
| FsMoveResponse.to | UNIMPLEMENTED |
| FsPathQuery | fs/read_text_file.params \| fs/write_text_file.params (partial) |
| FsPathQuery.path | fs/read_text_file.params.path \| fs/write_text_file.params.path |
| FsPathQuery.sessionId | fs/read_text_file.params.sessionId \| fs/write_text_file.params.sessionId |
| FsSessionQuery | fs/read_text_file.params \| fs/write_text_file.params (partial) |
| FsSessionQuery.sessionId | fs/read_text_file.params.sessionId \| fs/write_text_file.params.sessionId |
| FsStat | UNIMPLEMENTED |
| FsStat.entryType | UNIMPLEMENTED |
| FsStat.entryType.$ref(FsEntryType) | UNIMPLEMENTED |
| FsStat.modified | UNIMPLEMENTED |
| FsStat.path | UNIMPLEMENTED |
| FsStat.size | UNIMPLEMENTED |
| FsUploadBatchQuery | UNIMPLEMENTED |
| FsUploadBatchQuery.path | UNIMPLEMENTED |
| FsUploadBatchQuery.sessionId | UNIMPLEMENTED |
| FsUploadBatchResponse | UNIMPLEMENTED |
| FsUploadBatchResponse.paths | UNIMPLEMENTED |
| FsUploadBatchResponse.paths[] | UNIMPLEMENTED |
| FsUploadBatchResponse.truncated | UNIMPLEMENTED |
| FsWriteResponse | fs/write_text_file.result (partial) |
| FsWriteResponse.bytesWritten | UNIMPLEMENTED |
| FsWriteResponse.path | fs/write_text_file.params.path |
| HealthResponse | UNIMPLEMENTED |
| HealthResponse.status | UNIMPLEMENTED |
| ItemDeltaData | session/update.params.update(sessionUpdate=*message_chunk) |
| ItemDeltaData.delta | ContentChunk.content.text |
| ItemDeltaData.item_id | ContentChunk._meta["sandbox-agent/itemId"] (extension) |
| ItemDeltaData.native_item_id | ContentChunk._meta["sandbox-agent/nativeItemId"] (extension) |
| ItemEventData | session/update.params.update |
| ItemEventData.item | SessionUpdate (ToolCall \| ToolCallUpdate \| ContentChunk) |
| ItemEventData.item.$ref(UniversalItem) | SessionUpdate (ToolCall \| ToolCallUpdate \| ContentChunk) |
| ItemKind | SessionUpdate.sessionUpdate + ToolKind |
| ItemRole | Role (assistant\|user) + SessionUpdate.sessionUpdate for non-message items |
| ItemStatus | ToolCall.status \| ToolCallUpdate.status |
| McpCommand | McpServerStdio.command + McpServerStdio.args |
| McpCommand.oneOf[0] | McpServerStdio.command |
| McpCommand.oneOf[1] | McpServerStdio.args |
| McpCommand.oneOf[1][] | McpServerStdio.args[] |
| McpOAuthConfig | McpServer._meta["sandbox-agent/oauth"] (extension) |
| McpOAuthConfig.clientId | McpServer._meta["sandbox-agent/oauth"].clientId (extension) |
| McpOAuthConfig.clientSecret | McpServer._meta["sandbox-agent/oauth"].clientSecret (extension) |
| McpOAuthConfig.scope | McpServer._meta["sandbox-agent/oauth"].scope (extension) |
| McpOAuthConfigOrDisabled | McpServer._meta["sandbox-agent/oauth"] (extension) |
| McpOAuthConfigOrDisabled.oneOf[0] | McpServer._meta["sandbox-agent/oauth"] (extension) |
| McpOAuthConfigOrDisabled.oneOf[0].$ref(McpOAuthConfig) | McpServer._meta["sandbox-agent/oauth"] (extension) |
| McpOAuthConfigOrDisabled.oneOf[1] | McpServer._meta["sandbox-agent/oauthDisabled"] (extension) |
| McpRemoteTransport | McpServer.type ("http" \| "sse") |
| McpServerConfig | McpServer |
| McpServerConfig.oneOf[0] | McpServerStdio (McpServer.type="stdio") |
| McpServerConfig.oneOf[0].args | McpServerStdio.args |
| McpServerConfig.oneOf[0].args[] | McpServerStdio.args[] |
| McpServerConfig.oneOf[0].command | McpServerStdio.command |
| McpServerConfig.oneOf[0].command.$ref(McpCommand) | McpServerStdio.command + McpServerStdio.args |
| McpServerConfig.oneOf[0].cwd | McpServerStdio._meta["sandbox-agent/cwd"] (extension) |
| McpServerConfig.oneOf[0].enabled | McpServerStdio._meta["sandbox-agent/enabled"] (extension) |
| McpServerConfig.oneOf[0].env | McpServerStdio.env (object -> EnvVariable[]) |
| McpServerConfig.oneOf[0].env.* | McpServerStdio.env[].{name,value} |
| McpServerConfig.oneOf[0].timeoutMs | McpServerStdio._meta["sandbox-agent/timeoutMs"] (extension) |
| McpServerConfig.oneOf[0].type | McpServer type="stdio" |
| McpServerConfig.oneOf[1] | McpServerHttp \| McpServerSse |
| McpServerConfig.oneOf[1].bearerTokenEnvVar | McpServer._meta["sandbox-agent/bearerTokenEnvVar"] (extension) |
| McpServerConfig.oneOf[1].enabled | McpServer._meta["sandbox-agent/enabled"] (extension) |
| McpServerConfig.oneOf[1].envHeaders | McpServer._meta["sandbox-agent/envHeaders"] (extension) |
| McpServerConfig.oneOf[1].envHeaders.* | McpServer._meta["sandbox-agent/envHeaders"] (extension) |
| McpServerConfig.oneOf[1].headers | McpServerHttp.headers \| McpServerSse.headers (object -> HttpHeader[]) |
| McpServerConfig.oneOf[1].headers.* | McpServerHttp.headers[].{name,value} \| McpServerSse.headers[].{name,value} |
| McpServerConfig.oneOf[1].oauth | McpServer._meta["sandbox-agent/oauth"] (extension) |
| McpServerConfig.oneOf[1].oauth.allOf[0] | McpServer._meta["sandbox-agent/oauth"] (extension) |
| McpServerConfig.oneOf[1].oauth.allOf[0].$ref(McpOAuthConfigOrDisabled) | McpServer._meta["sandbox-agent/oauth"] (extension) |
| McpServerConfig.oneOf[1].timeoutMs | McpServer._meta["sandbox-agent/timeoutMs"] (extension) |
| McpServerConfig.oneOf[1].transport | McpServer.type ("http" \| "sse") |
| McpServerConfig.oneOf[1].transport.allOf[0] | McpServer.type ("http" \| "sse") |
| McpServerConfig.oneOf[1].transport.allOf[0].$ref(McpRemoteTransport) | McpServer.type ("http" \| "sse") |
| McpServerConfig.oneOf[1].type | McpServer.type ("http" \| "sse") |
| McpServerConfig.oneOf[1].url | McpServerHttp.url \| McpServerSse.url |
| MessageAttachment | ContentBlock.resource_link \| ContentBlock.image |
| MessageAttachment.filename | ResourceLink.name \| ResourceLink.title |
| MessageAttachment.mime | ResourceLink.mimeType \| ImageContent.mimeType |
| MessageAttachment.path | ResourceLink.uri \| ImageContent.uri |
| MessageRequest | session/prompt.params |
| MessageRequest.attachments | session/prompt.params.prompt[] (non-text ContentBlock entries) |
| MessageRequest.attachments[] | session/prompt.params.prompt[] (resource_link/image/resource) |
| MessageRequest.attachments[].$ref(MessageAttachment) | ContentBlock.resource_link \| ContentBlock.image |
| MessageRequest.message | session/prompt.params.prompt[]: ContentBlock(type=text).text |
| PermissionEventData | session/request_permission.params + response |
| PermissionEventData.action | session/request_permission.params.toolCall.title \| .kind |
| PermissionEventData.metadata | session/request_permission.params._meta (extension) |
| PermissionEventData.permission_id | JSON-RPC request id of session/request_permission |
| PermissionEventData.status | session/request_permission lifecycle + RequestPermissionOutcome |
| PermissionEventData.status.$ref(PermissionStatus) | RequestPermissionOutcome + PermissionOption.kind mapping |
| PermissionReply | RequestPermissionOutcome.selected.optionId (mapped from chosen PermissionOption) |
| PermissionReplyRequest | session/request_permission response |
| PermissionReplyRequest.reply | RequestPermissionResponse.outcome |
| PermissionReplyRequest.reply.$ref(PermissionReply) | RequestPermissionResponse.outcome |
| PermissionStatus | RequestPermissionOutcome + PermissionOption.kind (allow_once\|allow_always\|reject_once\|reject_always) |
| ProblemDetails | JSON-RPC Error (partial) |
| ProblemDetails.detail | Error.data.detail (or Error.message) |
| ProblemDetails.instance | Error.data.instance |
| ProblemDetails.status | Error.code |
| ProblemDetails.title | Error.message |
| ProblemDetails.type | Error.data.type |
| ProblemDetails.* | Error.data.* |
| QuestionEventData | UNIMPLEMENTED |
| QuestionEventData.options | UNIMPLEMENTED |
| QuestionEventData.options[] | UNIMPLEMENTED |
| QuestionEventData.prompt | UNIMPLEMENTED |
| QuestionEventData.question_id | UNIMPLEMENTED |
| QuestionEventData.response | UNIMPLEMENTED |
| QuestionEventData.status | UNIMPLEMENTED |
| QuestionEventData.status.$ref(QuestionStatus) | UNIMPLEMENTED |
| QuestionReplyRequest | UNIMPLEMENTED |
| QuestionReplyRequest.answers | UNIMPLEMENTED |
| QuestionReplyRequest.answers[] | UNIMPLEMENTED |
| QuestionReplyRequest.answers[][] | UNIMPLEMENTED |
| QuestionStatus | UNIMPLEMENTED |
| ReasoningVisibility | Content._meta["sandbox-agent/reasoningVisibility"] (extension) |
| ServerStatus | UNIMPLEMENTED |
| ServerStatusInfo | UNIMPLEMENTED |
| ServerStatusInfo.baseUrl | UNIMPLEMENTED |
| ServerStatusInfo.lastError | UNIMPLEMENTED |
| ServerStatusInfo.restartCount | UNIMPLEMENTED |
| ServerStatusInfo.status | UNIMPLEMENTED |
| ServerStatusInfo.status.$ref(ServerStatus) | UNIMPLEMENTED |
| ServerStatusInfo.uptimeMs | UNIMPLEMENTED |
| SessionEndedData | session/prompt.result.stopReason (+ _meta extension for process details) |
| SessionEndedData.exit_code | session/prompt.result._meta["sandbox-agent/sessionEnd"].exitCode (extension) |
| SessionEndedData.message | session/prompt.result._meta["sandbox-agent/sessionEnd"].message (extension) |
| SessionEndedData.reason | session/prompt.result.stopReason |
| SessionEndedData.reason.$ref(SessionEndReason) | session/prompt.result.stopReason |
| SessionEndedData.stderr | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr (extension) |
| SessionEndedData.stderr.allOf[0] | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr (extension) |
| SessionEndedData.stderr.allOf[0].$ref(StderrOutput) | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr (extension) |
| SessionEndedData.terminated_by | session/prompt.result._meta["sandbox-agent/sessionEnd"].terminatedBy (extension) |
| SessionEndedData.terminated_by.$ref(TerminatedBy) | session/prompt.result._meta["sandbox-agent/sessionEnd"].terminatedBy (extension) |
| SessionEndReason | StopReason (completed->end_turn, terminated->cancelled, error->JSON-RPC error or refusal) |
| SessionInfo | session/list.result.sessions[] (UNSTABLE) + session/update(session_info_update) |
| SessionInfo.agent | SessionInfo._meta["sandbox-agent/agent"] (extension) |
| SessionInfo.agentMode | SessionModeState.currentModeId / CurrentModeUpdate.currentModeId |
| SessionInfo.createdAt | SessionInfo._meta["sandbox-agent/createdAt"] (extension) |
| SessionInfo.directory | SessionInfo.cwd |
| SessionInfo.ended | SessionInfo._meta["sandbox-agent/ended"] (extension) |
| SessionInfo.eventCount | SessionInfo._meta["sandbox-agent/eventCount"] (extension) |
| SessionInfo.mcp | SessionInfo._meta["sandbox-agent/mcp"] (extension) |
| SessionInfo.mcp.* | SessionInfo._meta["sandbox-agent/mcp"][*] (extension) |
| SessionInfo.mcp.*.$ref(McpServerConfig) | SessionInfo._meta["sandbox-agent/mcp"][*] (extension) |
| SessionInfo.model | SessionModelState.currentModelId (UNSTABLE) or SessionInfo._meta["sandbox-agent/model"] |
| SessionInfo.nativeSessionId | SessionInfo._meta["sandbox-agent/nativeSessionId"] (extension) |
| SessionInfo.permissionMode | SessionInfo._meta["sandbox-agent/permissionMode"] (extension) |
| SessionInfo.sessionId | SessionInfo.sessionId |
| SessionInfo.skills | SessionInfo._meta["sandbox-agent/skills"] (extension) |
| SessionInfo.skills.allOf[0] | SessionInfo._meta["sandbox-agent/skills"] (extension) |
| SessionInfo.skills.allOf[0].$ref(SkillsConfig) | SessionInfo._meta["sandbox-agent/skills"] (extension) |
| SessionInfo.title | SessionInfo.title \| SessionInfoUpdate.title |
| SessionInfo.updatedAt | SessionInfo.updatedAt \| SessionInfoUpdate.updatedAt |
| SessionInfo.variant | SessionInfo._meta["sandbox-agent/variant"] (extension) |
| SessionListResponse | session/list.result (UNSTABLE) |
| SessionListResponse.sessions | session/list.result.sessions (UNSTABLE) |
| SessionListResponse.sessions[] | session/list.result.sessions[] (UNSTABLE) |
| SessionListResponse.sessions[].$ref(SessionInfo) | session/list.result.sessions[] -> SessionInfo (UNSTABLE) |
| SessionStartedData | session/new.result (+ _meta extensions) |
| SessionStartedData.metadata | session/new.result._meta (extension) |
| SkillsConfig | session/new.params._meta["sandbox-agent/skills"] (extension) |
| SkillsConfig.sources | session/new.params._meta["sandbox-agent/skills"].sources (extension) |
| SkillsConfig.sources[] | session/new.params._meta["sandbox-agent/skills"].sources[] (extension) |
| SkillsConfig.sources[].$ref(SkillSource) | session/new.params._meta["sandbox-agent/skills"].sources[] (extension) |
| SkillSource | session/new.params._meta["sandbox-agent/skills"].sources[] (extension) |
| SkillSource.ref | session/new.params._meta["sandbox-agent/skills"].sources[].ref (extension) |
| SkillSource.skills | session/new.params._meta["sandbox-agent/skills"].sources[].skills (extension) |
| SkillSource.skills[] | session/new.params._meta["sandbox-agent/skills"].sources[].skills[] (extension) |
| SkillSource.source | session/new.params._meta["sandbox-agent/skills"].sources[].source (extension) |
| SkillSource.subpath | session/new.params._meta["sandbox-agent/skills"].sources[].subpath (extension) |
| SkillSource.type | session/new.params._meta["sandbox-agent/skills"].sources[].type (extension) |
| StderrOutput | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr (extension) |
| StderrOutput.head | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr.head (extension) |
| StderrOutput.tail | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr.tail (extension) |
| StderrOutput.total_lines | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr.totalLines (extension) |
| StderrOutput.truncated | session/prompt.result._meta["sandbox-agent/sessionEnd"].stderr.truncated (extension) |
| TerminatedBy | session/prompt.result._meta["sandbox-agent/sessionEnd"].terminatedBy (extension) |
| TurnEventData | session/prompt lifecycle (request start -> response end) |
| TurnEventData.metadata | session/prompt.params._meta \| session/prompt.result._meta |
| TurnEventData.phase | session/prompt lifecycle phase |
| TurnEventData.phase.$ref(TurnPhase) | session/prompt lifecycle phase |
| TurnEventData.turn_id | session/prompt.params._meta["sandbox-agent/turnId"] (extension) |
| TurnPhase | session/prompt lifecycle: started=request received, ended=prompt response returned |
| TurnStreamQuery | UNIMPLEMENTED |
| TurnStreamQuery.includeRaw | UNIMPLEMENTED |
| UniversalEvent | JSON-RPC envelope + SessionNotification(session/update) + request/response events |
| UniversalEvent.data | session/update.params.update |
| UniversalEvent.data.$ref(UniversalEventData) | SessionUpdate \| JSON-RPC Error \| session/request_permission |
| UniversalEvent.event_id | session/update.params._meta["sandbox-agent/eventId"] (extension) |
| UniversalEvent.native_session_id | session/update.params._meta["sandbox-agent/nativeSessionId"] (extension) |
| UniversalEvent.raw | session/update.params._meta["sandbox-agent/raw"] (extension) |
| UniversalEvent.sequence | session/update.params._meta["sandbox-agent/sequence"] (extension) |
| UniversalEvent.session_id | session/update.params.sessionId |
| UniversalEvent.source | session/update.params._meta["sandbox-agent/source"] (extension) |
| UniversalEvent.source.$ref(EventSource) | session/update.params._meta["sandbox-agent/source"] (extension) |
| UniversalEvent.synthetic | session/update.params._meta["sandbox-agent/synthetic"] (extension) |
| UniversalEvent.time | session/update.params._meta["sandbox-agent/time"] (extension) |
| UniversalEvent.type | session/update.params.update.sessionUpdate \| JSON-RPC method type |
| UniversalEvent.type.$ref(UniversalEventType) | session/update.params.update.sessionUpdate \| JSON-RPC method type |
| UniversalEventData | SessionUpdate \| JSON-RPC Error \| session/request_permission |
| UniversalEventData.oneOf[0] | session/prompt lifecycle (turn metadata in _meta) |
| UniversalEventData.oneOf[0].$ref(TurnEventData) | session/prompt lifecycle (request/response boundary) |
| UniversalEventData.oneOf[1] | session/new.result |
| UniversalEventData.oneOf[1].$ref(SessionStartedData) | session/new.result |
| UniversalEventData.oneOf[2] | session/prompt.result.stopReason |
| UniversalEventData.oneOf[2].$ref(SessionEndedData) | session/prompt.result.stopReason (+ _meta extension) |
| UniversalEventData.oneOf[3] | session/update.params.update |
| UniversalEventData.oneOf[3].$ref(ItemEventData) | SessionUpdate (tool_call/tool_call_update/content chunk) |
| UniversalEventData.oneOf[4] | session/update.params.update(sessionUpdate=*message_chunk) |
| UniversalEventData.oneOf[4].$ref(ItemDeltaData) | ContentChunk |
| UniversalEventData.oneOf[5] | JSON-RPC Error |
| UniversalEventData.oneOf[5].$ref(ErrorData) | JSON-RPC Error |
| UniversalEventData.oneOf[6] | session/request_permission |
| UniversalEventData.oneOf[6].$ref(PermissionEventData) | session/request_permission |
| UniversalEventData.oneOf[7] | UNIMPLEMENTED |
| UniversalEventData.oneOf[7].$ref(QuestionEventData) | UNIMPLEMENTED |
| UniversalEventData.oneOf[8] | session/update.params.update._meta["sandbox-agent/unparsed"] (extension) |
| UniversalEventData.oneOf[8].$ref(AgentUnparsedData) | session/update.params.update._meta["sandbox-agent/unparsed"] (extension) |
| UniversalEventType | session/update.sessionUpdate + JSON-RPC method categories |
| UniversalItem | SessionUpdate payload (ContentChunk \| ToolCall \| ToolCallUpdate) |
| UniversalItem.content | ContentChunk.content \| ToolCall.content \| ToolCallUpdate.content |
| UniversalItem.content[] | ToolCall.content[] \| ToolCallUpdate.content[] |
| UniversalItem.content[].$ref(ContentPart) | ToolCallContent \| ContentBlock |
| UniversalItem.item_id | ToolCall.toolCallId \| ToolCallUpdate.toolCallId \| _meta["sandbox-agent/itemId"] |
| UniversalItem.kind | SessionUpdate.sessionUpdate + ToolKind |
| UniversalItem.kind.$ref(ItemKind) | SessionUpdate.sessionUpdate + ToolKind |
| UniversalItem.native_item_id | SessionUpdate._meta["sandbox-agent/nativeItemId"] (extension) |
| UniversalItem.parent_id | SessionUpdate._meta["sandbox-agent/parentId"] (extension) |
| UniversalItem.role | Role (assistant\|user) for message chunks |
| UniversalItem.role.allOf[0] | Role |
| UniversalItem.role.allOf[0].$ref(ItemRole) | Role (partial) |
| UniversalItem.status | ToolCall.status \| ToolCallUpdate.status |
| UniversalItem.status.$ref(ItemStatus) | ToolCallStatus |

## Caveats

- `UNIMPLEMENTED` means there is no ACP-standard field/method with equivalent semantics in `schema.unstable.json`; implementation would require ACP extension methods (`_...`) and/or `_meta` payloads.
- Rows mapped to `_meta[...]` are ACP-compatible extensions, not standard interoperable ACP fields; both sides must agree on names and semantics.
- Legacy event polling (`/v1/sessions/{session_id}/events`) has no ACP equivalent; ACP is stream-first via `session/update` notifications over streamable HTTP.
- Session lifecycle differs: ACP has `session/new`, `session/load`, `session/resume` (UNSTABLE), and `session/fork` (UNSTABLE), but no standard explicit "close session" method.
- Permission handling is request/response (`session/request_permission`) tied to JSON-RPC request IDs; it does not use standalone REST reply endpoints.
- Question/answer HITL flow in the old schema has no standard ACP equivalent today (separate from permission prompts).
- Agent registry/installation/server health/status APIs are outside ACP core and require separate custom HTTP APIs or ACP extensions.
- ACP filesystem methods are client capabilities (`fs/read_text_file`, `fs/write_text_file`) and are text-only; old binary/raw filesystem REST operations remain out of scope for ACP core.
- Model and session listing mappings rely on ACP UNSTABLE methods (`session/list`, `session/set_model`, model state in session responses) and may change.
- Some old enums do not match ACP enum domains 1:1 (for example `ErrorType`, `SessionEndReason`, `PermissionStatus`); mappings here are best-effort normalization.
