Claude Agent SDK 技术规格说明
版本: 1.0.0
协议版本: 2024-11-05
最后更新: 2026-01-10
原文: Claude Agent SDK Technical Specification
1. 概览
Claude Agent SDK 为 Claude Code 的智能体能力提供可编程访问方式。它使应用能够:
- 使用 Claude 执行自然语言提示
- 以逐 token 或逐消息的方式流式输出响应
- 使用内置工具(文件操作、Shell 命令、Web 访问)
- 通过模型上下文协议(MCP)定义自定义工具
- 通过会话持久化管理多轮对话
- 控制权限与沙箱行为
1.1 核心概念
| 概念 | 描述 |
|---|---|
| Query(查询) | 一次提示执行,可能跨越多个 turn |
| Turn(轮次) | 一次请求-响应循环,可能包含工具调用 |
| Message(消息) | 一段离散的通信单元(system、assistant、user、result) |
| Tool(工具) | Claude 可调用的能力(Read、Write、Bash、自定义 MCP 工具等) |
| Session(会话) | 由 UUID 标识的持久化对话上下文 |
1.2 交互模型
| |
2. 架构
2.1 组件图
| |
2.2 数据流
- 应用程序:使用 prompt 与 options 构建 query
- SDK:以子进程方式启动 Claude Code CLI
- CLI:向 stdout 以流式方式输出 JSON 消息
- SDK:解析 JSON 行并产出强类型消息
- 应用程序:处理消息(展示、日志等)
- CLI:当 query 完成或发生错误时退出
3. CLI 接口
SDK 通过 Claude Code 的命令行接口与其通信。
3.1 基础命令
| |
3.2 必需参数
| 参数 | 描述 |
|---|---|
--print / -p | 非交互模式,输出到 stdout |
--output-format stream-json | 输出换行分隔的 JSON 消息 |
--verbose | stream-json 格式要求必须开启 |
-- | 选项与 prompt 之间的分隔符 |
3.3 可选参数
| 参数 | 类型 | 描述 |
|---|---|---|
--model <model> | string | 模型别名(opus、sonnet、haiku)或完整名称 |
--max-turns <n> | integer | 最大对话轮次数 |
--max-budget-usd <n> | float | 最大预算(USD) |
--system-prompt <text> | string | 自定义 system prompt(替换默认) |
--append-system-prompt <text> | string | 追加到默认 system prompt |
--allowed-tools <tools> | string | 工具白名单(逗号分隔) |
--disallowed-tools <tools> | string | 工具黑名单(逗号分隔) |
--mcp-config <path> | string | MCP server 配置 JSON 路径 |
--include-partial-messages | boolean | 开启 token 级流式输出 |
--dangerously-skip-permissions | boolean | 跳过权限检查 |
--resume <session-id> | string | 恢复指定会话 |
--continue | boolean | 继续最近一次会话 |
3.4 输出格式
| 格式 | 参数 | 描述 |
|---|---|---|
| Text | --output-format text | 人类可读文本输出(默认) |
| JSON | --output-format json | 完成时输出单个 JSON 对象 |
| Stream JSON | --output-format stream-json | 逐行输出 JSON 消息 |
4. 消息协议
所有消息均为带 type 字段的 JSON 对象。消息以换行分隔 JSON(NDJSON)形式输出。
4.1 消息类型
| |
4.2 System 消息
在会话开始时只发送一次。
| |
System 消息字段
| 字段 | 类型 | 描述 |
|---|---|---|
subtype | "init" | 会话开始时固定为 “init” |
uuid | string | 消息唯一标识 |
session_id | string | 会话标识(UUID) |
cwd | string | 工作目录 |
model | string | 当前模型名称 |
tools | string[] | 可用的内置工具 |
mcp_servers | object[] | 已连接的 MCP servers 及其状态 |
permissionMode | string | 当前权限模式 |
apiKeySource | string | 认证来源(见下) |
slash_commands | string[] | 可用的斜杠命令 |
agents | string[] | 可用子智能体类型 |
claude_code_version | string | CLI 版本 |
API Key Source 取值
| 值 | 描述 |
|---|---|
ANTHROPIC_API_KEY | 使用环境变量中的 API Key |
none | 使用 OAuth 认证(通过 claude login 登录) |
config | 使用配置文件中的 API Key |
注意: 当 apiKeySource 为 "none" 时,Claude Code 会使用先前 claude login 保存的 OAuth token 进行认证,从而无需暴露 API Key。
4.3 Assistant 消息
Claude 的响应,可能包含文本与/或工具调用。
| |
Content block 类型
Text block:
| |
Tool use block:
| |
4.4 User 消息
返回给 Claude 的工具结果。
| |
4.5 Result 消息
指示一次 query 完成的最终消息。
| |
Result subtype
| Subtype | 描述 |
|---|---|
success | Query 成功完成 |
error_max_turns | 超过最大轮次限制 |
error_during_execution | 执行期间发生运行时错误 |
error_max_budget_usd | 超过预算上限 |
Result 字段
| 字段 | 类型 | 描述 |
|---|---|---|
is_error | boolean | Query 是否以错误结束 |
duration_ms | integer | 总墙钟时间 |
duration_api_ms | integer | API 调用耗时 |
num_turns | integer | 对话轮次数 |
result | string | 最终文本结果 |
total_cost_usd | float | 总花费(USD) |
usage | object | 聚合 token 用量 |
modelUsage | object | 按模型拆分的用量 |
permission_denials | array | 被拒绝的工具调用列表 |
structured_output | any | 若启用结构化输出则为解析后的 JSON |
errors | string[] | 错误信息列表(当 is_error: true) |
4.6 Stream event 消息
Token 级流式输出(需 --include-partial-messages)。
| |
Stream event 类型
| Event Type | 描述 |
|---|---|
message_start | Assistant 消息开始 |
content_block_start | Content block 开始 |
content_block_delta | Content 增量更新 |
content_block_stop | Content block 结束 |
message_delta | 消息元数据更新 |
message_stop | Assistant 消息结束 |
5. 流式模式
5.1 消息级流式(默认)
未启用 --include-partial-messages 时,消息以完整形式送达:
| |
消息序列示例:
| |
5.2 Token 级流式
启用 --include-partial-messages 后,token 将实时流出:
| |
Token 序列示例:
| |
5.3 抽取流式文本
实时展示文本的伪代码:
| |
6. 工具系统
6.1 内置工具
| 工具 | 描述 | 关键参数 |
|---|---|---|
Read | 读取文件内容 | file_path, offset, limit |
Write | 创建/覆盖文件 | file_path, content |
Edit | 文件内查找替换 | file_path, old_string, new_string |
Glob | 文件模式匹配 | pattern, path |
Grep | 搜索文件内容 | pattern, path, output_mode |
Bash | 执行 shell 命令 | command, timeout |
WebFetch | 拉取 URL 内容 | url, prompt |
WebSearch | Web 搜索 | query |
Task | 启动子智能体 | prompt, subagent_type |
TodoWrite | 管理任务列表 | todos |
6.2 工具输入 Schema
Read 工具:
| |
Edit 工具:
| |
Bash 工具:
| |
Glob 工具:
| |
Grep 工具:
| |
6.3 工具过滤
白名单(仅这些工具可用):
| |
黑名单(这些工具不可用):
| |
7. MCP 集成
Model Context Protocol(MCP)用于接入自定义工具。
7.1 MCP Server 类型
| 类型 | 传输方式 | 使用场景 |
|---|---|---|
stdio | stdin/stdout | 本地进程,自定义工具 |
sse | Server-Sent Events | 远程流式 server |
http | HTTP POST | 远程请求-响应 server |
7.2 MCP 配置文件
| |
用法:
| |
7.3 MCP 工具命名
MCP 工具采用命名空间形式:mcp__<server>__<tool>
示例:mcp__ruby-tools__calculator
7.4 MCP Server 协议(stdio)
MCP server 通过 stdin/stdout 以 JSON-RPC 2.0 通信。
Initialize 握手
客户端请求:
| |
服务端响应:
| |
列出工具(List Tools)
请求:
| |
响应:
| |
调用工具(Call Tool)
请求:
| |
响应:
| |
7.5 实现一个 MCP Server
最小 stdio MCP server 的伪代码:
| |
8. 会话管理
8.1 会话生命周期
| |
8.2 启动新会话
| |
system 消息将包含新的 session_id。
8.3 恢复会话
通过 Session ID:
| |
最近一次会话:
| |
8.4 会话存储
会话本地存储路径:
- macOS/Linux:
~/.claude/sessions/ - Windows:
%USERPROFILE%\.claude\sessions\
9. 权限系统
9.1 权限模式
| 模式 | 描述 |
|---|---|
default | 对敏感操作进行提示确认 |
acceptEdits | 自动批准文件编辑 |
bypassPermissions | 跳过所有权限检查 |
plan | 规划模式,不执行 |
9.2 使用权限模式
| |
9.3 权限拒绝(Permission Denials)
当工具被拒绝时,会在 result 中体现:
| |
10. 配置选项
10.1 完整选项参考
| 选项 | 类型 | 默认值 | CLI 参数 | 描述 |
|---|---|---|---|---|
model | string | auto | --model | 使用的模型 |
max_turns | integer | unlimited | --max-turns | 最大对话轮次数 |
max_budget_usd | float | unlimited | --max-budget-usd | 最大花费 |
system_prompt | string | built-in | --system-prompt | 自定义 system prompt |
allowed_tools | string[] | all | --allowed-tools | 工具白名单 |
disallowed_tools | string[] | none | --disallowed-tools | 工具黑名单 |
permission_mode | string | “default” | --permission-mode | 权限模式 |
mcp_servers | object | {} | --mcp-config | MCP server 配置 |
include_partial_messages | boolean | false | --include-partial-messages | token 流式 |
resume | string | null | --resume | 恢复会话 ID |
continue_session | boolean | false | --continue | 继续最近一次会话 |
cwd | string | process cwd | (process cwd) | 工作目录 |
10.2 模型选择
| 别名 | 完整名称 | 特性 |
|---|---|---|
opus | claude-opus-4-5-20251101 | 能力最强,成本最高 |
sonnet | claude-sonnet-4-5-20250929 | 性能/成本平衡 |
haiku | claude-haiku-4-5-20251001 | 最快,成本最低 |
10.3 System prompt 选项
替换默认:
| |
追加到默认:
| |
11. 错误处理
11.1 错误 result 类型
| Subtype | 原因 | 恢复方式 |
|---|---|---|
error_max_turns | 达到轮次上限 | 增加 max_turns |
error_max_budget_usd | 预算耗尽 | 增加预算 |
error_during_execution | 运行时失败 | 检查 errors 字段 |
11.2 错误响应示例
| |
11.3 JSON-RPC 错误(MCP)
| Code | Message | 含义 |
|---|---|---|
| -32700 | Parse error | JSON 无法解析 |
| -32600 | Invalid Request | 请求格式不正确 |
| -32601 | Method not found | 方法不存在 |
| -32602 | Invalid params | 参数不合法 |
| -32603 | Internal error | 服务器内部错误 |
12. 实现指南
12.1 最小客户端(伪代码)
| |
12.2 消息处理器模式
| |
12.3 MCP Server 模板
| |
12.4 Token 成本计算
| |
附录 A:真实世界 JSON 示例
A.1 实际 System 消息
| |
A.2 实际包含工具调用的 Assistant 消息
| |
A.3 实际工具结果(Tool Result)消息
| |
A.4 实际 Result 消息
| |
A.5 实际 Stream event(Token delta)
| |
附录 B:完整消息流示例
| |
附录 B(续):Token 流式输出流程示例
| |