Functions
query()
SDK 的主入口函数。创建一个 async iterator,按消息到达顺序流式输出消息。
参数
返回值
返回AsyncIterator[Message],通过 async for 消费。
QoderSDKClient
基于类的多轮会话 API。适合需要在多轮之间保持会话状态、动态切换模型或权限模式的场景。
client.query()
priority="now" 停止当前回复并立即处理,"next" 在下一个合适的时机处理,"later" 等当前回复结束后处理。should_query=False 会把消息加入对话,但不会仅凭这条消息触发回复。处理时机仍由 priority 决定。
message_uuid 用于取消消息和 replay 去重,不要在同一会话内复用。异步可迭代输入不能同时传 message_uuid,应在每个消息字典中分别设置 uuid。session_id 是入站 wire 元数据,不会把消息路由到其他会话;输入始终归属当前连接的 CLI session。
client.interrupt()
client.cancel_async_message()
True;消息不存在或已无法取消时返回 False。参见取消排队消息。
client.get_server_info()
skills 是发现清单,不代表主会话当前全部可调用。返回类型见 SDKControlInitializeResponse,skill 发现与调用策略见 Skills。
client.list_plugins()
get_server_info() 的初始化资源快照是两个独立入口;返回字段见 Plugins 返回值参考。
外置会话函数
Python 使用独立的异步函数查看和修改SessionStore 中的会话。接入方式和行为说明见外置会话存储。
directory 用于标识项目,默认使用当前目录。列表与消息函数支持 limit 和 offset。
import_session_to_store()
把已有的本地会话复制到外置存储。
Types
QoderAgentOptions
query() 和 QoderSDKClient 的配置对象。Python SDK 使用 snake_case 字段名。
SessionStore
外置存储适配器需要实现的异步协议。append 和 load 是必需方法;其余方法是可选能力,可以通过抛出 NotImplementedError 表示未实现。
SessionKey 包含 project_key、session_id 和可选的 subpath。SessionStoreEntry 是不透明的 JSON-safe 字典。行为要求见外置会话存储。
SessionStoreFlushMode
InMemorySessionStore
用于开发和测试的内置存储。它实现全部可选能力,并额外提供 get_entries(key)、size 和 clear()。进程退出后数据会丢失。
SDKSessionInfo
外置会话列表和查询函数返回的会话元数据。
file_size 表示可用时的序列化会话数据大小。时间字段使用 Unix 毫秒时间戳。
SessionMessage
会话和子代理消息函数返回的历史用户或助手消息。
Settings
QoderAgentOptions.settings 可以传 settings 文件路径,也可以直接传 dict[str, Any]。SDK 会把对象中的键原样传给 CLI,因此 settings 键仍使用 camelCase。下面列出与 skill 相关的字段;默认值和实际效果取决于配套 CLI 版本。
skillOverrides
按 skill 名控制发现和可见性。插件 skill 使用插件限定名 plugin:skill,其它来源使用裸名;匹配时先检查完整名称,再回退到裸名。
完整的会话级 skill 配置见 Skills。
SDKControlInitializeResponse
client.get_server_info() 返回的初始化快照。
skills 是带元数据的发现清单。消息流中的 SystemMessage(subtype="init").data["skills"] 是名称列表 list[str],两者不是同一个返回结构。
认证
便捷用法见 SDK 认证。
Agents Reference
本页汇总 SDK Agent 相关的稳定配置项。入门和使用场景见 子 Agent 使用指南。可用 Agent 来源
当前会话可用的 Agent 可能来自多个来源:
交互式 CLI 中可以通过
/agents 查看当前发现的 Agent;命令行可以运行 qodercli agents list。Python SDK 中可以在 QoderSDKClient 连接完成后调用 client.supported_agents() 获取当前会话可用 Agent 的摘要。
QoderAgentOptions.agents
类型: dict[str, AgentDefinition] | None
注册当前会话可用的自定义 Agent。dict key 是 Agent 名称,value 是该 Agent 的定义。
必须包含Agent工具:自定义子 Agent 需要主会话通过内置Agent工具发起委派,因此allowed_tools中必须包含Agent工具。
Agent 工具调用这些子 Agent。主会话要能委派任务,工具集中必须存在 Agent;allowed_tools=["Agent"] 是必需的预授权写法。如果你使用 tools 收窄主会话可用工具,也要把 Agent 放进去。
QoderAgentOptions.agent
类型: str | None
指定主会话以哪个 Agent 身份运行。值可以是 agents 中注册的名称,也可以是当前 CLI 已发现的内置 / 插件 Agent 名称。
prompt、model 和工具限制。省略时使用默认主会话行为。
AgentDefinition
自定义 Agent 的定义。Python SDK 的 AgentDefinition 是 dataclass,字段名使用协议风格 camelCase。下列字段是当前版本 SDK 覆盖并经过功能测试验证的稳定能力。
Python SDK 会把
AgentDefinition 通过 dataclasses.asdict() 序列化进 initialize 请求;qodercli 再按当前 Agent schema 解析。
description
描述 Agent 适合处理什么任务。它会影响模型是否选择该 Agent。
Helpful assistant 这类宽泛描述。
prompt
Agent 的系统提示词,用来定义角色、约束和输出格式。
tools
Agent 可用工具白名单。设置后,Agent 只能使用列出的工具。
tools 时,使用子 Agent 默认工具表。子 Agent 的工具表不继承主会话 allowed_tools 的裁剪。
disallowedTools
从 Agent 工具集中排除指定工具。
disallowedTools 时,子 Agent 不继承主会话 disallowed_tools 的裁剪。通常不要同时设置 tools 和 disallowedTools,除非你明确知道最终工具集合。
model
为 Agent 指定模型,省略时使用会话默认模型。Python 类型层面是 str | None,SDK 不在本地限制具体字符串。常见模型级别包括:
Agent 还支持两个特殊写法:
mcpServers
tools=["mcp__server__tool"],避免把该 server 的全部工具都暴露给 Agent。
skills
预加载到 Agent 上下文的 skill 名称列表。支持普通 skill 名称,也支持插件限定名。
initialPrompt
当该 Agent 通过 QoderAgentOptions.agent 成为主会话 Agent 时,自动作为首轮用户输入提交。
Agent 工具调用时会被忽略。
maxTurns
限制 Agent 的最大 API 轮次。适合控制成本、执行时间和循环风险。
effort
effort 通常适合复杂审查、架构分析和高风险变更,但会增加延迟和 token 消耗。
permissionMode
控制该 Agent 内部工具执行的权限模式。它和会话级 permission_mode 使用同一组语义,但作用范围只限这个 Agent。会话级权限链路、allowed_tools / disallowed_tools / can_use_tool 的优先级和示例见 权限控制。
权限语义介绍见 权限控制。
AgentInfo
QoderSDKClient.supported_agents() 返回的 Agent 摘要。
AgentInfo 的 TypedDict;supported_agents() 的返回类型是 list[dict[str, Any]]。上面的结构是实际返回 dict 的稳定字段约定。
agents 注册的 Agent,也可能包含当前 CLI 发现的内置、项目、用户或插件 Agent。实际可用项取决于 qodercli 版本和当前配置。
上下文与调用边界
- 子 Agent 使用独立上下文,不接收父会话完整历史。
- 父会话传给子 Agent 的主要信息,是调用
Agent工具时传入的任务 prompt。 - 子 Agent 的中间工具结果不会直接进入父会话;父会话收到的是子 Agent 最终返回。
- 子 Agent 不能再生成自己的子 Agent,因此不要把
Agent放进子 Agent 的tools。 initialPrompt只对agent指定的主会话 Agent 生效。
相关文档
Model Policy
query() 的动态模型选择能力。两种模式:固定模型(不传 resolve_model,使用 options.model 或后端默认)与动态回调模式(传入 resolve_model,每次 LLM 调用前由回调决定模型)。完整概念、触发时机与错误处理见 Model Policy。
options.resolve_model
类型: ModelPolicyProvider
动态回调模式入口。传入即进入动态回调模式,每次 LLM 请求前 SDK 都会调用该回调拿模型;回调返回的 model 是该次请求的最终模型,不会自动降级。
options.resolve_model_timeout_ms
类型: int,默认 500
回调超时(毫秒)。超时后抛 ModelPolicyTimeoutError,query 失败,不降级。仅在传入 resolve_model 时生效。
ModelPolicyProvider
回调函数签名。同步或异步均可。
QoderModelPurpose 区分:
行为要点:
- 同一会话内会触发多次(每个 turn / tool / 子任务前都会再问一次)。
- 回调返回的
model是该次请求的最终模型,SDK 不再做二次校验。 - 抛异常或返回空
model让 query 直接失败,详细错误处理见 Model Policy — 错误处理。
ModelPolicyContext
回调每次接收的上下文。
QoderModelPurpose
ModelPolicyResult
回调返回值。
支持的
parameters 键:
model 形式:
- 字符串 — 后端支持的模型 ID(如
auto/performance/glm51),具体可用值由client.get_available_models()实时返回。必须非空,否则 query 失败。 CustomModel对象(BYOK) — SDK 自动提取对象里的model字段作为本次调用的模型标识,其余字段作为凭证转发给 CLI 路由到第三方 LLM。
CustomModel
BYOK 凭证。在 resolve_model 回调里把 model 字段直接设为该对象,本次 LLM 请求会路由到第三方 provider。
注意:
provider必须命中目录里的key,否则后端鉴权失败。api_key错误时鉴权失败让 query 直接失败(动态回调模式不降级)。- BYOK 调用平台
total_cost_usd计为 0,token 用量按真实值上报,由 provider 侧扣费。
BYOK 目录类型
client.list_byok_providers() 返回的 provider/model 目录。
BYOKProviderInfo
BYOKFieldInfo
BYOKModelTypeInfo
BYOKModelInfo
ModelInfo
client.get_available_models() 返回的可用模型摘要,也作为 ModelPolicyContext.availableModels 的元素类型。
ModelContextConfig
模型的上下文窗口配置,按层级标签(如 "200K"、"1M")索引。
ModelThinkingConfig
模型的思考(推理)配置。
ModelPromotion
CLI 从模型列表 API 透传的优惠/折扣信息。嵌套字段名保持服务端的 snake_case 形式。
ServerModelJson
模型列表 API 返回的 JSON 兼容原始模型条目。服务端新增字段尚未进入 ModelInfo 一等字段时,可以从这里读取。
UsageInfo
client.get_usage_info() 返回的账号配额与用量快照。
各额度桶均以
unit(通常为 credits)为单位,按 total(组织包为 cap)给出 used / remaining / percentage。
缺失字段或运行时类型不符合预期的字段会从返回字典中省略。
ModelPolicyTimeoutError
resolve_model 回调超过 options.resolve_model_timeout_ms 仍未返回时由 SDK 抛出,query 直接失败,不降级。
client.set_model()
ModelInfo.value。
client.set_proxy()
http://、https://、socks5:// 和 socks://。传 None 或空字符串可清除代理。
client.get_available_models()
ModelPolicyContext.availableModels 已实时携带相同列表,无需额外调用。
client.list_byok_providers()
- 返回
None:CLI 不支持该接口(兼容降级,不抛异常)。 - 返回数组(可能为空):当前账号可用的 provider 列表(空数组表示账号未开通 BYOK)。
client.get_usage_info()
- 返回
None:CLI 未登录、旧版本 CLI 不支持该接口,或 CLI 未返回字典(兼容降级,不抛异常)。 - 返回
UsageInfo字典:运行时类型合法的账号配额与用量字段。缺失或类型不合法的字段会被省略。
UsageInfo。
CanUseTool
宿主自定义的工具权限审批回调。
ToolPermissionContext
完整使用与例子见 权限控制。
PermissionMode
更多权限链路说明见 权限控制。
PermissionResult
CanUseTool 的返回值。
allow.updated_input 修改后会替换工具实际收到的入参。deny.interrupt=True 拒绝同时中断 Agent。
can_use_tool 收到的 tool_name 是完整工具名,例如 "Bash"、"Read"、"mcp__orders__lookup_order"。
McpServerConfig
MCP 服务器配置,传给 QoderAgentOptions.mcp_servers。
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfig
create_sdk_mcp_server() 工厂返回,见 MCP - In-Process Server。
McpServerToolPolicy
SdkPluginConfig
加载本地插件。
SettingSource
控制加载哪些 filesystem settings。
省略时按 CLI 默认加载所有源;传
[] 完全跳过。
Cloud Agent Reference
本节汇总 Cloud Agent experimental runtime 的配置类型。入门和使用场景见 Cloud Agent。CloudAgentOptions
QoderAgentOptions.experimental_cloud_agent 的类型。Cloud runtime 的 agent / session 引用配置;完整用法见 Cloud Agent。
互斥约束:
agent["id"]与agent["create"]互斥。session["id"]与session["create"]互斥。- 传
session["id"]时不允许同时传agent(session 自身已绑定 agent)。
AgentCreateParams (Cloud)
新建 Cloud Agent 的请求体,对应 Qoder Cloud OpenAPI 的 agent create 字段。
BetaManagedAgentsAgentToolset20260401Params
BetaManagedAgentsURLMCPServerParams
BetaManagedAgentsSkillParams
CloudSessionCreateParams
新建 Cloud session 的请求体。
CloudSessionResource
CloudAgentStreamOptions
SSE replay 和 delta 选项。Python SDK 同时接受 snake_case 和 camelCase。
CloudAgentEventMessage
Cloud runtime(options.experimental_cloud_agent)下,从 Qoder Cloud session SSE 流转发的事件。完整用法见 Cloud Agent。
Cloud Agent 错误类型
相关文档
- Cloud Agent — 入门、用法、约束
- SDK 认证 — PAT 获取
- 多轮对话 — 本地 runtime 多轮
Tools Reference
本页汇总工具相关的稳定 API、内置工具列表和类型定义。使用路径和场景说明见 工具使用指南。说明:Python SDK 当前没有导出 TypeScript SDK 里的内置工具输入 / 输出类型集合,例如BashInput、FileReadInput、ToolInputSchemas。本页会在对应章节明确标注实现状态。
ToolConfig
TypeScript SDK 提供 options.toolConfig 用于配置部分内置工具行为:
QoderAgentOptions.tool_config 字段;AskUserQuestion 仍可作为运行时工具名用于 tools、allowed_tools、disallowed_tools、can_use_tool 和 hooks matcher。
内置工具列表
在tools、allowed_tools、disallowed_tools、can_use_tool、hooks matcher 和 Agent 工具白名单里,内置工具使用下表中的运行时工具名。
自定义 MCP 工具名格式:
tool()
创建一个 SDK MCP 工具定义。Python 版是装饰器风格,handler 通过 @tool(...) 包装。
tool() 本身只定义工具;被装饰的 async handler 是工具被调用时执行的函数。name、description 和重复工具名等注册约束由 create_sdk_mcp_server() 在注册工具时校验。
input_schema
Python SDK 没有 TypeScript SDK 的 AnyZodRawShape / InferShape。Python 版 input_schema 支持以下形式:
TypeScript-only schema helper types
SdkMcpTool
@tool() 装饰器返回 SdkMcpTool。通常不需要手动构造它。
ToolInvocationContext
ToolInvocationContext。extra.signal 会在 CLI 取消正在执行的工具调用时被设置。
ToolAnnotations
Python 版直接使用 mcp.types.ToolAnnotations。
这些字段是元信息和调度提示,不是权限开关。是否允许执行仍由
tools、allowed_tools、disallowed_tools、permission_mode、can_use_tool 和 hooks 决定。
create_sdk_mcp_server()
创建一个与 SDK 同进程运行的 MCP server。
CreateSdkMcpServerOptions
TypeScript SDK 使用 CreateSdkMcpServerOptions 对象参数;Python SDK 未导出这个类型,也不使用 options 对象。Python 等价能力就是 create_sdk_mcp_server(name, version="1.0.0", tools=None) 的三个函数参数。
返回值
返回McpSdkServerConfig,可直接作为 QoderAgentOptions.mcp_servers 的值。
McpServerToolPolicy
tools policy 字段存在于 Python 类型中。它主要用于 MCP server 配置层的工具权限策略;进程内 SDK server 的常见接入仍是通过 allowed_tools、disallowed_tools、permission_mode、can_use_tool 和 hooks 控制。
CallToolResult
Python SDK 不导出自己的 CallToolResult 类型。handler 返回 dict,SDK 将其转换为 MCP 的 CallToolResult。
McpToolResultContent
Python SDK 当前识别以下 content block:
与 TS reference 的差异:
- Python handler 使用
is_error,不是 MCP/TypeScript 的isError字段名;SDK 内部会映射为 MCPisError。 - Python handler 顶层
_meta当前不会透传到CallToolResult。 - Python
call_tool转换逻辑当前没有处理audiocontent block;即使 MCP 类型导入了AudioContent,handler 返回{"type": "audio"}也会进入 unsupported content warning 分支。
can_use_tool
工具权限审批回调定义在通用类型中,放在这里便于查找。
PermissionResult
can_use_tool 收到的 tool_name 是完整工具名,例如 Bash、Read、mcp__orders__lookup_order。
MCP status 工具信息
Python SDK 导出McpToolInfo 和 McpToolAnnotations,用于描述 QoderSDKClient.get_mcp_status() 返回的 server 工具信息。
readOnly、destructive、openWorld,不是 ToolAnnotations 入参中的 readOnlyHint、destructiveHint、openWorldHint。idempotentHint 当前不在 status 工具列表里回显。
内置工具输入输出类型
TypeScript SDK 在类型层提供内置工具的输入 / 输出结构。Python SDK 当前没有导出这些 TypedDict,也没有导出ToolInputSchemas / ToolOutputSchemas 联合类型。注意:下表中的类型名是 TypeScript reference 类型名;Python 权限配置和工具白名单里仍使用 内置工具列表 中的运行时工具名。
Python 侧公开、稳定可配置的是 内置工具列表 中的运行时工具名。如果需要在 Python 应用里强类型化内置工具参数,建议在业务侧自定义自己的
TypedDict 或 dataclass。
相关文档
Hooks Reference
使用指南和示例见 Hooks。事件概览
HookEvent
可注册的 hook 事件联合类型。
HookCallback
HookMatcher
BaseHookInput
所有 hook 事件的通用输入字段。
HookJSONOutput
Hook 回调的返回类型。
Python SDK 中continue_对应 JSON 的"continue"键(避免关键字冲突)。 当多个 hook 返回冲突的decision值时,"deny"/"block"优先(最严格规则生效)。
PreToolUseHookInput
hook_specific_output(hookSpecificOutput):
PostToolUseHookInput
输出行为:
hook_specific_output(hookSpecificOutput):
当多个 hook 都设置了 updatedToolOutput 时,最后一个非空值生效。如需链式转换,请在单个回调内按顺序执行。
PostToolUseFailureHookInput
UserPromptSubmitHookInput
hook_specific_output(hookSpecificOutput):
SessionStartHookInput
hook_specific_output(hookSpecificOutput):
SessionEndHookInput
StopHookInput
返回
{"decision": "block", "reason": "..."} 可阻止 AI 停止并强制继续。reason 作为续接提示注入模型上下文。
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PostCompactHookInput
CwdChangedHookInput
InstructionsLoadedHookInput
FileChangedHookInput
PermissionRequestHookInput
hook_specific_output(hookSpecificOutput):
decision 为以下两种之一:
- 批准:
{"behavior": "allow", "updatedInput": {...}, "updatedPermissions": [...]} - 拒绝:
{"behavior": "deny", "message": "..."}
Message Types
AssistantMessage
AI 的完整回复,按 turn 触达一次。content 是 TextBlock 和 ToolUseBlock 的列表。
UserMessage
CLI 输出流中的用户消息。priority 和 should_query 保留消息进入会话时的调度元数据。
ResultMessage
整个会话结束时的最终消息。
SystemMessage
会话系统消息。subtype == "init" 时 data 携带初始化信息(session_id、model、tools 等)。其中 data["skills"] 是 skill 名称列表;带描述和来源的发现清单从 client.get_server_info() 读取。
SDKMirrorErrorMessage
SDK 最终仍无法把一批数据写入外置会话存储时产生的非致命消息。当前 query 会继续执行。
StreamEvent
需启用 include_partial_messages=True,按 token 增量流出。
event["type"] 值:
完整用法见 流式输出。
CloudAgentEventMessage
Cloud runtime 下的 SSE 事件消息。仅在 experimental_cloud_agent 模式下出现。完整字段见 Cloud Agent Reference。
Content Blocks
AssistantMessage.content 中的元素: