Skip to main content

安装

在虚拟环境中安装该包。在最近的 Debian、Ubuntu 和 Homebrew Python 安装上,针对系统 Python 运行 pip install 会失败,出现 error: externally-managed-environment 错误。
有关 uv、Windows PowerShell 和 API 密钥设置,请参阅 Agent SDK 快速入门中的设置

query()ClaudeSDKClient 之间选择

Python SDK 提供了两种与 Claude Code 交互的方式: 对于交互式应用程序(如聊天界面)或当下一步操作取决于 Claude 的响应时,请使用 ClaudeSDKClient

函数

此页面上的签名块和裸 async for / async with 片段仅供说明。要运行它们,请将主体包装在 async def main(): ... 中并调用 asyncio.run(main())

query()

为每次与 Claude Code 的交互创建一个新会话。默认情况下返回一个异步迭代器,当消息到达时产生消息。每次调用 query() 都会重新开始,不记得之前的交互,除非你传递 continue_conversation=True 或在 ClaudeAgentOptions 中传递 resume。参见 Sessions

参数

返回

返回一个 AsyncIterator[Message],从对话中产生消息。

示例 - 带选项

tool()

用于定义具有类型安全的 MCP 工具的装饰器。

参数

输入模式选项

  1. 简单类型映射(推荐):
  2. JSON Schema 格式(用于复杂验证):

返回

一个装饰器函数,包装工具实现并返回一个 SdkMcpTool 实例。

示例

ToolAnnotations

工具的行为提示,作为 tool()annotations 参数传递。ToolAnnotations 扩展了 MCP SDK 的 mcp.types.ToolAnnotations,添加了 maxResultSizeChars 字段,你可以用 camelCase 或 snake_case 编写每个提示:ToolAnnotations(readOnlyHint=True)ToolAnnotations(read_only_hint=True) 是等价的。你也可以在 SDK 接受注解的任何地方传递普通的 mcp.types.ToolAnnotations snake_case 名称和类型化的 maxResultSizeChars 字段需要 Python Agent SDK 0.2.140 或更高版本。版本 0.1.31 到 0.2.139 重新导出 mcp.types.ToolAnnotations 不变。在版本 0.1.55 到 0.2.139 上,你仍然可以将 maxResultSizeChars 作为关键字参数传递:MCP 类接受额外字段,SDK 将值转发给 Claude Code。 所有字段都是可选的。客户端不应依赖这些提示做出安全决策。

create_sdk_mcp_server()

创建在 Python 应用程序中运行的进程内 MCP 服务器。

参数

返回

返回一个 McpSdkServerConfig 对象,可以传递给 ClaudeAgentOptions.mcp_servers

示例

list_sessions()

列出带有元数据的过去会话。按项目目录过滤或列出所有项目中的会话。同步;立即返回。

参数

返回类型:SDKSessionInfo

示例

打印项目的 10 个最近会话。结果按 last_modified 降序排序,所以第一项是最新的。省略 directory 以搜索所有项目。

get_session_messages()

从过去的会话中检索消息。同步;立即返回。

参数

返回类型:SessionMessage

示例

get_session_info()

按 ID 读取单个会话的元数据,无需扫描完整项目目录。同步;立即返回。

参数

返回 SDKSessionInfo,如果找不到会话则返回 None

示例

查找单个会话的元数据,无需扫描项目目录。当你已经从之前的运行中获得会话 ID 时很有用。

rename_session()

通过追加自定义标题条目来重命名会话。重复调用是安全的;最新的标题获胜。同步。

参数

如果 session_id 不是有效的 UUID 或 title 为空,则抛出 ValueError;如果找不到会话,则抛出 FileNotFoundError

示例

重命名最近的会话,使其更容易找到。新标题在后续读取时出现在 SDKSessionInfo.custom_title 中。

tag_session()

标记会话。传递 None 以清除标签。重复调用是安全的;最新的标签获胜。同步。

参数

如果 session_id 不是有效的 UUID 或 tag 在清理后为空,则抛出 ValueError;如果找不到会话,则抛出 FileNotFoundError

示例

标记会话,然后在稍后的读取中按该标签过滤。传递 None 以清除现有标签。

ClaudeSDKClient

在多次交换中维持对话会话。 这是 TypeScript SDK 的 query() 函数内部工作方式的 Python 等价物 - 它创建一个可以继续对话的客户端对象。见query() 的比较

方法

上下文管理器支持

客户端可以用作异步上下文管理器以自动管理连接:
重要: 迭代消息时,避免使用 break 提前退出,因为这可能导致 asyncio 清理问题。相反,让迭代自然完成或使用标志来跟踪何时找到了你需要的内容。

示例 - 继续对话

示例 - 使用 ClaudeSDKClient 进行流式输入

示例 - 使用中断

中断后的缓冲行为: interrupt() 发送停止信号但不清除消息缓冲区。被中断任务已产生的消息,包括其 ResultMessage,保留在流中。你必须在读取新查询的响应之前用 receive_response() 清空它们。如果在 interrupt() 之后立即发送新查询并仅调用一次 receive_response(),你将收到被中断任务的消息,而不是新查询的响应。

示例 - 高级权限控制

类型

@dataclass vs TypedDict 此 SDK 使用两种类型。用 @dataclass 装饰的类(如 ResultMessageAgentDefinitionTextBlock)在运行时是对象实例,支持属性访问:msg.result。用 TypedDict 定义的类(如 ThinkingConfigEnabledMcpStdioServerConfigSyncHookJSONOutput)在运行时是普通字典,需要键访问:config["budget_tokens"],而不是 config.budget_tokensClassName(field=value) 调用语法对两者都有效,但只有数据类产生具有属性的对象。

SdkMcpTool

使用 @tool 装饰器创建的 SDK MCP 工具的定义。

Transport

自定义传输实现的抽象基类。使用此类通过自定义通道与 Claude 进程通信(例如,远程连接而不是本地子进程)。
这是一个低级内部 API。接口可能在未来版本中更改。自定义实现必须更新以匹配任何接口更改。
导入:from claude_agent_sdk import Transport

ClaudeAgentOptions

Claude Code 查询的配置数据类。

处理缓慢或停滞的 API 响应

CLI 子进程读取多个环境变量,这些变量控制 API 超时和停滞检测。通过 ClaudeAgentOptions.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:子代理的停滞监视器。当流监视器打开时,默认值为 CLAUDE_STREAM_IDLE_TIMEOUT_MS 加 5 分钟,即 600000,除非你提高该变量。当流监视器关闭时,默认值为 600000。在 v2.1.257 之前,默认值始终为 600000 计时器在每个流事件时重置。停滞时,Claude Code 中止子代理并向父代理报告停滞。对于后台子代理,它也会将任务标记为失败并附加任何部分结果。
  • CLAUDE_ENABLE_STREAM_WATCHDOGCLAUDE_STREAM_IDLE_TIMEOUT_MS:流监视器,当标头已到达但响应体停止流式传输时中止请求。监视器对所有提供商默认启用;设置 CLAUDE_ENABLE_STREAM_WATCHDOG=0 以禁用它。CLAUDE_STREAM_IDLE_TIMEOUT_MS 默认为 300000 并被限制为该最小值。中止后,自动重试涵盖 Claude Code 所做的事情,基于响应进行的程度。 当监视器等待 ANTHROPIC_BASE_URL 后面的网关保持打开的响应时,设置 include_partial_messages 的主机继续接收 ping StreamEvent 消息。将这些帧读作活跃性而不是在沉默时超时会话。在 v2.1.257 之前,帧在最后一个真实流事件后 5 分钟停止。

OutputFormat

结构化输出验证的配置。将其作为 dict 传递给 ClaudeAgentOptions 上的 output_format 字段:

SystemPromptPreset

使用 Claude Code 的预设系统提示和可选添加的配置。

SystemPromptFile

从文件加载自定义系统提示而不是作为字符串传递的配置。SDK 将其映射到 CLI --system-prompt-file 标志。当提示很大时使用文件形式:SDK 在 CLI 子进程 argv 上传递字符串 system_prompt,这受到 OS 命令行长度限制的限制,然后 SDK 才能发送任何 API 请求。在 Linux 上,单个参数长于大约 128 KB 会在进程生成时失败,出现 Argument list too long。在 Windows 上,整个命令行被限制为大约 32 KB,因此字符串形式在更低的阈值处失败。

SettingSource

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

默认行为

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

为什么使用 setting_sources

禁用文件系统设置:
在 Python SDK 0.1.59 及更早版本中,空列表的处理方式与省略选项相同,因此 setting_sources=[] 不会禁用文件系统设置。如果你需要空列表生效,请升级到较新版本。TypeScript SDK 不受影响。
仅加载特定设置源:
仅 SDK 应用程序:
要加载 CLAUDE.md 项目说明,在 setting_sources 中包含 "project"。见 修改系统提示 了解 CLAUDE.md 加载如何与系统提示选项交互。

设置优先级

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

AgentDefinition

以编程方式定义的子代理的配置。
AgentDefinition 字段名称使用 camelCase,如 disallowedToolspermissionModemaxTurns。这些名称直接映射到与 TypeScript SDK 共享的线路格式。这与 ClaudeAgentOptions 不同,后者对等效的顶级字段(如 disallowed_toolspermission_mode)使用 Python snake_case。因为 AgentDefinition 是数据类,传递 snake_case 关键字在构造时会引发 TypeError

PermissionMode

用于控制工具执行的权限模式。

EffortLevel

用于指导思考深度的努力级别。

CanUseTool

工具权限回调函数的类型别名。
回调接收:
  • tool_name:被调用的工具的名称
  • input_data:工具的输入参数
  • context:带有附加信息的 ToolPermissionContext
返回 PermissionResultPermissionResultAllowPermissionResultDeny)。 回调是 SDK 对交互式权限提示的替代:它仅在权限评估流解析为提示时调用。已由 allowed_tools 条目、设置允许规则或权限模式(如 acceptEditsbypassPermissions)批准的工具调用永远不会调用它。要限制每个工具调用,改用 PreToolUse hook 允许规则不会预批准任何模式都不自动批准的操作;见 权限如何被评估 了解其中哪些到达回调以及在 dontAskauto 模式下发生什么。

ToolPermissionContext

传递给工具权限回调的上下文信息。

PermissionResult

权限回调结果的联合类型。

PermissionResultAllow

指示应允许工具调用的结果。

PermissionResultDeny

指示应拒绝工具调用的结果。

PermissionUpdate

用于以编程方式更新权限的配置。

PermissionRuleValue

要在权限更新中添加、替换或移除的规则。

ToolsPreset

使用 Claude Code 的默认工具集的预设工具配置。

ThinkingConfig

控制扩展思考行为。三种配置的联合:
可选的 display 字段控制思考文本是否返回为 "summarized""omitted"。在 Claude Opus 4.7 及更高版本上,API 默认值为 "omitted",因此设置 "summarized" 以在 ThinkingBlock 输出中接收思考内容。Claude Code 不会向 Amazon Bedrock 或 Google Cloud 的 Agent Platform 发送 display,因此在这些提供商上,Opus 4.7 及更高版本即使你将 display 设置为 "summarized" 也会返回空 ThinkingBlock 输出。 因为这些是 TypedDict 类,它们在运行时是普通字典。要么将它们构造为字典字面量,要么调用类作为构造函数;两者都产生 dict。使用 config["budget_tokens"] 访问字段,而不是 config.budget_tokens

TaskBudget

API 端任务预算(以令牌为单位),与 ClaudeAgentOptions 中的 task_budget 字段一起使用。
因为这是 TypedDict,将其作为普通字典传递,如 ClaudeAgentOptions(task_budget={"total": 50000})

SdkBeta

SDK 测试功能的字面类型。
ClaudeAgentOptions 中的 betas 字段一起使用以启用测试功能。
context-1m-2025-08-07 测试版自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此标头无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 Claude Opus 5、Claude Sonnet 5、Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8,它们以标准定价包括 1M 上下文,无需测试版标头。

McpSdkServerConfig

使用 create_sdk_mcp_server() 创建的 SDK MCP 服务器的配置。

McpServerConfig

MCP 服务器配置的联合类型。

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

get_mcp_status() 报告的 MCP 服务器的配置。这是所有 McpServerConfig 传输变体加上用于通过 claude.ai 代理的服务器的仅输出 claudeai-proxy 变体的联合。
McpSdkServerConfigStatusMcpSdkServerConfig 的可序列化形式,仅包含 type"sdk")和 namestr)字段;进程内 instance 被省略。McpClaudeAIProxyServerConfig 具有 type"claudeai-proxy")、urlstr)和 idstr)字段。

McpStatusResponse

来自 ClaudeSDKClient.get_mcp_status() 的响应。在 mcpServers 键下包装服务器状态列表。

McpServerStatus

连接的 MCP 服务器的状态,包含在 McpStatusResponse 中。

SdkPluginConfig

SDK 中加载插件的配置。
示例:
有关创建和使用插件的完整信息,见 Plugins

消息类型

Message

所有可能消息的联合类型。

UserMessage

用户输入消息。
SDK 从 CLI 未修改地传递 tool_use_result。对于外部 MCP 服务器上的工具,其结果包含 resource_link 块,该字典具有 resourceLinks 键,保存具有 TypeScript SDKMcpResourceLink 类型键的字典列表。Claude 将每个链接作为工具结果中的一行文本接收。要呈现服务器返回的文件,请读取 resourceLinks 而不是解析该文本。resourceLinks 键需要 Python Agent SDK 0.2.150 或更高版本和 Claude Code v2.1.257 或更高版本;该 SDK 版本附带的 CLI 满足 Claude Code 要求。 当结果没有链接时,CLI 会省略该键,在来自子代理的结果上也会省略。CLI 每个结果最多保留 50 个链接,一旦列表达到 64 KiB 的序列化 JSON,就停止添加链接。使用 tool() 在进程中定义的工具永远不会产生该键,因为 SDK 在 CLI 看到结果之前将其 resource_link 块展平为文本。

AssistantMessage

带有内容块的助手响应消息。

AssistantMessageError

助手消息的可能错误类型。
底层 CLI 进程可以发出此 Literal 未列出的错误类型,例如 max_output_tokens。SDK 未修改地传递该值,因此将此列表之外的字符串视为处理 unknown 的方式。TypeScript SDKAssistantMessageError 类型列出了 CLI 可以发出的完整值集。

SystemMessage

带有元数据的系统消息。

ResultMessage

带有成本和使用信息的最终结果消息。
subtype 字段确定填充哪些其他字段。它是 "success""error_during_execution""error_max_turns""error_max_budget_usd""error_max_structured_output_retries" 之一。Python 数据类将所有变体展平为一种形状,因此不适用于返回的子类型的字段为 None 多个字段携带有关对话如何结束的诊断详情:
  • is_error:当对话以错误状态结束时为 True。在 error_* 子类型上始终为 True。在 subtype="success" 上,当最终模型请求失败时为 True,这意味着代理循环完成但最后一个 API 调用返回了错误。
  • api_error_status:终止 API 错误的 HTTP 状态代码。当轮次结束时没有错误时为 None。仅在 subtype="success" 上填充。
  • result:在 subtype="success" 上为最终助手消息的文本,或在 error_* 子类型上为 None。当 subtype="success"is_error=True 时,如果可用,此字段保存 API 错误字符串,但可能为空,因此请检查 api_error_status 和前面的 AssistantMessage 内容以获取详情。
  • errors:循环级别的错误字符串,例如最大轮次消息。仅在 error_* 子类型上填充。
  • terminal_reason:查询循环结束的原因,例如 "completed""max_turns""api_error""aborted_streaming""aborted_tools"。值为 "aborted_streaming""aborted_tools" 意味着轮次在完成前被中止。常见原因是 interrupt() 和权限回调返回 PermissionResultDenyinterrupt=True。在早于该字段的 CLI 版本上为 None,在本地命令(如 /voice/usage)的结果上为 None,这些命令绕过查询循环,或在会话严重失败时发出的合成错误结果上为 None。镜像 TypeScript SDK 的 SDKResultMessage.terminal_reason,其列出了完整的值集。
  • origin:触发此轮次的用户消息的来源。在流式输入模式中,检查此项以区分你自己的提示结果(其中 originNone{"kind": "human"})与注入的轮次(如后台任务通知)的结果。需要 Python Agent SDK 0.2.137 或更高版本。
usage 字典仅涵盖主代理循环,不包括子代理和其他嵌套或辅助模型调用。在流式输入模式中,值是按轮次的。优先使用 model_usage 进行令牌和成本计费。usage 字典在存在时包含以下键: model_usage 字典将模型名称映射到每个模型的使用情况。它涵盖通过查询管道进行的每个模型调用:主循环、子代理和内部调用(如压缩和 Workflow 代理)。该管道外的辅助调用(如权限分类器和令牌计数请求)从 model_usage 中排除。将 model_usage 视为估计值,而不是计费声明。 流式输入模式中,model_usagetotal_cost_usd 在轮次间是累积的,因此读取最新结果而不是跨结果求和。有关重置,请参阅在流式输入模式中跟踪成本,有关清零结果,请参阅在会话崩溃后恢复总计 model_usage 中的每个值都是 ModelUsage TypedDict,通过 from claude_agent_sdk.types import ModelUsage 导入。其键使用 camelCase,因为 SDK 从底层 CLI 进程未修改地传递该值,匹配 TypeScript ModelUsage 类型:

StreamEvent

流式事件,用于流式传输期间的部分消息更新。仅在 ClaudeAgentOptionsinclude_partial_messages=True 时接收。通过 from claude_agent_sdk.types import StreamEvent 导入。

RateLimitEvent

当速率限制状态更改时发出(例如,从 "allowed""allowed_warning")。使用此来在用户达到硬限制之前警告他们,或在状态为 "rejected" 时退避。

RateLimitInfo

RateLimitEvent 携带的速率限制状态。

ConversationResetMessage

在不结束连接的情况下替换对话时发出,例如在 /clear 之后。有关重置如何影响后续 ResultMessage 对象上的运行总计,请参阅在流式输入模式中跟踪成本。需要 Python Agent SDK 0.2.137 或更高版本。

TaskStartedMessage

当后台任务启动时发出。后台任务是在主轮次之外跟踪的任何内容:后台 Bash 命令、Monitor 监视、通过 Agent 工具生成的子代理或远程代理。task_type 字段告诉你是哪一个。此命名与 TaskAgent 工具重命名无关。

TaskUsage

后台任务的令牌和计时数据。

TaskProgressMessage

定期为运行的后台任务发出进度更新。

TaskNotificationMessage

当后台任务完成、失败或停止时发出。后台任务包括 run_in_background Bash 命令、Monitor 监视和后台子代理。
当 CLI 将长 MCP 工具调用移到后台时,该调用的工具结果仅保存占位符,该调用的真实结果在此消息中到达。在此类调用的 "completed" 通知上,CLI 添加 resource_links 键,列出工具通过引用返回的文件,具有与 UserMessage.tool_use_result 上的 resourceLinks 键相同的条目和限制。resource_links 键需要 Python Agent SDK 0.2.150 或更高版本和 Claude Code v2.1.257 或更高版本;该 SDK 版本附带的 CLI 满足 Claude Code 要求。 数据类没有 resource_links 字段。从消息继承自 SystemMessagedata 字典读取它:message.data.get("resource_links")。使用 tool_use_id 匹配通知与调用。当结果没有链接时,CLI 会省略该键,在不是 MCP 工具调用的任务的通知上也会省略。

内容块类型

ContentBlock

所有内容块的联合类型。

TextBlock

文本内容块。

ThinkingBlock

思考内容块(用于具有思考能力的模型)。

ToolUseBlock

工具使用请求块。

ToolResultBlock

工具执行结果块。

错误类型

下面的类型定义了你的代码可以捕获的内容。对于与这些类型引发的错误消息相关的条目,包括每个错误的原因和修复方法,请参阅故障排除

ClaudeSDKError

所有 SDK 错误的基础异常类。
当单次 query() 以错误结果结束时,例如达到轮次限制错误,SDK 会在生成最终结果消息后引发 ResultError。Python Agent SDK 0.2.140 之前的版本引发的是不属于 ClaudeSDKError 子类的普通 Exception

CLINotFoundError

当 Claude Code CLI 未安装或找不到时引发。

CLIConnectionError

当连接到 Claude Code 失败时引发。

ProcessError

当 Claude Code 进程失败时引发。

ResultError

当 Claude Code 进程因运行以错误结果结束而退出时引发,例如达到轮次限制错误或 API 错误。在最终 ResultMessage 之后引发。ResultErrorProcessError 的子类,因此现有的 except ProcessError 处理程序也会捕获它。其属性包含该结果消息的字段,因此你可以根据运行失败的原因进行分支,而无需解析消息文本。需要 Python Agent SDK 0.2.140 或更高版本。
要区分失败,请在检查 subtype 之前先检查 terminal_reason。当最终请求失败时,例如 API 错误,Claude Code 会报告 subtype"success",原因在 terminal_reason 中,例如 "api_error";当你设置的限制结束运行时,例如 max_turnsmax_budget_usd,它会报告 error_* 子类型。

CLIJSONDecodeError

当 JSON 解析失败时引发。

Hook 类型

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

HookEvent

支持的 hook 事件类型。
TypeScript SDK 支持 Python 中尚未提供的其他 hook 事件。见 hook 可用性表 了解每个 SDK 的支持情况。

HookCallback

hook 回调函数的类型定义。
参数:
  • input:强类型 hook 输入,具有基于 hook_event_name 的判别联合(见 HookInput
  • tool_use_id:可选工具使用标识符(用于工具相关的 hooks)
  • context:带有附加信息的 hook 上下文
返回 HookJSONOutput

HookContext

传递给 hook 回调的上下文信息。

HookMatcher

用于将 hooks 匹配到特定事件或工具的配置。

HookInput

所有 hook 输入类型的联合类型。实际类型取决于 hook_event_name 字段。

BaseHookInput

所有 hook 输入类型中存在的基础字段。

PreToolUseHookInput

PreToolUse hook 事件的输入数据。

PostToolUseHookInput

PostToolUse hook 事件的输入数据。

PostToolUseFailureHookInput

PostToolUseFailure hook 事件的输入数据。当工具执行失败时调用。

UserPromptSubmitHookInput

UserPromptSubmit hook 事件的输入数据。

StopHookInput

Stop hook 事件的输入数据。

SubagentStopHookInput

SubagentStop hook 事件的输入数据。

PreCompactHookInput

PreCompact hook 事件的输入数据。

NotificationHookInput

Notification hook 事件的输入数据。

SubagentStartHookInput

SubagentStart hook 事件的输入数据。

PermissionRequestHookInput

PermissionRequest hook 事件的输入数据。允许 hooks 以编程方式处理权限决策。

HookJSONOutput

hook 回调返回值的联合类型。

SyncHookJSONOutput

具有控制和决策字段的同步 hook 输出。
在 Python 代码中使用 continue_(带下划线)。发送到 CLI 时会自动转换为 continue

HookSpecificOutput

事件特定输出类型的判别联合。hookEventName 字段确定哪些字段有效。有关每个 hook 事件的可用字段的完整详情,见 使用 hooks 控制执行

AsyncHookJSONOutput

延迟 hook 执行的异步 hook 输出。
在 Python 代码中使用 async_(带下划线)。发送到 CLI 时会自动转换为 async

Hook 使用示例

此示例注册两个 hooks:一个阻止危险的 bash 命令(如 rm -rf /),另一个记录所有工具使用以进行审计。安全 hook 仅在 Bash 命令上运行(通过 matcher),而日志 hook 在所有工具上运行。

工具输入/输出类型

所有内置 Claude Code 工具的输入/输出模式文档。虽然 Python SDK 不将这些导出为类型,但它们代表消息中工具输入和输出的结构。

Agent

工具名称: Agent。之前的名称 Task 仍然被接受作为别名,初始化 SystemMessage 中的 tools 列表为了向后兼容将此工具报告为 Task 输入:
启动一个新代理来自主处理复杂的多步骤任务。 输出(状态:"completed"):
输出(状态:"async_launched"):
输出(状态:"remote_launched"):
返回来自子代理的结果。输出在 status 字段上进行区分:"completed" 用于完成的任务,"async_launched" 用于后台任务,"remote_launched" 用于 Claude Code 分派到远程云会话的任务,其中 sessionUrl 链接到该会话,taskId 标识它。如果 Claude Code 保留了子代理的隔离 worktreecompleted 变体上的 worktreePath 是找到它的位置,worktreeBranch 是当 Claude Code 使用 git 创建 worktree 时的分支。 completed 变体上,resolvedModel 命名子代理启动时的模型,当应用 availableModels 或其他覆盖时,它可能与请求的 model 输入不同。此字段需要 Claude Code v2.1.174 或更高版本。在 async_launched 变体上,resolvedModel 命名代理移到后台时使用的模型,因此在后台转换之前发生的交换会反映在那里。两个变体上的 modelsUsed 字段按顺序列出使用的模型,连续重复被折叠;仅当模型在运行中被交换时才设置。modelsUsed 和后台转换时的 resolvedModel 行为需要 Claude Code v2.1.212 或更高版本。 Claude Code 从子代理的最终 API 请求而不是整个运行中填充 usagetotalTokens。当存在时,usageoutput_tokens_details 下的 thinking_tokens 是该请求的输出令牌中是思考令牌的数量。output_tokens_details 键需要 Python SDK v0.2.136 或更高版本,它捆绑了 Claude Code v2.1.228。

AskUserQuestion

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

Bash

工具名称: Bash 输入:
输出:

Monitor

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

Edit

工具名称: Edit 输入:
输出:

Read

工具名称: Read 输入:
输出(文本文件):
输出(图像):

Write

工具名称: Write 输入:
输出:

Glob

工具名称: Glob 输入:
输出:

Grep

工具名称: Grep 输入:
输出(content 模式):
输出(files_with_matches 模式):

NotebookEdit

工具名称: NotebookEdit 输入:
输出:

WebFetch

工具名称: WebFetch 输入:
输出:

WebSearch

工具名称: WebSearch 输入:
输出:

TodoWrite

工具名称: TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Wherever the tools are available, Claude Code provides the four Task tools, or TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.模型可用性 以选择加入。
输入:
输出:

TaskCreate

工具名称: TaskCreate 输入:
输出:

TaskUpdate

工具名称: TaskUpdate 输入:
输出:

TaskGet

工具名称: TaskGet 输入:
输出:

TaskList

工具名称: TaskList 输入:
输出:

TaskOutput

工具名称: TaskOutput。之前的名称 BashOutput 仍然被接受作为别名。
TaskOutput 已弃用;优先使用 Read 在任务的输出文件路径上。下面的模式对于遇到该工具的 hooks 和权限处理程序仍然有效。
输入:
输出:

TaskStop

工具名称: TaskStop。之前的名称 KillShellKillBash 仍然被接受作为别名。 输入:
输出:

ExitPlanMode

工具名称: ExitPlanMode 输入:
输出:

ListMcpResources

工具名称: ListMcpResourcesTool 输入:
输出:

ReadMcpResource

工具名称: ReadMcpResourceTool 输入:
输出:

构建持续对话界面

以下示例保持一个 ClaudeSDKClient 在多个回合中保持连接,以便 Claude 记住之前的消息。输入 new 可以断开连接并重新连接以获得新的会话,或输入 exit 结束对话。

错误处理

以下示例将 query() 调用包装在四种 错误类型 的处理程序中,这些是 SDK 会抛出的错误。 此示例捕获 ResultError,这需要 Python Agent SDK 0.2.140 或更高版本。

沙箱配置

SandboxSettings

沙箱行为的配置。使用此来启用命令沙箱和以编程方式配置网络限制。
沙箱取决于平台支持,在 Linux 上,需要 bubblewrapsocat 等工具。默认情况下,当 enabledTrue 但沙箱无法启动时,命令在沙箱外运行,并在 stderr 上显示警告。此默认值与 TypeScript SDK 不同,后者中 failIfUnavailable 默认为 true在沙箱设置中设置 "failIfUnavailable": True 以改为停止。该键尚未在 SandboxSettings 上声明,但 SDK 会将其转发给 Claude Code,后者会遵守它。然后 query() 报告一个 ResultMessage,其 subtype="error_during_execution"errors 中的原因。因为这是一个单次 query() 调用,SDK 在生成该错误结果后会引发,所以将循环包装在 try 块中以继续通过它。有关错误合约,请参阅 处理结果

示例用法

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

SandboxNetworkConfig

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

SandboxIgnoreViolations

用于忽略特定沙箱违规的配置。

沙箱外命令的权限回退

allowUnsandboxedCommands 启用时,模型可以通过在工具输入中设置 dangerouslyDisableSandbox: True 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着你的 can_use_tool 处理程序将被调用,允许你实现自定义授权逻辑。列在 excludedCommands 中的命令改为自动绕过沙箱,无需模型参与;请参阅 SandboxSettings 以下示例记录每个沙箱外请求并拒绝它,除非你自己的授权逻辑允许它:
使用 dangerouslyDisableSandbox: True 运行的命令具有完整的系统访问权限。确保你的 can_use_tool 处理程序仔细验证这些请求。如果 permission_mode 设置为 bypassPermissionsallow_unsandboxed_commands 启用,模型可以自主执行沙箱外的命令,无需批准提示,除了 操作无模式自动批准 之外。此组合实际上允许模型无声地逃离沙箱隔离。

另见