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。

在捆绑 Agent SDK 时导入 /core 入口

如果您的应用程序将 Agent SDK 与其自己的依赖项一起捆绑,请从 @anthropic-ai/claude-agent-sdk/core 而不是包根目录导入。/core 入口需要 TypeScript Agent SDK v0.3.282 或更高版本,其类型需要 TypeScript 5.0 或更高版本。 /core 入口导出与根入口相同的 query()、startup()、tool()、createSdkMcpServer() 和 resolveSettings(),以及重命名、标记和删除会话的函数、AbortError、运行时常量和每种类型。它不添加自己的名称。为了保持应用程序加载的代码较小,/core 省略了一些根导出,包括 prewarm()、InMemorySessionStore 类以及列出、读取、分叉、导入和总结会话的辅助函数。如果您需要其中之一,请改用根入口。 根入口内联了自己的 zod 和 @modelcontextprotocol/sdk 副本。/core 入口从您的 node_modules 按照 Agent SDK 的 peerDependencies 声明的范围导入它们,因此已经包含它们的捆绑包不会携带第二个副本。在给定的进程中从根或 /core 导入,而不是两者:它们是单独的捆绑包,加载两者会给您两个 Agent SDK 类和状态的副本。

函数

query()

与 Claude Code 交互的主要函数。创建一个异步生成器,在消息到达时流式传输消息。

参数

返回值

返回一个 Query 对象,该对象扩展 AsyncGenerator<SDKMessage, void>,并具有其他方法。

startup()

通过生成 CLI 子进程并在提示可用之前完成初始化握手来预热 CLI 子进程。返回的 WarmQuery 句柄稍后接受提示并将其写入已准备好的进程,因此第一个 query() 调用解析时无需支付子进程生成和初始化成本。如果您还不知道会话的工作目录,请改用 prewarm()。

参数

返回值

返回一个 Promise<WarmQuery>,在子进程生成并完成其初始化握手后解析。

示例

早期调用 startup(),例如在应用程序启动时,然后在提示准备好后在返回的句柄上调用 .query()。这会将子进程生成和初始化移出关键路径。

prewarm()

Alpha。 在您知道它将服务哪个会话之前启动 Claude Code 进程作为备用,以便您稍后可以使用 claim() 将其绑定到会话。在应用程序启动之前用户选择文件夹的应用程序中使用它。需要 TypeScript Agent SDK v0.3.282 或更高版本。 prewarm() 完成与 startup() 相同的初始化握手,当您设置 options.cwd 时进程在其中等待,否则在 Claude Code 配置目录下的私有临时目录中等待。会话的工作目录、其 SessionStart hooks、其 stdio MCP 服务器以及其 CLAUDE.md 和 git 上下文等待声明。备用进程在等待时占用大约 230 到 260 MB 的内存。如果您的 spawnClaudeCodeProcess 在另一台机器或容器中运行 Claude Code,请将 options.cwd 设置为存在于那里的目录,以便备用进程在其中等待。
options 和 initializeTimeoutMs 的含义与 startup() 相同,除了 options.cwd 仅设置备用进程等待的目录。promise 在进程完成其初始化握手后使用 SpareProcess 解析。如果 options 设置 resume、continue 或 forkSession,prewarm() 会抛出错误,因为备用进程还没有会话。声明无法设置的所有内容,例如 mcpServers、hooks、canUseTool、settingSources、systemPrompt 和 plugins,在备用进程的生命周期内是固定的,因此为每个不同的选项集保留一个备用进程,并在它们更改时再次预热。

示例

在应用程序启动时预热,然后在用户启动会话时声明备用进程:

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 以清除标签。重复调用是安全的;以最新的标签为准。

参数

forkSession()

将会话的会话记录复制到新会话中,以便您可以将对话引向另一个方向,同时保持原始会话不变。要从对话中较早的某个点分支,请传递 upToMessageId。

参数

返回 { sessionId },即新会话的 UUID。将其作为 resume 传递以继续该分叉。分叉不包括原始会话的文件检查点,因此您无法将其回退到分叉之前捕获的检查点。 forkSession() 在以下情况下会抛出错误:
  • sessionId 不是 UUID
  • 找不到会话,或会话没有消息
  • upToMessageId 与会话记录中的任何消息都不匹配

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。适用于主循环和所有子代理。
  • CLAUDE_CODE_MAX_RETRIES:最大 API 重试次数。默认值为 10,上限为 15。每次重试都有各自的 API_TIMEOUT_MS 时间窗口。 对于需要挺过较长中断的无人值守运行,请设置 CLAUDE_CODE_RETRY_WATCHDOG=1:它会无限期重试临时性容量错误,并且在 Claude Code v2.1.199 或更高版本上,会将其他临时性错误的默认重试次数提高到 300,并取消此变量的上限。
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS:子代理的停滞看门狗。当流看门狗开启时,默认值为 CLAUDE_STREAM_IDLE_TIMEOUT_MS 加 5 分钟,除非您调高该变量,否则合计为 600000。当流看门狗关闭时,默认值为 600000。在 v2.1.257 之前,默认值始终为 600000。 每个流事件都会重置计时器。发生停滞时,Claude Code 会中止该子代理并向父级报告停滞。对于后台子代理,它还会将该任务标记为失败并附上任何部分结果。
  • 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 背后的网关通过 keep-alive ping 保持打开的响应时,设置了 includePartialMessages 的宿主会持续收到 ping 流事件,因此请将这些帧视为存活信号,而不是因为静默而使会话超时。在 v2.1.257 之前,这些帧会在最后一个真实流事件 5 分钟后停止。

Query 对象

query() 函数返回的接口。

方法

applyFlagSettings()

在不重启查询的情况下更改正在运行的会话的设置。当某个没有专用设置方法的设置需要在会话中途更改时使用它,例如在 Agent 读取不受信任的输入后收紧 permissions。setModel() 和 setPermissionMode() 是针对这两个键的专用设置方法;applyFlagSettings() 是通用形式,接受设置键的任意子集,在此处传递 model 的行为与 setModel() 相同。 只有部分键会在会话中途生效:
  • 在下一轮生效:effortLevel、ultracode、permissions、hooks、skillOverrides、fastMode、agent。切换 agent 还会在下一轮应用该 Agent 的模型覆盖和 hook。其系统提示词在下一轮生效;或者,在复用已记录系统提示词的会话中,在会话被压缩后生效。
  • 在当前轮次生效:model。如果您在 Claude 处理某一轮时切换 model,Claude 正在生成的回复会使用旧模型完成,而该轮的其余部分(从 Claude Code 对模型发起的下一次调用开始)会使用新模型。子代理保留各自的模型。在 v2.1.212 之前,轮次中途的切换会等到下一轮才生效。
  • 会话中途无效:系统提示词选项。这些选项在启动时解析一次,因此即使调用成功,正在运行的会话也会保留原始值。要更改它们,请启动新会话。
effortLevel 接受一个 effort 级别名称。它还接受 "ultracode",表示请求 xhigh effort 并开启 ultracode。applyFlagSettings() 声明的 effortLevel 不包含该值,因此在 TypeScript 中请传递 { ultracode: true, effortLevel: "xhigh" } 以获得相同效果,或者单独传递 ultracode 键,以在会话当前的 effort 级别下开启 ultracode。ultracode 值需要 Claude Code v2.1.203 或更高版本,并且只被 applyFlagSettings() 接受,设置文件中的 effortLevel 键不接受该值。在 v2.1.284 之前,单独传递 ultracode 键也会将级别设置为 xhigh。 这些值会写入标志设置层,合并在 query() 的内联 settings 选项于启动时设置的值之上。这与本页优先级部分所称的编程选项属于同一层级。 连续调用会对顶层键进行浅合并。第二次调用 { permissions: {...} } 会替换先前调用中的整个 permissions 对象,而不是深度合并到其中。 要清除通过 applyFlagSettings() 设置的键,请为该键传递 null。大多数键随后会先回退到 query() 的 settings 选项在启动时设置的值,然后回退到优先级更低的来源。被清除的 model 会重置为 Claude Code 的默认模型,即使设置文件设置了 model 也是如此。传递 undefined 没有效果,因为 JSON 序列化会将其丢弃。 除 model 外,还有三个键会重置会话状态,而不是回退:
  • effortLevel: null 会将会话恢复为模型的默认 effort 级别,而不是 query() 的 effort 选项或设置文件中的 effortLevel。
  • agent: null 会从下一轮开始在不使用任何 Agent 的情况下运行主线程,而不是恢复 query() 的 agent 选项或设置文件中的 agent。如果被清除的 Agent 曾应用自己的模型,会话会恢复为启动时解析的模型。
  • ultracode: null 会关闭 ultracode(与 false 的效果相同),而不是恢复设置文件中的 ultracode 值。会话保留其当前的 effort 级别,因此如需更改,请在同一次调用中传递 effortLevel。
仅在流式输入模式下可用,与 setModel() 和 setPermissionMode() 的限制相同。 下面的示例在会话中途切换活动模型,然后清除覆盖,使模型重置为 Claude Code 的默认模型。
applyFlagSettings() 仅适用于 TypeScript。Python SDK 未提供等效方法。

updateSettings()

将一个允许列表中的键写入磁盘上的设置文件,使该值在之后加载该来源的会话中保持有效。每个来源接受一个键,值为字符串:
  • "localSettings":接受 outputStyle,并将其合并到项目的本地设置文件 .claude/settings.local.json 中。新样式会在会话的下一次请求时生效。
  • "userSettings":接受 effortLevel,并将其保存为会话当前模型的默认 effort 级别,位于您用户设置文件的 modelSettings 下。传递 max 不会写入任何内容,因为 max 仅限会话使用。无论哪种情况,正在运行的会话都会保留其当前的 effort 级别,因此如果您也想更改它,请调用 applyFlagSettings()。此来源需要 TypeScript SDK v0.3.277 或更高版本,其捆绑了 Claude Code v2.1.277。
当请求携带任何其他键、会话通过远程传输运行,或会话的 settingSources 排除了您指定的来源时,调用会被拒绝。不支持删除键。

toggleMcpServer()

禁用服务器会断开其连接并从会话中移除其工具。对于您在会话中途添加的服务器和进程内服务器,这取决于您的 Claude Code 版本:
  • 您在会话中途通过 setMcpServers() 添加的 stdio、SSE 或 HTTP 服务器:移除其工具需要 Claude Code v2.1.285 或更高版本。
  • 您通过 createSdkMcpServer() 创建的进程内服务器,无论是通过 mcpServers 还是 setMcpServers() 传递:断开其连接并移除其工具需要 Claude Code v2.1.286 或更高版本。禁用此类服务器还会使其仍在运行的工具调用失败,因此 Claude 会立即收到每个调用的错误结果,而无需等待您的处理程序返回。

WarmQuery

由 startup() 返回的句柄。子进程已经生成并完成初始化,因此在此句柄上调用 query() 会将提示词直接写入已就绪的进程,没有启动延迟。

方法

WarmQuery 实现了 AsyncDisposable,因此可以与 await using 一起使用以实现自动清理。

SpareProcess

Alpha。 由 prewarm() 返回的句柄:一个已启动但尚未绑定到会话的 Claude Code 进程,可以被认领一次。需要 TypeScript Agent SDK v0.3.282 或更高版本。

成员

options.cwd 为必填项。认领还可以设置 additionalDirectories、model、permissionMode、maxThinkingTokens、settings 中的标志设置覆盖层、appendSystemPrompt、title、agents,以及 env 中的每会话令牌。 Claude Code 可能会拒绝认领,例如针对不存在的文件夹,或其项目设置设置了 env、agent 或 model 的文件夹。被拒绝后,claim() 已发送的提示词会收到一个文本以 not_claimed 开头的错误结果,随后返回的查询会抛出异常。请将查询的循环包裹在 try 块中,以便在抛出异常后继续。当 claimed 以 option_not_applied 开头的消息拒绝时,表示会话在未使用您所请求的 model 或 maxThinkingTokens 的情况下运行。在任何其他拒绝之后,您的提示词都尚未运行,因此请改用 query() 启动会话。

SDKControlInitializeResponse

initializationResult() 的返回类型。包含会话初始化数据。
hooks_applied 报告 Claude Code 是否注册了 initialize 请求所携带的 hooks。SDK 会在会话启动时发送一次该请求,并在每次调用 reinitialize() 时再次发送。该字段需要 Agent SDK v0.3.238 或更高版本。 当请求未携带 hook 时,Claude Code 会省略该字段。当请求携带了 hook 时,其值取决于该请求是否为会话的首次 initialize,以及对于重复的 initialize,它是如何到达会话的:
  • true:Claude Code 注册了这些 hook。会话的首次 initialize 返回此值。通过 CLI 的 stdin 发送的重复 initialize 也返回 true。在这种情况下,新请求中的 hook 会替换先前注册的 hook。
  • false:Claude Code 忽略了这些 hook。发送到远程会话的重复 initialize 返回此值,因此加入会话的第二个客户端无法替换第一个客户端注册的 hook。
在 Agent SDK v0.3.238 之前,响应从不携带该字段,并且 Claude Code 在每次重复 initialize 时都会忽略 hooks。 请求的 sdkMcpServerManifests 字段和响应的 sdk_mcp_manifests_parked 字段用于您通过 createSdkMcpServer() 创建的进程内 SDK MCP 服务器。您的应用不需要设置或读取这两个字段。 claude_code_version 是运行会话轮次的进程的 Claude Code 版本。它与 SDKSystemMessage init 消息携带的值相同,因此您可以在第一轮之前读取 CLI 版本。
  • 该字段需要 Agent SDK v0.3.296 或更高版本,该版本捆绑了 Claude Code v2.1.296。
  • 如果该字段为 undefined 且您设置了 pathToClaudeCodeExecutable,请将其指向 Claude Code v2.1.296 或更高版本。
响应始终会报告 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

中断回执:在 SDKSystemMessage.capabilities 中声明了 interrupt_receipt_v1 能力的 CLI 上,interrupt() 完成时返回的值。需要 Claude Code v2.1.205 或更高版本。更早的 CLI 会以空的成功负载响应中断,因此 interrupt() 会以 undefined 完成。
still_queued 列出中断到达时仍处于待处理状态的用户消息的 UUID:仍在队列中的消息,以及 Claude Code 已从队列中取出准备用于下一轮的消息。一旦会话的第一轮已经开始,除非您先取消,否则 Claude Code 会在中断之后处理列出的消息,并且可能将多条消息合并为一轮。如果您在第一轮开始之前中断,Claude Code 会在该轮开始后立即中止它,该轮中列出的消息将不会得到回复。 请使用回执来决定是否需要重新发送任何内容。未被您取消的列出消息无论是否得到回复都会进入对话,因此重新发送会使其两次传递给 Claude。 解读该列表时请注意以下事项:
  • 只有带 UUID 入队的消息才会出现。空数组并不意味着不会再运行其他内容。
  • 只列出主线程消息。发送给子代理的消息不在范围内。
  • 列表可能包含您的客户端从未发送过的 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 命令渲染的负载相同,因此除 token 计数外,它还携带 color 和 gridRows 等显示字段,Claude Code 使用这些字段绘制 /context 用量网格。 该方法的可选 detail 参数决定 Claude Code 如何统计每个类别。detail 参数需要 Agent SDK v0.3.257 或更高版本。
  • 'full':默认值。Claude Code 使用 token 计数 API 请求统计每个类别。这些请求不会出现在消息流中,因此读取消息流的成本跟踪不会看到它们。在 Anthropic API 上,token 计数不收费。
  • 'summary':传递 { detail: 'summary' } 以改为根据上一次响应的用量和本地估算得出结果。不会发出任何 token 计数请求,各类别的数值为近似值。
当您将 /context 作为提示词发送而不是调用该方法时,Claude Code 会将一个 SDKContextUsage 负载附加到传递结果的 assistant 消息的 context_usage 字段。该字段需要 Agent SDK v0.3.232 或更高版本。
从集合字段中读取 token 归属:
  • categories 保存各类别的总计。每个条目的 kind 使用与 SDKContextUsageCategory 相同的值对该行进行分类。请依据它而不是显示用的 name 来对行进行分类。该字段需要 Agent SDK v0.3.268 或更高版本。
  • mcpTools 和 agents 将 token 归属到各个 MCP 工具和子代理。
  • memoryFiles 列出每个已加载的记忆文件及其开销。
  • skills.skillFrontmatter 将 skill 列表的 token 归属到每个被包含的 skill。每个 skill 的计数衡量的是 Claude Code 实际发送的该 skill 列表条目,可能比该 skill 的完整 frontmatter 更短。比较 skills.totalSkills 与 skills.includedSkills,可查看是否每个发现的 skill 都进入了列表。
totalTokens 是会话当前的上下文用量,maxTokens 是衡量该用量所依据的窗口。该窗口是模型的上下文窗口,或者在适用时为更低的自动压缩窗口。rawMaxTokens 与 maxTokens 的值相同,percentage 是 totalTokens 占该窗口的百分比(四舍五入)。apiUsage 保存最近一次 API 响应的用量,而不是会话的累计总量。 Claude Code 不会设置可选的 deferredBuiltinTools、systemTools 和 systemPromptSections 诊断字段,因此即使类型中声明了它们,也应预期它们不存在。

SDKControlReadFileResponse

readFile() 的返回类型。
contents 保存文件文本;当您请求 encoding: 'base64' 时则保存 base64 数据,此时响应的 encoding 字段会被设置为 'base64'。absPath 是解析后的绝对路径。当文件长度超过 maxBytes 上限且内容在该限制处被截断时,会设置 truncated。

readFile() 可以读取的内容

readFile() 提供的文件范围比 Read 工具更窄:
  • 位于会话某个工作目录(例如 cwd 和 additionalDirectories)内的常规文件
  • Claude Code 为该会话保存的少量自身文件,例如工具结果
Read 的拒绝和询问规则仍会阻止匹配的路径,而宽泛的 Read 允许规则不会向 readFile() 开放文件系统的其余部分。对于其他任何内容,调用都会以 null 完成。

SDKControlReloadPluginsResponse

reloadPlugins() 的返回类型。
集合字段描述调用之后的会话:
  • commands、agents 和 mcpServers:会话的命令、子代理和 MCP 服务器状态,其结构与 supportedCommands()、supportedAgents() 和 mcpServerStatus() 返回的结构相同。supportedAgents() 会继续返回初始化时捕获的列表,因此要获取重新加载后的集合,请在此处读取 agents
  • plugins:每个已加载的插件及其 name 和安装 path。version 复述插件清单中声明的内容,由插件作者控制,因此在信任之前请先验证。当清单未声明版本时会省略该字段
  • error_count:加载插件时产生的错误数量
向 reloadPlugins() 传递 { holdOnCacheImpact: true },可在重新加载会使对话的提示缓存失效时将其挂起而不应用。Claude Code 会运行交互式 /reload-plugins 命令在警告缓存开销之前所做的检查。该选项需要 Agent SDK v0.3.268 或更高版本。早于 v2.1.268 的 Claude Code 可执行文件(例如您通过 pathToClaudeCodeExecutable 指向的可执行文件)会忽略该选项并应用重新加载。 传递该选项后,请读取 held 以了解发生了什么:
  • true:重新加载未被应用,集合字段描述的是会话的当前状态。cache_impact 说明应用后会发生哪些变化。如果仍要应用,请在不带该选项的情况下再次调用 reloadPlugins()。
  • false:检查未发现缓存影响,重新加载已被应用。
  • 不存在:您没有传递该选项,或者 Claude Code 可执行文件早于 v2.1.268 并已应用重新加载。
cache_impact 仅与 held: true 一同出现。mcp_servers_added 和 mcp_servers_removed 以限定的 plugin:<plugin>:<server> 名称列出重新加载将注册或移除的插件 MCP 服务器。这些名称由插件作者编写,因此在显示之前请先验证。lsp_tool_change 说明应用后是否会添加或移除 LSP 工具,如果两者都不会发生则为 null。may- 形式表示检查无法完全看到待处理的插件集合。

SDKControlReloadSkillsResponse

reloadSkills() 的返回类型。
skills 以与 supportedCommands() 返回的相同 SlashCommand 结构列出重新加载后可用的 skill。

SDKControlReloadOutputStylesResponse

reloadOutputStyles() 的返回类型。
available_output_styles 列出重新加载后可用的内置和自定义输出样式的名称。

SDKControlMcpReadResourceResponse

readMcpResource() 的返回类型,携带 MCP 服务器的 resources/read 结果。需要 TypeScript Agent SDK v0.3.280 或更高版本。
向 readMcpResource() 传递 mcpServerStatus() 所报告的服务器名称以及一个 ui:// URI,例如工具在其 _meta 中声明的 ui.resourceUri。对于任何其他 URI 方案、您的应用自行托管的 SDK MCP 服务器以及未连接的服务器,调用都会被拒绝。当 init 消息的 capabilities 包含 mcp_read_resource_v1 时可用。 每个 contents 条目都是服务器发送的一个内容项,但会去掉 com.anthropic/ 前缀下的任何 _meta 键,该前缀保留给 Claude Code 使用。blob 保存二进制项的 base64 数据,_meta 是该项自身的 _meta,MCP Apps 服务器会在其中放置资源的 ui.csp 和 ui.permissions。 这些内容是不受信任的第三方 HTML,因此请在沙箱中渲染它们。

AgentDefinition

以编程方式定义的子代理的配置。

AgentMcpServerSpec

指定子代理可用的 MCP 服务器。可以是服务器名称(引用父级 mcpServers 配置中某个服务器的字符串),也可以是将服务器名称映射到配置的内联服务器配置记录。
其中 McpServerConfigForProcessTransport 为 McpStdioServerConfig | 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)
agents、allowedTools 和 settings 等编程选项会覆盖用户、项目和本地文件系统设置。托管策略设置优先于编程选项。

PermissionMode

CanUseTool

用于控制工具使用的自定义权限函数类型。 该函数是 SDK 中交互式权限提示的替代方案:仅当权限评估流程的结果为提示时才会调用它。已被 allowedTools 条目、设置中的允许规则或权限模式(例如 acceptEdits 或 bypassPermissions)批准的工具调用永远不会调用它。要对每个工具调用进行把关,请改用 PreToolUse hook。 允许规则不会预先批准任何模式都不会自动批准的操作;有关其中哪些操作会到达回调,以及在 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 中加载插件的配置。
示例:
有关创建和使用插件的完整信息,请参阅插件。

消息类型

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 或更高版本。 agent_id 标识生成该消息的子代理,主线程消息中不包含此字段。其值等于该子代理的 task_started 及其他任务事件上的 task_id,并且在子代理被恢复时保持不变。该字段需要 Agent SDK v0.3.292 或更高版本。 请通过 agent_id 将子代理的消息与其任务事件进行匹配,而不是将消息的 parent_tool_use_id 与任务事件的 tool_use_id 配对。当某个工具调用恢复子代理时,任务事件携带的是该调用的 tool_use_id,而消息保留的是最初启动该子代理的工具调用的 parent_tool_use_id,因此两者不再匹配。 Claude Code 会在满足 user_message_uuid 中所述条件时,在该轮次的第一条助手消息上设置 user_message_uuid 和 user_message_uuids。当该轮次是继续一个被重启中断的轮次时,携带这些字段的助手消息还会携带 resume_reason。 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 文本。 usage_report 是 /usage 报告的结构化副本,类型为 SDKUsageReport,需要 Agent SDK v0.3.273 或更高版本。当您将 /usage 作为提示词发送时,Claude Code 会以一条助手消息的形式交付报告,其 message.content 包含文本。仅当会话满足以下所有条件时,它才会将 usage_report 附加到同一条消息上:
  • 会话使用 claude.ai 凭据进行身份验证
  • 凭据显示已知的套餐类型,或携带 user:profile 作用域
  • 账户未采用按用量计费
以 CLAUDE_CODE_OAUTH_TOKEN 传入的 claude setup-token 令牌默认不符合条件,因为它只携带 user:inference 作用域。其他会话(例如使用 API 密钥的会话)交付的文本不带该字段,较早的版本也是如此。当该字段存在时请从中读取报告,不存在时再回退到文本。

SDKUserMessage

用户输入消息。
设置 pasted_content 以发送用户粘贴到您的提示词 UI 中而不是输入的内容,每个粘贴一个条目,每个条目是字符串或内容块数组。Claude Code 按顺序在输入的文本后追加每个条目的文本,并可能将每个粘贴包装在 <pasted_content> 标签中。除文本外的块被忽略,因此在 message.content 中发送图像和文档。需要 Agent SDK v0.3.277 或更高版本。 设置 inline_pastes 可告知 Claude Code message.content 中哪些部分是用户粘贴的而非键入的,每次粘贴对应一个字符串。提示词文本保留在用户放置的位置。Claude Code 可能会在原位用 <pasted_content> 标签包裹每个列出的粘贴内容,以便 Claude 区分粘贴的材料和用户自己的话。只有提示词最后一个文本块中的粘贴内容会被包裹。需要 TypeScript Agent SDK v0.3.280 或更高版本。 每个粘贴字段都有大小限制:
  • pasted_content:如果条目数加上其中的内容块数超过 1,000,Claude Code 会忽略整个字段。
  • inline_pastes:Claude Code 使用前 100 个非空条目,并忽略其余条目。
设置 shouldQuery、client_composed 或 priority 可以改变 Claude Code 处理您所发送消息的方式:
  • shouldQuery:设置为 false 以将消息附加到会话记录中而不触发助手轮。消息被保留并合并到下一条触发轮的用户消息中。使用此方法注入上下文,例如您在带外运行的命令的输出,而无需在模型调用上花费。
  • client_composed:设置为 true 以让 Claude Code 按原样传递消息文本。Claude Code 然后不展开 @path 或 @server:resource 提及,也不运行以 / 开头的文本作为命令。当 verbatimPrompts 选项打开时,SDK 在每条消息上设置该字段。需要 TypeScript Agent SDK v0.3.280 或更高版本和 Claude Code v2.1.248 或更高版本。
  • priority:控制您在轮次运行期间发送的消息何时到达 Claude:
    • 'next' 或未设置 priority 字段:Claude 会在同一轮次中读取该消息,时机是其正在运行的工具调用一完成之时。如果轮次先结束,该消息将开启下一轮次。
    • 'later':Claude Code 会暂存该消息直到轮次结束,然后将其作为新轮次发送。
    • 带有 origin: { kind: "human" } 的 'now':在 Claude Code v2.1.286 或更高版本上,可以在后台继续的工作会被移到后台,Claude 在同一轮次中读取该消息。可移动的工作包括 shell 命令、子代理和 MCP 工具调用。在 v2.1.287 或更高版本上,还包括 WebFetch 和 WebSearch 调用。当 Claude 只是在撰写回复,或其正在运行的工作无法移动时,Claude Code 会改为中断该轮次,Claude 接下来读取该消息。
    • 不带该 origin 的 'now':Claude Code 中断该轮次,Claude 接下来读取该消息。
以下消息在轮次运行期间发送,要求 Claude 改变方向,同时不丢失仍在运行的 shell 命令:
由子代理生成的用户消息(例如其自身某个工具调用的 tool_result)会携带 agent_id。请参阅 SDKAssistantMessage,其中定义了该字段及其版本要求。 在携带 tool_result 块的消息上,tool_use_result 是工具的结构化输出对象,而不是发送给模型的文本。其结构取决于对应 tool_use 块所指定的工具,因此该字段的类型为 unknown;内置结构列在工具输出类型下。以下结果需要超出其所列结构的额外处理:
  • Agent 工具:tool_use_result 为 AgentOutput。请据此进行渲染,而不是解析 tool_result 文本。completed 结果的 content 包含子代理的报告;对于通过 SubagentHandback 工具调用提交报告的子代理,则包含一条关于该交接的简短说明来代替报告。在 Claude Code v2.1.271 或更高版本的自动模式下,每个产生 completed 结果的子代理都以这种方式报告(fork 除外),Claude 会以来自子代理的单独消息接收报告。
  • Claude Code 为交付 'now' 消息而移到后台的 WebFetch 或 WebSearch 调用:携带该调用 tool_result 的用户消息的 tool_use_result 被设为 { detachedToolCall: true }。该调用仍在运行,Claude 会在其完成后收到结果。该 tool_use_id 之后不会再有第二个 tool_result,因此如果您的应用为每个工具调用绘制一行,请在收到此消息时将该行标记为已移到后台。需要 Claude Code v2.1.287 或更高版本。
  • 结果包含 resource_link 块的 MCP 工具:tool_use_result 是一个对象,其 resourceLinks 数组由 SDKMcpResourceLink 条目组成。Claude 会在 tool_result 块中以一行文本的形式接收每个链接,因此请读取 resourceLinks 来渲染服务器返回的文件,而不是解析该文本。当结果中没有链接时以及对于来自子代理的结果,Claude Code 会省略 resourceLinks;每个结果最多保留 50 个链接,并在数组序列化后的 JSON 达到 64 KiB 时停止添加链接。resourceLinks 需要 Agent SDK v0.3.257 或更高版本。
  • 返回 structuredContent 的 MCP 工具:tool_use_result 是一个对象,其 structuredContent 成员包含服务器发送的内容,content 成员包含 McpOutput 值。来自子代理的结果不携带 structuredContent。
  • structuredContent 序列化后超过 1,048,576 个 JSON 字符的 MCP 工具:Claude Code 会从 tool_use_result 中去掉 structuredContent,并在其位置设置 structuredContentOmitted: true,以便您的应用能够区分被丢弃的对象与根本未发送该对象的工具。其他成员(例如 content 和 resourceLinks)会保留,Claude 收到的内容也不会改变。Claude Code v2.1.287 或更高版本会应用此上限。有两类工具有所不同:
    • 来自进程内 SDK 服务器的工具不受此限制,会完整交付该对象。
    • 在 tools/list 条目中声明了 MCP Apps ui:// 资源的工具,在 Claude Code v2.1.295 或更高版本上的上限为 8,388,608 个字符,而 v2.1.295 之前的版本对其不设限制。

SDKUserMessageReplay

带有必需 UUID 的重放用户消息。
从会话外部注入的用户轮,其 origin 类型为 peer 或 channel,无论是在活跃轮期间传递还是在会话空闲时启动新轮,都作为重放到达流。在 v2.1.207 之前,在会话空闲时传递的注入轮在流上不产生消息,仅在您重新读取会话记录时出现。

SDKResultMessage

最终结果消息。
结果上的多个字段除了 subtype 之外还提供诊断详情:
  • api_error_status:终止对话的 API 错误的 HTTP 状态码。当轮在没有 API 错误的情况下结束时不存在或为 null。
  • ttft_ms:首个 token 的时间(毫秒),在第一条完整助手消息到达时测量。仅在成功分支上存在。
  • ttft_stream_ms:直到第一个 message_start 流事件(响应流打开时)的时间(毫秒)。低于 ttft_ms;两者之间的差距是流式传输第一条消息所花费的时间。仅在成功分支上存在。
  • user_message_uuid:您发送的消息的 uuid,该轮回答了该消息。请参阅 user_message_uuid 了解哪些结果携带它。
  • user_message_uuids:您发送的每条消息的 uuid,Claude Code 在该轮中回答了这些消息。请参阅 user_message_uuids。
  • resume_reason:本轮次为何是继续一个被重启中断的轮次。在两个分支上都存在。请参阅 resume_reason。
  • local_command:轮分派的命令的名称,在轮由命令完成而不进入 Agent 循环的成功结果上,例如 /compact。名称折叠为小写字母和下划线,因此 /reload-plugins 报告 reload_plugins。MCP 服务器提供的命令和内置 /mcp 报告 mcp。您自己定义的命令报告 custom。参数从不包含。在进入 Agent 循环的每个轮上不存在,在运行无命令的发送上不存在。需要 Agent SDK v0.3.268 或更高版本。
  • 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:仅主 Agent 循环。排除子代理和辅助模型调用,在流式输入会话中按轮计算。对于 token/成本核算,优先使用 modelUsage。
  • modelUsage:在此 query() 调用期间通过查询管道进行的每个模型调用的每模型总计,包括主循环、子代理和内部调用(如压缩和 Workflow Agent)。该管道外的辅助调用(如权限分类器和 token 计数请求)被排除。恢复会话的调用也计算从会话早期调用恢复的每模型总计。在流式输入会话中,总计在轮中是累积的,因此读取最新结果而不是跨结果求和。请参阅在流式输入模式中跟踪成本了解重置,以及在会话崩溃后恢复总计了解零化结果。
  • total_cost_usd:累积估计成本(美元),涵盖与 modelUsage 相同的调用并在相同点重置。恢复会话的调用也计算从会话早期调用恢复的总计。这是一个估计值,不是账单声明。请参阅跟踪成本和使用情况了解准确性注意事项。
  • queued_turn_count:您发送的带有 origin: { kind: "human" } 的消息数,在 Claude Code 产生结果时仍在等待。请参阅 queued_turn_count 了解 0 和缺失字段告诉您什么。
  • result_index:此结果在运行的传递顺序中的位置,从 0 开始计算,跨越进程写入的每个结果。在两个分支上存在。写入失败的结果仍然消耗其编号,因此序列中的间隙意味着结果丢失。需要 Agent SDK v0.3.268 或更高版本。
  • startup_failure_reason:Claude Code 拒绝启动的原因,在它在已知启动失败时退出前写入的 error_during_execution 结果上。请参阅 startup_failure_reason 了解值以及哪些失败携带它。需要 Agent SDK v0.3.274 或更高版本。
  • 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 中解释为什么快速模式关闭,而不是重新推导可用性。每个代码命名阻止快速模式的检查: 相同的字段对出现在 SDKSystemMessage 和 SDKControlInitializeResponse 上,因此您可以在第一轮之前读取快速模式状态。 origin 字段转发触发此结果的用户消息的 SDKMessageOrigin。当 SDK 注入合成后续轮(例如对于完成的后台任务)时,生成的 SDKResultMessage 携带 origin: { kind: "task-notification" }。触发器已触发的 Routine,以及经服务器验证、来自您其他会话的消息,到达时也带有此类型,每个都带有任务通知子类型中描述的 subkind。在路由或抑制结果之前,检查 kind 以区分回答您提示词的结果和注入的后续轮。如果您的应用程序声明定时运行,它们的结果也携带 kind: "task-notification",因此不要仅凭 kind 进行抑制。 当多个后台任务完成一起排队时,Claude Code 可以在一轮中回答它们,而不是每个一轮。每个完成仍然产生自己的结果与此来源。Claude Code 一起回答的完成中除最后一个外的所有完成产生空结果,其中 num_turns: 0,按顺序,最后一个的结果携带回答它们全部的轮。 该字段在任何用户轮之前发出的结果上不存在,例如启动错误。 当 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_RESUME_INTERRUPTED_TURN 下为继续被中断的轮次而生成的提示词:当被中断轮次的最后一个提示词是您发送的常规消息时(无论它是开启了该轮次,还是 Claude Code 在轮次期间接收的),继续的轮次起初回答该消息。resume_reason 可将继续轮次的帧与被中断尝试的帧区分开来。当最后一个提示词不是您的常规消息时,继续的轮次起初不回答您的任何消息。如果 Claude Code 在工具调用之间接收了您的一条常规消息,则从那时起该轮次回答被接收的消息。回显被中断轮次的提示词需要 Agent SDK v0.3.268 或更高版本。
  • 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 的流事件,因此您可以在结果到达之前绑定回复。第一个回复回显需要 Agent SDK v0.3.246 或更高版本。在 v0.3.269 之前,使用 includePartialMessages 时,Claude Code 仅在该第一条流事件上设置它,或者在轮未流式传输任何内容时在第一条助手消息上设置它。当轮回答的消息在轮中间改变时,改变后的第一个回复也携带该字段,在 Agent SDK v0.3.265 或更高版本上;早期版本在每轮一个回复帧上设置它。
  • 轮的每个 thinking_tokens 帧:以便您可以将思考进度归因于您发送的消息,而无需等待轮的第一个回复。需要 Agent SDK v0.3.260 或更高版本。
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 的每个回复帧和结果上,与该字段一起设置此列表。有关回显所回答消息 uuid 的完整轮帧集合以及每种帧所需的版本,请参阅 user_message_uuid。列表始终包含 user_message_uuid 并最多包含 64 个条目。 当 Claude Code 在轮运行时拾取您发送的常规消息时,它将该消息的 uuid 添加到结果的列表中。 当第一个回复或结果携带 user_message_uuid 而没有列表时,它来自早期的 Claude Code 版本,因此回退到单个字段。

resume_reason

本轮次为何是继续一个被重启中断的轮次。Claude Code 会在 CLAUDE_CODE_RESUME_INTERRUPTED_TURN 下继续被中断轮次的轮次上设置此字段,以便您将继续轮次的回复和结果与被中断尝试的回复和结果区分开来。需要 Agent SDK v0.3.268 或更高版本。 Claude Code 在两种帧上设置该字段:
  • 继续轮次的结果:在 success 和 error 分支上均设置,无论结果是否携带 user_message_uuid。
  • 继续轮次的回复帧:携带 user_message_uuid 的那些帧。
其值是一个简短的小写标记,例如 interrupted_turn。

queued_turn_count

您发送的带有 origin: { kind: "human" } 的消息数,在 Claude Code 产生结果时仍在命令队列中等待。需要 Agent SDK v0.3.242 或更高版本。 0 和缺失字段告诉您什么:
  • 0:Claude Code 不计算您发送的没有该 origin 的消息,也不计算任务通知,因此轮仍然可以跟随。
  • 缺失:Claude Code 在崩溃或致命启动错误后发出的最终结果省略该字段,并可能携带零化总计。

startup_failure_reason

Claude Code 拒绝启动的原因,以便您的应用程序可以提供修复而不是重试。Claude Code 在它在已知启动失败时退出前写入的 error_during_execution 结果上设置它。该结果携带零化总计,其 errors 数组携带与 stderr 相同的文本。该字段在所有其他结果上不存在。需要 Agent SDK v0.3.274 或更高版本。 在 env 中设置 CLAUDE_CODE_STARTUP_FAILURE_RESULTS 为 1 以接收每个 SDKStartupFailureReason 值的此结果。没有该变量,Claude Code 仅为这些失败写入结果,其余的以 stderr 输出、非零退出和无结果消息结束:
  • Claude Code 停止的恢复,因为它无法将会话返回到其 worktree,带有 worktree_unverified 或 worktree_resume_refused。该部分说明哪个错误携带哪个值。
  • 拒绝后台会话持有的对话的 continue,带有 session_held_by_background。对于这样的对话的拒绝 resume,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 或更高版本。
  • source 在每个 mcp_servers 条目上:服务器定义的来源,与 McpServerStatus 的 source 值相同。需要 Agent SDK v0.3.274 或更高版本。
  • effort:Claude Code 在会话的下一个请求上发送的 effort 级别,或当它不发送任何时为 null。Claude Code 仅在它发送到 Remote Control 客户端的初始化消息上设置该字段,并从您的应用程序读取的初始化消息中省略它。需要 Agent SDK v0.3.234 或更高版本。
capabilities 数组命名此 CLI 实现的协议行为,因此您可以进行功能检测而不是比较 claude_code_version 字符串。这是一个开放集:忽略您不认识的值,并检查您依赖其行为的特定功能。该字段需要 Claude Code v2.1.205 或更高版本,在早期 CLI 上不存在。 plugin_errors 数组列出插件加载失败。一个条目描述要么是未加载的插件且在 plugins 中不存在,要么是加载但没有其部分之一(例如其 hooks 文件)的插件。当没有任何东西失败时,该键被省略。SDKSystemMessage 在 Agent SDK v0.3.283 或更高版本中声明 plugin_errors。 当您的 plugins 选项中的目录或存档本身无法加载时,条目的 plugin 字段保存位置标签(例如 inline[0])而不是插件名称。例如,当路径不存在或清单无效时会发生这种情况。通过其 path 字段将这样的条目与您的选项匹配。 下表列出了每个 plugin_errors 条目的字段。

SDKPartialAssistantMessage

流式部分消息(仅当 includePartialMessages 为 true 时)。 parent_tool_use_id 字段始终为 null:流事件仅针对主会话发出。要进行子代理归属,请使用完整消息(它们携带 agent_id 和 parent_tool_use_id),或启用 forwardSubagentText 以完整消息的形式接收子代理的文本和思考内容。
Claude Code 会在满足 user_message_uuid 中所述条件时,在该轮次的第一个非 ping 流事件上设置 user_message_uuid 和 user_message_uuids,并在轮次所回答的消息发生变化时再次设置。当该轮次是继续一个被重启中断的轮次时,携带这些字段的流事件还会携带 resume_reason。

SDKCompactBoundaryMessage

指示对话压缩边界的消息。

SDKInformationalMessage

循环发出的通用文本横幅。携带 Claude Code 引发的警告、通知和其他非错误状态行,以及 hook 反馈,例如 UserPromptSubmit hook 的阻止原因。 在 Claude Code v2.1.227 或更高版本上,hook 的 systemMessage 可以作为此消息到达,每行以 hook 的名称为前缀,例如 PostToolUse:Bash says:。hooks 页面上每个事件的部分说明输出如何显示。 将 content 呈现为给定 level 的纯文本。

SDKWorkerShuttingDownMessage

在优雅的工作进程拆卸上发出,以便远程客户端可以显示工作进程退出的原因,而不是等待心跳超时。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 运行,或既未设置 canUseTool 也未设置 permissionPromptToolName 的 query(),会拒绝任何本应触发提示的工具调用,除非 PermissionRequest hook 允许它;此事件会报告这些拒绝以及 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 等显示字段。Claude Code 使用不出现在消息流中的 token 计数 API 请求计算报告;请参阅这些请求如何处理。
该表列出了 Claude Code 在每个字段中放入的内容。从 model 到 over_limit 的字段描述整个会话,集合字段将 token 归因于单个项目。 over_limit.kind 记录 Claude Code 如何解决窗口,而不是 API 是否接受下一个请求:
  • hard_limit:窗口是 Claude Code 认为是模型自己的限制,超过该限制 API 拒绝请求
  • compaction_window:窗口是压缩策略窗口,可能与模型的限制一致,也可能不一致
Claude Code 以加法方式演进该类型,添加新数据作为可选字段而不是重塑现有字段。读取您知道的字段并忽略您不认识的任何字段。

SDKContextUsageCategory

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

SDKUsageReport

/usage 报告的结构化形式,作为 usage_report 携带在交付 /usage 结果的 SDKAssistantMessage 上。Agent SDK v0.3.273 及更高版本导出此类型。此类型为实验性的:其结构可能会发生变化。
顶层字段为 session 和 rate_limits:
  • session:Claude Code 的累计成本和用量汇总,读取自与 SDKResultMessage 上的 total_cost_usd 和 modelUsage 相同的账目。每个 model_usage 条目都是一个 ModelUsage。
  • rate_limits:limits 中为套餐的用量行,extra_usage 中为使用额度的支出。当 Claude Code 无法获取套餐用量时(例如会话的 OAuth 令牌缺少 user:profile 作用域),该字段为 null。
Claude Code 根据 token 数在本地计算 session.total_cost_usd,因此它是估算值,而不是您的套餐实际收取的费用。服务器报告的使用额度支出是单独的 extra_usage 块。关于准确性注意事项,请参阅跟踪成本和用量。 limits 按服务器发送的原样保存服务器的用量行:适用哪些计量器、其作用域、标签、严重程度和顺序都由服务器决定,因此请按原样渲染这些行。
  • 空数组表示服务器未报告任何计量器。
  • null 表示 Claude Code 没有可报告的行。
limits 的每一行描述一个用量计量器: 在 Agent SDK v0.3.277 之前,该类型将 severity 和 is_active 声明为可选且可为 null,行到达时可能不带这两个字段。 extra_usage 是服务器报告的计费周期内的使用额度支出和上限,当套餐拥有使用额度时存在。金额以 currency 的最小单位表示,美元为美分。
  • 当此账户没有自己的支出上限时,monthly_limit 为 null。在 Team 和 Enterprise 套餐上,不要将 null 渲染为无限制。
  • 当使用额度无法用于支付请求时,is_enabled 为 false。

SDKMessageOrigin

用户角色消息的来源。这在 SDKUserMessage 上显示为 origin,并转发到相应的 SDKResultMessage,以便您可以告诉什么触发了给定的轮。

任务通知子类型

当 Claude Code 将任务通知传递到会话中时,如果 Anthropic 服务器验证了该通知的来源,它会在通知的 origin 上设置 subkind。当您的应用程序自己声明消息为定时运行时,它也设置 subkind,这需要 TypeScript Agent SDK v0.3.280 或更高版本。subkind 需要 Claude Code v2.1.213 或更高版本,它采用两个值之一:
  • scheduled-trigger:通知是 Routine 的存储提示词,因为 Routine 的触发器之一触发而传递:其计划、其 API 触发器、其 GitHub 触发器 或立即运行。您的应用程序声明为定时运行的提示词也携带此值。Claude Code 将这些作为会话的分配任务呈现给模型,附带的通知与其他任务通知携带的通知不同。
  • peer-send-message:该通知是您的另一个会话通过服务器端 send_message 工具发送的消息(云端会话之间使用该工具互相发送消息),而不是跨会话 SendMessage 工具,并且 Anthropic 服务器已验证两个会话属于同一个私有会话组。需要 Claude Code v2.1.224 或更高版本。服务器未以此方式验证的 send_message 投递不会获得子类型。
每个其他任务通知都没有 subkind。这包括PR 活动传递到会话和后台事件,例如完成的任务。来自跨会话 SendMessage 工具的消息根本不是任务通知:无论它们来自同一机器上的会话还是通过 Anthropic 服务器来自另一台机器,Claude Code 都给它们 kind: "peer" 和对等体来源字段。 fireReason 说明 scheduled-trigger 通知为什么触发,作为简短的小写标记,例如 scheduled、manual、retry、catch_up 或 api。Anthropic 服务器在 Routine 的传递上设置它,您的应用程序在声明定时运行时设置它。当两者都未发送时不存在。需要 TypeScript Agent SDK v0.3.280 或更高版本。 一个后台任务可以在同一个 task_id 下运行多次,例如当 Claude 恢复子代理时。每次运行都有自己的 run_id。当某次运行的通知作为用户消息到达您的会话时,该消息 task-notification origin 上的 runId 持有相同的值。通知可能在任务的下一次运行开始后才到达,但它仍然带有较早那次运行的 ID。要判断某个轮次属于哪次运行,请比较 runId,而不是 task_id。需要 TypeScript Agent SDK v0.3.292 或更高版本。

声明定时运行

如果您的应用程序按自己的计划运行提示词,声明每个运行,以便 Claude Code 将轮作为定时任务而不是来自用户的实时输入呈现给模型。使用 env 中设置为 1 的 CLAUDE_CODE_HOST_SCHEDULED_RUN 启动会话,然后发送运行的 SDKUserMessage,其中 origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } 且没有 isSynthetic。Claude Code 忽略在没有该变量启动的进程中的声明。它也在进程的环境携带 CLAUDECODE 或 CLAUDE_CODE_CHILD_SESSION 时忽略它。Claude Code 仅在值为 1 到 32 个小写字母或下划线时保留 fireReason。需要 TypeScript Agent SDK v0.3.280 或更高版本。

对等体来源字段

peer 来源标识哪个 Agent 发送了消息:进程内队友使用 SendMessage 发送到 main,或跨会话对等体,您的另一个 Claude Code 会话。跨会话对等体在 macOS 和 Linux 上需要 Claude Code v2.1.224 或更高版本;请参阅跨会话消息传递可用性了解本机 Windows 要求。跨会话对等体可以在同一机器上运行,或在其消息通过 Remote Control 到达时,在您的另一台机器上或云中运行。两种发送者类型填充字段的方式不同:
  • 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,而不要重新解析消息文本。在 v2.1.299 之前,合并的消息会保留第一条消息的 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 类型

有关使用 hook 的指南,包括示例和常见模式,请参阅 Hooks 指南。

HookEvent

可用的 hook 事件。

HookCallback

Hook 回调函数类型。

HookCallbackMatcher

带有可选匹配器的 Hook 配置。

HookInput

所有 hook 输入类型的联合类型。

BaseHookInput

所有 hook 输入类型扩展的基本接口。
prompt_id 字段是一个 UUID,用于标识当前正在处理的用户提示。它与 OpenTelemetry 事件上的 prompt.id 属性匹配,在第一个用户输入之前不存在。需要 Claude Code v2.1.196 或更高版本。

PreToolUseHookInput

当工具来自 MCP 服务器时,mcp_server 存在;请参阅 McpServerProvenance。PostToolUse、PostToolUseFailure、PermissionRequest 和 PermissionDenied 输入携带相同的字段。该字段需要 Agent SDK v0.3.274 或更高版本。

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 工具的输入 schema 文档。这些类型从 @anthropic-ai/claude-agent-sdk/sdk-tools 导出,可用于类型安全的工具交互。

ToolInputSchemas

从 @anthropic-ai/claude-agent-sdk/sdk-tools 导出的工具输入类型的联合;成员包括:

Agent

工具名称: Agent。之前的名称 Task 仍然被接受作为别名,SDKSystemMessage 初始化消息中的 tools 数组目前为了向后兼容仍将此工具列为 Task。
在 Claude Code v2.1.212 或更高版本上,mode 字段已弃用且被忽略。子代理在父会话的权限模式或其定义的 permissionMode 中运行,子代理继承规则决定使用哪一个。
启动新的 Agent 以自主处理复杂的多步骤任务。

AskUserQuestion

工具名称: AskUserQuestion
在执行期间向用户提出澄清问题。请参阅处理批准和用户输入了解使用详情。

Bash

工具名称: Bash
执行 Bash 命令,支持可选超时和后台执行。工作目录在命令之间保持不变,包括多轮会话后续轮次中运行的命令;shell 状态(如导出的环境变量)不保持。有关哪些目录更改会保持的限制,请参阅命令之间保持什么。有关设置前台上限的内容,请参阅超时和输出限制。有关后台时间限制,请参阅后台命令的时间限制。

Monitor

工具名称: Monitor
运行后台源并将每个事件传递给 Claude,以便它可以做出反应而无需轮询:command 运行脚本并为每个 stdout 行发出一个事件,ws 打开 WebSocket 并为每个文本帧发出一个事件。恰好提供 command 或 ws 之一。ws 源需要 Claude Code v2.1.195 或更高版本。 timeout_ms 是监视的截止时间(以毫秒为单位)。它默认为 300000,接受最高 3600000 的值。有效截止时间最多为 1800000,即 30 分钟,因此更大的接受值会被缩短到该值。在截止时间,监视结束,Claude 收到一个通知,以便在仍需要时可以启动新的监视。 导出的类型将 timeout_ms 标记为必需,因为 schema 填充了默认值;省略它的调用会验证通过。 当 Monitor 运行命令时,它遵循与 Bash 相同的权限规则;WebSocket 监视会单独提示批准。请参阅 Monitor 工具参考了解行为和提供商可用性。

TaskOutput

在 Claude Code v2.1.277 中移除,连同其 TaskOutputInput 类型一起。之前从运行中或已完成的后台任务检索输出;Claude 改为使用 Read 读取后台任务的输出文件。 仍然命名 TaskOutput 的 disallowedTools 条目或拒绝规则会被忽略,不会发出警告。

Edit

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

Read

工具名称: Read
从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。
  • 对 PDF 页面范围使用 pages(例如,"1-5")。
  • allow_large 允许 Claude 在会话的上下文窗口有空间时读取超过通常大小限制的文本文件。它需要 Agent SDK v0.3.296 或更高版本,该版本捆绑了 Claude Code v2.1.296。
对于 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 也接受 agent team 队友,或按 Agent ID 或名称指定的命名后台 Agent。

NotebookEdit

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

WebFetch

工具名称: WebFetch
从 URL 获取内容并使用 AI 模型处理它。 offset 是从页面开头跳过的字符数。Claude 设置它以继续读取较长的页面。该字段需要 Agent SDK v0.3.290 或更高版本。

WebSearch

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

Workflow

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

TodoWrite

工具名称: TodoWrite
创建和管理结构化任务列表以跟踪进度。
以下工具仅在 Claude Opus 4.7、Claude Sonnet 4.6、Claude Haiku 4.5 及更早的模型上默认可用。在所有其他模型上,包括 Claude Code 无法识别的模型 ID,除非您选择加入,否则它们不可用:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
无论工具在何处可用,Claude Code 都提供四个 Task 工具,或者当你设置 CLAUDE_CODE_ENABLE_TASKS=0 时改为提供 TodoWrite。此默认集合适用于 Claude Code v2.1.268 及更高版本,TypeScript Agent SDK 从 v0.3.268 开始捆绑此版本。请参阅模型可用性以选择加入。

TaskCreate

工具名称: TaskCreate
创建单个任务并返回其分配的 ID。

TaskUpdate

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

TaskGet

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

TaskList

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

ExitPlanMode

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

ListMcpResources

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

ReadMcpResource

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

EnterWorktree

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

ExitWorktree

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

EnterPlanMode

工具名称: EnterPlanMode
进入计划模式,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,否则 delaySeconds、reason、prompt 和 noop 字段是必需的。noop: true 报告没有任何更改的唤醒。设置 stop: true 取消待处理的唤醒并结束自定步调的 /loop。stop 字段需要 Claude Code v2.1.202 或更高版本。请参阅工具参考中的 ScheduleWakeup 行。

RemoteTrigger

工具名称: RemoteTrigger
管理 Routines,即在云端托管的按计划和按触发运行的 Claude Code 任务。此工具支持 /schedule 命令。trigger_id 对于 get、update、run 和 list_runs 操作是必需的。body 对于 create、update 和 create_webhook_trigger 是必需的,对于 run 是可选的。 create_webhook_trigger 将事件源附加到现有 Routine,例如触发它的 GitHub 事件。body 命名源、事件和要触发的 Routine。需要 Claude Code v2.1.225 或更高版本。 list_runs 列出 Routine 的最近运行,get_run_log 读取一次运行的日志。session_id 从 list_runs 结果中指定要读取的运行,cursor 分页浏览任一操作的结果。两个操作都需要 Claude Code v2.1.227 或更高版本。 此工具仅在会话使用启用了 Routines 的计划的 claude.ai 账户进行身份验证时可用,当您的组织的策略禁用云端会话时不存在。在 Claude Code v2.1.227 或更高版本上,当所有者为组织关闭 Routines 时,该工具也不存在。在 v2.1.227 之前,仅关闭 Routines 开关的会话仍然显示该工具,服务器拒绝其调用。

PushNotification

工具名称: PushNotification
向用户发送主动推送通知。将 message 保持在 200 个字符以下,因为移动操作系统会截断较长的文本。请参阅工具参考中的 PushNotification 行了解提供商可用性;推送传递通过 Anthropic 托管的基础设施进行,该基础设施无法从 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry 访问。

REPL

在 v2.1.275 中移除。在 v2.1.274 及之前,可以通过在 env 选项中设置 CLAUDE_CODE_REPL=1 来打开实验性 REPL 工具。

ReportFindings

工具名称: ReportFindings
将代码审查发现报告为结构化列表,以便 Claude Code 可以呈现它们而不是将其打印为文本。发现按最严重优先排序,每次调用最多 32 个,当没有发现保留下来时数组为空。需要 Claude Code v2.1.196 或更高版本。 level 是可选的,包含 Claude 为该审查报告的 effort 级别。Claude Code 不会将其与审查实际运行时的级别进行比较,因此两者可能不同。 每个发现包含这些字段:
  • 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 页面,或列出用户发布的 Artifact。省略 action 或传递 "publish" 以发布 file_path,这对于发布操作是必需的。下面的每个字段适用于发布:
  • icon:Artifact 浏览器标签图标的一个短通用词,例如 chart 或 map。Claude 在首次发布时包含它,在更新时省略它,这会保留 Artifact 的存储图标。
  • favicon:已弃用,Claude 会省略它。
  • title:当 HTML 文件没有 <title> 标签时,在浏览器标签和库中命名发布的页面。
  • url:针对现有 Artifact 以就地更新,而不是创建新的。
force 是最后手段的覆盖,丢弃另一个会话发布的较新版本。在冲突时,失败的发布返回较新的内容;Claude 将其更改合并到该内容上,或重新读取 Artifact,然后再次发布。仅当用户明确要求丢弃该版本时才传递 force。 传递 "list" 以枚举用户发布的 Artifact;仅 limit 和 scope 可以伴随它。scope 默认为 "mine",列出用户拥有的 Artifact;"shared" 列出其他人与用户共享的 Artifact,"all" 列出两者。 limit 设置列表返回的 Artifact 最大数量,范围为 1 到 200。大于 50 的 limit 需要 Agent SDK v0.3.292 或更高版本。不指定 limit 时,列表最多返回 25 个。
  • capabilities:发布的页面使用的运行时功能,以功能名称为键,例如页面可能调用的连接器。Artifact 服务验证声明,并拒绝命名了账户无法使用的功能或为某功能提供无效配置的发布。传递 {} 以清除存储的声明,在重新部署时省略该字段以保留它。需要 Agent SDK v0.3.235 或更高版本。
  • contract:发布的页面运行所基于的运行时版本。省略它以保留 Artifact 的当前版本,传递 "latest" 以升级,或传递特定版本以固定或回滚。需要 Agent SDK v0.3.235 或更高版本。
这些类型已导出,但该工具在 Agent SDK 会话中默认处于关闭状态。发布还需要满足 Artifact 可用性表中的每个条件,使用 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 工具参数是开放对象:每个服务器定义自己的参数,因此类型对字段名称或值不施加任何约束。请查阅服务器自己的工具 schema 以了解特定工具接受的字段。

工具输出类型

内置 Claude Code 工具的输出 schema 文档。这些类型从 @anthropic-ai/claude-agent-sdk/sdk-tools 导出,代表每个工具返回的实际响应数据。

ToolOutputSchemas

从 @anthropic-ai/claude-agent-sdk/sdk-tools 导出的工具输出类型的联合;成员包括:

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 是该请求的输出 token 中属于思考 token 的数量。output_tokens_details 字段需要 TypeScript SDK v0.3.228 或更高版本,该版本包含 Claude Code v2.1.228。fallback_credit 字段需要 TypeScript SDK v0.3.285 或更高版本,该版本包含 Claude Code v2.1.285。 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 在此类命令上将 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
返回编辑操作的结构化 diff。

Read

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

Write

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

Glob

工具名称: 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
返回获取的内容,包含 HTTP 状态和元数据。 artifactRead 是 Claude Code 自己的 Artifact 读取记录,仅当 Claude 获取会话可以发布的 Artifact 时出现。Claude Code 在会话恢复时读取它回来,以便稍后的发布基于正确的版本;您的代码不需要对其采取行动。slug 命名 Artifact,ver 是读取记录的版本,当它未记录任何内容时不存在,seeded: false 标记其完整源未到达 Claude 的读取。seeded 字段需要 Agent SDK v0.3.239 或更高版本。

WebSearch

工具名称: WebSearch
返回来自网络的搜索结果。

Workflow

工具名称: Workflow
在工具接受调用后立即返回。最终结果稍后作为任务完成到达。在将运行视为已启动之前检查 error:脚本如果语法检查失败,会返回 status: "async_launched" 并设置 error,且永远不会运行。

TodoWrite

工具名称: TodoWrite
返回之前和更新的任务列表。
以下工具仅在 Claude Opus 4.7、Claude Sonnet 4.6、Claude Haiku 4.5 及更早的模型上默认可用。在所有其他模型上,包括 Claude Code 无法识别的模型 ID,除非您选择加入,否则它们不可用:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
无论工具在何处可用,Claude Code 都提供四个 Task 工具,或者当你设置 CLAUDE_CODE_ENABLE_TASKS=0 时改为提供 TodoWrite。此默认集合适用于 Claude Code v2.1.268 及更高版本,TypeScript Agent SDK 从 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
返回传递详细信息,包括是否发送了推送或本地通知以及跳过传递的原因。

ReportFindings

工具名称: ReportFindings
返回报告的发现数、Claude 传入的 level 值以及为结果正文回显的发现。需要 Claude Code v2.1.196 或更高版本。回显的 short_summary 字段需要 Claude Code v2.1.212 或更高版本。

Artifact

工具名称: Artifact
返回已发布页面的 url 和为发布操作发布的本地 path,当发布重新部署现有 Artifact 时 updated 设置为 true,warnings 携带任何发布时建议。列表操作返回 artifacts 行,当存在比请求限制更多的 Artifact 时 truncated 设置。在作用域不是 "mine" 的列表上,每行携带 rel 标记用户是否拥有该 Artifact 或该 Artifact 是与他们共享的,输出的 scope 记录哪个非默认作用域产生了列表;两者在默认列表上不存在。 列表结果还会报告 total,即与所列作用域匹配的 Artifact 数量,包括超出 limit 的部分。设置 total_at_least 时,该数字是下界,可能还存在更多 Artifact。这两个字段都需要 Agent SDK v0.3.292 或更高版本。

Projects

工具名称: Projects
在 method 字段上进行区分,镜像输入。project_read 在 content 中内联返回小文本文档,并将较大的文档写入 local_file 路径;project_search 当项目的索引可用时返回 RAG hits 且 rag: 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 工具结果作为字符串或内容块数组返回,取决于服务器。导出类型中的尾部纯对象分支是 schema 生成过程的产物。对于同时携带 structuredContent 或资源链接的结果,请参阅 tool_use_result,它在其 content 成员中保存此值。在运行时值也可能是 undefined,尽管导出的类型不对此建模。

权限类型

PermissionUpdate

用于更新权限的操作。

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

其他类型

ApiKeySource

会话请求所用 API 密钥的来源,在 SDKSystemMessage init 消息中以 apiKeySource 报告。
Claude Code 会报告以下四个值之一: Agent SDK v0.3.234 及更高版本在该类型中列出这四个值。该类型还保留了 user、project、org、temporary 和 oauth,以便旧代码仍能编译,但 Claude Code 不会报告它们。

SdkBeta

可通过 betas 选项启用的 beta 功能。有关更多信息,请参阅 Beta headers。
在 Claude API 上,context-1m-2025-08-07 beta 已针对 Claude Sonnet 4.5 和 Claude Sonnet 4 停用。如果您仍在这两个模型中的任一个上传递它,超出标准 200K token 上下文窗口的请求将返回错误,因此请将其从 betas 中移除。要以 1M token 上下文窗口运行会话,请将 model 设置为默认以 1M 窗口运行的模型,例如 claude-sonnet-5-5 或 claude-opus-5-5。对于只能通过其 [1m] 变体达到 1M 的模型,请在模型 ID 后附加该后缀,例如 claude-opus-4-6[1m]。

SlashCommand

有关可用命令的信息。
当某条命令是 Claude Code 自身的命令且输入 /name 即可运行它时,该行的 builtin 为 true。对于由用户、项目、插件或 MCP 服务器定义的命令,以及被上述某一来源按名称替换的内置命令,该字段不存在。需要 Agent SDK v0.3.277 或更高版本。

ModelInfo

有关可用模型的信息。

AgentInfo

有关可通过 Agent 工具调用的可用子代理的信息。

McpServerProvenance

提供某个 mcp__* 工具的 MCP 服务器,以及该服务器定义的来源。PreToolUse、PostToolUse、PostToolUseFailure、PermissionRequest 和 PermissionDenied hook 输入以 mcp_server 携带它,CanUseTool 选项以 mcpServer 携带它。对于并非来自 MCP 服务器的工具,两者都会省略它。
source 取以下值之一。该集合是开放的,因此请将无法识别的值视为已配置的来源,绝不要视为 sdk:
  • sdk:由您的应用程序注册的进程内服务器。只有 SDK 宿主应用程序才能注册此类服务器,因此已配置的服务器无论名称为何,都不会报告 sdk。
  • plugin:由插件提供的服务器。其 name 为插件提供的 MCP 服务器中描述的限定形式 plugin:<plugin-name>:<server-name>。
  • 配置作用域:user、project、local、dynamic、managed、enterprise、claudeai 或 agent。.mcp.json 服务器报告 project,MCP 安装作用域定义了 local、project 和 user。您的应用程序通过 mcpServers 选项传入的服务器(进程内 SDK 服务器除外)报告 dynamic。
请基于 source 做出信任决策,而不是基于 name 或 mcp__<server>__ 工具名前缀。对于 sdk 以外的任何来源,name 都是不可信文本:在显示之前请对其进行转义。 McpServerProvenance 及携带它的字段需要 Agent SDK v0.3.274 或更高版本。

McpServerStatus

已连接 MCP 服务器的状态。
source 表示服务器定义的来源,其取值和信任规则与 McpServerProvenance 的 source 相同。该字段需要 Agent SDK v0.3.274 或更高版本,在更早的版本中不存在。 tools 条目上的 _meta 携带该工具 _meta 中的 MCP Apps 成员,以便您的应用程序找到要通过 readMcpResource() 渲染的 ui:// 资源。Claude Code 会透传 ui 对象和已弃用的扁平 ui/resourceUri 字符串,并扣留所有其他键,不予透传。在 ui 内部,当服务器设置了 resourceUri 和 visibility 时,resourceUri 为 ui:// 字符串,visibility 为由 "model" 和 "app" 组成的数组,其他任何成员原样透传。当值格式错误时,Claude Code 会丢弃相应的键;对于两者都未声明的工具,则省略 _meta。仅当 init 消息的 capabilities 包含 mcp_tool_ui_meta_v1 时,该字段才会出现,并且需要 TypeScript Agent SDK v0.3.280 或更高版本。

McpServerStatusConfig

由 mcpServerStatus() 报告的 MCP 服务器配置。这是所有 MCP 服务器传输类型的联合类型。
有关每种传输类型的详细信息,请参阅 McpServerConfig。

AccountInfo

已通过身份验证用户的账户信息。

ModelUsage

在结果消息中返回的按模型统计的使用情况。costUSD 值是客户端估算值。有关计费注意事项,请参阅跟踪成本和使用情况。
thinkingTokens 统计此模型生成的思考 token。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 的一个版本,其中除 fallback_credit(仍可为 null)外,所有可为空的字段都变为不可为空。

Usage

token 使用统计信息。这是来自 @anthropic-ai/sdk 的 BetaUsage 类型。
BetaServerToolUsage、BetaIterationsUsage、BetaOutputTokensDetails 和 BetaFallbackCreditUsage 在 @anthropic-ai/sdk 中定义。 output_tokens_details 按类别细分计费的输出。它目前包含一个字段 thinking_tokens: number,统计模型作为内部推理生成的输出 token,包括思考块分隔符。output_tokens_details 字段需要 TypeScript SDK v0.3.228 或更高版本,该版本捆绑了 Claude Code v2.1.228。
  • 计费:请将此细分用于可观测性,而不是计费。output_tokens 仍是权威总数,output_tokens - thinking_tokens 近似于非推理输出。
  • 计数涵盖的内容:模型产生的原始推理,可能比响应体中返回的思考文本更长。API 通过对该原始文本重新进行 token 化来计算它,因此可能与模型的确切生成计数相差几个 token。
  • 流式:在流式的助手消息上,此细分与 output_tokens 一样是 message_start 占位符,不携带真实计数,因此请按照从结果消息中读取输出 token 的说明,从结果消息的 usage 中读取。在结果消息上,当模型或提供商未报告细分时,thinking_tokens 为 0。
  • null 情况:在 Claude Code 合成的助手消息(例如 API 错误消息)上,output_tokens_details 本身为 null。
Usage 是否携带 fallback_credit 取决于您安装的 @anthropic-ai/sdk,该字段在 0.115.0 中添加。

CallToolResult

MCP 工具结果类型(来自 @modelcontextprotocol/sdk/types.js)。structuredContent 是一个 JSON 对象,可以与 content(包括图像块)一起返回。请参阅返回结构化数据。
MCP 工具以引用方式返回的一个文件。Claude Code 根据工具结果中的 resource_link 块构建每个条目,并将列表作为 SDKUserMessage.tool_use_result 上的 resourceLinks 传递;当调用在后台完成时,则作为 SDKTaskNotificationMessage 上的 resource_links 传递。需要 Agent SDK v0.3.257 或更高版本。
Claude Code 会丢弃 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

传递给自定义 spawn 函数的选项。
signal 字段告诉您的 spawn 函数何时拆除进程。请将其作为 signal 选项传递给 Node 的 spawn(),或将其传递给您的 VM 或容器拆除处理程序。此信号不会在 Options.abortController 中止的瞬间触发。SDK 会先关闭进程的 stdin 并等待约两秒,以便 CLI 能够干净地关闭,然后再中止此信号。如果要在调用方中止的那一刻立即作出反应,请监听您自己的 Options.abortController.signal,您的 spawn 函数可以从其外围作用域引用它。

McpSetServersResult

setMcpServers() 操作的结果。
调用 setMcpServers() 时,Claude Code 会应用以下规则:
  • 调用未指定的服务器:在云端会话之外,Claude Code 会断开先前 setMcpServers() 调用添加的服务器以及进程内 SDK 服务器的连接,并在 removed 中列出它们。其他服务器会继续运行,且不会列在 removed 中,其中包括来自 mcpServers 选项的 stdio、HTTP 和 SSE 服务器、来自设置文件的服务器以及插件提供的服务器。
  • 调用指定的服务器:对于先前 setMcpServers() 调用添加的 stdio、HTTP 或 SSE 服务器,只有当其配置与您传入的配置不同时,Claude Code 才会替换它。已以该名称注册的进程内 SDK 服务器会保持原样,因此要替换它,请在一次调用中将其省略,然后在下一次调用中添加它。
  • CLI 在启动时启动的内置服务器:如果调用指定了其中之一,Claude Code 会丢弃该条目并在 errors 中报告它。
Promise 会在新添加的 stdio、HTTP 和 SSE 服务器连接成功或失败后 resolve,因此已连接服务器的工具在下一轮次即可使用。 added 列出 Claude Code 添加或替换的服务器,无论它们是否已连接。连接失败的服务器会同时出现在 added 和 errors 中,失败文本位于 errors 下,并在 mcpServerStatus() 中有一行 failed。在 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 监视以及后台子代理。有关 run_id 和 ambient 字段,请参阅 SDKTaskStartedMessage,其中定义了这些字段及其版本要求。
当任务因其自身完成、失败或停止以外的原因结束时,会设置 reason,该字段需要 Agent SDK v0.3.273 或更高版本。Claude Code 仅在通过 claude.ai 连接的会话中设置它:云端会话(包括在自托管运行器上运行的云端会话)以及 Remote Control 会话。本地 query() 调用永远不会设置它。其唯一的值 worker_restart 表示运行该任务的 Claude Code 进程已重启。该通知携带状态 "stopped",因此请将该任务视为既未完成也未失败。 当 Claude Code 将耗时较长的 MCP 工具调用移到后台时,该调用的 tool_result 块只包含一个占位符,调用的真实结果会在此通知中到达。请使用 tool_use_id 将通知与调用匹配。在 completed 通知上,resource_links 以 SDKMcpResourceLink 条目的形式列出工具以引用方式返回的文件,其 50 个链接和 64 KiB 的限制与 tool_use_result.resourceLinks 相同。当结果没有链接时,以及在非 MCP 工具调用任务的通知上,Claude Code 会省略 resource_links。resource_links 需要 Agent SDK v0.3.257 或更高版本。 Claude Code 会在其发送给模型的每个任务通知前添加一条提示,但带有 scheduled-trigger subkind 标记的投递除外,这类投递改为携带分配任务的框架说明。该提示声明没有发生任何人工输入,因此模型不会将通知视为用户指令或批准。 要检测任务通知轮次,请检查 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

在工具执行期间定期发出,以指示进度。
当工具调用在主对话中运行时,Claude Code 每 30 秒发出一条带有 heartbeat: true 的 tool_progress 消息。每个心跳都携带工具名称和已用秒数,因此您可以区分长时间运行的调用和停滞的会话。Claude Code 不会为子代理内部的工具调用发出心跳。heartbeat 字段需要 Agent SDK v0.3.214 或更高版本。在 v2.1.257 之前,Claude Code 也不会为前台的 Agent 工具调用发出心跳。 在 Agent 工具的非心跳 tool_progress 消息上,subagent_type 指明正在运行的子代理类型,例如 general-purpose。当该子代理因 API 错误(例如速率限制或过载)而等待退避时,会出现 subagent_retry,每次重试尝试对应一条消息。这两个字段都需要 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

在任务开始时发出。对于 Bash 命令和 Monitor 监视,task_type 字段为 "local_bash";对于子代理为 "local_agent";否则为 "remote_agent"。
run_id 标识任务的一次运行。当任务以相同的 task_id 再次运行时(例如 Claude 恢复的子代理),新的运行会获得新的 run_id。该字段需要 Agent SDK v0.3.292 或更高版本。使用它来区分同一任务的各次运行:
  • 将消息与某次运行匹配:同一次运行的 task_started、task_progress、task_updated 和 task_notification 消息携带相同的 run_id。每条 SDKBackgroundTasksChangedMessage 中该运行的条目也携带它,传递该运行通知的用户消息的 origin 上的 runId 也是如此。
  • 检测迟到的消息:按普通字符串比较时,同一任务的各个运行 ID 按运行开始的顺序排序,因此如果某条消息的 run_id 排在您正在显示的运行之前,则它来自更早的运行。除该比较外,请将该值视为不透明值。
  • 回退到 task_id:当消息不携带 run_id 时(例如恢复的会话为关闭先前进程启动的任务而发出的 task_notification),请按 task_id 确定其归属。
例如,以下三条消息(已精简为其标识字段)来自一个被 Claude 恢复过一次的后台子代理。两条 task_started 消息共享同一个 task_id,结束第一次运行的通知携带第一次运行的 ID:
对于不属于会话工作的任务(例如 Claude Code 为其自身运行而执行的任务),ambient 为 true。实时更新监视器也属于 ambient,包括用户要求的监视器。请将 ambient 任务从活动指示器中排除。该字段需要 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。 parent_task_id 保存启动此任务的子代理的 task_id。使用它将每个任务归组到启动它的子代理之下。Claude Code 会在子代理、Bash 和 Monitor 任务上设置它。该字段需要 Agent SDK v0.3.292 或更高版本。在以下情况下该字段不存在:
  • 任务由主线程启动
  • Claude Code 不再跟踪父任务
  • 任务由 teammate 或工作流中的 Agent 启动
父任务可能是前台任务,也可能是已经结束的任务,因此请将无法识别的 ID 视为没有父任务。

SDKTaskProgressMessage

在子代理或后台任务运行期间定期发出。有关 run_id 字段,请参阅 SDKTaskStartedMessage,其中定义了该字段及其版本要求。 对于子代理任务,summary 字段携带模型生成的进度摘要,仅在启用 agentProgressSummaries 时填充。对于已移到后台的 MCP 工具调用,summary 携带 MCP 服务器最近报告的进度,不依赖于该选项。

SDKTaskUpdatedMessage

在后台任务状态发生变化时发出,例如从 running 转换为 completed 时。请将 patch 合并到以 task_id 为键的本地任务映射中。end_time 字段是以毫秒为单位的 Unix 纪元时间戳,可与 Date.now() 比较。有关 run_id 字段,请参阅 SDKTaskStartedMessage,其中定义了该字段及其版本要求。

SDKBackgroundTasksChangedMessage

每当活动后台任务集合发生变化时发出:任务启动、完成、被终止、前台 Agent 被移到后台,或任务的 description、ambient 或 parent_task_id 字段发生变化。有关每个条目上的 run_id 和 parent_task_id 字段,请参阅 SDKTaskStartedMessage,其中定义了这些字段及其版本要求。 tasks 数组是完整的活动集合。请用每次的负载替换任何缓存的集合,而不是对 task_started 和 task_notification 事件进行配对,这样下一次成员变化就会纠正您错过的任何事件。 当任务结束时,其 task_updated 和 task_notification 会先于将其从列表中移除的 background_tasks_changed 到达。除此之外,相对于这些逐任务事件的顺序是未指定的。 启动时不会发出任何内容。每当会话的 CLI 进程启动或重启时,请重置为空集合,并由下一次成员变化重新填充。 当您向正在运行的会话发送重复的 initialize 控制请求时(例如在传输中断后使用 reinitialize()),Claude Code 会在响应之后发送当前活动集合的快照,即使该集合为空。因此,重新连接的宿主无需等待下一次成员变化即可了解正在运行的内容。在 Agent SDK v0.3.239 之前,Claude Code 在重复的 initialize 之后不发送快照。 需要 Claude Code v2.1.203 或更高版本。
在 task_type 为 "local_agent" 的条目上,subagent_type 指明子代理类型,例如 general-purpose 或自定义子代理的名称。该字段需要 Agent SDK v0.3.293 或更高版本。

SDKThinkingTokensMessage

在 Claude 生成思考块(包括经过编辑隐去的思考块)期间发出。estimated_tokens 是当前块中迄今为止生成的思考 token 的累计估算值,estimated_tokens_delta 是此帧携带的增量。请将这些估算值用于进度显示。 当模型或提供商报告细分时,顶层 Agent 循环的最终计数是结果消息的 usage.output_tokens_details.thinking_tokens,它不包括子代理的 token。 需要 Claude Code v2.1.153 或更高版本。

SDKSessionStateChangedMessage

在 Claude Code 报告会话状态时发出。要接收这些消息,请设置 CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1。Claude Code 可能会多次报告相同的状态,因此请将消息理解为会话的当前状态,而不是状态转换。 state 字段携带以下值之一:
  • running:会话正在工作。
  • idle:Claude Code 正在等待您的下一个提示词。
  • requires_action:会话因等待对其发送给宿主的请求(例如权限提示)的答复而被阻塞。
一个轮次的 idle 消息与其 result 消息可能以任意顺序到达。要更改 idle 是否等待后台工作(例如后台子代理或工作流运行),请参阅 CLAUDE_CODE_BG_TASKS_REPORT_RUNNING。

SDKFilesPersistedEvent

在文件检查点持久化到磁盘时发出。

SDKRateLimitEvent

在会话遇到速率限制时发出。
当 errorCode 为 "credits_required" 时,表示拒绝来自已用尽所含用量的 claude.ai 订阅,在用户购买使用额度之前,会话无法继续。canUserPurchaseCredits 表示已通过身份验证的用户是否可以为该账户购买额度,hasChargeableSavedPaymentMethod 表示是否存有已保存的付款方式。在不属于 credits-required 拒绝的速率限制事件上,这三个字段都不存在。需要 Claude Code v2.1.181 或更高版本。

SDKLocalCommandOutputMessage

Claude Code 不会发出此消息类型。当您将 /context 或 /usage 等命令作为提示词发送时,其输出会以 SDKAssistantMessage 的形式到达。

SDKCommandsChangedMessage

在会话中途可用命令集合发生变化时发出,例如当 Agent 进入子目录时 Claude Code 发现了 skill。commands 数组是完整的更新列表,因此请用此负载替换任何缓存的命令列表。在此消息之后调用 supportedCommands() 会返回相同的更新列表,因为该方法会跟踪最新的推送;这需要 Agent SDK v0.3.216 或更高版本。在更早的 SDK 版本中,supportedCommands() 返回初始化时捕获的快照,永远不会反映会话中途的变化。 当 MCP 服务器的提示词加入或离开列表时(例如服务器在会话开始后才完成连接),Claude Code 也会发出此消息。这需要 Claude Code v2.1.281 或更高版本。

SDKPromptSuggestionMessage

在启用 promptSuggestions 且 Claude Code 为某个轮次生成了建议时,于该轮次之后发出。包含预测的下一个用户提示词。有关不会获得建议的轮次,请参阅 Claude Code 何时跳过建议。

SDKConversationResetMessage

在会话的对话被替换但会话未结束时发出。在 query() 调用中,只有 /clear 及其别名会产生此消息。请在 new_conversation_id 下挂载一个空的会话记录,并丢弃任何缓存的会话标题。
可选字段描述此次重置:
  • trigger:是什么丢弃了对话。请在每条 conversation_reset 消息上重置您的会话记录,包括该字段不存在或携带无法识别的值的消息。
  • user_message_uuid:携带 /clear 的用户消息的 uuid。使用它将重置与该消息匹配。
  • timestamp:重置发生的时间,为 UTC 的 ISO 8601 字符串。请将其用于显示,而不是用于消息排序。
trigger、user_message_uuid 和 timestamp 字段需要 Claude Code v2.1.281 或更高版本。 在 Claude Code v2.1.203 及更高版本中,SDK 发布的类型定义声明了 SDKConversationResetMessage。在 v2.1.203 之前,SDKMessage 引用了该类型却未声明它,因此在禁用 skipLibCheck 时,基于 type === "conversation_reset" 的类型收窄无法通过类型检查。

AbortError

用于中止操作的自定义错误类。
AbortError 是 SDK 类型化 API 中唯一的错误类。其他失败(例如 Claude Code 进程退出或启动失败)会以不带任何可匹配 SDK 类的错误拒绝消息迭代。故障排除按消息列出了这些错误,并给出了每种错误的原因和修复方法。

沙箱配置

SandboxSettings

沙箱行为的配置。使用它以编程方式启用命令沙箱并配置网络限制。
沙箱依赖于平台支持,在 Linux 上还依赖 bubblewrap 和 socat 等工具。当 enabled 为 true 且沙箱无法启动时,query() 会报告一条 subtype: "error_during_execution" 的 result 消息,并在 errors 中给出原因。对于单消息 query() 调用,SDK 会在产出该错误结果后抛出异常,因此请将循环包裹在 try 块中以便继续执行。有关错误约定,请参阅处理结果。如需改为在沙箱外运行,请设置 failIfUnavailable: false。

使用示例

Unix 套接字安全: allowUnixSockets 选项可能会授予对可触及沙箱外部的系统服务的访问权限。例如,允许 /var/run/docker.sock 实际上会通过 Docker API 授予对主机系统的完全访问权限,从而绕过沙箱隔离。请仅允许确实必要的 Unix 套接字,并了解每个套接字的安全影响。

SandboxNetworkConfig

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

SandboxFilesystemConfig

沙箱模式的文件系统相关配置。

非沙箱命令的权限回退

启用 allowUnsandboxedCommands 后,模型可以通过在工具输入中设置 dangerouslyDisableSandbox: true 来请求在沙箱外运行命令。这些请求会回退到现有的权限系统,这意味着您的 canUseTool 处理程序会被调用,从而允许您实现自定义授权逻辑。 而您的 excludedCommands 条目会在无需模型参与的情况下将调用移出沙箱;有关条目何时适用,请参阅 sandbox.excludedCommands。 在下面的示例中,isCommandAuthorized 代表您自行定义的授权检查。
以 dangerouslyDisableSandbox: true 运行的命令拥有完全的系统访问权限。请确保您的 canUseTool 处理程序仔细验证这些请求。如果 permissionMode 设置为 bypassPermissions 且启用了 allowUnsandboxedCommands,模型可以在没有批准提示的情况下自主执行沙箱外的命令,任何模式都不会自动批准的操作除外。这种组合实际上允许模型悄无声息地逃逸沙箱隔离。

另请参阅