安装
SDK 为您的平台捆绑了一个本地 Claude Code 二进制文件,作为可选依赖项,例如
@anthropic-ai/claude-agent-sdk-darwin-arm64。大多数安装无需单独安装 Claude Code。SDK 版本跟踪捆绑的 Claude Code 版本。SDK v0.3.191 捆绑 Claude Code v2.1.191,因此本页面上需要特定 Claude Code 版本的功能需要具有相同补丁号或更高版本的 SDK 版本。如果您的包管理器跳过可选依赖项,SDK 会抛出 Native CLI binary for <platform>-<arch> not found;改为将 pathToClaudeCodeExecutable 设置为单独安装的 claude 二进制文件。如果您的包管理器不应用 npm 的 libc 字段(如 Yarn 1.x 不应用),您会在 Linux 上同时获得 glibc 和 musl 平台包,大约使安装大小翻倍。在 Agent SDK v0.2.141 或更高版本上,SDK 仍然会启动正确的变体。要在容器镜像中回收空间,请删除与您的应用运行的 libc 不匹配的平台包;对于 x64 上的 glibc 运行时,即 rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl。在开发机器上删除是临时的,因为 Yarn 会在下一次依赖项更改时重新安装该包。编译为单个可执行文件
当您使用bun build --compile 将应用程序编译为单文件可执行文件时,SDK 无法在运行时解析捆绑的 CLI 二进制文件。require.resolve 在编译后的可执行文件的 $bunfs 虚拟文件系统内不起作用,因此 SDK 会抛出 Native CLI binary for <platform>-<arch> not found。
要解决此问题,请将平台二进制文件作为文件资产嵌入,在启动时使用 extractFromBunfs() 将其提取到真实路径,然后将该路径传递给 pathToClaudeCodeExecutable。
extractFromBunfs() 辅助函数需要 @anthropic-ai/claude-agent-sdk v0.3.144 或更高版本。下面的示例为 Apple Silicon 上的 macOS 构建:
extractFromBunfs() 将嵌入的二进制文件从编译后的可执行文件的虚拟文件系统复制到每个用户的临时目录,并返回真实路径。在编译后的可执行文件之外,它返回输入路径不变,因此相同的代码在开发中无需修改即可运行。
每个编译后的可执行文件都嵌入了单个平台的二进制文件。将导入中的平台包与您的 --target 匹配:
- 要进行交叉编译,请安装不匹配的平台包,例如
npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force。 - 在 Windows 上,二进制文件子路径是
claude.exe,例如@anthropic-ai/claude-agent-sdk-win32-x64/claude.exe。
函数
query()
与 Claude Code 交互的主要函数。创建一个异步生成器,在消息到达时流式传输消息。
参数
返回值
返回一个Query 对象,该对象扩展 AsyncGenerator<SDKMessage, void>,并具有其他方法。
startup()
通过生成 CLI 子进程并在提示可用之前完成初始化握手来预热 CLI 子进程。返回的 WarmQuery 句柄稍后接受提示并将其写入已准备好的进程,因此第一个 query() 调用解析时无需支付子进程生成和初始化成本。
参数
返回值
返回一个Promise<WarmQuery>,在子进程生成并完成其初始化握手后解析。
示例
早期调用startup(),例如在应用程序启动时,然后在提示准备好后在返回的句柄上调用 .query()。这会将子进程生成和初始化移出关键路径。
tool()
为与 SDK MCP 服务器一起使用创建类型安全的 MCP 工具定义。
参数
ToolAnnotations
从 @modelcontextprotocol/sdk/types.js 重新导出。所有字段都是可选提示;客户端不应依赖它们做出安全决策。
createSdkMcpServer()
创建在与应用程序相同的进程中运行的 MCP 服务器实例。
参数
listSessions()
发现并列出具有轻量级元数据的过去会话。按项目目录筛选或列出所有项目中的会话。
参数
返回类型:SDKSessionInfo
示例
打印项目的 10 个最近会话。结果按lastModified 降序排序,因此第一项是最新的。省略 dir 以搜索所有项目。
getSessionMessages()
从过去的会话记录中读取用户和助手消息。
参数
返回类型:SessionMessage
示例
getSessionInfo()
按 ID 读取单个会话的元数据,无需扫描完整项目目录。
参数
返回
SDKSessionInfo,如果找不到会话,则返回 undefined。
renameSession()
通过附加自定义标题条目来重命名会话。重复调用是安全的;最新的标题获胜。
参数
tagSession()
标记会话。传递 null 以清除标签。重复调用是安全的;最新的标签获胜。
参数
resolveSettings()
使用与 CLI 相同的合并引擎为给定目录解析有效的 Claude Code 设置,无需生成 Claude CLI。在调用 query() 之前使用它来检查 query() 调用将看到的配置。
此函数处于 alpha 阶段,其 API 在稳定之前可能会更改。
query() 会话应用的内容不同:
policyHelper:resolveSettings()读取 MDM 源,包括 macOS plist 和 Windows HKLM/HKCU,但不执行管理员配置的policyHelper子进程。- 服务器管理的设置:
resolveSettings()不获取服务器管理的设置。将它们作为options.serverManagedSettings传递以包含它们。 defaultMode:快照从每个层级按原样返回permissions.defaultMode,因此它可以包括项目和本地设置中的'auto'和'bypassPermissions'值,实时会话忽略这些值。
参数
resolveSettings() 接受单个选项对象。所有字段都是可选的。
返回类型:ResolvedSettings
resolveSettings() 返回一个对象,描述合并的设置和为每个密钥提供的源。
示例
下面的示例为项目目录解析设置并打印控制清理周期的源。在没有设置文件设置cleanupPeriodDays 的机器上,两条打印的行都显示 undefined 作为值,这是预期的输出而不是错误。
类型
Options
query() 函数的配置对象。
处理缓慢或停滞的 API 响应
CLI 子进程读取多个环境变量,这些变量控制 API 超时和停滞检测。通过env 选项传递它们:
-
API_TIMEOUT_MS:Anthropic 客户端上的每个请求超时,以毫秒为单位。默认600000。适用于主循环和所有 subagents。 -
CLAUDE_CODE_MAX_RETRIES:最大 API 重试次数。默认10,上限为15。每次重试都有自己的API_TIMEOUT_MS窗口,因此最坏情况下的实际时间大约是API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)加上退避。对于需要等待更长时间中断的无人值守运行,设置CLAUDE_CODE_RETRY_WATCHDOG=1:它无限期重试瞬时容量错误,从 Claude Code v2.1.199 开始,为其他瞬时错误提高默认值至300并移除此变量的上限。 -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS:subagents 的停滞监视程序。当流监视程序打开时,默认值为CLAUDE_STREAM_IDLE_TIMEOUT_MS加 5 分钟,即600000,除非您提高该变量。当流监视程序关闭时,默认值为600000。在 v2.1.257 之前,默认值始终为600000。 计时器在每个流事件上重置。在停滞时,Claude Code 中止 subagent 并向父级报告停滞。对于后台 subagent,它也会将任务标记为失败并附加任何部分结果。 -
CLAUDE_ENABLE_STREAM_WATCHDOG与CLAUDE_STREAM_IDLE_TIMEOUT_MS:当标头已到达但响应正文停止流式传输时中止请求的流监视程序。监视程序对所有提供商默认启用;设置CLAUDE_ENABLE_STREAM_WATCHDOG=0以禁用它。CLAUDE_STREAM_IDLE_TIMEOUT_MS默认为300000并被限制为该最小值。中止后,自动重试涵盖 Claude Code 根据响应进度的程度所做的事情。 当监视程序等待ANTHROPIC_BASE_URL后面的网关用保活 ping 保持打开的响应时,设置includePartialMessages的主机继续接收ping流事件,因此将这些帧读作活跃性而不是在沉默时超时会话。在 v2.1.257 之前,帧在最后一个真实流事件后 5 分钟停止。
Query 对象
由 query() 函数返回的接口。
方法
applyFlagSettings()
在运行的会话上更改设置而无需重新启动查询。当没有专用设置器的设置需要在会话中期更改时使用它,例如在代理读取不受信任的输入后收紧 permissions。setModel() 和 setPermissionMode() 是这两个键的专用设置器;applyFlagSettings() 是接受任何设置键子集的通用形式,在此处传递 model 的行为与 setModel() 相同。
仅某些键在会话中期生效:
- 在下一个轮次应用:
effortLevel、ultracode、permissions、hooks、skillOverrides、fastMode、agent。切换agent也会在下一个轮次应用该代理的模型覆盖和 hooks。其系统提示在下一个轮次应用,或在重用记录的系统提示的会话中,一旦会话被压缩。 - 在当前轮次应用:
model。如果您在 Claude 处理轮次时切换model,Claude 已在生成的响应在旧模型上完成,轮次的其余部分(从 Claude Code 对模型进行的下一个调用开始)使用新模型。Subagents 保持自己的模型。在 v2.1.212 之前,中期切换等待下一个轮次。 - 会话中期无效:系统提示选项。这些在启动时解决一次,因此运行的会话保持原始值,即使调用成功。要更改它们,请启动新会话。
effortLevel 接受一个努力级别名称。它也接受 "ultracode",它请求 xhigh 努力与ultracode打开。applyFlagSettings() 声明 effortLevel 不包含该值,因此在 TypeScript 中传递等效的 { ultracode: true }。ultracode 值需要 Claude Code v2.1.203 或更高版本,仅由 applyFlagSettings() 接受,不由设置文件中的 effortLevel 键接受。
这些值被写入标志设置层,这是内联 query() 的 settings 选项在启动时填充的同一层。这与优先级部分称为编程选项的层相同。
连续调用浅合并顶级键。第二次调用 { permissions: {...} } 会替换先前调用中的整个 permissions 对象,而不是深度合并到其中。要从标志层清除键并回退到较低优先级源,请为该键传递 null。传递 undefined 无效,因为 JSON 序列化会将其删除。
仅在流式输入模式下可用,与 setModel() 和 setPermissionMode() 的约束相同。
下面的示例在会话中期切换活动模型,然后清除覆盖,以便模型回退到用户或项目设置指定的任何内容。
applyFlagSettings() 仅适用于 TypeScript。Python SDK 不公开等效方法。WarmQuery
由 startup() 返回的句柄。子进程已生成并初始化,因此在此句柄上调用 query() 会直接将提示写入准备好的进程,无需启动延迟。
方法
WarmQuery 实现 AsyncDisposable,因此可以与 await using 一起使用以进行自动清理。
SDKControlInitializeResponse
initializationResult() 的返回类型。包含会话初始化数据。
hooks_applied 报告 Claude Code 是否注册了 initialize 请求携带的 hooks。SDK 在会话启动时发送该请求一次,并在每个 reinitialize() 调用上再次发送。该字段需要 Agent SDK v0.3.238 或更高版本。
当请求不携带 hooks 时,Claude Code 会省略该字段。当请求携带 hooks 时,该值取决于请求是否是会话的第一个初始化,以及对于重复的请求,它如何到达会话:
true:Claude Code 注册了 hooks。会话的第一个初始化返回此值。通过 CLI 的 stdin 发送的重复初始化也返回true。在这种情况下,新请求中的 hooks 替换之前注册的 hooks。false:Claude Code 忽略了 hooks。发送到远程会话的重复初始化返回此值,因此加入会话的第二个客户端无法替换第一个客户端注册的 hooks。
hooks。
响应始终报告 fast_mode_state,当某些东西阻止快速模式时,fast_mode_disabled_reason 携带原因代码,以便您可以解释阻止的状态而不是重新推导可用性。两种行为都需要 Claude Code v2.1.219 或更高版本。在 v2.1.219 之前,当快速模式不可用时响应会省略 fast_mode_state,并且从不携带原因。有关原因代码及其含义,请参阅结果消息上的 fast_mode_disabled_reason。
成功 initialize 的控制响应包装器也携带 pending_permission_requests 数组。该字段位于响应包装器本身,而不是上面的 SDKControlInitializeResponse 有效负载中。每个条目都是一个完整的 control_request 消息,具有与会话在运行时为权限请求流式传输的相同 { type: "control_request", request_id, request } 形状。
该数组列出此 Claude Code 进程已发出且尚未解决的权限请求。SDK 为您读取数组并将每个条目分派到您的 canUseTool 回调,这与 reinitialize() 在传输间隙后触发的相同重新发送。使用重复的请求 ID 幂等地处理,因为条目可以重复回调已在连接断开前收到的请求。
该数组在成功 initialize 响应上始终存在,当此进程没有未解决的权限请求时为空。需要 Claude Code v2.1.268 或更高版本。较早的版本可能会省略该字段,因此如果您自己解析线路协议,请将缺失的字段视为较旧的 CLI,而不是没有待处理的证明。
SDKControlInterruptResponse
中断收据:interrupt() 在通告 SDKSystemMessage.capabilities 中的 interrupt_receipt_v1 功能的 CLI 上解决的值。需要 Claude Code v2.1.205 或更高版本。较早的 CLI 使用空成功有效负载回答中断,因此 interrupt() 解决为 undefined。
still_queued 列出中断时待处理的用户消息的 UUID:仍在队列中的消息,加上 Claude Code 已从队列中取出用于下一个轮次的任何消息。除非您首先取消它,否则每个都在中断后作为其自己的轮次运行。如果您在第一个轮次启动之前中断,Claude Code 会在轮次启动时立即中止该轮次,该轮次中列出的消息不会获得响应。
使用收据来决定是否重新发送任何内容。列出的消息如果您不取消它会进入对话,因此重新发送它会向 Claude 传递两次。
使用这些注意事项解释列表:
- 仅出现已使用 UUID 入队的消息。空数组并不意味着没有其他内容会运行。
- 仅列出主线程消息。寻址到 subagent 的消息超出范围。
- 列表可以包括您的客户端从未发送的 UUID,例如计划任务触发器。忽略您不识别的 UUID,而不是将其视为错误。
interrupt())可以在 interrupt 控制请求上设置 cancel_queued: true。Claude Code v2.1.219 及更高版本在 SDKSystemMessage.capabilities 中通告 interrupt_cancel_queued_v1 功能的支持;较早的 CLI 忽略该字段并让排队的消息照常运行。这样的中断也会取消每条否则会在 still_queued 下列出的消息:收据在 cancelled 下列出它们,still_queued 为空,它们都不运行。
cancelled 列表与 still_queued 具有相同的注意事项。interrupt() 方法从不发送 cancel_queued,因此它解决的收据不携带 cancelled。
收据是在处理中断时拍摄的快照,在干净中断时,它在中断轮次的 SDKResultMessage 之前到达。在该结果之后读取收据而不是检查队列:循环立即启动下一个排队的轮次,因此您在结果后检查的队列已经改变。
SDKControlGetContextUsageResponse
getContextUsage() 的返回类型。使用默认 detail,这是 Claude Code 在交互式会话中为 /context 命令呈现的相同有效负载,因此除了令牌计数外,它还携带显示字段,如 color 和 gridRows,Claude Code 使用这些字段来绘制 /context 使用情况网格。
该方法的可选 detail 参数选择 Claude Code 如何计算每个类别。使用默认值 'full',Claude Code 使用令牌计数 API 请求计算每个类别。传递 { detail: 'summary' } 以从最后一个响应的使用情况和本地估计获取答案。没有令牌计数请求出去,每个类别的数字是近似的。detail 参数需要 Agent SDK v0.3.257 或更高版本。
当您发送 /context 作为提示而不是调用该方法时,Claude Code 会将 SDKContextUsage 有效负载附加到传递结果的助手消息的 context_usage 字段。该字段需要 Agent SDK v0.3.232 或更高版本。
categories保存每个类别的总计。mcpTools和agents将令牌归属于各个 MCP 工具和 subagents。memoryFiles列出每个加载的内存文件及其成本。skills.skillFrontmatter将 skill 列表的令牌归属于每个包含的 skill。每个 skill 的计数测量每个 skill 的列表条目,因为 Claude Code 实际发送它,这可能比 skill 的完整 frontmatter 更短。比较skills.totalSkills与skills.includedSkills以查看每个发现的 skill 是否进入列表。
totalTokens 是会话的当前上下文使用情况,maxTokens 是针对该使用情况测量的窗口。该窗口是模型的上下文窗口,或当应用一个时的较低自动压缩窗口。rawMaxTokens 携带与 maxTokens 相同的值,percentage 是 totalTokens 作为该窗口的四舍五入百分比。
Claude Code 保留可选的 deferredBuiltinTools、systemTools 和 systemPromptSections 诊断未设置,因此即使类型声明它们,也应该期望它们不存在。
SDKControlReadFileResponse
readFile() 的返回类型。
contents 保存文件文本,或当您请求 encoding: 'base64' 时的 base64 数据;响应的 encoding 字段在这种情况下设置为 'base64'。absPath 是解析的绝对路径。当文件长于 maxBytes 上限且内容在该限制处被切割时,truncated 被设置。
readFile() 可以读取什么
readFile() 提供的文件集比 Read 工具更窄:
- 会话的工作目录之一内的常规文件,如
cwd和additionalDirectories - Claude Code 自己的一些文件用于会话,如工具结果
readFile() 打开文件系统的其余部分。对于任何其他内容,调用使用 null 进行解决。
SDKControlReloadSkillsResponse
reloadSkills() 的返回类型。
skills 列出重新加载后可用的 skills,采用 supportedCommands() 返回的相同 SlashCommand 形状。
AgentDefinition
以编程方式定义的 subagent 的配置。
AgentMcpServerSpec
指定 subagent 可用的 MCP 服务器。可以是服务器名称(字符串,引用父级 mcpServers 配置中的服务器)或内联服务器配置记录,将服务器名称映射到配置。
McpServerConfigForProcessTransport 是 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig。
SettingSource
控制 SDK 从哪些基于文件系统的配置源加载设置。
默认行为
当settingSources 被省略或 undefined 时,query() 加载与 Claude Code CLI 相同的文件系统设置:用户、项目和本地。请参阅settingSources 不控制的内容了解无论此选项如何都会读取的输入,以及如何禁用它们。
为什么使用 settingSources
禁用文件系统设置:settingSources 中包含 "project"。请参阅修改系统提示了解 CLAUDE.md 加载如何与系统提示选项交互。
设置优先级
加载多个源时,设置按此优先级合并(从高到低):- 本地设置(
.claude/settings.local.json) - 项目设置(
.claude/settings.json) - 用户设置(
~/.claude/settings.json)
agents、allowedTools 和 settings)覆盖用户、项目和本地文件系统设置。托管策略设置优先于编程选项。
PermissionMode
CanUseTool
用于控制工具使用的自定义权限函数类型。
该函数是 SDK 替代交互式权限提示:仅当权限评估流解决为提示时才调用它。已由 allowedTools 条目、设置 allow 规则或权限模式(如 acceptEdits 或 bypassPermissions)批准的工具调用永远不会调用它。要限制每个工具调用,请改用 PreToolUse hook。
任何模式都不自动批准的操作不会被 allow 规则预先批准;请参阅权限如何被评估了解哪些到达回调以及在 dontAsk 和 auto 模式下会发生什么。
回调通常通过返回
PermissionResult 来解决请求,SDK 将其写回其传输作为 control_response。仅当您的应用程序已通过其自己的通道为此请求发送 control_response(回显 requestId)时才返回 null;SDK 然后跳过将响应写入其传输。在任何其他情况下返回 null 会使工具调用无限期被阻止,因为永远不会发送 control_response 且权限提示不会超时。
requestId 选项和 null 返回值需要 Claude Code v2.1.199 或更高版本。
PermissionResult
权限检查的结果。
ToolConfig
内置工具行为的配置。
McpServerConfig
MCP 服务器的配置。
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
SDK 中加载 plugins 的配置。
示例:
消息类型
SDKMessage
查询返回的所有可能消息的联合类型。
SDKAssistantMessage
助手响应消息。
message 字段是来自 Anthropic SDK 的 BetaMessage。它包括 id、content、model、stop_reason 和 usage 等字段。
SDKAssistantMessageError 是以下之一:'authentication_failed'、'oauth_org_not_allowed'、'account_on_hold'、'billing_error'、'rate_limit'、'overloaded'、'invalid_request'、'model_not_found'、'server_error'、'max_output_tokens'、'cloud_credential_error' 或 'unknown'。其中四个值的含义超出了它们的名称:
'model_not_found':所选模型不存在或对您的账户或部署不可用'overloaded':API 返回了 529 错误,因为服务器处于容量限制,与'rate_limit'相对,后者是针对您的配额的 429 错误'account_on_hold':您的账户被冻结'cloud_credential_error':Claude Code 无法在其运行的机器上获取可用的 AWS 或 Google Cloud 凭证,因此没有请求到达云提供商。通常原因是云登录在该机器上过期或从未完成,尽管暂时无法访问的凭证服务会报告相同的值。请参阅无法加载 AWS 或 Google Cloud 凭证。需要 TypeScript Agent SDK v0.3.267 或更高版本,其中包含 Claude Code v2.1.267
aborted 为 true:消息没有 stop_reason,内容可能在中间词处结束。该字段在正常完成的消息上不存在。它需要 Agent SDK v0.3.214 或更高版本。
Claude Code 在转轮的第一个助手消息上设置 user_message_uuid 和 user_message_uuids,条件在 user_message_uuid 中。
timestamp 是生成消息内容的进程完成内容生成时的 ISO 8601 时间。该值来自该机器的时钟,因此仅用于显示,不要按其排序消息。一个 API 轮次可以产生多个共享 message.id 的助手消息,每个都有自己的 timestamp。当字段不存在时,回退到您收到消息的时间。
context_usage 是 /context 报告的结构化副本,类型为 SDKContextUsage,需要 Agent SDK v0.3.232 或更高版本。当您发送 /context 作为提示时,Claude Code 将报告作为助手消息传递,其 message.content 包含 markdown 表格,并将 context_usage 附加到同一消息。Claude Code 不在任何其他助手消息上设置该字段,早期版本在没有它的情况下传递 /context 表格,因此当字段存在时从字段读取分解,当不存在时回退到 markdown 文本。
SDKUserMessage
用户输入消息。
shouldQuery 设置为 false 以将消息附加到记录中而不触发助手轮次。消息被保留并合并到下一个触发轮次的用户消息中。使用此方法注入上下文,例如您在带外运行的命令的输出,而无需在其上花费模型调用。
在携带 tool_result 块的消息上,tool_use_result 是工具的结构化输出对象,而不是发送给模型的文本。其形状取决于匹配的 tool_use 块命名的工具,因此该字段被类型化为 unknown;内置形状列在工具输出类型下。
对于 Agent 工具,tool_use_result 是 AgentOutput。在 completed 结果上,content 保存子代理的报告,不包含 Claude Code 附加到 tool_result 文本的代理 ID 和使用情况预告片,因此从 tool_use_result 呈现而不是解析该文本。
对于其结果包含 resource_link 块的 MCP 工具,tool_use_result 是一个对象,其中包含 SDKMcpResourceLink 条目的 resourceLinks 数组。Claude 将每个链接作为 tool_result 块中的一行文本接收,因此读取 resourceLinks 以呈现服务器返回的文件,而不是解析该文本。Claude Code 在结果没有链接时省略 resourceLinks,在来自子代理的结果上省略,每个结果最多保留 50 个链接,一旦数组达到 64 KiB 的序列化 JSON 就停止添加链接。resourceLinks 需要 Agent SDK v0.3.257 或更高版本。
SDKUserMessageReplay
具有必需 UUID 的重放用户消息。
origin 类型为 peer 或 channel,无论是在活跃轮次期间交付还是在会话空闲时启动新轮次,都会作为重放到达流。在 v2.1.207 之前,在会话空闲时交付的注入轮次在流上不产生任何消息,仅在您重新读取记录时出现。
SDKResultMessage
最终结果消息。
subtype 之外还提供诊断详情:
api_error_status:终止对话的 API 错误的 HTTP 状态码。当轮次在没有 API 错误的情况下结束时,该字段不存在或为null。ttft_ms:首个令牌的时间(毫秒),在第一个完整的助手消息到达时测量。仅在成功分支上显示。ttft_stream_ms:直到第一个message_start流事件的时间(毫秒),当响应流打开时。低于ttft_ms;两者之间的差距是流式传输第一条消息所花费的时间。仅在成功分支上显示。user_message_uuid:此轮次回答的您发送的消息的uuid。请参阅user_message_uuid了解哪些结果携带它。user_message_uuids:Claude Code 在此轮次中回答的您发送的每条消息的uuid。请参阅user_message_uuids。request_sent_wall_ms:Claude Code 分派 API 请求时的纪元毫秒,用于与服务器端时间戳的联接。仅与user_message_uuid一起出现,在成功结果上,其中is_error为 false,轮次发送了 API 请求。first_content_frame_ms:直到第一个content_block_start或content_block_delta流事件的时间(毫秒),计算思考块作为内容。仅在成功分支上显示,当is_error为 false 时。需要 Agent SDK v0.3.260 或更高版本。first_stream_post_ms、first_stream_post_ack_ms、first_stream_post_wall_ms:上传轮次第一个流事件的时间。Claude Code 仅在它流式传输到 claude.ai 的会话中记录它们,例如云会话,query()产生的结果不携带它们。需要 Agent SDK v0.3.260 或更高版本。usage:仅主代理循环。排除子代理和辅助模型调用,在流式输入会话中按轮次。优先使用modelUsage进行令牌/成本会计。modelUsage:在此query()调用期间通过查询管道进行的每个模型调用的每模型总计,包括主循环、子代理和内部调用(如压缩和 Workflow 代理)。该管道外的辅助调用(如权限分类器和令牌计数请求)被排除。在流式输入会话中,总计在轮次间累积,因此读取最新结果而不是跨结果求和。请参阅在流式输入模式中跟踪成本了解重置,以及在会话崩溃后恢复总计了解零化结果。total_cost_usd:此query()调用的累积估计成本(美元),涵盖与modelUsage相同的调用并在相同点重置。这是一个估计值,不是账单声明。请参阅跟踪成本和使用情况了解准确性注意事项。queued_turn_count:您发送的带有origin: { kind: "human" }的消息数量,在 Claude Code 产生结果时仍在等待。请参阅queued_turn_count了解0和缺失字段告诉您什么。terminal_reason:循环结束的原因。为"completed"、"max_turns"、"tool_deferred"、"aborted_streaming"、"aborted_tools"、"hook_stopped"、"stop_hook_prevented"、"background_requested"、"blocking_limit"、"rapid_refill_breaker"、"prompt_too_long"、"image_error"、"model_error"、"api_error"、"malformed_tool_use_exhausted"、"budget_exhausted"、"structured_output_retry_exhausted"、"tool_deferred_unavailable"或"turn_setup_failed"之一。fast_mode_state:为"on"、"off"或"cooldown"之一。fast_mode_disabled_reason:为什么快速模式现在不可用。当没有任何东西阻止快速模式时不存在,尽管请求仍可能以标准速度运行。在快速模式速率限制后的冷却期间,Claude Code 报告fast_mode_state: "cooldown"且没有原因代码,并在冷却期过期时重新启用快速模式。需要 Claude Code v2.1.219 或更高版本。
相同的字段对出现在
SDKSystemMessage 和 SDKControlInitializeResponse 上,因此您可以在第一个轮次之前读取快速模式状态。
origin 字段转发触发此结果的用户消息的 SDKMessageOrigin。当 SDK 注入合成后续轮次(例如对于完成的后台任务)时,生成的 SDKResultMessage 携带 origin: { kind: "task-notification" }。例程的触发器触发和来自您其他会话的服务器验证消息也会到达此类,每个都带有任务通知子类型中描述的 subkind。检查 kind 以区分回答您的提示的结果与注入的后续操作,然后再路由或抑制它们。
对于在任何用户轮次之前发出的结果(例如启动错误),该字段不存在。
当 PreToolUse hook 返回 permissionDecision: "defer" 时,结果具有 stop_reason: "tool_deferred" 和 deferred_tool_use 携带待处理工具的 id、name 和 input。读取此字段以在您自己的 UI 中显示请求,然后使用相同的 session_id 恢复以继续。请参阅稍后延迟工具调用了解完整的往返过程。
user_message_uuid
轮次回答的 SDKUserMessage 的 uuid,回显以便您可以将 Claude Code 的回复与您发送的消息匹配。Claude Code 仅在您在消息上设置 uuid 时才回显 uuid。该字段在 SDKUserMessage 上是可选的,传递给 query() 的字符串提示不携带任何。
轮次回答的消息取决于轮次如何启动:
- 您发送的常规消息,即没有
isSynthetic: true的消息:轮次在其整个运行中回答该消息。当您紧密发送多条消息时,Claude Code 可以将它们合并为一个轮次,该字段然后仅携带最后一条消息的uuid。要将回复与任何合并的消息匹配,请使用user_message_uuids。 - 您发送的带有
isSynthetic: true的消息:轮次最初回答该消息。如果 Claude Code 在工具调用之间拾取您的常规消息,轮次从那时起回答拾取的消息。回显合成消息的uuid需要 Agent SDK v0.3.265 或更高版本;早期版本在合成轮次上不回显任何内容。 - Claude Code 自己生成的提示,例如在会话重启后继续中断工作的轮次:轮次最初不回答您的任何消息,其帧不携带回显。如果 Claude Code 在工具调用之间拾取您的常规消息,轮次从那时起回答该消息。拾取回显需要 Agent SDK v0.3.265 或更高版本;早期版本在这些轮次上不回显任何内容。
uuid:
- 结果:回答您发送的消息的轮次的每个结果。在 Agent SDK v0.3.265 或更高版本上,每个这样的结果都携带它。在 v0.3.265 之前,常规消息启动的轮次的成功结果在轮次未发送 API 请求或以延迟工具调用结束时缺少它。在 v0.3.246 之前,错误结果也缺少它,在 v0.3.216 之前每个结果都缺少它。
- 轮次的第一个回复:第一个助手消息,或使用
includePartialMessages时第一个流事件,其event.type不是ping,因此您可以在结果到达之前绑定回复。当轮次不流式传输任何内容时,Claude Code 改为在第一个助手消息上设置它。第一个回复回显需要 Agent SDK v0.3.246 或更高版本。当轮次回答的消息在中途改变时,改变后的第一个回复也携带该字段,在 Agent SDK v0.3.265 或更高版本上;早期版本在每个轮次的一个回复帧上设置它。 - 轮次的每个
thinking_tokens帧:因此您可以将思考进度归属于您发送的消息,而无需等待轮次的第一个回复。需要 Agent SDK v0.3.260 或更高版本。
- 除了那些第一个回复之外的回复帧
- 子代理帧
- 回答没有
uuid的消息的轮次:轮次回答了您发送的没有 uuid 的消息,或 Claude Code 启动了轮次本身并拾取了没有 uuid 的常规消息 - 回答您未发送的消息的结果,例如崩溃的工作进程后的零化结果
user_message_uuids
Claude Code 在此轮次中回答的您发送的每条消息的 uuid。当您紧密发送多条消息时,Claude Code 可以将它们合并为一个轮次,user_message_uuid 然后仅命名其中的最后一个。要将回复与任何合并的消息匹配,请在此列表中的任何位置查找该消息的 uuid。需要 Agent SDK v0.3.259 或更高版本。
Claude Code 在携带该字段的每个回复帧和结果上与 user_message_uuid 一起设置列表。对于携带 user_message_uuid 的完整帧集以及每个需要的版本,请参阅 user_message_uuid。列表始终包含 user_message_uuid 并最多包含 64 个条目。
当 Claude Code 在轮次运行时拾取您发送的常规消息时,它将该消息的 uuid 添加到结果的列表中。
当第一个回复或结果携带 user_message_uuid 而没有列表时,它来自较早的 Claude Code 版本,因此回退到单个字段。
queued_turn_count
您发送的带有 origin: { kind: "human" } 的消息数量,在 Claude Code 产生结果时仍在命令队列中等待。需要 Agent SDK v0.3.242 或更高版本。
0 和缺失字段告诉您什么:
0:Claude Code 不计算您发送的没有该origin的消息,也不计算任务通知,因此轮次仍可能跟随。- 缺失:Claude Code 在崩溃或致命启动错误后发出的最终结果省略该字段,并且可能携带零化总计。
SDKSystemMessage
系统初始化消息。
fast_mode_state 报告会话的快速模式状态。当某些东西阻止快速模式时,fast_mode_disabled_reason 命名阻止它的检查;该字段需要 Claude Code v2.1.219 或更高版本。对于原因代码及其含义,请参阅结果消息上的 fast_mode_disabled_reason。
terminal_slash_commands 命名 slash_commands 中的条目,其接口绑定到本地终端,例如 exit。您可以像 slash_commands 中的任何其他条目一样发送它们;该字段存在以便远程或移动客户端可以从其命令菜单中隐藏它们。该字段仅在非空时存在,需要 Agent SDK v0.3.229 或更高版本。
effort:努力级别 Claude Code 在会话的下一个请求上发送,或当它不发送任何内容时为null。Claude Code 仅在它发送到远程控制客户端的初始化消息上设置该字段,并从您的应用程序读取的初始化消息中省略它。需要 Agent SDK v0.3.234 或更高版本。
capabilities 数组命名此 CLI 实现的协议行为,因此您可以进行功能检测而不是比较 claude_code_version 字符串。这是一个开放集合:忽略您不认识的值,并检查您依赖其行为的特定功能。该字段需要 Claude Code v2.1.205 或更高版本,在较早的 CLI 上不存在。
SDKPartialAssistantMessage
流式部分消息(仅当 includePartialMessages 为 true 时)。parent_tool_use_id 字段始终为 null:流事件仅针对主会话发出。对于子代理归属,使用携带 parent_tool_use_id 的完整消息,或启用 forwardSubagentText 以接收子代理文本和思考作为完整消息。
user_message_uuid 和 user_message_uuids,以及当轮次回答的消息改变时,条件在 user_message_uuid 中。
SDKCompactBoundaryMessage
指示对话压缩边界的消息。
SDKInformationalMessage
由循环发出的通用文本横幅。携带非错误状态行、hook 反馈(例如 UserPromptSubmit hook 的阻止原因)和命令输出。在 Claude Code v2.1.227 或更高版本上,hook 的 systemMessage 可以作为此消息到达,每行前缀为 hook 的名称,例如 PostToolUse:Bash says:。hook 的 systemMessage 是否作为此消息到达取决于事件。每个事件的部分在 hooks 页面上说明输出如何显示。将 content 呈现为给定 level 的纯文本。
SDKWorkerShuttingDownMessage
在优雅的 worker 拆卸时发出,以便远程客户端可以显示 worker 消失的原因,而不是等待心跳超时。reason 是由主机 CLI 设置的短 snake_case 字符串,例如 "host_exit" 或 "remote_control_disabled"。仅在实时流式传输时对此采取行动。恢复的会话会重放此消息的过去实例,因此在这种情况下忽略它们。
SDKPluginInstallMessage
插件安装进度事件。当设置 CLAUDE_CODE_SYNC_PLUGIN_INSTALL 时发出,以便您的 Agent SDK 应用程序可以在第一个轮次之前跟踪市场插件安装。started 和 completed 状态括起整体安装。installed 和 failed 状态报告单个市场并包括 name。
SDKPermissionDeniedMessage
当权限系统拒绝工具调用而不显示交互式提示时发出的流事件。使用它在发生时在您的 UI 中呈现拒绝,而不仅仅观察随后的 is_error 工具结果。它报告哪些拒绝取决于运行如何处理权限提示:
- 使用
canUseTool回调和默认permissionPrompts: 'host':权限提示转到您的回调,此事件报告 Claude Code 自己决定的拒绝,而不调用它。 - 都没有:裸
-p运行,或query()既不设置canUseTool也不设置permissionPromptToolName,拒绝任何会提示的工具调用,此事件报告这些拒绝以及 Claude Code 自己决定的拒绝。在 v2.1.223 之前,Claude Code 在没有回调的运行中不发出此事件。 - 使用 MCP 提示工具,使用
permissionPromptToolName或--permission-prompt-tool标志设置,以及默认permissionPrompts: 'host':Claude Code 根本不发出此事件,甚至不发出它自己决定的规则拒绝。 - 使用
permissionPrompts: 'none':Claude Code 拒绝会提示的调用,即使也设置了canUseTool或 MCP 提示工具,此事件报告这些拒绝以及 Claude Code 自己决定的拒绝。需要 Claude Code v2.1.259 或更高版本。
PreToolUse hook 路径上决定的任何拒绝,无论 hook 本身拒绝了调用还是拒绝规则覆盖了 hook 的允许或询问决定。该事件也是尽力而为的:偶尔 Claude Code 记录拒绝而不发出此事件,因此结果消息上的 permission_denials 是权威记录。
SDKPermissionDenial
有关被拒绝的工具使用的信息。
SDKContextUsage
/context 报告的结构化形式,作为 context_usage 在传递 /context 结果的 SDKAssistantMessage 上携带。Agent SDK v0.3.232 及更高版本导出该类型。与 SDKControlGetContextUsageResponse 不同,它仅携带呈现使用情况分解所需的数据,不包含 color 和 gridRows 等显示字段。
model 到 over_limit 的字段描述整个会话,集合字段将令牌归属于单个项目。
over_limit.kind 记录 Claude Code 如何解决窗口,而不是 API 是否接受下一个请求:
hard_limit:窗口是 Claude Code 认为是模型自己的限制,超过该限制 API 拒绝请求compaction_window:窗口是压缩策略窗口,可能与模型的限制一致,也可能不一致
SDKContextUsageCategory
/context 使用情况按类别分解的一行。
每个
kind 值说明行的令牌是什么:
used:占据上下文窗口的内容free:剩余窗口buffer:压缩保留deferred:Claude Code 保留在窗口外的工具模式,从使用情况计算中排除,列出以供了解
SDKMessageOrigin
用户角色消息的来源。这在 SDKUserMessage 上显示为 origin,并转发到相应的 SDKResultMessage,以便您可以判断给定轮次的触发因素。
任务通知子类型
当 Claude Code 将任务通知传递到会话中时,它仅在 Anthropic 服务器验证该通知来自何处时才在通知的origin 上设置 subkind。subkind 需要 Claude Code v2.1.213 或更高版本,它采用两个值之一:
scheduled-trigger:通知是例程的存储提示,因为例程的触发器之一触发而传递:其计划、其 API 触发器、其 GitHub 触发器 或立即运行。Claude Code 将这些框架给模型作为会话的分配任务,带有与其他任务通知携带的通知不同的通知。peer-send-message:通知是另一个您的会话使用服务器端send_message工具发送的消息,Claude Code on the web 会话使用该工具相互消息,而不是跨会话SendMessage工具,Anthropic 服务器验证了两个会话都属于同一私人会话组。需要 Claude Code v2.1.224 或更高版本。服务器未以这种方式验证的send_message交付没有 subkind。
subkind。这包括在您自己的机器上触发的计划任务、PR 活动传递到会话中,以及后台事件,例如完成的任务。来自跨会话 SendMessage 工具的消息根本不是任务通知:无论它们来自同一机器上的会话还是通过 Anthropic 服务器来自另一台机器,Claude Code 都给它们 kind: "peer" 和对等体来源字段。
对等体来源字段
peer 来源标识哪个代理发送了消息:进程内队友使用 SendMessage 发送到 main,或跨会话对等体,您的另一个 Claude Code 会话。跨会话对等体需要 macOS 和 Linux 上的 Claude Code v2.1.224 或更高版本;请参阅跨会话消息可用性了解本机 Windows 要求。跨会话对等体可以在同一机器上运行,或在您的另一台机器或Claude Code on the web 上,当其消息通过远程控制到达时。两种发送者类型填充字段的方式不同:
from:队友的名称,或跨会话对等体的发送者地址。对于单向跨机器消息,发送者没有回复地址,from是"unknown"。该值由发送者创作;verifiedPeerPid是验证的身份。fromMode:发送会话的权限类别,bypass或prompting,由在您的会话之间中继对等消息的主机声明,例如桌面应用。Claude Code 在接收会话中应用入站控制时读取它。需要 Agent SDK v0.3.234 或更高版本。senderTaskId:队友的任务 ID。对于跨会话对等体不存在。name:发送者的显示名称,由 Claude Code 规范化:它删除 Unicode 控制、格式、代理和行或段落分隔符代码点,然后修剪结果并将其限制为 64 个代码点,带有省略号。需要 Claude Code v2.1.205 或更高版本。body:解码的消息正文,去除对等信封,与模型看到的字节完全相同。对于队友消息始终存在;对于跨会话对等体,仅当轮次恰好是由 Claude Code 形成的一个对等信封时才存在。呈现name和body而不是重新解析消息文本。需要 Claude Code v2.1.205 或更高版本。fromSession:发送者的主机可打开会话 ID,由发送者的主机设置,以便您的 UI 可以链接回发送会话。像from一样,它是发送者声称的:仅将其用作导航目标,不要将其视为发送者身份的证明。需要 Claude Code v2.1.216 或更高版本。verifiedPeerPid:连接到此会话的跨会话消息套接字的进程的进程 ID,由内核验证并从连接本身读取,从不从有效负载读取。使用它,而不是from,来标识发送者:from可由任何同用户进程伪造。当 Claude Code 无法验证它时,该字段不存在,例如在 Windows 或非套接字入口上,因此缺失值意味着发送者未验证。对于中继流量,它标识中继而不是消息的作者,进程 ID 是可回收的,因此将其视为来源而不是身份验证令牌。需要 Claude Code v2.1.216 或更高版本。
Hook 类型
有关使用 hooks 的综合指南,包括示例和常见模式,请参阅 Hooks 指南。HookEvent
可用的 hook 事件。
HookCallback
Hook 回调函数类型。
HookCallbackMatcher
带有可选匹配器的 Hook 配置。
HookInput
所有 hook 输入类型的联合类型。
BaseHookInput
所有 hook 输入类型扩展的基本接口。
prompt_id 字段是一个 UUID,用于标识当前正在处理的用户提示。它与 OpenTelemetry 事件上的 prompt.id 属性匹配,在第一个用户输入之前不存在。需要 Claude Code v2.1.196 或更高版本。
PreToolUseHookInput
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
在批处理中的每个工具调用都已解决后触发一次,在下一个模型请求之前。tool_response 携带序列化的 tool_result 内容,模型会看到该内容;其形状与 PostToolUseHookInput 的结构化 Output 对象不同。
PermissionDeniedHookInput
NotificationHookInput
UserPromptSubmitHookInput
UserPromptExpansionHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
StopFailureHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PostCompactHookInput
PreModelSwitchHookInput
在请求的模型切换生效之前触发。context_tokens 和之后的字段估计向新模型重新发送对话的成本。有关完整的字段描述和阻止语义,请参阅 PreModelSwitch。
PostModelSwitchHookInput
在会话的模型更改后触发。它携带与 PreModelSwitchHookInput 相同的字段,另外还有两个 source 值。请参阅 PostModelSwitch。
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCreatedHookInput
TaskCompletedHookInput
ElicitationHookInput
ElicitationResultHookInput
ConfigChangeHookInput
InstructionsLoadedHookInput
DirectoryAddedHookInput
directory 是被添加的目录的绝对路径。当 /add-dir 添加它时,source 是 "slash_command",当 SDK 控制请求添加它时,source 是 "register_repo_root"。
WorktreeCreateHookInput
WorktreeRemoveHookInput
CwdChangedHookInput
FileChangedHookInput
MessageDisplayHookInput
HookJSONOutput
Hook 返回值。
AsyncHookJSONOutput
SyncHookJSONOutput
工具输入类型
所有内置 Claude Code 工具的输入架构文档。这些类型从@anthropic-ai/claude-agent-sdk 导出,可用于类型安全的工具交互。
ToolInputSchemas
从 @anthropic-ai/claude-agent-sdk 导出的工具输入类型的联合;成员包括:
Agent
工具名称:Agent。之前的名称 Task 仍然被接受作为别名,SDKSystemMessage 初始化消息中的 tools 数组目前为了向后兼容仍将此工具列为 Task。
mode 字段在 Claude Code v2.1.212 或更高版本上已弃用且被忽略。子代理在父会话的权限模式或其定义的 permissionMode 中运行,子代理继承规则决定使用哪一个。AskUserQuestion
工具名称:AskUserQuestion
Bash
工具名称:Bash
Monitor
工具名称:Monitor
command 运行脚本并为每个 stdout 行发出一个事件,ws 打开 WebSocket 并为每个文本帧发出一个事件。恰好提供 command 或 ws 之一。ws 源需要 Claude Code v2.1.195 或更高版本。
为会话长度的监视(如日志尾部)设置 persistent: true。当 Monitor 运行命令时,它遵循与 Bash 相同的权限规则;WebSocket 监视会单独提示批准。请参阅 Monitor 工具参考了解行为和提供商可用性。导出的类型将 timeout_ms 和 persistent 标记为必需,因为架构填充了它们的默认值 300000 和 false;省略它们的调用会验证通过。
TaskOutput
工具名称:TaskOutput
TaskOutput 已弃用;改为在任务的输出文件路径上使用 Read。以下架构对于遇到该工具的 hooks 和权限处理程序仍然有效。Edit
工具名称:Edit
Read
工具名称:Read
pages(例如,"1-5")。
对于 PDF,Claude 在 Read 调用的 tool_result 内容中接收文件的内容。返回 pdf 输出的读取操作包含一个摘要 text 块,后跟一个 document 块。返回 parts 输出的读取操作包含摘要 text 块,后跟每个提取页面的一个块:一个 image 块,或当 Claude Code 无法将其呈现为图像时命名该页面的 text 块。在 Agent SDK v0.3.242 之前,Claude Code 在工具结果后作为单独的 user 消息传递文件的内容。
Write
工具名称:Write
Glob
工具名称:Glob
Grep
工具名称:Grep
TaskStop
工具名称:TaskStop
task_id 也接受代理团队队友或按代理 ID 或名称的命名后台代理。
NotebookEdit
工具名称:NotebookEdit
WebFetch
工具名称:WebFetch
WebSearch
工具名称:WebSearch
Workflow
工具名称:Workflow
script、name 或 scriptPath 之一。
TodoWrite
工具名称:TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.请参阅模型可用性以选择加入。TaskCreate
工具名称:TaskCreate
TaskUpdate
工具名称:TaskUpdate
status 设置为 "deleted" 以删除它。
TaskGet
工具名称:TaskGet
null。
TaskList
工具名称:TaskList
ExitPlanMode
工具名称:ExitPlanMode
allowedPrompts 字段已弃用且被忽略;Claude Code 仍然接受它,以便现有调用者和记录验证。在 v2.1.205 之前,它请求基于提示的 Bash 权限以实现计划。
ListMcpResources
工具名称:ListMcpResourcesTool
ReadMcpResource
工具名称:ReadMcpResourceTool
EnterWorktree
工具名称:EnterWorktree
path 以切换到现有 worktree 而不是创建新的。在首次进入时,目标必须是当前存储库的已注册 worktree,或在多存储库工作区中,必须是嵌套在其中的存储库的已注册 worktree;从 worktree 会话内进入时,必须在会话存储库的 .claude/worktrees/ 下。name 和 path 互斥。
ExitWorktree
工具名称:ExitWorktree
keep 操作将 worktree 和分支保留在磁盘上,而 remove 删除两者。当删除具有未提交文件或未合并提交的 worktree 时,discard_changes 必须为 true。
EnterPlanMode
工具名称:EnterPlanMode
CronCreate
工具名称:CronCreate
recurring 设置为 false 以在下一个匹配时仅触发一次。作业默认为会话范围:启动新对话会清除它们,使用 --resume 或 --continue 恢复会恢复尚未过期的作业。请参阅计划任务。
将 durable 设置为 true 请求持久化到 .claude/scheduled_tasks.json,以便作业在重启后继续存在。持久化调度并非在每个会话中都可用:当不可用时,Claude Code 接受 durable: true 但创建仅会话的作业。读取输出的 durable 字段以查看作业是否已持久化。
CronDelete
工具名称:CronDelete
CronCreate 返回的 ID 删除计划的 cron 作业。
CronList
工具名称:CronList
.claude/scheduled_tasks.json 的持久化作业和来自当前会话的仅会话作业。
ScheduleWakeup
工具名称:ScheduleWakeup
/loop 命令。运行时将 delaySeconds 限制在 60 到 3600 秒之间。除非 stop 为 true,否则 delaySeconds、reason、prompt 和 noop 字段是必需的。noop: true 报告没有任何更改的唤醒。设置 stop: true 取消待处理的唤醒并结束自定步调的 /loop。stop 字段需要 Claude Code v2.1.202 或更高版本。请参阅工具参考中的 ScheduleWakeup 行。
RemoteTrigger
工具名称:RemoteTrigger
/schedule 命令。trigger_id 对于 get、update、run 和 list_runs 操作是必需的。body 对于 create、update 和 create_webhook_trigger 是必需的,对于 run 是可选的。
create_webhook_trigger 将事件源附加到现有例程,例如触发它的 GitHub 事件。body 命名源、事件和要触发的例程。需要 Claude Code v2.1.225 或更高版本。
list_runs 列出例程的最近运行,get_run_log 读取一个运行的日志。session_id 从 list_runs 结果命名要读取的运行,cursor 分页浏览任一操作的结果。两个操作都需要 Claude Code v2.1.227 或更高版本。
此工具仅在会话使用启用了例程的计划的 claude.ai 账户进行身份验证时可用,当您的组织的策略禁用网络上的 Claude Code 时不存在。在 Claude Code v2.1.227 或更高版本上,当所有者为组织关闭例程时,该工具也不存在。在 v2.1.227 之前,仅关闭例程切换的会话仍然显示该工具,服务器拒绝其调用。
PushNotification
工具名称:PushNotification
message 保持在 200 个字符以下,因为移动操作系统会截断较长的文本。请参阅工具参考中的 PushNotification 行了解提供商可用性;推送传递通过 Anthropic 托管的基础设施进行,该基础设施无法从 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry 访问。
REPL
工具名称:REPL
timeout 以毫秒为单位,默认为 30000,最大为 600000。
这些类型已导出,但除非您在 env 选项中设置 CLAUDE_CODE_REPL=1,否则该工具在 SDK 会话中处于关闭状态。它还需要本机安装程序提供的基于 Bun 的 claude 可执行文件。
ReportFindings
工具名称:ReportFindings
level 是审查运行的工作量级别。发现按最严重优先排序,每次调用最多 32 个,当没有发现存活时数组为空。需要 Claude Code v2.1.196 或更高版本。
每个发现包含这些字段:
file:发现所在的存储库相对路径。可选的line是它锚定到的 1 索引行。summary:缺陷的单句陈述。failure_scenario描述导致错误输出或崩溃的具体输入和状态。short_summary:可选的最多 60 个字符的压缩标签,用于紧凑显示。需要 Claude Code v2.1.212 或更高版本。category:可选的发现类型的短 kebab-case slug,例如correctness或test-coverage。需要 Claude Code v2.1.199 或更高版本。verdict:在验证通过运行时设置;在仅内联审查中不存在。outcome:仅在应用修复后重新报告时设置。
Artifact
工具名称:Artifact
.html 或 .md 文件发布为托管的 artifact 页面,或列出用户发布的 artifacts。省略 action 或传递 "publish" 以发布 file_path,这对于发布操作是必需的,以及 favicon,一个或两个标记 artifact 在用户库中的表情符号。当 HTML 文件没有 <title> 标签时,title 在浏览器标签和库中命名发布的页面。url 针对现有 artifact 以就地更新,而不是创建新的。
force 是最后手段的覆盖,丢弃另一个会话发布的较新版本。在冲突时,失败的发布返回较新的内容;Claude 将其更改合并到该内容上,或重新读取 artifact,然后再次发布。仅当用户明确要求丢弃该版本时才传递 force。
传递 "list" 以枚举用户发布的 artifacts;仅 limit 和 scope 可能伴随它。scope 默认为 "mine",列出用户拥有的 artifacts;"shared" 列出其他人与用户共享的 artifacts,"all" 列出两者。
capabilities:发布的页面使用的运行时功能,由功能名称键入,例如页面可能调用的连接器。artifact 服务验证声明并拒绝命名账户无法使用的功能或给予一个无效配置的发布。传递{}以清除存储的声明,在重新部署时省略字段以保留它。需要 Agent SDK v0.3.235 或更高版本。contract:发布的页面运行的运行时版本。省略它以保留 artifact 的当前版本,传递"latest"以升级,或传递特定版本以固定或回滚。需要 Agent SDK v0.3.235 或更高版本。
Projects
工具名称:Projects
method 上分派:
project_info:返回项目元数据和文档列表。project_read:按path读取一个文档。project_search:使用query查询项目的知识库。n限制命中数并默认为 5。project_write:从content(包含内联文本)或local_path(命名工作目录内的文件)中的恰好一个在path处创建或替换文档。present_to_user: true将写入的文档标记为用户需要看到的可交付成果。project_delete:按path删除文档。
ReadMcpResourceDir
工具名称:ReadMcpResourceDirTool
resources 列表,error 字段报告目录列表未启用。
RefreshMcpTools
工具名称:RefreshMcpTools
env 选项中设置 CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 时注册该工具,并且仅在至少有一个 MCP 服务器的会话中。需要 Claude Code v2.1.211 或更高版本。
ShowOnboardingRolePicker
工具名称:ShowOnboardingRolePicker
McpInput
工具名称: 形式为mcp__<server>__<tool> 的动态 MCP 工具名称
工具输出类型
所有内置 Claude Code 工具的输出架构文档。这些类型从@anthropic-ai/claude-agent-sdk 导出,代表每个工具返回的实际响应数据。
ToolOutputSchemas
从 @anthropic-ai/claude-agent-sdk 导出的工具输出类型的联合;成员包括:
Agent
工具名称:Agent。之前的名称 Task 仍然被接受作为别名,SDKSystemMessage 初始化消息中的 tools 数组目前为了向后兼容仍将此工具列为 Task。
status 字段上进行区分:"completed" 表示已完成的任务,"async_launched" 表示后台任务,"remote_launched" 表示 Claude Code 分派到远程云会话的任务,其中 sessionUrl 链接到该会话,taskId 标识它。
在 completed 变体上,resolvedModel 命名子代理启动时所用的模型,当应用 availableModels 或其他覆盖时,该模型可能与请求的 model 输入不同。此字段需要 Claude Code v2.1.174 或更高版本。在 async_launched 上,它命名任务移至后台时使用的模型。
modelsUsed 列出子代理使用的模型,按顺序。该字段仅在发生中途交换时出现,当运行交换回某个模型时,该模型会再次出现。在 async_launched 上,该列表涵盖后台处理前使用的模型。modelsUsed 和 resolvedModel 的后台处理行为都需要 Claude Code v2.1.212 或更高版本。
如果 Claude Code 保留了子代理的隔离 worktree,completed 结果上的 worktreePath 是找到它的位置。worktreeBranch 是其分支,当 Claude Code 使用 git 创建 worktree 时出现。
Claude Code 从子代理的最终 API 请求而不是整个运行中填充 usage 和 totalTokens,因此 usage.service_tier 是 API 在该请求上报告的服务层字符串。当存在时,usage.output_tokens_details.thinking_tokens 是该请求的输出令牌中属于思考令牌的数量。output_tokens_details 字段需要 TypeScript SDK v0.3.228 或更高版本,该版本包含 Claude Code v2.1.228。
usage.output_tokens_details 在含义上与 Usage.output_tokens_details 匹配,范围限于该最终请求,但其每个级别都是可选的。保护对象和字段,例如 usage.output_tokens_details?.thinking_tokens ?? 0,而不是直接读取它。
在 v2.1.207 之前,发布的类型更窄。它省略了 worktreePath、worktreeBranch、citations、toolStats.frameCount 和 inference_geo、speed 和 iterations 使用字段,并将 service_tier 类型化为 "standard" | "priority" | "batch"。类型标记为可选的字段可能在早期版本记录的结果中不存在。
AskUserQuestion
工具名称:AskUserQuestion
response 被设置;当存在时,Claude 会收到”用户回复:…”而不是每个问题的答案列表。
Bash
工具名称:Bash
stdout、stderr 和 backgroundTaskId 字段携带:
timedOutAfterMs 是超时时间(以毫秒为单位),当命令达到其超时并移至后台而不是显式启动时设置。backgroundCwdHint 在后台命令包含目录更改内置命令(如 cd、pushd、popd 或 chdir)时设置,并注意会话工作目录未更改。两个字段都需要 Claude Code v2.1.210 或更高版本。
当在前台运行的子代理拥有后台命令时,Claude Code 在该子代理给出最终响应时终止该命令。Claude Code 在此类命令上将 backgroundEndsWithFinalResponse 设置为 true,并在命令存活该轮时省略该字段,如主对话或后台子代理启动的命令那样。该字段需要 Claude Code v2.1.227 或更高版本。
Claude Code 将 gitOperation.commit.branch 设置为 git 提交摘要行中命名的分支,对于在分离 HEAD 上进行的提交则省略它。该字段需要 Agent SDK v0.3.227 或更高版本。Claude Code 将 gh pr reopen 命令报告为 reopened PR 操作,这需要 Agent SDK v0.3.234 或更高版本。
Monitor
工具名称:Monitor
TaskStop 一起提前取消监视。
Edit
工具名称:Edit
Read
工具名称:Read
type 字段上进行区分。
Write
工具名称:Write
originalFile 和 structuredPatch 持有的内容取决于写入:
- 对于新创建的文件,
originalFile为 null,structuredPatch为空 - 在覆盖时,
originalFile携带之前的内容,除非该内容大于约 10 MB:Claude Code 则跳过差异并返回originalFilenull 和structuredPatch空 - 当写入未更改任何内容或差异超时时,
structuredPatch也为空
Glob
工具名称:Glob
totalMatches 和 countIsComplete 需要 Claude Code v2.1.191 或更高版本。totalMatches 报告截断前的匹配文件数。当 countIsComplete 为 false 时,totalMatches 是一个下界,因为底层搜索截断了其自己的输出。
Grep
工具名称:Grep
mode 而异:文件列表、带匹配的内容或匹配计数。在 count 模式下,numFiles 和 numMatches 是完整结果集上的总计,不是分页切片。在 v2.1.208 之前,截断列出条目的 head_limit 或 offset 也会截断这些总计。
totalFiles 需要 Claude Code v2.1.208 或更高版本,并在 files_with_matches 模式下报告 head_limit 和 offset 分页前的总结果数。totalLines 需要 Claude Code v2.1.210 或更高版本,并在 content 模式下报告分页前的总行数。
TaskStop
工具名称:TaskStop
NotebookEdit
工具名称:NotebookEdit
WebFetch
工具名称:WebFetch
artifactRead 是 Claude Code 自己的工件读取记录,仅当 Claude 获取会话可以发布的工件时出现。Claude Code 在会话恢复时读取它回来,以便稍后的发布基于正确的版本;您的代码不需要对其采取行动。slug 命名工件,ver 是读取记录的版本,当它未记录任何内容时不存在,seeded: false 标记其完整源未到达 Claude 的读取。seeded 字段需要 Agent SDK v0.3.239 或更高版本。
WebSearch
工具名称:WebSearch
Workflow
工具名称:Workflow
error:脚本如果语法检查失败,会返回 status: "async_launched" 并设置 error,且永远不会运行。
TodoWrite
工具名称:TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.请参阅模型可用性以选择加入。TaskCreate
工具名称:TaskCreate
TaskUpdate
工具名称:TaskUpdate
TaskGet
工具名称:TaskGet
null。
TaskList
工具名称:TaskList
ExitPlanMode
工具名称:ExitPlanMode
ListMcpResources
工具名称:ListMcpResourcesTool
ReadMcpResource
工具名称:ReadMcpResourceTool
EnterWorktree
工具名称:EnterWorktree
ExitWorktree
工具名称:ExitWorktree
EnterPlanMode
工具名称:EnterPlanMode
CronCreate
工具名称:CronCreate
CronDelete
工具名称:CronDelete
CronList
工具名称:CronList
.claude/scheduled_tasks.json 的持久作业和来自当前会话的仅会话作业。仅会话作业携带 durable: false;从磁盘读取的作业省略该字段。
ScheduleWakeup
工具名称:ScheduleWakeup
stopped 字段在调用以 stop: true 结束循环时为 true。它需要 Claude Code v2.1.202 或更高版本。cancelledWakeups 字段计算 stop: true 调用取消了多少待处理唤醒。值为 0 表示没有待处理,重复 /loop cron 不会被 stop: true 取消。它需要 Claude Code v2.1.206 或更高版本。
RemoteTrigger
工具名称:RemoteTrigger
PushNotification
工具名称:PushNotification
REPL
工具名称:REPL
Read 调用显示的任何图像或文档。
ReportFindings
工具名称:ReportFindings
short_summary 字段需要 Claude Code v2.1.212 或更高版本。
Artifact
工具名称:Artifact
url 和为发布操作发布的本地 path,当发布重新部署现有工件时 updated 设置为 true,warnings 携带任何发布时建议。列表操作返回 artifacts 行,当存在比请求限制更多的工件时 truncated 设置。在范围不是 "mine" 的列表上,每行携带 rel 标记用户是否拥有工件或与他们共享,输出的 scope 记录哪个非默认范围产生了列表;两者在默认列表上不存在。
Projects
工具名称:Projects
method 字段上进行区分,镜像输入。project_read 在 content 中内联返回小文本文档,并将较大的文档写入 local_file 路径;project_search 当项目的索引可用时返回 RAG hits 且 rag: true,否则回退到 docs 路径列表。
ReadMcpResourceDir
工具名称:ReadMcpResourceDirTool
"inode/directory";error 在服务器无法列出目录时携带人类可读的消息。
RefreshMcpTools
工具名称:RefreshMcpTools
refreshed 表示重新查询的工具列表已应用,error 表示重新查询失败且保留了之前的工具集,not_connected 表示服务器没有实时连接来查询。
ShowOnboardingRolePicker
工具名称:ShowOnboardingRolePicker
role,当他们关闭选择器时为 dismissed: true。空对象表示用户批准了调用而未选择角色。
McpOutput
工具名称: 形式为mcp__<server>__<tool> 的动态 MCP 工具名称
undefined,尽管导出的类型不对此建模。
权限类型
PermissionUpdate
用于更新权限的操作。
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
其他类型
ApiKeySource
会话请求的 API 密钥来源,在 SDKSystemMessage 初始化消息上报告为 apiKeySource。
Agent SDK v0.3.234 及更高版本在类型中列出这四个值。该类型还保留
user、project、org、temporary 和 oauth,以便旧代码仍然可以编译,Claude Code 不报告它们。
SdkBeta
可通过 betas 选项启用的可用测试功能。请参阅 Beta 标头 了解更多信息。
SlashCommand
有关可用命令的信息。
ModelInfo
有关可用模型的信息。
AgentInfo
有关可通过 Agent 工具调用的可用子代理的信息。
McpServerStatus
连接的 MCP 服务器的状态。
McpServerStatusConfig
由 mcpServerStatus() 报告的 MCP 服务器的配置。这是所有 MCP 服务器传输类型的联合。
McpServerConfig 了解每种传输类型的详情。
AccountInfo
经过身份验证的用户的帐户信息。
ModelUsage
结果消息中返回的每个模型使用统计。costUSD 值是客户端估计。请参阅跟踪成本和使用情况了解计费注意事项。
thinkingTokens 计算此模型生成的思考令牌。outputTokens 已包括它们,因此不要将两者相加。该字段在运行在记录它的 Claude Code 版本上的轮次之前不存在,因此在早期版本上开始的已恢复会话报告部分计数。thinkingTokens 需要 Agent SDK v0.3.257 或更高版本。
字段 canonicalModel 和 provider 需要 Claude Code v2.1.218 或更高版本。canonicalModel 是定价查询使用的规范模型 ID;它可能与键入条目的原始模型字符串不同,例如当该字符串是提供商特定的 ID 或别名时。
provider 命名为模型提供服务的 API 后端,例如 firstParty、bedrock、vertex、foundry、anthropicAws、mantle 或 gateway。
costBasis 命名为模型最新请求定价的价格表:list 表示列表价格,managed 表示 modelPricing 表,或 unknown 当两者都不匹配模型 ID 时。该字段需要 Claude Code v2.1.246 或更高版本。
ConfigScope
NonNullableUsage
Usage 的版本,所有可空字段都变为非可空。
Usage
令牌使用统计。这是来自 @anthropic-ai/sdk 的 BetaUsage 类型。
BetaServerToolUsage、BetaIterationsUsage 和 BetaOutputTokensDetails 在 @anthropic-ai/sdk 中定义。
output_tokens_details 按类别分解计费输出。它目前包含一个字段 thinking_tokens: number,计算模型生成的输出令牌作为内部推理,包括思考块分隔符。output_tokens_details 字段需要 TypeScript SDK v0.3.228 或更高版本,它捆绑了 Claude Code v2.1.228。
- 计费:读取分解以进行观察,而不是计费。
output_tokens保持权威总数,output_tokens - thinking_tokens近似非推理输出。 - 计数涵盖的内容:模型生成的原始推理,可能比响应体中返回的思考文本更长。API 通过重新标记化该原始文本来计算它,因此它可能与模型的精确生成计数相差几个令牌。
- 流式传输:在流式助手消息上,此分解与
output_tokens一样是message_start占位符,不包含真实计数,因此从结果消息的usage读取它,如 从结果消息读取输出令牌 所述。在结果消息上,当模型或提供商不报告分解时,thinking_tokens读取0。 null情况:output_tokens_details本身在 Claude Code 合成的助手消息上为null,例如 API 错误消息。
CallToolResult
MCP 工具结果类型(来自 @modelcontextprotocol/sdk/types.js)。structuredContent 是一个 JSON 对象,可以与 content 一起返回,包括图像块。请参阅返回结构化数据。
SDKMcpResourceLink
MCP 工具按引用返回的一个文件。Claude Code 从工具结果中的 resource_link 块构建每个条目,并将列表作为 resourceLinks 在 SDKUserMessage.tool_use_result 上传递,或在调用在后台完成时作为 resource_links 在 SDKTaskNotificationMessage 上传递。需要 Agent SDK v0.3.257 或更高版本。
uri 或 name 不是字符串的块,并省略其值不是列出类型的可选字段。
ThinkingConfig
控制 Claude 的思考/推理行为。优先于已弃用的 maxThinkingTokens。
display 字段控制思考文本是否以 "summarized" 或 "omitted" 形式返回。在 Claude Opus 4.7 及更高版本上,API 默认值为 "omitted",因此设置 "summarized" 以在 thinking 块中接收思考内容。Claude Code 不会将 display 发送到 Amazon Bedrock 或 Google Cloud 的 Agent Platform,因此在这些提供商上,即使您将 display 设置为 "summarized",Opus 4.7 及更高版本也会返回空 thinking 块。
SpawnedProcess
自定义进程生成的接口(与 spawnClaudeCodeProcess 选项一起使用)。ChildProcess 已满足此接口。
SpawnOptions
传递给自定义生成函数的选项。
signal 字段告诉您的生成函数何时拆除进程。将其作为 signal 选项传递给 Node 的 spawn(),或将其传递给您的 VM 或容器拆除处理程序。此信号不会在 Options.abortController 中止的瞬间触发。SDK 首先关闭进程的 stdin 并等待约两秒钟,以便 CLI 可以干净地关闭,然后中止此信号。要在调用者中止时立即做出反应,请侦听您自己的 Options.abortController.signal,您的生成函数可以从其封闭范围引用。McpSetServersResult
setMcpServers() 操作的结果。
setMcpServers() 时,Claude Code 应用这些规则:
- 调用未命名的服务器:Claude Code 保持插件提供的服务器运行。需要 Agent SDK v0.3.210 或更高版本。
- 调用命名的服务器:除了 CLI 在启动时启动的内置服务器外,Claude Code 仅当其配置与您传递的配置不同时才替换运行中的服务器。
- CLI 在启动时启动的内置服务器:如果调用命名了一个,Claude Code 删除该条目并在
errors中报告它。
added 列出 Claude Code 添加或替换的服务器,无论它们是否连接。未能连接的服务器同时出现在 added 和 errors 中,失败文本在 errors 下,failed 行在 mcpServerStatus() 中。在 Claude Code v2.1.257 之前,其连接尝试抛出的服务器仅在 errors 下报告。
RewindFilesResult
rewindFiles() 操作的结果。
skippedLinks 计算跟踪路径,倒带拒绝恢复或删除以确保链接安全:跟踪路径处的符号链接、硬链接或其他非常规文件,不再解析到检查点时指向的位置的父目录,或无法安全读取的备份。该字段需要 Claude Code v2.1.216 或更高版本。使用 rewindFiles(userMessageId, { dryRun: true }) 的预览调用永远不会设置它。
SDKStatusMessage
状态更新消息(例如,压缩)。
SDKTaskNotificationMessage
后台任务完成、失败或停止时的通知。后台任务包括 run_in_background Bash 命令、Monitor 监视和后台子代理。对于 ambient 字段,请参阅 SDKTaskStartedMessage,它定义了它及其版本要求。
tool_result 块仅保存占位符,调用的真实结果在此通知中到达。使用 tool_use_id 将通知与调用匹配。在 completed 通知上,resource_links 列出工具按引用返回的文件作为 SDKMcpResourceLink 条目,具有与 tool_use_result.resourceLinks 相同的 50 链接和 64 KiB 限制。Claude Code 在结果没有链接时省略 resource_links,以及在不是 MCP 工具调用的任务的通知上。resource_links 需要 Agent SDK v0.3.257 或更高版本。
Claude Code 在发送给模型的每个任务通知前面加上通知,除了带有 scheduled-trigger 子类型 的传递外,它们改为携带分配任务框架。通知说明没有发生人类输入,因此模型不会将通知视为用户指令或批准。
要检测任务通知轮次,请在 SDKUserMessage 或 SDKResultMessage 上检查 origin.kind === "task-notification",而不是匹配通知文本。如果您需要知道是什么引发了它,请从同一字段读取 subkind。在 v2.1.205 之前,Claude Code 在会话空闲时到达的通知上省略了通知。
SDKToolUseSummaryMessage
对话中工具使用的摘要。
SDKHookStartedMessage
当 hook 开始执行时发出。
Claude Code 将此消息、SDKHookProgressMessage 和 SDKHookResponseMessage 立即传递到消息流,包括在会话启动期间 SessionStart 或 Setup hook 仍在运行时。Claude Code v2.1.169 至 v2.1.203 在 SessionStart 或 Setup hook 完成后以一个批次传递这些消息;v2.1.204 恢复了实时传递。
SDKHookProgressMessage
在 hook 运行时发出,包含 stdout/stderr 输出。
SDKHookResponseMessage
当 hook 完成执行时发出。
SDKToolProgressMessage
在工具执行时定期发出,以指示进度。
tool_progress 消息,其中 heartbeat: true。每个心跳都包含工具名称和经过的秒数,因此您可以区分长时间运行的调用和停滞的会话。Claude Code 不为子代理内的工具调用发出心跳。heartbeat 字段需要 Agent SDK v0.3.214 或更高版本。在 v2.1.257 之前,Claude Code 也不为前台 Agent 工具调用发出心跳。
在除心跳外的 Agent 工具的 tool_progress 消息上,subagent_type 命名运行中的子代理类型,例如 general-purpose。subagent_retry 在该子代理等待 API 错误退避(例如速率限制或过载)时出现,每个重试尝试一条消息。两个字段都需要 Agent SDK v0.3.214 或更高版本。
要从 subagent_retry 呈现重试指示器:
- 按
parent_tool_use_id跟踪指示器,这对每个子代理是唯一的。tool_use_id由来自一个助手轮次的并行子代理共享,因此按它跟踪会让一个子代理的更新清除另一个的指示器。 - 当同一
parent_tool_use_id的后续tool_progress到达时清除指示器,既不包含subagent_retry也不包含heartbeat: true,或当工具的结果消息到达时。带有heartbeat: true的帧仅报告活跃性,因此当一个到达时保持指示器。attempt可能在持续重试下超过max_retries,因此不要从计数器派生清除。 - 将
error_category视为选择您自己的消息文本的令牌,而不是显示文本。值为rate_limit、overloaded、authentication_failed、server_error、cloud_credential_error和unknown。处理您不识别的值的方式与处理unknown的方式相同,因为后续版本可以添加值。
SDKAuthStatusMessage
在身份验证流程中发出。
SDKTaskStartedMessage
当任务开始时发出。task_type 字段对于 Bash 命令和 Monitor 监视为 "local_bash",对于子代理为 "local_agent",或 "remote_agent"。
ambient 为 true,例如 Claude Code 为其自身操作运行的任务。实时更新监视器也是环境的,包括用户要求的监视器。从活动指示器中排除环境任务。该字段需要 Agent SDK v0.3.247 或更高版本。
ambient 也出现在 SDKTaskNotificationMessage 和 SDKBackgroundTasksChangedMessage 条目上。
is_backgrounded 和 spawn_depth 描述 Claude Code 如何启动任务。两个字段都需要 Agent SDK v0.3.238 或更高版本。
is_backgrounded:Claude Code 在"local_agent"和"local_bash"任务上设置它。true表示任务在后台运行。false表示任务在前台运行,启动它的工具调用保持阻止,直到任务完成或移到后台。spawn_depth:Claude Code 仅在"local_agent"任务上设置它。主线程生成的子代理的深度为1。深度1子代理生成的子代理的深度为2,以此类推。
is_backgrounded: true,因为 Claude Code 在后台运行每个已恢复的子代理。当前台任务稍后移到后台时,Claude Code 在 task_updated 消息中报告新的 is_backgrounded 值,而不是发送第二个 task_started。
SDKTaskProgressMessage
在子代理或后台任务运行时定期发出。仅当启用 agentProgressSummaries 时,summary 字段才会被填充。
SDKTaskUpdatedMessage
当后台任务的状态发生变化时发出,例如当它从 running 转换为 completed 时。将 patch 合并到按 task_id 键入的本地任务映射中。end_time 字段是 Unix 纪元时间戳(以毫秒为单位),可与 Date.now() 比较。
SDKBackgroundTasksChangedMessage
每当实时后台任务集发生变化时发出:任务启动、完成、被杀死,前台代理被后台化,或任务的 description 或 ambient 字段发生变化。
tasks 数组是完整的实时集。用每个有效负载替换任何缓存的集,而不是配对 task_started 和 task_notification 事件,以便下一个成员资格变化纠正您错过的任何事件。
相对于这些每个任务事件的顺序是未指定的,因此不要关联这两个流。
启动时不发出任何内容。每当会话的 CLI 进程启动或重新启动时重置为空集,并让下一个成员资格变化重新填充它。
当您向运行中的会话发送重复的 initialize 控制请求时,例如在传输间隙后使用 reinitialize(),Claude Code 在响应后跟随当前实时集的快照,即使它为空。因此,重新连接的主机可以了解正在运行的内容,而无需等待下一个成员资格变化。在 Agent SDK v0.3.239 之前,Claude Code 在重复 initialize 后没有发送快照。
需要 Claude Code v2.1.203 或更高版本。
SDKThinkingTokensMessage
在 Claude 生成思考块(包括编辑过的块)时发出。estimated_tokens 是迄今为止在当前块中生成的思考令牌的运行估计,estimated_tokens_delta 是此帧携带的增量。将这些估计用于进度显示。
当模型或提供商报告分解时,顶级代理循环的最终计数是结果消息的 usage.output_tokens_details.thinking_tokens,它不包括子代理令牌。
需要 Claude Code v2.1.153 或更高版本。
SDKFilesPersistedEvent
当文件检查点持久化到磁盘时发出。
SDKRateLimitEvent
当会话遇到速率限制时发出。
errorCode 为 "credits_required" 时,拒绝来自 claude.ai 订阅,其包含的使用量已耗尽,会话在用户购买使用额度之前无法继续。canUserPurchaseCredits 指示经过身份验证的用户是否可以为帐户购买额度,hasChargeableSavedPaymentMethod 指示是否有保存的付款方式。所有三个字段在非信用额度必需拒绝的速率限制事件中不存在。需要 Claude Code v2.1.181 或更高版本。
SDKLocalCommandOutputMessage
Claude Code 不发出此消息类型。当您发送命令(例如 /context 或 /usage)作为提示时,其输出作为 SDKAssistantMessage 到达。
SDKCommandsChangedMessage
当可用命令集在会话中期发生变化时发出,例如当代理进入子目录时发现技能。commands 数组是完整的更新列表,因此用此有效负载替换任何缓存的命令列表。在此消息后调用 supportedCommands() 返回相同的更新列表,因为该方法跟踪最新推送;这需要 Agent SDK v0.3.216 或更高版本。在早期 SDK 版本中,supportedCommands() 返回在初始化时捕获的快照,永远不反映会话中期的变化。
SDKPromptSuggestionMessage
当启用 promptSuggestions 且 Claude Code 为该轮次生成了建议时,在轮次后发出。包含预测的下一个用户提示。对于未获得任何建议的轮次,请参阅 当 Claude Code 跳过建议时。
SDKConversationResetMessage
当会话的对话被替换而不结束会话时发出。在 query() 调用中,仅 /clear 及其别名产生此消息。在 new_conversation_id 下挂载空记录,并丢弃任何缓存的会话标题。
SDKConversationResetMessage。在 v2.1.203 之前,SDKMessage 引用该类型而不声明它,因此当 skipLibCheck 被禁用时,在 type === "conversation_reset" 上缩小范围失败类型检查。
AbortError
用于中止操作的自定义错误类。
AbortError 是 SDK 的类型化 API 中唯一的错误类。其他失败,例如 Claude Code 进程退出或无法启动,使用没有 SDK 类可匹配的错误拒绝消息迭代。故障排除 按消息键入这些错误,每个都有原因和修复。
沙箱配置
SandboxSettings
沙箱行为的配置。使用此选项以编程方式启用命令沙箱和配置网络限制。
沙箱取决于平台支持,在 Linux 上,还需要
bubblewrap 和 socat 等工具。当 enabled 为 true 且沙箱无法启动时,query() 报告一条 result 消息,其中 subtype: "error_during_execution",原因在 errors 中。对于单个消息 query() 调用,SDK 在生成该错误结果后抛出异常,因此将循环包装在 try 块中以继续通过它。有关错误合约,请参阅处理结果。要改为运行沙箱外的命令,请设置 failIfUnavailable: false。示例用法
SandboxNetworkConfig
沙箱模式的网络特定配置。这些设置适用于当父级 SandboxSettings 中的 enabled 为 true 时的沙箱化 Bash 命令。它们不限制 WebFetch 工具,该工具改用权限规则。
SandboxFilesystemConfig
沙箱模式的文件系统特定配置。
沙箱外命令的权限回退
当allowUnsandboxedCommands 启用时,模型可以通过在工具输入中设置 dangerouslyDisableSandbox: true 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着您的 canUseTool 处理程序被调用,允许您实现自定义授权逻辑。在下面的示例中,isCommandAuthorized 代表您定义的授权检查。
另请参阅
- SDK 概述 - 常规 SDK 概念
- Python SDK 参考 - Python SDK 文档
- CLI 参考 - 命令行界面
- 常见工作流 - 分步指南