跳转到主要内容

安装

SDK 为您的平台捆绑了一个本地 Claude Code 二进制文件,作为可选依赖项,例如 @anthropic-ai/claude-agent-sdk-darwin-arm64。您无需单独安装 Claude Code。如果您的包管理器跳过可选依赖项,SDK 会抛出 Native CLI binary for <platform> not found;改为将 pathToClaudeCodeExecutable 设置为单独安装的 claude 二进制文件。

编译为单个可执行文件

当您使用 bun build --compile 将应用程序编译为单文件可执行文件时,SDK 无法在运行时解析捆绑的 CLI 二进制文件。require.resolve 在编译后的可执行文件的 $bunfs 虚拟文件系统内不起作用,因此 SDK 会抛出 Native CLI binary for <platform> 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 在稳定之前可能会更改。它读取 MDM 源,包括 macOS plist 和 Windows HKLM/HKCU,以与 CLI 启动保持一致,但不执行管理员配置的 policyHelper 子进程。permissions.defaultMode 字段从所有层级(包括项目设置)按原样返回。CLI 在遵守升级权限模式之前应用的信任过滤器不被应用。

参数

resolveSettings() 接受单个选项对象。所有字段都是可选的。

返回类型:ResolvedSettings

resolveSettings() 返回一个对象,描述合并的设置和为每个密钥提供的源。

示例

下面的示例为项目目录解析设置,并打印控制清理周期的源。

类型

Options

query() 函数的配置对象。

处理缓慢或停滞的 API 响应

CLI 子进程读取多个环境变量,这些变量控制 API 超时和停滞检测。通过 env 选项传递它们:
  • API_TIMEOUT_MS:Anthropic 客户端上的每个请求超时,以毫秒为单位。默认 600000。适用于主循环和所有子代理。
  • 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:使用 run_in_background 启动的子代理的停滞监视程序。默认 600000。在每个流事件上重置;在停滞时中止子代理,将任务标记为失败,并将错误与任何部分结果一起呈现给父级。不适用于同步子代理。
  • CLAUDE_ENABLE_STREAM_WATCHDOGCLAUDE_STREAM_IDLE_TIMEOUT_MS:当标头已到达但响应正文停止流式传输时中止请求。监视程序对所有提供商默认启用;设置 CLAUDE_ENABLE_STREAM_WATCHDOG=0 以禁用它。CLAUDE_STREAM_IDLE_TIMEOUT_MS 默认为 300000 并被限制为该最小值。中止的请求通过正常重试路径进行。

Query 对象

query() 函数返回的接口。

方法

applyFlagSettings()

在运行的会话上更改任何设置而无需重新启动查询。当没有专用设置器的设置需要在会话中期更改时使用它,例如在代理读取不受信任的输入后收紧 permissionssetModel()setPermissionMode() 是这两个键的专用设置器;applyFlagSettings() 是接受任何设置键子集的通用形式,在此处传递 model 的行为与 setModel() 相同。 仅某些键在会话中期生效:
  • 在下一个轮次应用modeleffortLevelultracodepermissionshooksskillOverridesfastModeagent。切换 agent 也会在下一个轮次应用该代理的模型覆盖、hooks 和系统提示。
  • 会话中期无效:系统提示选项。这些在启动时解决一次,因此运行的会话保持原始值,即使调用成功。要更改它们,请启动新会话。
effortLevel 接受一个努力级别名称。它也接受 "ultracode",它以 xhigh 努力运行会话并打开ultracodeSettings 类型声明 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() 的返回类型。包含会话初始化数据。
当客户端向已运行的会话发送 initialize 时,控制响应包装器也会携带一个可选的 pending_permission_requests 数组。该字段位于响应包装器本身,而不是上面的 SDKControlInitializeResponse 有效负载中。每个条目都是一个完整的 control_request 消息,具有与会话在运行时为权限请求流式传输的相同 { type: "control_request", request_id, request } 形状。 这些是在客户端连接之前发出的请求,仍在等待回复。SDK 为您读取数组并将每个条目分派到您的 canUseTool 回调,这与 reinitialize() 在传输间隙后触发的相同重新发送。使用重复的请求 ID 幂等地处理,因为条目可以重复回调已在连接断开前收到的请求。

SDKControlInterruptResponse

中断收据:interrupt() 在通告 SDKSystemMessage.capabilities 中的 interrupt_receipt_v1 功能的 CLI 上解决的值。需要 Claude Code v2.1.205 或更高版本。较早的 CLI 使用空成功有效负载回答中断,因此 interrupt() 解决为 undefined
still_queued 列出存活中断的用户消息的 UUID:仍在队列中的消息,加上已为下一个轮次出队但尚未被中止到达的任何批次。除非您首先取消它,否则每个都作为其自己的轮次在中断后运行。使用收据来决定是否重新发送任何内容;重新发送已列出的消息会产生重复的轮次。 使用这些注意事项解释列表:
  • 仅出现已使用 UUID 入队的消息。空数组并不意味着没有其他内容会运行。
  • 仅列出主线程消息。寻址到子代理的消息超出范围。
  • 列表可以包括您的客户端从未发送的 UUID,例如计划任务触发器。忽略您不识别的 UUID,而不是将其视为错误。
收据是在处理中断时拍摄的快照,在干净中断时,它在中断轮次的 SDKResultMessage 之前到达。在该结果之后读取收据而不是检查队列:循环立即启动下一个排队的轮次,因此您在结果后检查的队列已经改变。

AgentDefinition

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

AgentMcpServerSpec

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

SettingSource

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

默认行为

settingSources 被省略或 undefined 时,query() 加载与 Claude Code CLI 相同的文件系统设置:用户、项目和本地。在所有情况下都会加载端点管理的策略;当会话使用组织凭证在符合条件的配置上进行身份验证时,会获取服务器管理的设置。请参阅settingSources 不控制的内容了解无论此选项如何都会读取的输入,以及如何禁用它们。

为什么使用 settingSources

禁用文件系统设置:
显式加载所有文件系统设置:
仅加载特定设置源:
测试和 CI 环境:
仅 SDK 应用程序:
加载 CLAUDE.md 项目说明:

设置优先级

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

PermissionMode

CanUseTool

用于控制工具使用的自定义权限函数类型。 该函数是 SDK 替代交互式权限提示:仅当权限评估流解决为提示时才调用它。已由 allowedTools 条目、设置 allow 规则或权限模式(如 acceptEditsbypassPermissions)批准的工具调用永远不会调用它。要限制每个工具调用,请改用 PreToolUse hook AskUserQuestion、标记为 requiresUserInteraction 的 MCP 工具和您的组织设置为 ask 的 connector 工具即使 allow 规则匹配也会到达该函数。在 dontAsk 模式下这些调用会被拒绝,不调用它。
回调通常通过返回 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''billing_error''rate_limit''overloaded''invalid_request''model_not_found''server_error''max_output_tokens''unknown''model_not_found' 表示所选模型不存在或对您的账户或部署不可用。'overloaded' 表示 API 返回了 529 错误,因为服务器处于容量限制,与 'rate_limit' 相对,后者是针对您的配额的 429 错误。

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 呈现而不是解析该文本。

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;两者之间的差距是流式传输第一条消息所花费的时间。仅在成功分支上显示。
  • 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" 之一。
origin 字段转发触发此结果的用户消息的 SDKMessageOrigin。当后台任务完成且 SDK 注入合成后续轮次时,生成的 SDKResultMessage 携带 origin: { kind: "task-notification" }。检查此字段以区分回答您的提示的结果与为后台任务后续操作发出的结果,以便您可以路由或抑制后者。对于在任何用户轮次之前发出的结果(例如启动错误),该字段不存在。 PreToolUse hook 返回 permissionDecision: "defer" 时,结果具有 stop_reason: "tool_deferred"deferred_tool_use 携带待处理工具的 idnameinput。读取此字段以在您自己的 UI 中显示请求,然后使用相同的 session_id 恢复以继续。有关完整的往返过程,请参阅稍后延迟工具调用

SDKSystemMessage

系统初始化消息。
capabilities 数组命名此 CLI 实现的协议行为,因此您可以进行功能检测而不是比较 claude_code_version 字符串。这是一个开放集合:忽略您不认识的值,并检查您依赖其行为的特定功能。该字段需要 Claude Code v2.1.205 或更高版本,在较早的 CLI 上不存在。

SDKPartialAssistantMessage

流式部分消息(仅当 includePartialMessages 为 true 时)。parent_tool_use_id 字段始终为 null:流事件仅针对主会话发出。对于子代理归属,使用携带 parent_tool_use_id 的完整消息,或启用 forwardSubagentText 以接收子代理文本和思考作为完整消息。

SDKCompactBoundaryMessage

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

SDKInformationalMessage

由循环发出的通用文本横幅。携带非错误状态行、hook 反馈(例如 UserPromptSubmit hook 的阻止原因)和命令输出。将 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 回调单独到达您的应用程序。由 PreToolUse hook 发出的拒绝不会通过此事件报告。 此事件需要 Claude Code v2.1.136 或更高版本。

SDKPermissionDenial

有关被拒绝的工具使用的信息。

SDKMessageOrigin

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

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 对象不同。

NotificationHookInput

UserPromptSubmitHookInput

SessionStartHookInput

SessionEndHookInput

StopHookInput

SubagentStartHookInput

SubagentStopHookInput

PreCompactHookInput

PermissionRequestHookInput

SetupHookInput

TeammateIdleHookInput

TaskCompletedHookInput

ConfigChangeHookInput

WorktreeCreateHookInput

WorktreeRemoveHookInput

MessageDisplayHookInput

HookJSONOutput

Hook 返回值。

AsyncHookJSONOutput

SyncHookJSONOutput

工具输入类型

所有内置 Claude Code 工具的输入架构文档。这些类型从 @anthropic-ai/claude-agent-sdk 导出,可用于类型安全的工具交互。

ToolInputSchemas

所有工具输入类型的联合,从 @anthropic-ai/claude-agent-sdk 导出。

Agent

工具名称: Agent(之前为 Task,仍然接受作为别名)
启动新代理以自主处理复杂的多步骤任务。

AskUserQuestion

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

Bash

工具名称: Bash
在持久 shell 会话中执行 bash 命令,支持可选超时和后台执行。

Monitor

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

TaskOutput

工具名称: TaskOutput
从运行中或已完成的后台任务检索输出。

Edit

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

Read

工具名称: Read
从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。对 PDF 页面范围使用 pages(例如,"1-5")。

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
创建和管理结构化任务列表以跟踪进度。
自 TypeScript Agent SDK 0.3.142 起,TodoWrite 默认被禁用。改用 TaskCreateTaskGetTaskUpdateTaskList。请参阅迁移到 Task 工具以更新您的监视代码,或设置 CLAUDE_CODE_ENABLE_TASKS=0 以恢复为 TodoWrite

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/ 下。namepath 互斥。

工具输出类型

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

ToolOutputSchemas

所有工具输出类型的联合。

Agent

工具名称: Agent(之前为 Task,仍然接受作为别名)
返回来自子代理的结果。在 status 字段上进行区分:"completed" 表示已完成的任务,"async_launched" 表示后台任务,"remote_launched" 表示 Claude Code 分派到远程云会话的任务,其中 sessionUrl 链接到该会话,taskId 标识它。 completedasync_launched 变体上的 resolvedModel 字段命名子代理实际运行的模型,当应用 availableModels 或其他覆盖时,该模型可能与请求的 model 输入不同。此字段需要 Claude Code v2.1.174 或更高版本。 completed 变体上,当子代理在隔离的 git worktree 中运行时,worktreePath 被设置,worktreeBranch 在 Claude Code 创建该 worktree 时命名其分支。usage.service_tier 携带 API 为子代理的请求报告的服务层字符串。 在 v2.1.207 之前,发布的类型更窄。它省略了 worktreePathworktreeBranchcitationstoolStats.frameCountinference_geospeediterations 使用字段,并将 service_tier 类型化为 "standard" | "priority" | "batch"。类型标记为可选的字段可能在早期版本记录的结果中不存在。

AskUserQuestion

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

Bash

工具名称: Bash
返回命令输出,stdout/stderr 分开。后台命令包括 backgroundTaskId

Monitor

工具名称: Monitor
返回运行监视器的后台任务 ID。使用此 ID 与 TaskStop 一起提前取消监视。

Edit

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

Read

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

Write

工具名称: Write
返回写入结果,包含结构化差异信息。

Glob

工具名称: Glob
返回与 glob 模式匹配的文件路径,按修改时间排序。

Grep

工具名称: Grep
返回搜索结果。形状因 mode 而异:文件列表、带匹配的内容或匹配计数。

TaskStop

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

NotebookEdit

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

WebFetch

工具名称: WebFetch
返回获取的内容,包含 HTTP 状态和元数据。

WebSearch

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

Workflow

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

TodoWrite

工具名称: TodoWrite
返回之前和更新的任务列表。
自 TypeScript Agent SDK 0.3.142 起,TodoWrite 默认被禁用。改用 TaskCreateTaskGetTaskUpdateTaskList。请参阅迁移到 Task 工具更新您的监视代码,或设置 CLAUDE_CODE_ENABLE_TASKS=0 以恢复为 TodoWrite

TaskCreate

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

TaskUpdate

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

TaskGet

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

TaskList

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

ExitPlanMode

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

ListMcpResources

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

ReadMcpResource

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

EnterWorktree

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

权限类型

PermissionUpdate

用于更新权限的操作。

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

其他类型

ApiKeySource

SdkBeta

可通过 betas 选项启用的可用测试功能。请参阅 Beta 标头了解更多信息。
context-1m-2025-08-07 beta 自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此值无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 Claude Sonnet 5、Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8,它们以标准定价包括 1M 上下文,无需 beta 标头。

SlashCommand

有关可用 slash command 的信息。

ModelInfo

有关可用模型的信息。

AgentInfo

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

McpServerStatus

连接的 MCP 服务器的状态。

McpServerStatusConfig

mcpServerStatus() 报告的 MCP 服务器的配置。这是所有 MCP 服务器传输类型的联合。
请参阅 McpServerConfig了解每种传输类型的详情。

AccountInfo

经过身份验证的用户的帐户信息。

ModelUsage

结果消息中返回的每个模型使用统计。costUSD 值是客户端估计。请参阅跟踪成本和使用情况了解计费注意事项。

ConfigScope

NonNullableUsage

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

Usage

令牌使用统计。这是来自 @anthropic-ai/sdkBetaUsage 类型。
BetaServerToolUsageBetaIterationsUsage@anthropic-ai/sdk 中定义。

CallToolResult

MCP 工具结果类型(来自 @modelcontextprotocol/sdk/types.js)。structuredContent 是一个 JSON 对象,可以与 content 一起返回,包括图像块。请参阅返回结构化数据

ThinkingConfig

控制 Claude 的思考/推理行为。优先于已弃用的 maxThinkingTokens
可选的 display 字段控制思考文本是否以 "summarized""omitted" 形式返回。在 Claude Opus 4.7 及更高版本上,API 默认值为 "omitted",因此设置 "summarized" 以在 thinking 块中接收思考内容。

SpawnedProcess

自定义进程生成的接口(与 spawnClaudeCodeProcess 选项一起使用)。ChildProcess 已满足此接口。

SpawnOptions

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

McpSetServersResult

setMcpServers() 操作的结果。

RewindFilesResult

rewindFiles() 操作的结果。

SDKStatusMessage

状态更新消息(例如,压缩)。

SDKTaskNotificationMessage

后台任务完成、失败或停止时的通知。后台任务包括 run_in_background Bash 命令、Monitor 监视和后台子代理。

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

在工具执行时定期发出,以指示进度。

SDKAuthStatusMessage

在身份验证流程中发出。

SDKTaskStartedMessage

当后台任务开始时发出。task_type 字段对于后台 Bash 命令和 Monitor 监视为 "local_bash",对于子代理为 "local_agent",或 "remote_agent"

SDKTaskProgressMessage

在子代理或后台任务运行时定期发出。仅当启用 agentProgressSummaries 时,summary 字段才会被填充。

SDKTaskUpdatedMessage

当后台任务的状态发生变化时发出,例如当它从 running 转换为 completed 时。将 patch 合并到按 task_id 键入的本地任务映射中。end_time 字段是 Unix 纪元时间戳(以毫秒为单位),可与 Date.now() 比较。

SDKBackgroundTasksChangedMessage

每当实时后台任务集发生变化时发出:任务启动、完成、被杀死,或前台代理被后台化。tasks 数组是完整的实时集。用每个有效负载替换任何缓存的集,而不是配对 task_startedtask_notification 事件,以便下一个成员资格变化纠正您错过的任何事件。 相对于这些每个任务事件的顺序是未指定的,因此不要关联这两个流。 启动时不发出任何内容。每当会话的 CLI 进程启动或重新启动时重置为空集,并让下一个成员资格变化重新填充它。 需要 Claude Code v2.1.203 或更高版本。

SDKThinkingTokensMessage

在 Claude 生成思考块(包括编辑过的块)时发出,携带迄今为止生成的思考令牌的运行估计。estimated_tokens 是当前思考块的运行总计,estimated_tokens_delta 是此帧携带的增量。将其用于进度显示。顶级代理循环的最终计数是结果消息的 usage.output_tokens,它不包括子代理令牌;使用 modelUsage 进行整树会计。 需要 Claude Code v2.1.153 或更高版本。

SDKFilesPersistedEvent

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

SDKRateLimitEvent

当会话遇到速率限制时发出。
errorCode"credits_required" 时,拒绝来自 claude.ai 订阅,其包含的使用量已耗尽,会话在用户购买使用额度之前无法继续。canUserPurchaseCredits 指示经过身份验证的用户是否可以为帐户购买额度,hasChargeableSavedPaymentMethod 指示是否有保存的付款方式。所有三个字段在非信用额度必需拒绝的速率限制事件中不存在。需要 Claude Code v2.1.181 或更高版本。

SDKLocalCommandOutputMessage

来自本地 slash command 的输出(例如,/voice/usage)。在记录中显示为助手样式的文本。

SDKCommandsChangedMessage

当可用命令集在会话中期发生变化时发出,例如当代理进入子目录时发现技能。commands 数组是完整的更新列表,因此用此有效负载替换任何缓存的命令列表。再次调用 supportedCommands() 不等同:该方法返回在初始化时捕获的快照,不反映会话中期的变化。

SDKPromptSuggestionMessage

当启用 promptSuggestions 时在每个轮次后发出。包含预测的下一个用户提示。

SDKConversationResetMessage

当会话的对话被替换而不结束会话时发出,例如在 /clear 之后、在计划模式退出时或当新对话启动时。在 new_conversation_id 下挂载空记录,并丢弃任何缓存的会话标题。
SDK 的已发布类型在 Claude Code v2.1.203 及更高版本中声明 SDKConversationResetMessage。在 v2.1.203 之前,SDKMessage 引用该类型而不声明它,因此当 skipLibCheck 被禁用时,在 type === "conversation_reset" 上缩小范围失败类型检查。

AbortError

用于中止操作的自定义错误类。

沙箱配置

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 代表您定义的授权检查。
excludedCommands vs allowUnsandboxedCommands
  • excludedCommands:始终自动绕过沙箱的命令的静态列表(例如,['docker'])。模型对此无法控制。
  • allowUnsandboxedCommands:让模型在运行时通过在工具输入中设置 dangerouslyDisableSandbox: true 来决定是否请求沙箱外执行。
此模式使您能够:
  • 审计模型请求: 记录模型何时请求沙箱外执行
  • 实现允许列表: 仅允许特定命令在沙箱外运行
  • 添加批准工作流: 需要对特权操作进行明确授权
使用 dangerouslyDisableSandbox: true 运行的命令具有完整的系统访问权限。确保您的 canUseTool 处理程序仔细验证这些请求。如果 permissionMode 设置为 bypassPermissionsallowUnsandboxedCommands 启用,模型可以自主执行沙箱外的命令,无需任何批准提示(显式的 ask 规则仍会强制执行一个)。此组合实际上允许模型以静默方式逃离沙箱隔离。

另请参阅