跳转到主要内容

安装

npm install @anthropic-ai/claude-agent-sdk
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 构建:
import binPath from "@anthropic-ai/claude-agent-sdk-darwin-arm64/claude" with { type: "file" };
import { extractFromBunfs } from "@anthropic-ai/claude-agent-sdk/extract";
import { query } from "@anthropic-ai/claude-agent-sdk";

const cliPath = extractFromBunfs(binPath);

for await (const message of query({
  prompt: "Hello",
  options: { pathToClaudeCodeExecutable: cliPath },
})) {
  console.log(message);
}
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 交互的主要函数。创建一个异步生成器,在消息到达时流式传输消息。
function query({
  prompt,
  options
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query;

参数

参数类型描述
promptstring | AsyncIterable<SDKUserMessage>输入提示,可以是字符串或异步可迭代对象(用于流式模式)
optionsOptions可选配置对象(请参阅下面的 Options 类型)

返回值

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

startup()

通过生成 CLI 子进程并在提示可用之前完成初始化握手来预热 CLI 子进程。返回的 WarmQuery 句柄稍后接受提示并将其写入已准备好的进程,因此第一个 query() 调用解析时无需支付子进程生成和初始化成本。
function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;

参数

参数类型描述
optionsOptions可选配置对象。与 query()options 参数相同
initializeTimeoutMsnumber等待子进程初始化的最长时间(毫秒)。默认为 60000。如果初始化未在规定时间内完成,promise 将以超时错误拒绝

返回值

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

示例

早期调用 startup(),例如在应用程序启动时,然后在提示准备好后在返回的句柄上调用 .query()。这会将子进程生成和初始化移出关键路径。
import { startup } from "@anthropic-ai/claude-agent-sdk";

// 提前支付启动成本
const warm = await startup({ options: { maxTurns: 3 } });

// 稍后,当提示准备好时,这是立即的
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}

tool()

为与 SDK MCP 服务器一起使用创建类型安全的 MCP 工具定义。
function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,
  extras?: { annotations?: ToolAnnotations }
): SdkMcpToolDefinition<Schema>;

参数

参数类型描述
namestring工具的名称
descriptionstring工具功能的描述
inputSchemaSchema extends AnyZodRawShape定义工具输入参数的 Zod 架构(支持 Zod 3 和 Zod 4)
handler(args, extra) => Promise<CallToolResult>执行工具逻辑的异步函数
extras{ annotations?: ToolAnnotations }可选的 MCP 工具注释,为客户端提供行为提示

ToolAnnotations

@modelcontextprotocol/sdk/types.js 重新导出。所有字段都是可选提示;客户端不应依赖它们做出安全决策。
字段类型默认值描述
titlestringundefined工具的人类可读标题
readOnlyHintbooleanfalse如果为 true,工具不会修改其环境
destructiveHintbooleantrue如果为 true,工具可能执行破坏性更新(仅在 readOnlyHintfalse 时有意义)
idempotentHintbooleanfalse如果为 true,使用相同参数的重复调用没有额外效果(仅在 readOnlyHintfalse 时有意义)
openWorldHintbooleantrue如果为 true,工具与外部实体交互(例如,网络搜索)。如果为 false,工具的域是封闭的(例如,内存工具)
import { tool } from "@anthropic-ai/claude-agent-sdk";
import { z } from "zod";

const searchTool = tool(
  "search",
  "Search the web",
  { query: z.string() },
  async ({ query }) => {
    return { content: [{ type: "text", text: `Results for: ${query}` }] };
  },
  { annotations: { readOnlyHint: true, openWorldHint: true } }
);

createSdkMcpServer()

创建在与应用程序相同的进程中运行的 MCP 服务器实例。
function createSdkMcpServer(options: {
  name: string;
  version?: string;
  tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance;

参数

参数类型描述
options.namestringMCP 服务器的名称
options.versionstring可选版本字符串
options.toolsArray<SdkMcpToolDefinition>使用 tool() 创建的工具定义数组

listSessions()

发现并列出具有轻量级元数据的过去会话。按项目目录筛选或列出所有项目中的会话。
function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

参数

参数类型默认值描述
options.dirstringundefined列出会话的目录。省略时,返回所有项目中的会话
options.limitnumberundefined要返回的最大会话数
options.includeWorktreesbooleantruedir 在 git 存储库内时,包括来自所有 worktree 路径的会话

返回类型:SDKSessionInfo

属性类型描述
sessionIdstring唯一会话标识符 (UUID)
summarystring显示标题:自定义标题、自动生成的摘要或第一个提示
lastModifiednumber上次修改时间(自纪元以来的毫秒数)
fileSizenumber | undefined会话文件大小(字节)。仅对本地 JSONL 存储进行填充
customTitlestring | undefined用户设置的会话标题(通过 /rename
firstPromptstring | undefined会话中的第一个有意义的用户提示
gitBranchstring | undefined会话结束时的 git 分支
cwdstring | undefined会话的工作目录
tagstring | undefined用户设置的会话标签(请参阅 tagSession()
createdAtnumber | undefined创建时间(自纪元以来的毫秒数),来自第一个条目的时间戳

示例

打印项目的 10 个最近会话。结果按 lastModified 降序排序,因此第一项是最新的。省略 dir 以搜索所有项目。
import { listSessions } from "@anthropic-ai/claude-agent-sdk";

const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

for (const session of sessions) {
  console.log(`${session.summary} (${session.sessionId})`);
}

getSessionMessages()

从过去的会话记录中读取用户和助手消息。
function getSessionMessages(
  sessionId: string,
  options?: GetSessionMessagesOptions
): Promise<SessionMessage[]>;

参数

参数类型默认值描述
sessionIdstring必需要读取的会话 UUID(请参阅 listSessions()
options.dirstringundefined查找会话的项目目录。省略时,搜索所有项目
options.limitnumberundefined要返回的最大消息数
options.offsetnumberundefined从开始跳过的消息数

返回类型:SessionMessage

属性类型描述
type"user" | "assistant"消息角色
uuidstring唯一消息标识符
session_idstring此消息所属的会话
messageunknown来自记录的原始消息有效负载
parent_tool_use_idstring | null对于子代理消息,生成 Agent 工具调用的 tool_use_id。对于主会话消息和较旧的会话为 null

示例

import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

if (latest) {
  const messages = await getSessionMessages(latest.sessionId, {
    dir: "/path/to/project",
    limit: 20
  });

  for (const msg of messages) {
    console.log(`[${msg.type}] ${msg.uuid}`);
  }
}

getSessionInfo()

按 ID 读取单个会话的元数据,无需扫描完整项目目录。
function getSessionInfo(
  sessionId: string,
  options?: GetSessionInfoOptions
): Promise<SDKSessionInfo | undefined>;

参数

参数类型默认值描述
sessionIdstring必需要查找的会话 UUID
options.dirstringundefined项目目录路径。省略时,搜索所有项目目录
返回 SDKSessionInfo,如果找不到会话,则返回 undefined

renameSession()

通过附加自定义标题条目来重命名会话。重复调用是安全的;最新的标题获胜。
function renameSession(
  sessionId: string,
  title: string,
  options?: SessionMutationOptions
): Promise<void>;

参数

参数类型默认值描述
sessionIdstring必需要重命名的会话 UUID
titlestring必需新标题。修剪空格后必须非空
options.dirstringundefined项目目录路径。省略时,搜索所有项目目录

tagSession()

标记会话。传递 null 以清除标签。重复调用是安全的;最新的标签获胜。
function tagSession(
  sessionId: string,
  tag: string | null,
  options?: SessionMutationOptions
): Promise<void>;

参数

参数类型默认值描述
sessionIdstring必需要标记的会话 UUID
tagstring | null必需标签字符串,或 null 以清除
options.dirstringundefined项目目录路径。省略时,搜索所有项目目录

resolveSettings()

使用与 CLI 相同的合并引擎为给定目录解析有效的 Claude Code 设置,无需生成 Claude CLI。在调用 query() 之前使用它来检查 query() 调用将看到的配置。
此函数处于 alpha 阶段,其 API 在稳定之前可能会更改。它读取 MDM 源,包括 macOS plist 和 Windows HKLM/HKCU,以与 CLI 启动保持一致,但不执行管理员配置的 policyHelper 子进程。permissions.defaultMode 字段从所有层级(包括项目设置)按原样返回。CLI 在遵守升级权限模式之前应用的信任过滤器不被应用。
function resolveSettings(
  options?: ResolveSettingsOptions
): Promise<ResolvedSettings>;

参数

resolveSettings() 接受单个选项对象。所有字段都是可选的。
参数类型默认值描述
options.cwdstringprocess.cwd()用于解析项目和本地设置的相对目录
options.settingSourcesSettingSource[]所有源要加载的文件系统源。传递 [] 以跳过用户、项目和本地设置。托管策略设置在所有情况下都会加载
options.managedSettingsSettingsundefined由嵌入主机提供的限制性策略层设置。当存在管理员部署的托管层时被删除;当 parentSettingsBehavior"merge" 时在该层下合并。非限制性密钥(如 model)会被静默删除,以便此选项可以加强托管策略但不能放松它
options.serverManagedSettingsSettingsundefined来自 /api/claude_code/settings 的服务器托管设置有效负载。非限制性密钥不经过滤地通过

返回类型:ResolvedSettings

resolveSettings() 返回一个对象,描述合并的设置和为每个密钥提供的源。
属性类型描述
effectiveSettings在按优先级顺序应用所有启用的源后合并的设置
provenancePartial<Record<keyof Settings, ProvenanceEntry>>对于 effective 中的每个顶级密钥,哪个源提供了该值
sourcesArray<{ source, settings, path?, policyOrigin? }>每个源的原始设置,按从最低到最高优先级排序

示例

下面的示例为项目目录解析设置,并打印控制清理周期的源。
import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";

const { effective, provenance } = await resolveSettings({
  cwd: "/path/to/project",
  settingSources: ["user", "project", "local"],
});

console.log(`Cleanup period: ${effective.cleanupPeriodDays} days`);
console.log(`Set by: ${provenance.cleanupPeriodDays?.source}`);

类型

Options

query() 函数的配置对象。
属性类型默认值描述
abortControllerAbortControllernew AbortController()用于取消操作的控制器
additionalDirectoriesstring[][]Claude 可以访问的其他目录
agentstringundefined主线程的代理名称。代理必须在 agents 选项或设置中定义
agentsRecord<string, [AgentDefinition](#agentdefinition)>undefined以编程方式定义子代理
agentProgressSummariesbooleanfalse当为 true 时,为子代理生成单行进度摘要,并通过 summary 字段在 task_progress 事件上转发它们。适用于前台和后台子代理
allowDangerouslySkipPermissionsbooleanfalse启用绕过权限。使用 permissionMode: 'bypassPermissions' 时需要
allowedToolsstring[][]无需提示即可自动批准的工具。这不会将 Claude 限制为仅这些工具;未列出的工具会通过 permissionModecanUseTool 进行处理。使用 disallowedTools 阻止工具。请参阅权限
betasSdkBeta[][]启用测试功能
canUseToolCanUseToolundefined工具使用的自定义权限函数
continuebooleanfalse继续最近的对话
cwdstringprocess.cwd()当前工作目录
debugbooleanfalse为 Claude Code 进程启用调试模式
debugFilestringundefined将调试日志写入特定文件路径。隐式启用调试模式
disallowedToolsstring[][]要拒绝的工具。裸名称如 "Bash" 会从 Claude 的上下文中移除该工具。作用域规则如 "Bash(rm *)" 会保留该工具可用,并在每个权限模式(包括 bypassPermissions)中拒绝匹配的调用。请参阅权限
effort'low' | 'medium' | 'high' | 'xhigh' | 'max''high'控制 Claude 在其响应中投入的努力程度。与自适应思考一起工作以指导思考深度
enableFileCheckpointingbooleanfalse启用文件更改跟踪以进行回滚。请参阅文件 checkpointing
envRecord<string, string | undefined>process.env环境变量。设置此选项时,这会替换子进程环境而不是与 process.env 合并,因此请传递 { ...process.env, YOUR_VAR: 'value' } 以保留继承的变量如 PATH。请参阅处理缓慢或停滞的 API 响应了解此模式的示例,以及环境变量了解底层 CLI 读取的变量。设置 CLAUDE_AGENT_SDK_CLIENT_APP 以在 User-Agent 标头中标识您的应用
executable'bun' | 'deno' | 'node'自动检测要使用的 JavaScript 运行时
executableArgsstring[][]传递给可执行文件的参数
extraArgsRecord<string, string | null>{}其他参数
fallbackModelstringundefined主模型失败时使用的模型
forkSessionbooleanfalse使用 resume 恢复时,分叉到新会话 ID 而不是继续原始会话
forwardSubagentTextbooleanfalse转发子代理文本和思考块作为助手和用户消息,并设置 parent_tool_use_id,以便消费者可以呈现嵌套记录。默认情况下,仅从子代理发出 tool_usetool_result
hooksPartial<Record<HookEvent, HookCallbackMatcher[]>>{}事件的 Hook 回调
includeHookEventsbooleanfalse在消息流中包括 hook 生命周期事件,作为 SDKHookStartedMessageSDKHookProgressMessageSDKHookResponseMessage
includePartialMessagesbooleanfalse包括部分消息事件
loadTimeoutMsnumber60000Alpha. 每个 sessionStore.load()sessionStore.listSubkeys() 调用在恢复物化期间的超时时间(以毫秒为单位)。如果适配器未在此窗口内解决,查询将失败而不是挂起。未设置 sessionStore 时忽略
managedSettingsSettingsundefined由生成的父进程提供的策略层设置。当机器上已存在 IT 控制的托管设置层时删除,除非该管理员选择使用 parentSettingsBehavior: 'merge'。无论如何都会过滤为仅限制性键
maxBudgetUsdnumberundefined当客户端成本估计达到此 USD 值时停止查询。与 total_cost_usd 的相同估计进行比较;请参阅跟踪成本和使用情况了解准确性注意事项
maxThinkingTokensnumberundefined已弃用: 改用 thinking。思考过程的最大令牌数
maxTurnsnumberundefined最大代理轮次(工具使用往返)
mcpServersRecord<string, [McpServerConfig](#mcpserverconfig)>{}MCP 服务器配置
modelstringCLI 的默认值要使用的 Claude 模型
onElicitation(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>undefined用于处理 MCP 引出请求的回调。当 MCP 服务器请求用户输入且没有 hook 首先处理它时调用。未提供时,未处理的引出请求会自动被拒绝
outputFormat{ type: 'json_schema', schema: JSONSchema }undefined为代理结果定义输出格式。请参阅结构化输出了解详情
outputStylestringundefined不是 Options 字段。改为在内联 settings 对象或设置文件中设置 outputStyle。请参阅激活输出样式
pathToClaudeCodeExecutablestring从捆绑的本地二进制文件自动解析Claude Code 可执行文件的路径。仅在安装期间跳过可选依赖项或您的平台不在支持的集合中时需要
permissionModePermissionMode'default'会话的权限模式
permissionPromptToolNamestringundefined权限提示的 MCP 工具名称
persistSessionbooleantrue当为 false 时,禁用会话持久化到磁盘。会话之后无法恢复
planModeInstructionsstringundefinedPlan Mode 的自定义工作流说明。当 permissionMode'plan' 时,此字符串替换默认 Plan Mode 工作流正文。CLI 仍然使用只读强制前导和 ExitPlanMode 协议页脚包装它
pluginsSdkPluginConfig[][]从本地路径加载自定义 plugins。请参阅Plugins了解详情
promptSuggestionsbooleanfalse启用提示建议。在每个轮次后发出 prompt_suggestion 消息,包含预测的下一个用户提示
resumestringundefined要恢复的会话 ID
resumeSessionAtstringundefined在特定消息 UUID 处恢复会话
sandboxSandboxSettingsundefined以编程方式配置 sandbox 行为。请参阅Sandbox 设置了解详情
sessionIdstring自动生成为会话使用特定的 UUID 而不是自动生成一个
sessionStoreSessionStoreundefined将会话记录镜像到外部后端,以便任何主机都可以恢复它们。请参阅将会话持久化到外部存储
sessionStoreFlush'batched' | 'eager''batched'Alpha. sessionStore 的刷新模式。未设置 sessionStore 时忽略
settingsstring | Settingsundefined内联设置对象或设置文件的路径。填充优先级顺序中的标志设置层。使用 applyFlagSettings() 在运行时更改
settingSourcesSettingSource[]CLI 默认值(所有源)控制加载哪些文件系统设置。传递 [] 以禁用用户、项目和本地设置。无论如何都会加载托管策略设置。请参阅使用 Claude Code 功能
skillsstring[] | 'all'undefined会话可用的 skills。传递 'all' 以启用每个发现的 skill,或传递 skill 名称列表。设置后,SDK 会自动将 Skill 工具添加到 allowedTools。如果您也传递 tools,请在该列表中包含 'Skill'。请参阅Skills
spawnClaudeCodeProcess(options: SpawnOptions) => SpawnedProcessundefined用于生成 Claude Code 进程的自定义函数。用于在 VM、容器或远程环境中运行 Claude Code
stderr(data: string) => voidundefinedstderr 输出的回调
strictMcpConfigbooleanfalse仅使用在 mcpServers 中传递的服务器,并忽略项目 .mcp.json、用户设置、plugin 提供的 MCP 服务器和claude.ai connectors
systemPromptstring | { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }undefined(最小提示)系统提示配置。传递字符串以获取自定义提示,或 { type: 'preset', preset: 'claude_code' } 以使用 Claude Code 的系统提示。使用预设对象形式时,添加 append 以使用其他说明扩展它,并设置 excludeDynamicSections: true 以将每个会话上下文移到第一条用户消息中,以便更好地跨机器重用提示缓存
taskBudget{ total: number }undefinedAlpha. API 端任务预算(以令牌为单位)。设置后,模型会被告知其剩余令牌预算,以便它可以调整工具使用速度并在达到限制前完成
thinkingThinkingConfig支持的模型为 { type: 'adaptive' }控制 Claude 的思考/推理行为。请参阅 ThinkingConfig 了解选项
titlestringundefined会话的显示标题。通过 resumecontinue 恢复时,恢复的会话的持久化标题优先;使用 renameSession() 重新标题现有会话
toolAliasesRecord<string, string>undefined将内置工具名称映射到 MCP 工具名称,以便 Claude 调用您的 MCP 实现而不是内置工具。例如,{ Bash: 'mcp__workspace__bash' }
toolConfigToolConfigundefined内置工具行为的配置。请参阅 ToolConfig 了解详情
toolsstring[] | { type: 'preset'; preset: 'claude_code' }undefined工具配置。传递工具名称数组或使用预设获取 Claude Code 的默认工具

处理缓慢或停滞的 API 响应

CLI 子进程读取多个环境变量,这些变量控制 API 超时和停滞检测。通过 env 选项传递它们:
const result = query({
  prompt: "Analyze this code",
  options: {
    env: {
      ...process.env,
      API_TIMEOUT_MS: "120000",
      CLAUDE_CODE_MAX_RETRIES: "2",
      CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: "120000",
    },
  },
});
  • API_TIMEOUT_MS:Anthropic 客户端上的每个请求超时,以毫秒为单位。默认 600000。适用于主循环和所有子代理。
  • CLAUDE_CODE_MAX_RETRIES:最大 API 重试次数。默认 10。每次重试都有自己的 API_TIMEOUT_MS 窗口,因此最坏情况下的实际时间大约是 API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) 加上退避。
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS:使用 run_in_background 启动的子代理的停滞监视程序。默认 600000。在每个流事件上重置;在停滞时中止子代理,将任务标记为失败,并将错误与任何部分结果一起呈现给父级。不适用于同步子代理。
  • CLAUDE_ENABLE_STREAM_WATCHDOG=1CLAUDE_STREAM_IDLE_TIMEOUT_MS:当标头已到达但响应正文停止流式传输时中止请求。默认关闭。CLAUDE_STREAM_IDLE_TIMEOUT_MS 默认为 300000 并被限制为该最小值。中止的请求通过正常重试路径进行。

Query 对象

query() 函数返回的接口。
interface Query extends AsyncGenerator<SDKMessage, void> {
  interrupt(): Promise<void>;
  rewindFiles(
    userMessageId: string,
    options?: { dryRun?: boolean }
  ): Promise<RewindFilesResult>;
  setPermissionMode(mode: PermissionMode): Promise<void>;
  setModel(model?: string): Promise<void>;
  setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
  applyFlagSettings(settings: { [K in keyof Settings]?: Settings[K] | null }): Promise<void>;
  initializationResult(): Promise<SDKControlInitializeResponse>;
  supportedCommands(): Promise<SlashCommand[]>;
  supportedModels(): Promise<ModelInfo[]>;
  supportedAgents(): Promise<AgentInfo[]>;
  mcpServerStatus(): Promise<McpServerStatus[]>;
  accountInfo(): Promise<AccountInfo>;
  reconnectMcpServer(serverName: string): Promise<void>;
  toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;
  setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;
  streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;
  stopTask(taskId: string): Promise<void>;
  close(): void;
}

方法

方法描述
interrupt()中断查询(仅在流式输入模式下可用)
rewindFiles(userMessageId, options?)将文件恢复到指定用户消息时的状态。传递 { dryRun: true } 以预览更改。需要 enableFileCheckpointing: true。请参阅文件 checkpointing
setPermissionMode()更改权限模式(仅在流式输入模式下可用)
setModel()更改模型(仅在流式输入模式下可用)
setMaxThinkingTokens()已弃用: 改用 thinking 选项。更改最大思考令牌数
applyFlagSettings(settings)在运行时将设置合并到会话的标志设置层中(仅在流式输入模式下可用)。请参阅 applyFlagSettings()
initializationResult()返回完整的初始化结果,包括支持的命令、模型、帐户信息和输出样式配置
supportedCommands()返回可用的 slash commands
supportedModels()返回具有显示信息的可用模型
supportedAgents()返回可用的子代理作为 AgentInfo[]
mcpServerStatus()返回连接的 MCP 服务器的状态
accountInfo()返回帐户信息
reconnectMcpServer(serverName)按名称重新连接 MCP 服务器
toggleMcpServer(serverName, enabled)按名称启用或禁用 MCP 服务器
setMcpServers(servers)动态替换此会话的 MCP 服务器集。返回有关添加、删除的服务器和任何错误的信息
streamInput(stream)将输入消息流式传输到查询以进行多轮对话
stopTask(taskId)按 ID 停止运行的后台任务
close()关闭查询并终止底层进程。强制结束查询并清理所有资源

applyFlagSettings()

在运行的会话上更改任何设置而无需重新启动查询。当没有专用设置器的设置需要在会话中期更改时使用它,例如在代理读取不受信任的输入后收紧 permissionssetModel()setPermissionMode() 是这两个键的专用设置器;applyFlagSettings() 是接受任何设置键子集的通用形式,在此处传递 model 的行为与 setModel() 相同。 仅某些键在会话中期生效:
  • 在下一个轮次应用modeleffortLevelultracodepermissionshooksskillOverridesfastModeawaySummaryEnabledagent。切换 agent 也会在下一个轮次应用该代理的模型覆盖、hooks 和系统提示。
  • 会话中期无效:系统提示选项。这些在启动时解决一次,因此运行的会话保持原始值,即使调用成功。要更改它们,请启动新会话。
这些值被写入标志设置层,这是内联 query()settings 选项在启动时填充的同一层。标志设置位于设置优先级顺序的顶部附近:它们覆盖用户、项目和本地设置,只有托管策略设置可以覆盖它们。这与优先级部分称为编程选项的层相同。 连续调用浅合并顶级键。第二次调用 { permissions: {...} } 会替换先前调用中的整个 permissions 对象,而不是深度合并到其中。要从标志层清除键并回退到较低优先级源,请为该键传递 null。传递 undefined 无效,因为 JSON 序列化会将其删除。 仅在流式输入模式下可用,与 setModel()setPermissionMode() 的约束相同。 下面的示例在会话中期切换活动模型,然后清除覆盖,以便模型回退到用户或项目设置指定的任何内容。
const q = query({ prompt: messageStream });

// 覆盖会话其余部分的模型
await q.applyFlagSettings({ model: "claude-opus-4-6" });

// 稍后:清除覆盖并回退到较低优先级设置
await q.applyFlagSettings({ model: null });
applyFlagSettings() 仅适用于 TypeScript。Python SDK 不公开等效方法。

WarmQuery

startup() 返回的句柄。子进程已生成并初始化,因此在此句柄上调用 query() 会直接将提示写入准备好的进程,无需启动延迟。
interface WarmQuery extends AsyncDisposable {
  query(prompt: string | AsyncIterable<SDKUserMessage>): Query;
  close(): void;
}

方法

方法描述
query(prompt)向预热的子进程发送提示并返回 Query。每个 WarmQuery 只能调用一次
close()关闭子进程而不发送提示。使用此方法丢弃不再需要的预热查询
WarmQuery 实现 AsyncDisposable,因此可以与 await using 一起使用以进行自动清理。

SDKControlInitializeResponse

initializationResult() 的返回类型。包含会话初始化数据。
type SDKControlInitializeResponse = {
  commands: SlashCommand[];
  agents: AgentInfo[];
  output_style: string;
  available_output_styles: string[];
  models: ModelInfo[];
  account: AccountInfo;
  fast_mode_state?: "off" | "cooldown" | "on";
};
当客户端向已运行的会话发送 initialize 时,控制响应包装器也会携带一个可选的 pending_permission_requests 数组。该字段位于响应包装器本身,而不是上面的 SDKControlInitializeResponse 有效负载中。每个条目都是一个完整的 control_request 消息,具有与会话在运行时为权限请求流式传输的相同 { type: "control_request", request_id, request } 形状。 这些是在客户端连接之前发出的请求,仍在等待回复,因此读取此数组以立即在界面中显示进行中的权限提示;它们不会被重新发送。

AgentDefinition

以编程方式定义的子代理的配置。
type AgentDefinition = {
  description: string;
  tools?: string[];
  disallowedTools?: string[];
  prompt: string;
  model?: string;
  mcpServers?: AgentMcpServerSpec[];
  skills?: string[];
  initialPrompt?: string;
  maxTurns?: number;
  background?: boolean;
  memory?: "user" | "project" | "local";
  effort?: "low" | "medium" | "high" | "xhigh" | "max" | number;
  permissionMode?: PermissionMode;
  criticalSystemReminder_EXPERIMENTAL?: string;
};
字段必需描述
description何时使用此代理的自然语言描述
tools允许的工具名称数组。如果省略,继承父级的所有工具。要将 Skills 预加载到代理的上下文中,请使用 skills 字段而不是在此处列出 'Skill'
disallowedTools要为此代理明确禁止的工具名称数组
prompt代理的系统提示
model此代理的模型覆盖。接受别名,如 'sonnet''opus''haiku''inherit',或完整的模型 ID。如果省略或 'inherit',使用主模型
mcpServers此代理的 MCP 服务器规范
skills要预加载到代理上下文中的 skill 名称数组
initialPrompt当此代理作为主线程代理运行时,自动提交为第一个用户轮次
maxTurns停止前的最大代理轮次数(API 往返)
background调用时将此代理作为非阻塞后台任务运行
memory此代理的内存源:'user''project''local'
effort此代理的推理努力级别。接受命名级别或整数
permissionMode此代理内工具执行的权限模式。请参阅 PermissionMode
criticalSystemReminder_EXPERIMENTAL实验性:添加到系统提示的关键提醒

AgentMcpServerSpec

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

SettingSource

控制 SDK 从哪些基于文件系统的配置源加载设置。
type SettingSource = "user" | "project" | "local";
描述位置
'user'全局用户设置~/.claude/settings.json
'project'共享项目设置(版本控制).claude/settings.json
'local'本地项目设置(gitignored).claude/settings.local.json

默认行为

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

为什么使用 settingSources

禁用文件系统设置:
// 不从磁盘加载用户、项目或本地设置
const result = query({
  prompt: "Analyze this code",
  options: { settingSources: [] }
});
显式加载所有文件系统设置:
const result = query({
  prompt: "Analyze this code",
  options: {
    settingSources: ["user", "project", "local"] // 加载所有设置
  }
});
仅加载特定设置源:
// 仅加载项目设置,忽略用户和本地
const result = query({
  prompt: "Run CI checks",
  options: {
    settingSources: ["project"] // 仅 .claude/settings.json
  }
});
测试和 CI 环境:
// 通过排除本地设置确保 CI 中的一致行为
const result = query({
  prompt: "Run tests",
  options: {
    settingSources: ["project"], // 仅团队共享设置
    permissionMode: "bypassPermissions"
  }
});
仅 SDK 应用程序:
// 以编程方式定义所有内容。
// 传递 [] 以选择退出文件系统设置源。
const result = query({
  prompt: "Review this PR",
  options: {
    settingSources: [],
    agents: {
      /* ... */
    },
    mcpServers: {
      /* ... */
    },
    allowedTools: ["Read", "Grep", "Glob"]
  }
});
加载 CLAUDE.md 项目说明:
// 加载项目设置以包括 CLAUDE.md 文件
const result = query({
  prompt: "Add a new feature following project conventions",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code" // 使用 Claude Code 的系统提示
    },
    settingSources: ["project"], // 从项目目录加载 CLAUDE.md
    allowedTools: ["Read", "Write", "Edit"]
  }
});

设置优先级

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

PermissionMode

type PermissionMode =
  | "default" // 标准权限行为
  | "acceptEdits" // 自动接受文件编辑
  | "bypassPermissions" // 绕过所有权限检查
  | "plan" // Plan Mode - 仅读取工具
  | "dontAsk" // 不提示权限,如果未预先批准则拒绝
  | "auto"; // 使用模型分类器批准或拒绝每个工具调用

CanUseTool

用于控制工具使用的自定义权限函数类型。
type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  options: {
    signal: AbortSignal;
    suggestions?: PermissionUpdate[];
    blockedPath?: string;
    decisionReason?: string;
    toolUseID: string;
    agentID?: string;
  }
) => Promise<PermissionResult>;
选项类型描述
signalAbortSignal如果应中止操作,则发出信号
suggestionsPermissionUpdate[]建议的权限更新,以便用户不会再次被提示此工具。Bash 提示包括一个建议,其中包含 localSettings 目标,因此在 updatedPermissions 中返回它会将规则写入 .claude/settings.local.json 并在会话中持久化。
blockedPathstring触发权限请求的文件路径(如果适用)
decisionReasonstring解释为什么触发此权限请求
toolUseIDstring此特定工具调用在助手消息中的唯一标识符
agentIDstring如果在子代理中运行,子代理的 ID

PermissionResult

权限检查的结果。
type PermissionResult =
  | {
      behavior: "allow";
      updatedInput?: Record<string, unknown>;
      updatedPermissions?: PermissionUpdate[];
      toolUseID?: string;
    }
  | {
      behavior: "deny";
      message: string;
      interrupt?: boolean;
      toolUseID?: string;
    };

ToolConfig

内置工具行为的配置。
type ToolConfig = {
  askUserQuestion?: {
    previewFormat?: "markdown" | "html";
  };
};
字段类型描述
askUserQuestion.previewFormat'markdown' | 'html'选择加入 AskUserQuestion 选项上的 preview 字段并设置其内容格式。未设置时,Claude 不发出预览

McpServerConfig

MCP 服务器的配置。
type McpServerConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfigWithInstance;

McpStdioServerConfig

type McpStdioServerConfig = {
  type?: "stdio";
  command: string;
  args?: string[];
  env?: Record<string, string>;
};

McpSSEServerConfig

type McpSSEServerConfig = {
  type: "sse";
  url: string;
  headers?: Record<string, string>;
};

McpHttpServerConfig

type McpHttpServerConfig = {
  type: "http";
  url: string;
  headers?: Record<string, string>;
};

McpSdkServerConfigWithInstance

type McpSdkServerConfigWithInstance = {
  type: "sdk";
  name: string;
  instance: McpServer;
};

McpClaudeAIProxyServerConfig

type McpClaudeAIProxyServerConfig = {
  type: "claudeai-proxy";
  url: string;
  id: string;
};

SdkPluginConfig

SDK 中加载 plugins 的配置。
type SdkPluginConfig = {
  type: "local";
  path: string;
};
字段类型描述
type'local'必须为 'local'(目前仅支持本地 plugins)
pathstring插件目录的绝对或相对路径
示例:
plugins: [
  { type: "local", path: "./my-plugin" },
  { type: "local", path: "/absolute/path/to/plugin" }
];
有关创建和使用 plugins 的完整信息,请参阅Plugins

消息类型

SDKMessage

查询返回的所有可能消息的联合类型。
type SDKMessage =
  | SDKAssistantMessage
  | SDKUserMessage
  | SDKUserMessageReplay
  | SDKResultMessage
  | SDKSystemMessage
  | SDKPartialAssistantMessage
  | SDKCompactBoundaryMessage
  | SDKStatusMessage
  | SDKLocalCommandOutputMessage
  | SDKHookStartedMessage
  | SDKHookProgressMessage
  | SDKHookResponseMessage
  | SDKPluginInstallMessage
  | SDKToolProgressMessage
  | SDKAuthStatusMessage
  | SDKTaskNotificationMessage
  | SDKTaskStartedMessage
  | SDKTaskProgressMessage
  | SDKTaskUpdatedMessage
  | SDKSessionStateChangedMessage
  | SDKCommandsChangedMessage
  | SDKNotificationMessage
  | SDKFilesPersistedEvent
  | SDKToolUseSummaryMessage
  | SDKMemoryRecallMessage
  | SDKRateLimitEvent
  | SDKElicitationCompleteMessage
  | SDKPermissionDeniedMessage
  | SDKPromptSuggestionMessage
  | SDKAPIRetryMessage
  | SDKMirrorErrorMessage;

SDKAssistantMessage

助手响应消息。
type SDKAssistantMessage = {
  type: "assistant";
  uuid: UUID;
  session_id: string;
  message: BetaMessage; // 来自 Anthropic SDK
  parent_tool_use_id: string | null;
  error?: SDKAssistantMessageError;
};
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

用户输入消息。
type SDKUserMessage = {
  type: "user";
  uuid?: UUID;
  session_id?: string;
  message: MessageParam; // 来自 Anthropic SDK
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  shouldQuery?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
};
shouldQuery 设置为 false 以将消息附加到记录中而不触发助手轮次。消息被保留并合并到下一个触发轮次的用户消息中。使用此方法注入上下文,例如您在带外运行的命令的输出,而无需在其上花费模型调用。

SDKUserMessageReplay

具有必需 UUID 的重放用户消息。
type SDKUserMessageReplay = {
  type: "user";
  uuid: UUID;
  session_id: string;
  message: MessageParam;
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
  isReplay: true;
};

SDKResultMessage

最终结果消息。
type SDKResultMessage =
  | {
      type: "result";
      subtype: "success";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      api_error_status?: number | null;
      num_turns: number;
      result: string;
      stop_reason: string | null;
      ttft_ms?: number;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      structured_output?: unknown;
      deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    }
  | {
      type: "result";
      subtype:
        | "error_max_turns"
        | "error_during_execution"
        | "error_max_budget_usd"
        | "error_max_structured_output_retries";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      num_turns: number;
      stop_reason: string | null;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      errors: string[];
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    };
结果上的多个字段除了 subtype 之外还提供诊断详情:
  • api_error_status:终止对话的 API 错误的 HTTP 状态码。当轮次在没有 API 错误的情况下结束时,该字段不存在或为 null
  • ttft_ms:首个令牌的时间(毫秒)。仅在成功分支上显示。
  • terminal_reason:循环结束的原因。为 "completed""max_turns""tool_deferred""aborted_streaming""aborted_tools""hook_stopped""stop_hook_prevented""blocking_limit""rapid_refill_breaker""prompt_too_long""image_error""model_error" 之一。
  • 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

系统初始化消息。
type SDKSystemMessage = {
  type: "system";
  subtype: "init";
  uuid: UUID;
  session_id: string;
  agents?: string[];
  apiKeySource: ApiKeySource;
  betas?: string[];
  claude_code_version: string;
  cwd: string;
  tools: string[];
  mcp_servers: {
    name: string;
    status: string;
  }[];
  model: string;
  permissionMode: PermissionMode;
  slash_commands: string[];
  output_style: string;
  skills: string[];
  plugins: { name: string; path: string }[];
};

SDKPartialAssistantMessage

流式部分消息(仅当 includePartialMessages 为 true 时)。
type SDKPartialAssistantMessage = {
  type: "stream_event";
  event: BetaRawMessageStreamEvent; // 来自 Anthropic SDK
  parent_tool_use_id: string | null;
  uuid: UUID;
  session_id: string;
};

SDKCompactBoundaryMessage

指示对话压缩边界的消息。
type SDKCompactBoundaryMessage = {
  type: "system";
  subtype: "compact_boundary";
  uuid: UUID;
  session_id: string;
  compact_metadata: {
    trigger: "manual" | "auto";
    pre_tokens: number;
  };
};

SDKPluginInstallMessage

插件安装进度事件。当设置 CLAUDE_CODE_SYNC_PLUGIN_INSTALL 时发出,以便您的 Agent SDK 应用程序可以在第一个轮次之前跟踪市场插件安装。startedcompleted 状态括起整体安装。installedfailed 状态报告单个市场并包括 name
type SDKPluginInstallMessage = {
  type: "system";
  subtype: "plugin_install";
  status: "started" | "installed" | "failed" | "completed";
  name?: string;
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKPermissionDeniedMessage

当权限系统自动拒绝工具调用而不显示交互式提示时发出的流事件。使用它在发生时在您的 UI 中呈现拒绝,而不仅仅观察随后的 is_error 工具结果。交互式询问路径通过 canUseTool 回调单独到达您的应用程序。由 PreToolUse hook 发出的拒绝不会通过此事件报告。 此事件需要 Claude Code v2.1.136 或更高版本。
type SDKPermissionDeniedMessage = {
  type: "system";
  subtype: "permission_denied";
  tool_name: string;
  tool_use_id: string;
  agent_id?: string;
  decision_reason_type?: string;
  decision_reason?: string;
  message: string;
  uuid: UUID;
  session_id: string;
};
字段类型描述
tool_namestring被拒绝的工具的名称
tool_use_idstring此拒绝回答的 tool_use 块的 ID
agent_idstring当拒绝的调用源自子代理内部时的子代理 ID。镜像 can_use_tool 上的字段以进行主机端路由
decision_reason_typestring决定组件的鉴别器,例如 "rule""mode""classifier""asyncAgent"
decision_reasonstring来自决定组件的人类可读原因(如果可用)
messagestringtool_result 中返回给模型的拒绝消息

SDKPermissionDenial

有关被拒绝的工具使用的信息。
type SDKPermissionDenial = {
  tool_name: string;
  tool_use_id: string;
  tool_input: Record<string, unknown>;
};

SDKMessageOrigin

用户角色消息的来源。这在 SDKUserMessage 上显示为 origin,并转发到相应的 SDKResultMessage,以便您可以判断给定轮次的触发因素。
type SDKMessageOrigin =
  | { kind: "human" }
  | { kind: "channel"; server: string }
  | { kind: "peer"; from: string; name?: string }
  | { kind: "task-notification" }
  | { kind: "coordinator" };
kind含义
human来自最终用户的直接输入。在用户消息上,缺少的 origin 也表示人工输入。
channel消息到达频道server 是源 MCP 服务器名称。
peer来自另一个代理会话的消息,通过 SendMessagefrom 是发送者地址;name 是发送者的显示名称(如果可用)。
task-notification后台任务完成后注入的合成轮次。请参阅 SDKTaskNotificationMessage
coordinator来自代理团队中的团队协调员的消息。

Hook 类型

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

HookEvent

可用的 hook 事件。
type HookEvent =
  | "PreToolUse"
  | "PostToolUse"
  | "PostToolUseFailure"
  | "PostToolBatch"
  | "Notification"
  | "UserPromptSubmit"
  | "SessionStart"
  | "SessionEnd"
  | "Stop"
  | "SubagentStart"
  | "SubagentStop"
  | "PreCompact"
  | "PermissionRequest"
  | "Setup"
  | "TeammateIdle"
  | "TaskCompleted"
  | "ConfigChange"
  | "WorktreeCreate"
  | "WorktreeRemove"
  | "MessageDisplay";

HookCallback

Hook 回调函数类型。
type HookCallback = (
  input: HookInput, // 所有 hook 输入类型的联合
  toolUseID: string | undefined,
  options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;

HookCallbackMatcher

带有可选匹配器的 Hook 配置。
interface HookCallbackMatcher {
  matcher?: string;
  hooks: HookCallback[];
  timeout?: number; // 此匹配器中所有 hooks 的超时时间(秒)
}

HookInput

所有 hook 输入类型的联合类型。
type HookInput =
  | PreToolUseHookInput
  | PostToolUseHookInput
  | PostToolUseFailureHookInput
  | PostToolBatchHookInput
  | NotificationHookInput
  | UserPromptSubmitHookInput
  | SessionStartHookInput
  | SessionEndHookInput
  | StopHookInput
  | SubagentStartHookInput
  | SubagentStopHookInput
  | PreCompactHookInput
  | PermissionRequestHookInput
  | SetupHookInput
  | TeammateIdleHookInput
  | TaskCompletedHookInput
  | ConfigChangeHookInput
  | WorktreeCreateHookInput
  | WorktreeRemoveHookInput
  | MessageDisplayHookInput;

BaseHookInput

所有 hook 输入类型扩展的基本接口。
type BaseHookInput = {
  session_id: string;
  transcript_path: string;
  cwd: string;
  permission_mode?: string;
  effort?: { level: string };
  agent_id?: string;
  agent_type?: string;
};

PreToolUseHookInput

type PreToolUseHookInput = BaseHookInput & {
  hook_event_name: "PreToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
};

PostToolUseHookInput

type PostToolUseHookInput = BaseHookInput & {
  hook_event_name: "PostToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_response: unknown;
  tool_use_id: string;
  duration_ms?: number;
};

PostToolUseFailureHookInput

type PostToolUseFailureHookInput = BaseHookInput & {
  hook_event_name: "PostToolUseFailure";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  error: string;
  is_interrupt?: boolean;
  duration_ms?: number;
};

PostToolBatchHookInput

在批处理中的每个工具调用都已解决后触发一次,在下一个模型请求之前。tool_response 携带序列化的 tool_result 内容,模型会看到该内容;其形状与 PostToolUseHookInput 的结构化 Output 对象不同。
type PostToolBatchHookInput = BaseHookInput & {
  hook_event_name: "PostToolBatch";
  tool_calls: PostToolBatchToolCall[];
};

type PostToolBatchToolCall = {
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  tool_response?: unknown;
};

NotificationHookInput

type NotificationHookInput = BaseHookInput & {
  hook_event_name: "Notification";
  message: string;
  title?: string;
  notification_type: string;
};

UserPromptSubmitHookInput

type UserPromptSubmitHookInput = BaseHookInput & {
  hook_event_name: "UserPromptSubmit";
  prompt: string;
};

SessionStartHookInput

type SessionStartHookInput = BaseHookInput & {
  hook_event_name: "SessionStart";
  source: "startup" | "resume" | "clear" | "compact";
  agent_type?: string;
  model?: string;
};

SessionEndHookInput

type SessionEndHookInput = BaseHookInput & {
  hook_event_name: "SessionEnd";
  reason: ExitReason; // EXIT_REASONS 数组中的字符串
};

StopHookInput

type StopHookInput = BaseHookInput & {
  hook_event_name: "Stop";
  stop_hook_active: boolean;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

SubagentStartHookInput

type SubagentStartHookInput = BaseHookInput & {
  hook_event_name: "SubagentStart";
  agent_id: string;
  agent_type: string;
};

SubagentStopHookInput

type SubagentStopHookInput = BaseHookInput & {
  hook_event_name: "SubagentStop";
  stop_hook_active: boolean;
  agent_id: string;
  agent_transcript_path: string;
  agent_type: string;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

type BackgroundTaskSummary = {
  id: string;
  type: string;
  status: string;
  description: string;
  command?: string;
  agent_type?: string;
  server?: string;
  tool?: string;
  name?: string;
};

type SessionCronSummary = {
  id: string;
  schedule: string;
  recurring: boolean;
  prompt: string;
};

PreCompactHookInput

type PreCompactHookInput = BaseHookInput & {
  hook_event_name: "PreCompact";
  trigger: "manual" | "auto";
  custom_instructions: string | null;
};

PermissionRequestHookInput

type PermissionRequestHookInput = BaseHookInput & {
  hook_event_name: "PermissionRequest";
  tool_name: string;
  tool_input: unknown;
  permission_suggestions?: PermissionUpdate[];
};

SetupHookInput

type SetupHookInput = BaseHookInput & {
  hook_event_name: "Setup";
  trigger: "init" | "maintenance";
};

TeammateIdleHookInput

type TeammateIdleHookInput = BaseHookInput & {
  hook_event_name: "TeammateIdle";
  teammate_name: string;
  team_name: string;
};

TaskCompletedHookInput

type TaskCompletedHookInput = BaseHookInput & {
  hook_event_name: "TaskCompleted";
  task_id: string;
  task_subject: string;
  task_description?: string;
  teammate_name?: string;
  team_name?: string;
};

ConfigChangeHookInput

type ConfigChangeHookInput = BaseHookInput & {
  hook_event_name: "ConfigChange";
  source:
    | "user_settings"
    | "project_settings"
    | "local_settings"
    | "policy_settings"
    | "skills";
  file_path?: string;
};

WorktreeCreateHookInput

type WorktreeCreateHookInput = BaseHookInput & {
  hook_event_name: "WorktreeCreate";
  name: string;
};

WorktreeRemoveHookInput

type WorktreeRemoveHookInput = BaseHookInput & {
  hook_event_name: "WorktreeRemove";
  worktree_path: string;
};

MessageDisplayHookInput

type MessageDisplayHookInput = BaseHookInput & {
  hook_event_name: "MessageDisplay";
  turn_id: string;
  message_id: string;
  index: number;
  final: boolean;
  delta: string;
};

HookJSONOutput

Hook 返回值。
type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

AsyncHookJSONOutput

type AsyncHookJSONOutput = {
  async: true;
  asyncTimeout?: number;
};

SyncHookJSONOutput

type SyncHookJSONOutput = {
  continue?: boolean;
  suppressOutput?: boolean;
  stopReason?: string;
  decision?: "approve" | "block";
  systemMessage?: string;
  reason?: string;
  hookSpecificOutput?:
    | {
        hookEventName: "PreToolUse";
        permissionDecision?: "allow" | "deny" | "ask" | "defer";
        permissionDecisionReason?: string;
        updatedInput?: Record<string, unknown>;
        additionalContext?: string;
      }
    | {
        hookEventName: "UserPromptSubmit";
        additionalContext?: string;
      }
    | {
        hookEventName: "SessionStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "Setup";
        additionalContext?: string;
      }
    | {
        hookEventName: "SubagentStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolUse";
        additionalContext?: string;
        updatedToolOutput?: unknown;
        /** @deprecated 使用 `updatedToolOutput`,它适用于所有工具。 */
        updatedMCPToolOutput?: unknown;
      }
    | {
        hookEventName: "PostToolUseFailure";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolBatch";
        additionalContext?: string;
      }
    | {
        hookEventName: "Notification";
        additionalContext?: string;
      }
    | {
        hookEventName: "PermissionRequest";
        decision:
          | {
              behavior: "allow";
              updatedInput?: Record<string, unknown>;
              updatedPermissions?: PermissionUpdate[];
            }
          | {
              behavior: "deny";
              message?: string;
              interrupt?: boolean;
            };
      };
};

工具输入类型

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

ToolInputSchemas

所有工具输入类型的联合,从 @anthropic-ai/claude-agent-sdk 导出。
type ToolInputSchemas =
  | AgentInput
  | AskUserQuestionInput
  | BashInput
  | TaskOutputInput
  | EnterWorktreeInput
  | ExitPlanModeInput
  | FileEditInput
  | FileReadInput
  | FileWriteInput
  | GlobInput
  | GrepInput
  | ListMcpResourcesInput
  | McpInput
  | MonitorInput
  | NotebookEditInput
  | ReadMcpResourceInput
  | SubscribeMcpResourceInput
  | SubscribePollingInput
  | TaskCreateInput
  | TaskGetInput
  | TaskListInput
  | TaskStopInput
  | TaskUpdateInput
  | TodoWriteInput
  | UnsubscribeMcpResourceInput
  | UnsubscribePollingInput
  | WebFetchInput
  | WebSearchInput
  | WorkflowInput;

Agent

工具名称: Agent(之前为 Task,仍然接受作为别名)
type AgentInput = {
  description: string;
  prompt: string;
  subagent_type: string;
  model?: "sonnet" | "opus" | "haiku";
  resume?: string;
  run_in_background?: boolean;
  max_turns?: number;
  name?: string;
  team_name?: string;
  mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";
  isolation?: "worktree";
};
启动新代理以自主处理复杂的多步骤任务。

AskUserQuestion

工具名称: AskUserQuestion
type AskUserQuestionInput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
};
在执行期间向用户提出澄清问题。请参阅处理批准和用户输入了解使用详情。

Bash

工具名称: Bash
type BashInput = {
  command: string;
  timeout?: number;
  description?: string;
  run_in_background?: boolean;
  dangerouslyDisableSandbox?: boolean;
};
在持久 shell 会话中执行 bash 命令,支持可选超时和后台执行。

Monitor

工具名称: Monitor
type MonitorInput = {
  command: string;
  description: string;
  timeout_ms?: number;
  persistent?: boolean;
};
运行后台脚本并将每个 stdout 行作为事件传递给 Claude,以便它可以做出反应而无需轮询。为会话长度的监视(如日志尾部)设置 persistent: true。Monitor 遵循与 Bash 相同的权限规则。请参阅 Monitor 工具参考了解行为和提供商可用性。

TaskOutput

工具名称: TaskOutput
type TaskOutputInput = {
  task_id: string;
  block: boolean;
  timeout: number;
};
从运行中或已完成的后台任务检索输出。

Edit

工具名称: Edit
type FileEditInput = {
  file_path: string;
  old_string: string;
  new_string: string;
  replace_all?: boolean;
};
在文件中执行精确字符串替换。

Read

工具名称: Read
type FileReadInput = {
  file_path: string;
  offset?: number;
  limit?: number;
  pages?: string;
};
从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。对 PDF 页面范围使用 pages(例如,"1-5")。

Write

工具名称: Write
type FileWriteInput = {
  file_path: string;
  content: string;
};
将文件写入本地文件系统,如果存在则覆盖。

Glob

工具名称: Glob
type GlobInput = {
  pattern: string;
  path?: string;
};
快速文件模式匹配,适用于任何代码库大小。

Grep

工具名称: Grep
type GrepInput = {
  pattern: string;
  path?: string;
  glob?: string;
  type?: string;
  output_mode?: "content" | "files_with_matches" | "count";
  "-i"?: boolean;
  "-n"?: boolean;
  "-B"?: number;
  "-A"?: number;
  "-C"?: number;
  context?: number;
  head_limit?: number;
  offset?: number;
  multiline?: boolean;
};
基于 ripgrep 的强大搜索工具,支持正则表达式。

TaskStop

工具名称: TaskStop
type TaskStopInput = {
  task_id?: string;
  shell_id?: string; // 已弃用:使用 task_id
};
按 ID 停止运行的后台任务或 shell。

NotebookEdit

工具名称: NotebookEdit
type NotebookEditInput = {
  notebook_path: string;
  cell_id?: string;
  new_source: string;
  cell_type?: "code" | "markdown";
  edit_mode?: "replace" | "insert" | "delete";
};
编辑 Jupyter 笔记本文件中的单元格。

WebFetch

工具名称: WebFetch
type WebFetchInput = {
  url: string;
  prompt: string;
};
从 URL 获取内容并使用 AI 模型处理它。

WebSearch

工具名称: WebSearch
type WebSearchInput = {
  query: string;
  allowed_domains?: string[];
  blocked_domains?: string[];
};
搜索网络并返回格式化的结果。

Workflow

工具名称: Workflow
type WorkflowInput = {
  script?: string;
  name?: string;
  scriptPath?: string;
  args?: unknown;
  resumeFromRunId?: string;
};
运行动态工作流:一个脚本,在后台协调许多子代理并返回一个统一的结果。Workflow 工具在 Agent SDK v0.3.149 及更高版本中可用。至少需要 scriptnamescriptPath 之一。
字段类型描述
scriptstring内联工作流脚本。必须以 export const meta = { name, description, phases } 作为字面量开头,后跟使用 agent()parallel()pipeline()phase() 的脚本主体
namestring内置工作流的名称或保存在 .claude/workflows/ 中的工作流名称。解析为脚本
scriptPathstring磁盘上工作流脚本文件的路径。优先于 scriptname。每次调用都会持久化其脚本并在结果中返回路径,因此您可以编辑该文件并使用相同的 scriptPath 重新调用以进行迭代
argsunknown输入值,作为全局 args 暴露给脚本,用于参数化的命名工作流,例如研究问题或文件路径列表。将数组和对象作为实际 JSON 值传递,而不是作为 JSON 编码的字符串
resumeFromRunIdstring要恢复的先前 Workflow 调用的运行 ID。具有未更改输入的已完成 agent() 调用返回缓存的结果;只有更改或新的调用才会实时运行。仅限同一会话

TodoWrite

工具名称: TodoWrite
type TodoWriteInput = {
  todos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
创建和管理结构化任务列表以跟踪进度。
自 TypeScript Agent SDK 0.3.142 起,TodoWrite 默认被禁用。改用 TaskCreateTaskGetTaskUpdateTaskList。请参阅迁移到 Task 工具以更新您的监视代码,或设置 CLAUDE_CODE_ENABLE_TASKS=0 以恢复为 TodoWrite

TaskCreate

工具名称: TaskCreate
type TaskCreateInput = {
  subject: string;
  description: string;
  activeForm?: string;
  metadata?: Record<string, unknown>;
};
创建单个任务并返回其分配的 ID。

TaskUpdate

工具名称: TaskUpdate
type TaskUpdateInput = {
  taskId: string;
  status?: "pending" | "in_progress" | "completed" | "deleted";
  subject?: string;
  description?: string;
  activeForm?: string;
  addBlocks?: string[];
  addBlockedBy?: string[];
  owner?: string;
  metadata?: Record<string, unknown>;
};
按 ID 修补一个任务。将 status 设置为 "deleted" 以删除它。

TaskGet

工具名称: TaskGet
type TaskGetInput = {
  taskId: string;
};
返回一个任务的完整详情,或在找不到 ID 时返回 null

TaskList

工具名称: TaskList
type TaskListInput = {};
返回当前列表中所有任务的快照。

ExitPlanMode

工具名称: ExitPlanMode
type ExitPlanModeInput = {
  allowedPrompts?: Array<{
    tool: "Bash";
    prompt: string;
  }>;
};
退出规划模式。可选地指定实现计划所需的基于提示的权限。

ListMcpResources

工具名称: ListMcpResourcesTool
type ListMcpResourcesInput = {
  server?: string;
};
列出来自连接服务器的可用 MCP 资源。

ReadMcpResource

工具名称: ReadMcpResourceTool
type ReadMcpResourceInput = {
  server: string;
  uri: string;
};
从服务器读取特定的 MCP 资源。

EnterWorktree

工具名称: EnterWorktree
type EnterWorktreeInput = {
  name?: string;
  path?: string;
};
创建并进入临时 git worktree 以进行隔离工作。传递 path 以切换到当前存储库的现有 worktree 而不是创建新的。namepath 互斥。

工具输出类型

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

ToolOutputSchemas

所有工具输出类型的联合。
type ToolOutputSchemas =
  | AgentOutput
  | AskUserQuestionOutput
  | BashOutput
  | EnterWorktreeOutput
  | ExitPlanModeOutput
  | FileEditOutput
  | FileReadOutput
  | FileWriteOutput
  | GlobOutput
  | GrepOutput
  | ListMcpResourcesOutput
  | MonitorOutput
  | NotebookEditOutput
  | ReadMcpResourceOutput
  | TaskCreateOutput
  | TaskGetOutput
  | TaskListOutput
  | TaskStopOutput
  | TaskUpdateOutput
  | TodoWriteOutput
  | WebFetchOutput
  | WebSearchOutput
  | WorkflowOutput;

Agent

工具名称: Agent(之前为 Task,仍然接受作为别名)
type AgentOutput =
  | {
      status: "completed";
      agentId: string;
      content: Array<{ type: "text"; text: string }>;
      totalToolUseCount: number;
      totalDurationMs: number;
      totalTokens: number;
      usage: {
        input_tokens: number;
        output_tokens: number;
        cache_creation_input_tokens: number | null;
        cache_read_input_tokens: number | null;
        server_tool_use: {
          web_search_requests: number;
          web_fetch_requests: number;
        } | null;
        service_tier: ("standard" | "priority" | "batch") | null;
        cache_creation: {
          ephemeral_1h_input_tokens: number;
          ephemeral_5m_input_tokens: number;
        } | null;
      };
      prompt: string;
    }
  | {
      status: "async_launched";
      agentId: string;
      description: string;
      prompt: string;
      outputFile: string;
      canReadOutputFile?: boolean;
    }
  | {
      status: "sub_agent_entered";
      description: string;
      message: string;
    };
返回来自子代理的结果。在 status 字段上进行区分:"completed" 表示已完成的任务,"async_launched" 表示后台任务,"sub_agent_entered" 表示交互式子代理。

AskUserQuestion

工具名称: AskUserQuestion
type AskUserQuestionOutput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
  answers: Record<string, string>;
  response?: string;
};
返回提出的问题和用户的答案。当用户输入自由形式的回复而不是回答结构化问题时,response 被设置;当存在时,Claude 会收到”用户回复:…”而不是每个问题的答案列表。

Bash

工具名称: Bash
type BashOutput = {
  stdout: string;
  stderr: string;
  rawOutputPath?: string;
  interrupted: boolean;
  isImage?: boolean;
  backgroundTaskId?: string;
  backgroundedByUser?: boolean;
  dangerouslyDisableSandbox?: boolean;
  returnCodeInterpretation?: string;
  structuredContent?: unknown[];
  persistedOutputPath?: string;
  persistedOutputSize?: number;
};
返回命令输出,stdout/stderr 分开。后台命令包括 backgroundTaskId

Monitor

工具名称: Monitor
type MonitorOutput = {
  taskId: string;
  timeoutMs: number;
  persistent?: boolean;
};
返回运行监视器的后台任务 ID。使用此 ID 与 TaskStop 一起提前取消监视。

Edit

工具名称: Edit
type FileEditOutput = {
  filePath: string;
  oldString: string;
  newString: string;
  originalFile: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  userModified: boolean;
  replaceAll: boolean;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
返回编辑操作的结构化差异。

Read

工具名称: Read
type FileReadOutput =
  | {
      type: "text";
      file: {
        filePath: string;
        content: string;
        numLines: number;
        startLine: number;
        totalLines: number;
      };
    }
  | {
      type: "image";
      file: {
        base64: string;
        type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        originalSize: number;
        dimensions?: {
          originalWidth?: number;
          originalHeight?: number;
          displayWidth?: number;
          displayHeight?: number;
        };
      };
    }
  | {
      type: "notebook";
      file: {
        filePath: string;
        cells: unknown[];
      };
    }
  | {
      type: "pdf";
      file: {
        filePath: string;
        base64: string;
        originalSize: number;
      };
    }
  | {
      type: "parts";
      file: {
        filePath: string;
        originalSize: number;
        count: number;
        outputDir: string;
      };
    };
返回适合文件类型的格式的文件内容。在 type 字段上进行区分。

Write

工具名称: Write
type FileWriteOutput = {
  type: "create" | "update";
  filePath: string;
  content: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  originalFile: string | null;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
返回写入结果,包含结构化差异信息。

Glob

工具名称: Glob
type GlobOutput = {
  durationMs: number;
  numFiles: number;
  filenames: string[];
  truncated: boolean;
};
返回与 glob 模式匹配的文件路径,按修改时间排序。

Grep

工具名称: Grep
type GrepOutput = {
  mode?: "content" | "files_with_matches" | "count";
  numFiles: number;
  filenames: string[];
  content?: string;
  numLines?: number;
  numMatches?: number;
  appliedLimit?: number;
  appliedOffset?: number;
};
返回搜索结果。形状因 mode 而异:文件列表、带匹配的内容或匹配计数。

TaskStop

工具名称: TaskStop
type TaskStopOutput = {
  message: string;
  task_id: string;
  task_type: string;
  command?: string;
};
停止后台任务后返回确认。

NotebookEdit

工具名称: NotebookEdit
type NotebookEditOutput = {
  new_source: string;
  cell_id?: string;
  cell_type: "code" | "markdown";
  language: string;
  edit_mode: string;
  error?: string;
  notebook_path: string;
  original_file: string;
  updated_file: string;
};
返回笔记本编辑的结果,包含原始和更新的文件内容。

WebFetch

工具名称: WebFetch
type WebFetchOutput = {
  bytes: number;
  code: number;
  codeText: string;
  result: string;
  durationMs: number;
  url: string;
};
返回获取的内容,包含 HTTP 状态和元数据。

WebSearch

工具名称: WebSearch
type WebSearchOutput = {
  query: string;
  results: Array<
    | {
        tool_use_id: string;
        content: Array<{ title: string; url: string }>;
      }
    | string
  >;
  durationSeconds: number;
};
返回来自网络的搜索结果。

Workflow

工具名称: Workflow
type WorkflowOutput = {
  status: "async_launched";
  taskId: string;
  runId?: string;
  summary?: string;
  transcriptDir?: string;
  scriptPath?: string;
  error?: string;
};
在工具接受调用后立即返回。最终结果稍后作为任务完成到达。在将运行视为已启动之前检查 error:脚本如果语法检查失败,会返回 status: "async_launched" 并设置 error,且永远不会运行。
字段类型描述
status"async_launched"工具接受了调用。这是该字段唯一的值
taskIdstring运行的后台任务标识符
runIdstring工作流运行标识符,用于在后续调用中作为 resumeFromRunId 传递
summarystring工作流功能的单行描述
transcriptDirstring执行期间写入子代理转录的目录
scriptPathstring此运行的持久化工作流脚本的路径。编辑它并作为 scriptPath 传回以重新运行而无需重新发送脚本
errorstring当脚本语法检查失败时设置。存在时,尽管 async_launched 状态,运行未启动

TodoWrite

工具名称: TodoWrite
type TodoWriteOutput = {
  oldTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
  newTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
返回之前和更新的任务列表。
自 TypeScript Agent SDK 0.3.142 起,TodoWrite 默认被禁用。改用 TaskCreateTaskGetTaskUpdateTaskList。请参阅迁移到 Task 工具更新您的监视代码,或设置 CLAUDE_CODE_ENABLE_TASKS=0 以恢复为 TodoWrite

TaskCreate

工具名称: TaskCreate
type TaskCreateOutput = {
  task: {
    id: string;
    subject: string;
  };
};
返回创建的任务及其分配的 ID。

TaskUpdate

工具名称: TaskUpdate
type TaskUpdateOutput = {
  success: boolean;
  taskId: string;
  updatedFields: string[];
  error?: string;
  statusChange?: {
    from: string;
    to: string;
  };
};
返回更新结果,包括哪些字段已更改。

TaskGet

工具名称: TaskGet
type TaskGetOutput = {
  task: {
    id: string;
    subject: string;
    description: string;
    status: "pending" | "in_progress" | "completed";
    blocks: string[];
    blockedBy: string[];
  } | null;
};
返回完整的任务记录,或在找不到 ID 时返回 null

TaskList

工具名称: TaskList
type TaskListOutput = {
  tasks: Array<{
    id: string;
    subject: string;
    status: "pending" | "in_progress" | "completed";
    owner?: string;
    blockedBy: string[];
  }>;
};
返回当前列表中所有任务的快照。

ExitPlanMode

工具名称: ExitPlanMode
type ExitPlanModeOutput = {
  plan: string | null;
  isAgent: boolean;
  filePath?: string;
  hasTaskTool?: boolean;
  awaitingLeaderApproval?: boolean;
  requestId?: string;
};
返回退出规划模式后的计划状态。

ListMcpResources

工具名称: ListMcpResourcesTool
type ListMcpResourcesOutput = Array<{
  uri: string;
  name: string;
  mimeType?: string;
  description?: string;
  server: string;
}>;
返回可用 MCP 资源的数组。

ReadMcpResource

工具名称: ReadMcpResourceTool
type ReadMcpResourceOutput = {
  contents: Array<{
    uri: string;
    mimeType?: string;
    text?: string;
  }>;
};
返回请求的 MCP 资源的内容。

EnterWorktree

工具名称: EnterWorktree
type EnterWorktreeOutput = {
  worktreePath: string;
  worktreeBranch?: string;
  message: string;
};
返回有关 git worktree 的信息。

权限类型

PermissionUpdate

用于更新权限的操作。
type PermissionUpdate =
  | {
      type: "addRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "replaceRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "setMode";
      mode: PermissionMode;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "addDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    };

PermissionBehavior

type PermissionBehavior = "allow" | "deny" | "ask";

PermissionUpdateDestination

type PermissionUpdateDestination =
  | "userSettings" // 全局用户设置
  | "projectSettings" // 每个目录的项目设置
  | "localSettings" // Gitignored 本地设置
  | "session" // 仅当前会话
  | "cliArg"; // CLI 参数

PermissionRuleValue

type PermissionRuleValue = {
  toolName: string;
  ruleContent?: string;
};

其他类型

ApiKeySource

type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

SdkBeta

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

SlashCommand

有关可用 slash command 的信息。
type SlashCommand = {
  name: string;
  description: string;
  argumentHint: string;
  aliases?: string[];
};

ModelInfo

有关可用模型的信息。
type ModelInfo = {
  value: string;
  displayName: string;
  description: string;
  supportsEffort?: boolean;
  supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];
  supportsAdaptiveThinking?: boolean;
  supportsFastMode?: boolean;
};

AgentInfo

有关可通过 Agent 工具调用的可用子代理的信息。
type AgentInfo = {
  name: string;
  description: string;
  model?: string;
};
字段类型描述
namestring代理类型标识符(例如,"Explore""general-purpose"
descriptionstring何时使用此代理的描述
modelstring | undefined此代理使用的模型别名。如果省略,继承父级的模型

McpServerStatus

连接的 MCP 服务器的状态。
type McpServerStatus = {
  name: string;
  status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";
  serverInfo?: {
    name: string;
    version: string;
  };
  error?: string;
  config?: McpServerStatusConfig;
  scope?: string;
  tools?: {
    name: string;
    description?: string;
    annotations?: {
      readOnly?: boolean;
      destructive?: boolean;
      openWorld?: boolean;
    };
  }[];
};

McpServerStatusConfig

mcpServerStatus() 报告的 MCP 服务器的配置。这是所有 MCP 服务器传输类型的联合。
type McpServerStatusConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfig
  | McpClaudeAIProxyServerConfig;
请参阅 McpServerConfig了解每种传输类型的详情。

AccountInfo

经过身份验证的用户的帐户信息。
type AccountInfo = {
  email?: string;
  organization?: string;
  subscriptionType?: string;
  tokenSource?: string;
  apiKeySource?: string;
};

ModelUsage

结果消息中返回的每个模型使用统计。costUSD 值是客户端估计。请参阅跟踪成本和使用情况了解计费注意事项。
type ModelUsage = {
  inputTokens: number;
  outputTokens: number;
  cacheReadInputTokens: number;
  cacheCreationInputTokens: number;
  webSearchRequests: number;
  costUSD: number;
  contextWindow: number;
  maxOutputTokens: number;
};

ConfigScope

type ConfigScope = "local" | "user" | "project";

NonNullableUsage

Usage 的版本,所有可空字段都变为非可空。
type NonNullableUsage = {
  [K in keyof Usage]: NonNullable<Usage[K]>;
};

Usage

令牌使用统计。这是来自 @anthropic-ai/sdkBetaUsage 类型。
type Usage = {
  input_tokens: number;
  output_tokens: number;
  cache_creation_input_tokens: number | null;
  cache_read_input_tokens: number | null;
  cache_creation: {
    ephemeral_5m_input_tokens: number;
    ephemeral_1h_input_tokens: number;
  } | null;
  server_tool_use: BetaServerToolUsage | null;
  service_tier: "standard" | "priority" | "batch" | null;
  speed: "standard" | "fast" | null;
  inference_geo: string | null;
  iterations: BetaIterationsUsage | null;
};
BetaServerToolUsageBetaIterationsUsage@anthropic-ai/sdk 中定义。

CallToolResult

MCP 工具结果类型(来自 @modelcontextprotocol/sdk/types.js)。structuredContent 是一个 JSON 对象,可以与 content 一起返回,包括图像块。请参阅返回结构化数据
type CallToolResult = {
  content: Array<{
    type: "text" | "image" | "resource";
    // 其他字段因类型而异
  }>;
  structuredContent?: Record<string, unknown>;
  isError?: boolean;
};

ThinkingConfig

控制 Claude 的思考/推理行为。优先于已弃用的 maxThinkingTokens
type ThinkingDisplay = "summarized" | "omitted";

type ThinkingConfig =
  | { type: "adaptive"; display?: ThinkingDisplay } // 模型确定何时以及多少推理(Opus 4.6+)
  | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // 固定思考令牌预算
  | { type: "disabled" }; // 无扩展思考
可选的 display 字段控制思考文本是否以 "summarized""omitted" 形式返回。在 Claude Opus 4.7 及更高版本上,API 默认值为 "omitted",因此设置 "summarized" 以在 thinking 块中接收思考内容。

SpawnedProcess

自定义进程生成的接口(与 spawnClaudeCodeProcess 选项一起使用)。ChildProcess 已满足此接口。
interface SpawnedProcess {
  stdin: Writable;
  stdout: Readable;
  readonly killed: boolean;
  readonly exitCode: number | null;
  kill(signal: NodeJS.Signals): boolean;
  on(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  on(event: "error", listener: (error: Error) => void): void;
  once(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  once(event: "error", listener: (error: Error) => void): void;
  off(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  off(event: "error", listener: (error: Error) => void): void;
}

SpawnOptions

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

McpSetServersResult

setMcpServers() 操作的结果。
type McpSetServersResult = {
  added: string[];
  removed: string[];
  errors: Record<string, string>;
};

RewindFilesResult

rewindFiles() 操作的结果。
type RewindFilesResult = {
  canRewind: boolean;
  error?: string;
  filesChanged?: string[];
  insertions?: number;
  deletions?: number;
};

SDKStatusMessage

状态更新消息(例如,压缩)。
type SDKStatusMessage = {
  type: "system";
  subtype: "status";
  status: "compacting" | null;
  permissionMode?: PermissionMode;
  uuid: UUID;
  session_id: string;
};

SDKTaskNotificationMessage

后台任务完成、失败或停止时的通知。后台任务包括 run_in_background Bash 命令、Monitor 监视和后台子代理。
type SDKTaskNotificationMessage = {
  type: "system";
  subtype: "task_notification";
  task_id: string;
  tool_use_id?: string;
  status: "completed" | "failed" | "stopped";
  output_file: string;
  summary: string;
  usage?: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKToolUseSummaryMessage

对话中工具使用的摘要。
type SDKToolUseSummaryMessage = {
  type: "tool_use_summary";
  summary: string;
  preceding_tool_use_ids: string[];
  uuid: UUID;
  session_id: string;
};

SDKHookStartedMessage

当 hook 开始执行时发出。
type SDKHookStartedMessage = {
  type: "system";
  subtype: "hook_started";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  uuid: UUID;
  session_id: string;
};

SDKHookProgressMessage

在 hook 运行时发出,包含 stdout/stderr 输出。
type SDKHookProgressMessage = {
  type: "system";
  subtype: "hook_progress";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  stdout: string;
  stderr: string;
  output: string;
  uuid: UUID;
  session_id: string;
};

SDKHookResponseMessage

当 hook 完成执行时发出。
type SDKHookResponseMessage = {
  type: "system";
  subtype: "hook_response";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  output: string;
  stdout: string;
  stderr: string;
  exit_code?: number;
  outcome: "success" | "error" | "cancelled";
  uuid: UUID;
  session_id: string;
};

SDKToolProgressMessage

在工具执行时定期发出,以指示进度。
type SDKToolProgressMessage = {
  type: "tool_progress";
  tool_use_id: string;
  tool_name: string;
  parent_tool_use_id: string | null;
  elapsed_time_seconds: number;
  task_id?: string;
  uuid: UUID;
  session_id: string;
};

SDKAuthStatusMessage

在身份验证流程中发出。
type SDKAuthStatusMessage = {
  type: "auth_status";
  isAuthenticating: boolean;
  output: string[];
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskStartedMessage

当后台任务开始时发出。task_type 字段对于后台 Bash 命令和 Monitor 监视为 "local_bash",对于子代理为 "local_agent",或 "remote_agent"
type SDKTaskStartedMessage = {
  type: "system";
  subtype: "task_started";
  task_id: string;
  tool_use_id?: string;
  description: string;
  task_type?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskProgressMessage

在子代理或后台任务运行时定期发出。仅当启用 agentProgressSummaries 时,summary 字段才会被填充。
type SDKTaskProgressMessage = {
  type: "system";
  subtype: "task_progress";
  task_id: string;
  tool_use_id?: string;
  description: string;
  subagent_type?: string;
  usage: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  last_tool_name?: string;
  summary?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskUpdatedMessage

当后台任务的状态发生变化时发出,例如当它从 running 转换为 completed 时。将 patch 合并到按 task_id 键入的本地任务映射中。end_time 字段是 Unix 纪元时间戳(以毫秒为单位),可与 Date.now() 比较。
type SDKTaskUpdatedMessage = {
  type: "system";
  subtype: "task_updated";
  task_id: string;
  patch: {
    status?: "pending" | "running" | "completed" | "failed" | "killed";
    description?: string;
    end_time?: number;
    total_paused_ms?: number;
    error?: string;
    is_backgrounded?: boolean;
  };
  uuid: UUID;
  session_id: string;
};

SDKFilesPersistedEvent

当文件检查点持久化到磁盘时发出。
type SDKFilesPersistedEvent = {
  type: "system";
  subtype: "files_persisted";
  files: { filename: string; file_id: string }[];
  failed: { filename: string; error: string }[];
  processed_at: string;
  uuid: UUID;
  session_id: string;
};

SDKRateLimitEvent

当会话遇到速率限制时发出。
type SDKRateLimitEvent = {
  type: "rate_limit_event";
  rate_limit_info: {
    status: "allowed" | "allowed_warning" | "rejected";
    resetsAt?: number;
    utilization?: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKLocalCommandOutputMessage

来自本地 slash command 的输出(例如,/voice/usage)。在记录中显示为助手样式的文本。
type SDKLocalCommandOutputMessage = {
  type: "system";
  subtype: "local_command_output";
  content: string;
  uuid: UUID;
  session_id: string;
};

SDKCommandsChangedMessage

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

SDKPromptSuggestionMessage

当启用 promptSuggestions 时在每个轮次后发出。包含预测的下一个用户提示。
type SDKPromptSuggestionMessage = {
  type: "prompt_suggestion";
  suggestion: string;
  uuid: UUID;
  session_id: string;
};

AbortError

用于中止操作的自定义错误类。
class AbortError extends Error {}

沙箱配置

SandboxSettings

沙箱行为的配置。使用此选项以编程方式启用命令沙箱和配置网络限制。
type SandboxSettings = {
  enabled?: boolean;
  failIfUnavailable?: boolean;
  autoAllowBashIfSandboxed?: boolean;
  excludedCommands?: string[];
  allowUnsandboxedCommands?: boolean;
  network?: SandboxNetworkConfig;
  filesystem?: SandboxFilesystemConfig;
  ignoreViolations?: Record<string, string[]>;
  enableWeakerNestedSandbox?: boolean;
  ripgrep?: { command: string; args?: string[] };
};
属性类型默认值描述
enabledbooleanfalse为命令执行启用沙箱模式
failIfUnavailablebooleantrue如果 enabledtrue 但沙箱无法启动,则在启动时停止。设置为 false 以回退到沙箱外执行,并在 stderr 上显示警告
autoAllowBashIfSandboxedbooleantrue启用沙箱时自动批准 bash 命令
excludedCommandsstring[][]始终绕过沙箱限制的命令(例如,['docker'])。这些自动运行在沙箱外,无需模型参与
allowUnsandboxedCommandsbooleantrue允许模型请求在沙箱外运行命令。当为 true 时,模型可以在工具输入中设置 dangerouslyDisableSandbox,这会回退到权限系统
networkSandboxNetworkConfigundefined网络特定的沙箱配置
filesystemSandboxFilesystemConfigundefined用于读/写限制的文件系统特定沙箱配置
ignoreViolationsRecord<string, string[]>undefined违规类别到要忽略的模式的映射(例如,{ file: ['/tmp/*'], network: ['localhost'] }
enableWeakerNestedSandboxbooleanfalse为兼容性启用较弱的嵌套沙箱
ripgrep{ command: string; args?: string[] }undefined沙箱环境中的自定义 ripgrep 二进制配置
沙箱取决于平台支持,在 Linux 上,还需要 bubblewrapsocat 等工具。当 enabledtrue 且沙箱无法启动时,query() 报告一条 result 消息,其中 subtype: "error_during_execution",原因在 errors 中,然后停止。应监视该子类型,而不是期望 query() 在生成消息之前抛出异常。要改为运行沙箱外的命令,请设置 failIfUnavailable: false

示例用法

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Build and test my project",
  options: {
    sandbox: {
      enabled: true,
      autoAllowBashIfSandboxed: true,
      network: {
        allowLocalBinding: true
      }
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Unix socket 安全性: allowUnixSockets 选项可以授予对强大系统服务的访问权限。例如,允许 /var/run/docker.sock 实际上通过 Docker API 授予对主机系统的完全访问权限,绕过沙箱隔离。仅允许严格必要的 Unix sockets 并了解每个的安全含义。

SandboxNetworkConfig

沙箱模式的网络特定配置。这些设置适用于当父级 SandboxSettings 中的 enabledtrue 时的沙箱化 Bash 命令。它们不限制 WebFetch 工具,该工具改用权限规则
type SandboxNetworkConfig = {
  allowedDomains?: string[];
  deniedDomains?: string[];
  allowManagedDomainsOnly?: boolean;
  allowLocalBinding?: boolean;
  allowUnixSockets?: string[];
  allowAllUnixSockets?: boolean;
  httpProxyPort?: number;
  socksProxyPort?: number;
};
属性类型默认值描述
allowedDomainsstring[][]沙箱进程可以访问的域名
deniedDomainsstring[][]沙箱进程无法访问的域名。优先于 allowedDomains
allowManagedDomainsOnlybooleanfalse仅限管理设置。在管理设置中设置时,仅遵守来自管理设置的 allowedDomains 条目,来自用户、项目或本地设置的条目被忽略。通过 SDK 选项设置时无效
allowLocalBindingbooleanfalse允许进程绑定到本地端口(例如,用于开发服务器)
allowUnixSocketsstring[][]进程可以访问的 Unix socket 路径(例如,Docker socket)
allowAllUnixSocketsbooleanfalse允许访问所有 Unix sockets
httpProxyPortnumberundefined网络请求的 HTTP 代理端口
socksProxyPortnumberundefined网络请求的 SOCKS 代理端口
内置沙箱代理基于请求的主机名强制执行 allowedDomains,不会终止或检查 TLS 流量,因此域前置等技术可能会绕过它。有关详细信息,请参阅沙箱安全限制,以及安全部署以配置 TLS 终止代理。

SandboxFilesystemConfig

沙箱模式的文件系统特定配置。
type SandboxFilesystemConfig = {
  allowWrite?: string[];
  denyWrite?: string[];
  denyRead?: string[];
};
属性类型默认值描述
allowWritestring[][]允许写入访问的文件路径模式
denyWritestring[][]拒绝写入访问的文件路径模式
denyReadstring[][]拒绝读取访问的文件路径模式

沙箱外命令的权限回退

启用 allowUnsandboxedCommands 时,模型可以通过在工具输入中设置 dangerouslyDisableSandbox: true 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着您的 canUseTool 处理程序被调用,允许您实现自定义授权逻辑。
excludedCommands vs allowUnsandboxedCommands
  • excludedCommands:始终自动绕过沙箱的命令的静态列表(例如,['docker'])。模型对此无法控制。
  • allowUnsandboxedCommands:让模型在运行时通过在工具输入中设置 dangerouslyDisableSandbox: true 来决定是否请求沙箱外执行。
import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Deploy my application",
  options: {
    sandbox: {
      enabled: true,
      allowUnsandboxedCommands: true // 模型可以请求沙箱外执行
    },
    permissionMode: "default",
    canUseTool: async (tool, input) => {
      // 检查模型是否请求绕过沙箱
      if (tool === "Bash" && input.dangerouslyDisableSandbox) {
        // 模型请求在沙箱外运行此命令
        console.log(`Unsandboxed command requested: ${input.command}`);

        if (isCommandAuthorized(input.command)) {
          return { behavior: "allow" as const, updatedInput: input };
        }
        return {
          behavior: "deny" as const,
          message: "Command not authorized for unsandboxed execution"
        };
      }
      return { behavior: "allow" as const, updatedInput: input };
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
此模式使您能够:
  • 审计模型请求: 记录模型何时请求沙箱外执行
  • 实现允许列表: 仅允许特定命令在沙箱外运行
  • 添加批准工作流: 需要对特权操作进行明确授权
使用 dangerouslyDisableSandbox: true 运行的命令具有完整的系统访问权限。确保您的 canUseTool 处理程序仔细验证这些请求。如果 permissionMode 设置为 bypassPermissionsallowUnsandboxedCommands 启用,模型可以自主执行沙箱外的命令,无需任何批准提示。此组合实际上允许模型以静默方式逃离沙箱隔离。

另请参阅