Skip to main content

安装

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() 会话应用的内容不同:
  • policyHelperresolveSettings() 读取 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_WATCHDOGCLAUDE_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()

在运行的会话上更改设置而无需重新启动查询。当没有专用设置器的设置需要在会话中期更改时使用它,例如在代理读取不受信任的输入后收紧 permissionssetModel()setPermissionMode() 是这两个键的专用设置器;applyFlagSettings() 是接受任何设置键子集的通用形式,在此处传递 model 的行为与 setModel() 相同。 仅某些键在会话中期生效:
  • 在下一个轮次应用effortLevelultracodepermissionshooksskillOverridesfastModeagent。切换 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。
在 Agent SDK v0.3.238 之前,响应从不携带该字段,Claude Code 在每个重复初始化上忽略 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,而不是将其视为错误。
直接驱动 CLI 控制协议的客户端(而不是通过 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 命令呈现的相同有效负载,因此除了令牌计数外,它还携带显示字段,如 colorgridRows,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 保存每个类别的总计。
  • mcpToolsagents 将令牌归属于各个 MCP 工具和 subagents。
  • memoryFiles 列出每个加载的内存文件及其成本。
  • skills.skillFrontmatter 将 skill 列表的令牌归属于每个包含的 skill。每个 skill 的计数测量每个 skill 的列表条目,因为 Claude Code 实际发送它,这可能比 skill 的完整 frontmatter 更短。比较 skills.totalSkillsskills.includedSkills 以查看每个发现的 skill 是否进入列表。
totalTokens 是会话的当前上下文使用情况,maxTokens 是针对该使用情况测量的窗口。该窗口是模型的上下文窗口,或当应用一个时的较低自动压缩窗口。rawMaxTokens 携带与 maxTokens 相同的值,percentagetotalTokens 作为该窗口的四舍五入百分比。 Claude Code 保留可选的 deferredBuiltinToolssystemToolssystemPromptSections 诊断未设置,因此即使类型声明它们,也应该期望它们不存在。

SDKControlReadFileResponse

readFile() 的返回类型。
contents 保存文件文本,或当您请求 encoding: 'base64' 时的 base64 数据;响应的 encoding 字段在这种情况下设置为 'base64'absPath 是解析的绝对路径。当文件长于 maxBytes 上限且内容在该限制处被切割时,truncated 被设置。

readFile() 可以读取什么

readFile() 提供的文件集比 Read 工具更窄:
  • 会话的工作目录之一内的常规文件,如 cwdadditionalDirectories
  • Claude Code 自己的一些文件用于会话,如工具结果
Read deny 和 ask 规则仍然阻止匹配的路径,广泛的 Read allow 规则不会向 readFile() 打开文件系统的其余部分。对于任何其他内容,调用使用 null 进行解决。

SDKControlReloadSkillsResponse

reloadSkills() 的返回类型。
skills 列出重新加载后可用的 skills,采用 supportedCommands() 返回的相同 SlashCommand 形状。

AgentDefinition

以编程方式定义的 subagent 的配置。

AgentMcpServerSpec

指定 subagent 可用的 MCP 服务器。可以是服务器名称(字符串,引用父级 mcpServers 配置中的服务器)或内联服务器配置记录,将服务器名称映射到配置。
其中 McpServerConfigForProcessTransportMcpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig

SettingSource

控制 SDK 从哪些基于文件系统的配置源加载设置。

默认行为

settingSources 被省略或 undefined 时,query() 加载与 Claude Code CLI 相同的文件系统设置:用户、项目和本地。请参阅settingSources 不控制的内容了解无论此选项如何都会读取的输入,以及如何禁用它们。

为什么使用 settingSources

禁用文件系统设置:
仅加载特定设置源:
要加载 CLAUDE.md 项目说明,请在 settingSources 中包含 "project"。请参阅修改系统提示了解 CLAUDE.md 加载如何与系统提示选项交互。

设置优先级

加载多个源时,设置按此优先级合并(从高到低):
  1. 本地设置(.claude/settings.local.json
  2. 项目设置(.claude/settings.json
  3. 用户设置(~/.claude/settings.json
编程选项(如 agentsallowedToolssettings)覆盖用户、项目和本地文件系统设置。托管策略设置优先于编程选项。

PermissionMode

CanUseTool

用于控制工具使用的自定义权限函数类型。 该函数是 SDK 替代交互式权限提示:仅当权限评估流解决为提示时才调用它。已由 allowedTools 条目、设置 allow 规则或权限模式(如 acceptEditsbypassPermissions)批准的工具调用永远不会调用它。要限制每个工具调用,请改用 PreToolUse hook 任何模式都不自动批准的操作不会被 allow 规则预先批准;请参阅权限如何被评估了解哪些到达回调以及在 dontAskauto 模式下会发生什么。
回调通常通过返回 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 的配置。
示例:
有关创建和使用 plugins 的完整信息,请参阅Plugins

消息类型

SDKMessage

查询返回的所有可能消息的联合类型。

SDKAssistantMessage

助手响应消息。
message 字段是来自 Anthropic SDK 的 BetaMessage。它包括 idcontentmodelstop_reasonusage 等字段。 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
当中断或中止在流完成之前截断助手消息时,abortedtrue:消息没有 stop_reason,内容可能在中间词处结束。该字段在正常完成的消息上不存在。它需要 Agent SDK v0.3.214 或更高版本。 Claude Code 在转轮的第一个助手消息上设置 user_message_uuiduser_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_resultAgentOutput。在 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 类型为 peerchannel,无论是在活跃轮次期间交付还是在会话空闲时启动新轮次,都会作为重放到达流。在 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_startcontent_block_delta 流事件的时间(毫秒),计算思考块作为内容。仅在成功分支上显示,当 is_error 为 false 时。需要 Agent SDK v0.3.260 或更高版本。
  • first_stream_post_msfirst_stream_post_ack_msfirst_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 或更高版本。
使用原因代码在您自己的 UI 中解释为什么快速模式关闭,而不是重新推导可用性。每个代码命名阻止快速模式的检查: 相同的字段对出现在 SDKSystemMessageSDKControlInitializeResponse 上,因此您可以在第一个轮次之前读取快速模式状态。 origin 字段转发触发此结果的用户消息的 SDKMessageOrigin。当 SDK 注入合成后续轮次(例如对于完成的后台任务)时,生成的 SDKResultMessage 携带 origin: { kind: "task-notification" }。例程的触发器触发和来自您其他会话的服务器验证消息也会到达此类,每个都带有任务通知子类型中描述的 subkind。检查 kind 以区分回答您的提示的结果与注入的后续操作,然后再路由或抑制它们。 对于在任何用户轮次之前发出的结果(例如启动错误),该字段不存在。 PreToolUse hook 返回 permissionDecision: "defer" 时,结果具有 stop_reason: "tool_deferred"deferred_tool_use 携带待处理工具的 idnameinput。读取此字段以在您自己的 UI 中显示请求,然后使用相同的 session_id 恢复以继续。请参阅稍后延迟工具调用了解完整的往返过程。

user_message_uuid

轮次回答的 SDKUserMessageuuid,回显以便您可以将 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 或更高版本;早期版本在这些轮次上不回显任何内容。
Claude Code 在三种帧上回显回答的消息的 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 或更高版本。
Claude Code 在这些情况下省略该字段:
  • 除了那些第一个回复之外的回复帧
  • 子代理帧
  • 回答没有 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 以接收子代理文本和思考作为完整消息。
Claude Code 在轮次的第一个非 ping 流事件上设置 user_message_uuiduser_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 应用程序可以在第一个轮次之前跟踪市场插件安装。startedcompleted 状态括起整体安装。installedfailed 状态报告单个市场并包括 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 不同,它仅携带呈现使用情况分解所需的数据,不包含 colorgridRows 等显示字段。
表格列出了 Claude Code 在每个字段中放入的内容。从 modelover_limit 的字段描述整个会话,集合字段将令牌归属于单个项目。 over_limit.kind 记录 Claude Code 如何解决窗口,而不是 API 是否接受下一个请求:
  • hard_limit:窗口是 Claude Code 认为是模型自己的限制,超过该限制 API 拒绝请求
  • compaction_window:窗口是压缩策略窗口,可能与模型的限制一致,也可能不一致
Claude Code 以加法方式演进该类型,添加新数据作为可选字段而不是重塑现有字段。读取您知道的字段并忽略您不认识的任何字段。

SDKContextUsageCategory

/context 使用情况按类别分解的一行。
表格列出了 Claude Code 在行的每个字段中放入的内容。 每个 kind 值说明行的令牌是什么:
  • used:占据上下文窗口的内容
  • free:剩余窗口
  • buffer:压缩保留
  • deferred:Claude Code 保留在窗口外的工具模式,从使用情况计算中排除,列出以供了解

SDKMessageOrigin

用户角色消息的来源。这在 SDKUserMessage 上显示为 origin,并转发到相应的 SDKResultMessage,以便您可以判断给定轮次的触发因素。

任务通知子类型

当 Claude Code 将任务通知传递到会话中时,它仅在 Anthropic 服务器验证该通知来自何处时才在通知的 origin 上设置 subkindsubkind 需要 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:发送会话的权限类别,bypassprompting,由在您的会话之间中继对等消息的主机声明,例如桌面应用。Claude Code 在接收会话中应用入站控制时读取它。需要 Agent SDK v0.3.234 或更高版本。
  • senderTaskId:队友的任务 ID。对于跨会话对等体不存在。
  • name:发送者的显示名称,由 Claude Code 规范化:它删除 Unicode 控制、格式、代理和行或段落分隔符代码点,然后修剪结果并将其限制为 64 个代码点,带有省略号。需要 Claude Code v2.1.205 或更高版本。
  • body:解码的消息正文,去除对等信封,与模型看到的字节完全相同。对于队友消息始终存在;对于跨会话对等体,仅当轮次恰好是由 Claude Code 形成的一个对等信封时才存在。呈现 namebody 而不是重新解析消息文本。需要 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
执行 Bash 命令,支持可选超时和后台执行。工作目录在命令之间保持不变,包括多轮会话后续轮次中运行的命令;shell 状态(如导出的环境变量)不保持。有关哪些目录更改会保持的限制,请参阅命令之间保持什么

Monitor

工具名称: Monitor
运行后台源并将每个事件传递给 Claude,以便它可以做出反应而无需轮询:command 运行脚本并为每个 stdout 行发出一个事件,ws 打开 WebSocket 并为每个文本帧发出一个事件。恰好提供 commandws 之一。ws 源需要 Claude Code v2.1.195 或更高版本。 为会话长度的监视(如日志尾部)设置 persistent: true。当 Monitor 运行命令时,它遵循与 Bash 相同的权限规则;WebSocket 监视会单独提示批准。请参阅 Monitor 工具参考了解行为和提供商可用性。导出的类型将 timeout_mspersistent 标记为必需,因为架构填充了它们的默认值 300000 和 false;省略它们的调用会验证通过。

TaskOutput

工具名称: TaskOutput
TaskOutput 已弃用;改为在任务的输出文件路径上使用 Read。以下架构对于遇到该工具的 hooks 和权限处理程序仍然有效。
从运行中或已完成的后台任务检索输出。

Edit

工具名称: Edit
在文件中执行精确字符串替换。

Read

工具名称: Read
从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。对 PDF 页面范围使用 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
基于 ripgrep 的强大搜索工具,支持正则表达式。

TaskStop

工具名称: TaskStop
按 ID 停止运行的后台任务或 shell。自 v2.1.198 起,task_id 也接受代理团队队友或按代理 ID 或名称的命名后台代理。

NotebookEdit

工具名称: NotebookEdit
编辑 Jupyter 笔记本文件中的单元格。

WebFetch

工具名称: WebFetch
从 URL 获取内容并使用 AI 模型处理它。

WebSearch

工具名称: WebSearch
搜索网络并返回格式化的结果。

Workflow

工具名称: Workflow
运行动态工作流:一个脚本,在后台协调许多子代理并返回一个统一的结果。Workflow 工具在 Agent SDK v0.3.149 及更高版本中可用。至少需要 scriptnamescriptPath 之一。

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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Wherever the tools are available, Claude Code provides the four Task tools, or 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
创建单个任务并返回其分配的 ID。

TaskUpdate

工具名称: TaskUpdate
按 ID 修补一个任务。将 status 设置为 "deleted" 以删除它。

TaskGet

工具名称: TaskGet
返回一个任务的完整详情,或在找不到 ID 时返回 null

TaskList

工具名称: TaskList
返回当前列表中所有任务的快照。

ExitPlanMode

工具名称: ExitPlanMode
退出 Plan Mode。allowedPrompts 字段已弃用且被忽略;Claude Code 仍然接受它,以便现有调用者和记录验证。在 v2.1.205 之前,它请求基于提示的 Bash 权限以实现计划。

ListMcpResources

工具名称: ListMcpResourcesTool
列出来自连接服务器的可用 MCP 资源。

ReadMcpResource

工具名称: ReadMcpResourceTool
从服务器读取特定的 MCP 资源。

EnterWorktree

工具名称: EnterWorktree
创建并进入临时 git worktree 以进行隔离工作。传递 path 以切换到现有 worktree 而不是创建新的。在首次进入时,目标必须是当前存储库的已注册 worktree,或在多存储库工作区中,必须是嵌套在其中的存储库的已注册 worktree;从 worktree 会话内进入时,必须在会话存储库的 .claude/worktrees/ 下。namepath 互斥。

ExitWorktree

工具名称: ExitWorktree
退出当前 git worktree 并返回到原始工作目录。keep 操作将 worktree 和分支保留在磁盘上,而 remove 删除两者。当删除具有未提交文件或未合并提交的 worktree 时,discard_changes 必须为 true

EnterPlanMode

工具名称: EnterPlanMode
进入 Plan Mode,Claude 在其中研究并呈现计划,然后再进行更改。

CronCreate

工具名称: CronCreate
在本地时间的 5 字段 cron 计划上安排提示运行。将 recurring 设置为 false 以在下一个匹配时仅触发一次。作业默认为会话范围:启动新对话会清除它们,使用 --resume--continue 恢复会恢复尚未过期的作业。请参阅计划任务 durable 设置为 true 请求持久化到 .claude/scheduled_tasks.json,以便作业在重启后继续存在。持久化调度并非在每个会话中都可用:当不可用时,Claude Code 接受 durable: true 但创建仅会话的作业。读取输出的 durable 字段以查看作业是否已持久化。

CronDelete

工具名称: CronDelete
按从 CronCreate 返回的 ID 删除计划的 cron 作业。

CronList

工具名称: CronList
列出计划的 cron 作业:来自 .claude/scheduled_tasks.json 的持久化作业和来自当前会话的仅会话作业。

ScheduleWakeup

工具名称: ScheduleWakeup
安排一次性唤醒,在延迟后触发给定的提示。此工具支持自定步调的 /loop 命令。运行时将 delaySeconds 限制在 60 到 3600 秒之间。除非 stop 为 true,否则 delaySecondsreasonpromptnoop 字段是必需的。noop: true 报告没有任何更改的唤醒。设置 stop: true 取消待处理的唤醒并结束自定步调的 /loopstop 字段需要 Claude Code v2.1.202 或更高版本。请参阅工具参考中的 ScheduleWakeup 行

RemoteTrigger

工具名称: RemoteTrigger
管理例程,即在云中托管的计划和触发的 Claude Code 运行。此工具支持 /schedule 命令。trigger_id 对于 getupdaterunlist_runs 操作是必需的。body 对于 createupdatecreate_webhook_trigger 是必需的,对于 run 是可选的。 create_webhook_trigger 将事件源附加到现有例程,例如触发它的 GitHub 事件body 命名源、事件和要触发的例程。需要 Claude Code v2.1.225 或更高版本。 list_runs 列出例程的最近运行,get_run_log 读取一个运行的日志。session_idlist_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
在持久 REPL 中执行 JavaScript 代码。状态在调用之间保持,并支持顶级 await。timeout 以毫秒为单位,默认为 30000,最大为 600000。 这些类型已导出,但除非您在 env 选项中设置 CLAUDE_CODE_REPL=1,否则该工具在 SDK 会话中处于关闭状态。它还需要本机安装程序提供的基于 Bun 的 claude 可执行文件。

ReportFindings

工具名称: ReportFindings
将代码审查发现报告为结构化列表,以便 Claude Code 可以呈现它们而不是将其打印为文本。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,例如 correctnesstest-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;仅 limitscope 可能伴随它。scope 默认为 "mine",列出用户拥有的 artifacts;"shared" 列出其他人与用户共享的 artifacts,"all" 列出两者。
  • capabilities:发布的页面使用的运行时功能,由功能名称键入,例如页面可能调用的连接器。artifact 服务验证声明并拒绝命名账户无法使用的功能或给予一个无效配置的发布。传递 {} 以清除存储的声明,在重新部署时省略字段以保留它。需要 Agent SDK v0.3.235 或更高版本。
  • contract:发布的页面运行的运行时版本。省略它以保留 artifact 的当前版本,传递 "latest" 以升级,或传递特定版本以固定或回滚。需要 Agent SDK v0.3.235 或更高版本。
这些类型已导出,但该工具在 Agent SDK 会话中默认处于关闭状态。发布还需要 artifacts 可用性表中的每个条件,使用 API 密钥进行身份验证的会话不满足这些条件。

Projects

工具名称: Projects
读取和写入附加到会话的 claude.ai Project。在 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
列出 MCP 服务器上目录资源的直接子项。仅可用于已声明支持目录列表的服务器;列表不是递归的。目录列表并非在每个会话中都启用:当关闭时,调用返回空的 resources 列表,error 字段报告目录列表未启用。

RefreshMcpTools

工具名称: RefreshMcpTools
重新查询连接的 MCP 服务器的工具列表并应用任何更改。这些类型已导出,但 Claude Code 仅在您在 env 选项中设置 CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 时注册该工具,并且仅在至少有一个 MCP 服务器的会话中。需要 Claude Code v2.1.211 或更高版本。

ShowOnboardingRolePicker

工具名称: ShowOnboardingRolePicker
在 Cowork 入职期间呈现可点击的角色选择器芯片行,以便用户可以选择其角色并获得匹配的插件安装。不需要参数;角色列表由客户端定义。调用会阻塞直到用户响应。

McpInput

工具名称: 形式为 mcp__<server>__<tool> 的动态 MCP 工具名称
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 上,该列表涵盖后台处理前使用的模型。modelsUsedresolvedModel 的后台处理行为都需要 Claude Code v2.1.212 或更高版本。 如果 Claude Code 保留了子代理的隔离 worktreecompleted 结果上的 worktreePath 是找到它的位置。worktreeBranch 是其分支,当 Claude Code 使用 git 创建 worktree 时出现。 Claude Code 从子代理的最终 API 请求而不是整个运行中填充 usagetotalTokens,因此 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 之前,发布的类型更窄。它省略了 worktreePathworktreeBranchcitationstoolStats.frameCountinference_geospeediterations 使用字段,并将 service_tier 类型化为 "standard" | "priority" | "batch"。类型标记为可选的字段可能在早期版本记录的结果中不存在。

AskUserQuestion

工具名称: AskUserQuestion
返回提出的问题和用户的答案。当用户输入自由形式的回复而不是回答结构化问题时,response 被设置;当存在时,Claude 会收到”用户回复:…”而不是每个问题的答案列表。

Bash

工具名称: Bash
stdoutstderrbackgroundTaskId 字段携带: timedOutAfterMs 是超时时间(以毫秒为单位),当命令达到其超时并移至后台而不是显式启动时设置。backgroundCwdHint 在后台命令包含目录更改内置命令(如 cdpushdpopdchdir)时设置,并注意会话工作目录未更改。两个字段都需要 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
返回运行监视器的后台任务 ID。使用此 ID 与 TaskStop 一起提前取消监视。

Edit

工具名称: Edit
返回编辑操作的结构化差异。

Read

工具名称: Read
返回适合文件类型的格式的文件内容。在 type 字段上进行区分。

Write

工具名称: Write
返回写入结果,包含结构化差异信息。originalFilestructuredPatch 持有的内容取决于写入:
  • 对于新创建的文件,originalFile 为 null,structuredPatch 为空
  • 在覆盖时,originalFile 携带之前的内容,除非该内容大于约 10 MB:Claude Code 则跳过差异并返回 originalFile null 和 structuredPatch
  • 当写入未更改任何内容或差异超时时,structuredPatch 也为空

Glob

工具名称: Glob
返回与 glob 模式匹配的文件路径,按修改时间排序。 totalMatchescountIsComplete 需要 Claude Code v2.1.191 或更高版本。totalMatches 报告截断前的匹配文件数。当 countIsComplete 为 false 时,totalMatches 是一个下界,因为底层搜索截断了其自己的输出。

Grep

工具名称: Grep
返回搜索结果。形状因 mode 而异:文件列表、带匹配的内容或匹配计数。在 count 模式下,numFilesnumMatches 是完整结果集上的总计,不是分页切片。在 v2.1.208 之前,截断列出条目的 head_limitoffset 也会截断这些总计。 totalFiles 需要 Claude Code v2.1.208 或更高版本,并在 files_with_matches 模式下报告 head_limitoffset 分页前的总结果数。totalLines 需要 Claude Code v2.1.210 或更高版本,并在 content 模式下报告分页前的总行数。

TaskStop

工具名称: TaskStop
停止后台任务后返回确认。

NotebookEdit

工具名称: NotebookEdit
返回笔记本编辑的结果,包含原始和更新的文件内容。

WebFetch

工具名称: WebFetch
返回获取的内容,包含 HTTP 状态和元数据。 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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Wherever the tools are available, Claude Code provides the four Task tools, or 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
返回创建的任务及其分配的 ID。

TaskUpdate

工具名称: TaskUpdate
返回更新结果,包括哪些字段已更改。

TaskGet

工具名称: TaskGet
返回完整的任务记录,或在找不到 ID 时返回 null

TaskList

工具名称: TaskList
返回当前列表中所有任务的快照。

ExitPlanMode

工具名称: ExitPlanMode
返回退出规划模式后的计划状态。

ListMcpResources

工具名称: ListMcpResourcesTool
返回可用 MCP 资源的数组。

ReadMcpResource

工具名称: ReadMcpResourceTool
返回请求的 MCP 资源的内容。

EnterWorktree

工具名称: EnterWorktree
返回有关 git worktree 的信息。

ExitWorktree

工具名称: ExitWorktree
返回采取的操作和有关退出的 worktree 的详细信息。

EnterPlanMode

工具名称: EnterPlanMode
返回进入规划模式的确认。

CronCreate

工具名称: CronCreate
返回作业 ID 和计划的人类可读描述。

CronDelete

工具名称: CronDelete
返回已删除作业的 ID。

CronList

工具名称: CronList
返回计划的 cron 作业:来自 .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
返回触发操作的 API 响应状态和正文。

PushNotification

工具名称: PushNotification
返回传递详细信息,包括是否发送了推送或本地通知以及跳过传递的原因。

REPL

工具名称: REPL
返回执行结果、捕获的控制台输出以及内部 Read 调用显示的任何图像或文档。

ReportFindings

工具名称: ReportFindings
返回报告的发现数、审查运行的工作量级别以及为结果正文回显的发现。需要 Claude Code v2.1.196 或更高版本。回显的 short_summary 字段需要 Claude Code v2.1.212 或更高版本。

Artifact

工具名称: Artifact
返回已发布页面的 url 和为发布操作发布的本地 path,当发布重新部署现有工件时 updated 设置为 true,warnings 携带任何发布时建议。列表操作返回 artifacts 行,当存在比请求限制更多的工件时 truncated 设置。在范围不是 "mine" 的列表上,每行携带 rel 标记用户是否拥有工件或与他们共享,输出的 scope 记录哪个非默认范围产生了列表;两者在默认列表上不存在。

Projects

工具名称: Projects
method 字段上进行区分,镜像输入。project_readcontent 中内联返回小文本文档,并将较大的文档写入 local_file 路径;project_search 当项目的索引可用时返回 RAG hitsrag: true,否则回退到 docs 路径列表。

ReadMcpResourceDir

工具名称: ReadMcpResourceDirTool
返回目录资源的直接子项。子目录显示为 mimeType "inode/directory"error 在服务器无法列出目录时携带人类可读的消息。

RefreshMcpTools

工具名称: RefreshMcpTools
返回每个服务器一个条目:refreshed 表示重新查询的工具列表已应用,error 表示重新查询失败且保留了之前的工具集,not_connected 表示服务器没有实时连接来查询。

ShowOnboardingRolePicker

工具名称: ShowOnboardingRolePicker
返回用户的选择:当他们选择角色芯片或输入一个时为 role,当他们关闭选择器时为 dismissed: true。空对象表示用户批准了调用而未选择角色。

McpOutput

工具名称: 形式为 mcp__<server>__<tool> 的动态 MCP 工具名称
MCP 工具结果作为字符串或内容块数组返回,取决于服务器。导出类型中的尾部纯对象分支是架构生成工件:SDK 不返回裸对象,因为服务器的结构化输出在返回前被序列化为 JSON 字符串。在运行时值也可能是 undefined,尽管导出的类型不对此建模。

权限类型

PermissionUpdate

用于更新权限的操作。

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

其他类型

ApiKeySource

会话请求的 API 密钥来源,在 SDKSystemMessage 初始化消息上报告为 apiKeySource
Claude Code 报告以下四个值之一: Agent SDK v0.3.234 及更高版本在类型中列出这四个值。该类型还保留 userprojectorgtemporaryoauth,以便旧代码仍然可以编译,Claude Code 不报告它们。

SdkBeta

可通过 betas 选项启用的可用测试功能。请参阅 Beta 标头 了解更多信息。
context-1m-2025-08-07 beta 自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此值无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 Claude Opus 5、Claude Sonnet 5、Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8,它们以标准定价包括 1M 上下文,无需 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 或更高版本。 字段 canonicalModelprovider 需要 Claude Code v2.1.218 或更高版本。canonicalModel 是定价查询使用的规范模型 ID;它可能与键入条目的原始模型字符串不同,例如当该字符串是提供商特定的 ID 或别名时。 provider 命名为模型提供服务的 API 后端,例如 firstPartybedrockvertexfoundryanthropicAwsmantlegateway costBasis 命名为模型最新请求定价的价格表:list 表示列表价格,managed 表示 modelPricing 表,或 unknown 当两者都不匹配模型 ID 时。该字段需要 Claude Code v2.1.246 或更高版本。

ConfigScope

NonNullableUsage

Usage 的版本,所有可空字段都变为非可空。

Usage

令牌使用统计。这是来自 @anthropic-ai/sdkBetaUsage 类型。
BetaServerToolUsageBetaIterationsUsageBetaOutputTokensDetails@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 一起返回,包括图像块。请参阅返回结构化数据
MCP 工具按引用返回的一个文件。Claude Code 从工具结果中的 resource_link 块构建每个条目,并将列表作为 resourceLinksSDKUserMessage.tool_use_result 上传递,或在调用在后台完成时作为 resource_linksSDKTaskNotificationMessage 上传递。需要 Agent SDK v0.3.257 或更高版本。
Claude Code 删除其 uriname 不是字符串的块,并省略其值不是列出类型的可选字段。

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 中报告它。
承诺在新添加的 stdio、HTTP 和 SSE 服务器连接或失败后解决,因此来自已连接服务器的工具在下一轮可用。 added 列出 Claude Code 添加或替换的服务器,无论它们是否连接。未能连接的服务器同时出现在 addederrors 中,失败文本在 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,它定义了它及其版本要求。
当 Claude Code 将长 MCP 工具调用移到后台 时,该调用的 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 子类型 的传递外,它们改为携带分配任务框架。通知说明没有发生人类输入,因此模型不会将通知视为用户指令或批准。 要检测任务通知轮次,请在 SDKUserMessageSDKResultMessage 上检查 origin.kind === "task-notification",而不是匹配通知文本。如果您需要知道是什么引发了它,请从同一字段读取 subkind。在 v2.1.205 之前,Claude Code 在会话空闲时到达的通知上省略了通知。

SDKToolUseSummaryMessage

对话中工具使用的摘要。

SDKHookStartedMessage

当 hook 开始执行时发出。 Claude Code 将此消息、SDKHookProgressMessageSDKHookResponseMessage 立即传递到消息流,包括在会话启动期间 SessionStartSetup hook 仍在运行时。Claude Code v2.1.169 至 v2.1.203 在 SessionStartSetup hook 完成后以一个批次传递这些消息;v2.1.204 恢复了实时传递。

SDKHookProgressMessage

在 hook 运行时发出,包含 stdout/stderr 输出。

SDKHookResponseMessage

当 hook 完成执行时发出。

SDKToolProgressMessage

在工具执行时定期发出,以指示进度。
当工具调用在主对话中运行时,Claude Code 每 30 秒发出一条 tool_progress 消息,其中 heartbeat: true。每个心跳都包含工具名称和经过的秒数,因此您可以区分长时间运行的调用和停滞的会话。Claude Code 不为子代理内的工具调用发出心跳。heartbeat 字段需要 Agent SDK v0.3.214 或更高版本。在 v2.1.257 之前,Claude Code 也不为前台 Agent 工具调用发出心跳。 在除心跳外的 Agent 工具的 tool_progress 消息上,subagent_type 命名运行中的子代理类型,例如 general-purposesubagent_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_limitoverloadedauthentication_failedserver_errorcloud_credential_errorunknown。处理您不识别的值的方式与处理 unknown 的方式相同,因为后续版本可以添加值。

SDKAuthStatusMessage

在身份验证流程中发出。

SDKTaskStartedMessage

当任务开始时发出。task_type 字段对于 Bash 命令和 Monitor 监视为 "local_bash",对于子代理为 "local_agent",或 "remote_agent"
对于不是会话工作一部分的任务,ambienttrue,例如 Claude Code 为其自身操作运行的任务。实时更新监视器也是环境的,包括用户要求的监视器。从活动指示器中排除环境任务。该字段需要 Agent SDK v0.3.247 或更高版本。 ambient 也出现在 SDKTaskNotificationMessageSDKBackgroundTasksChangedMessage 条目上。 is_backgroundedspawn_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

每当实时后台任务集发生变化时发出:任务启动、完成、被杀死,前台代理被后台化,或任务的 descriptionambient 字段发生变化。 tasks 数组是完整的实时集。用每个有效负载替换任何缓存的集,而不是配对 task_startedtask_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 下挂载空记录,并丢弃任何缓存的会话标题。
SDK 的已发布类型在 Claude Code v2.1.203 及更高版本中声明 SDKConversationResetMessage。在 v2.1.203 之前,SDKMessage 引用该类型而不声明它,因此当 skipLibCheck 被禁用时,在 type === "conversation_reset" 上缩小范围失败类型检查。

AbortError

用于中止操作的自定义错误类。
AbortError 是 SDK 的类型化 API 中唯一的错误类。其他失败,例如 Claude Code 进程退出或无法启动,使用没有 SDK 类可匹配的错误拒绝消息迭代。故障排除 按消息键入这些错误,每个都有原因和修复。

沙箱配置

SandboxSettings

沙箱行为的配置。使用此选项以编程方式启用命令沙箱和配置网络限制。
沙箱取决于平台支持,在 Linux 上,还需要 bubblewrapsocat 等工具。当 enabledtrue 且沙箱无法启动时,query() 报告一条 result 消息,其中 subtype: "error_during_execution",原因在 errors 中。对于单个消息 query() 调用,SDK 在生成该错误结果后抛出异常,因此将循环包装在 try 块中以继续通过它。有关错误合约,请参阅处理结果要改为运行沙箱外的命令,请设置 failIfUnavailable: false

示例用法

Unix socket 安全性: allowUnixSockets 选项可以授予对系统服务的访问权限,这些服务可能会到达沙箱外。例如,允许 /var/run/docker.sock 实际上通过 Docker API 授予对主机系统的完全访问权限,绕过沙箱隔离。仅允许严格必要的 Unix sockets 并了解每个的安全含义。

SandboxNetworkConfig

沙箱模式的网络特定配置。这些设置适用于当父级 SandboxSettings 中的 enabledtrue 时的沙箱化 Bash 命令。它们不限制 WebFetch 工具,该工具改用权限规则
内置沙箱代理基于请求的主机名强制执行 allowedDomains,不会终止或检查 TLS 流量,因此域前置等技术可能会绕过它。有关详细信息,请参阅沙箱安全限制,以及安全部署以配置 TLS 终止代理。

SandboxFilesystemConfig

沙箱模式的文件系统特定配置。

沙箱外命令的权限回退

allowUnsandboxedCommands 启用时,模型可以通过在工具输入中设置 dangerouslyDisableSandbox: true 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着您的 canUseTool 处理程序被调用,允许您实现自定义授权逻辑。在下面的示例中,isCommandAuthorized 代表您定义的授权检查。
使用 dangerouslyDisableSandbox: true 运行的命令具有完整的系统访问权限。确保您的 canUseTool 处理程序仔细验证这些请求。如果 permissionMode 设置为 bypassPermissionsallowUnsandboxedCommands 启用,模型可以自主执行沙箱外的命令,无需批准提示,除了操作无模式自动批准的操作。此组合实际上允许模型以静默方式逃离沙箱隔离。

另请参阅