会话模式
在不同 Agent 操作模式之间切换
你现在可以使用会话配置选项。专用的会话模式方法将在未来版本的协议中移除。在此之前,你可以为客户端同时提供两者以保持向后兼容性。
Agent 可以提供一组它能操作的模式。模式通常影响使用的系统提示、工具的可用性,以及是否在运行前请求权限。
初始状态
在会话设置期间,Agent 可以返回它能操作的模式列表及当前活跃模式:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"sessionId": "sess_abc123def456",
"modes": {
"currentModeId": "ask",
"availableModes": [
{
"id": "ask",
"name": "Ask",
"description": "Request permission before making any changes"
},
{
"id": "architect",
"name": "Architect",
"description": "Design and plan software systems without implementation"
},
{
"id": "code",
"name": "Code",
"description": "Write and modify code with full tool access"
}
]
}
}
}
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
modes | SessionModeState | 是 | 会话的当前模式状态 |
SessionModeState
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
currentModeId | SessionModeId | 是 | 当前活跃模式的 ID |
availableModes | SessionMode[] | 是 | Agent 可以操作的模式集合 |
SessionMode
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
id | SessionModeId | 是 | 此模式的唯一标识符 |
name | string | 是 | 模式的人类可读名称 |
description | string | - | 提供关于此模式功能的更多详细信息的可选描述 |
设置当前模式
当前模式可以在会话期间的任何时候更改,无论 Agent 是空闲还是正在生成响应。
从客户端
通常,客户端向用户显示可用模式并允许他们更改当前模式,他们可以通过调用 session/set_mode 方法来实现。
{
"jsonrpc": "2.0",
"id": 2,
"method": "session/set_mode",
"params": {
"sessionId": "sess_abc123def456",
"modeId": "code"
}
}
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
sessionId | SessionId | 是 | 要设置模式的会话的 ID |
modeId | SessionModeId | 是 | 要切换到的模式的 ID。必须是 availableModes 中列出的模式之一 |
从 Agent
Agent 也可以更改自己的模式,并通过发送 current_mode_update 会话通知让客户端知道:
{
"jsonrpc": "2.0",
"method": "session/update",
"params": {
"sessionId": "sess_abc123def456",
"update": {
"sessionUpdate": "current_mode_update",
"modeId": "code"
}
}
}
退出计划模式
Agent 可能切换模式的常见情况是从特殊的”退出模式”工具中切换,该工具可以在计划/架构模式期间提供给语言模型。当语言模型确定它准备好开始实施解决方案时,可以调用此工具。此”切换模式”工具通常在运行前请求权限,它可以像任何其他工具一样这样做:
{
"jsonrpc": "2.0",
"id": 3,
"method": "session/request_permission",
"params": {
"sessionId": "sess_abc123def456",
"toolCall": {
"toolCallId": "call_switch_mode_001",
"title": "Ready for implementation",
"kind": "switch_mode",
"status": "pending",
"content": [
{
"type": "text",
"text": "## Implementation Plan..."
}
]
},
"options": [
{
"optionId": "code",
"name": "Yes, and auto-accept all actions",
"kind": "allow_always"
},
{
"optionId": "ask",
"name": "Yes, and manually accept actions",
"kind": "allow_once"
},
{
"optionId": "reject",
"name": "No, stay in architect mode",
"kind": "reject_once"
}
]
}
}
当选择一个选项时,工具运行,设置模式并发送上述提到的 current_mode_update 通知。