跳轉到主要內容

安裝

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[]>>{}事件的 hooks 回調
includeHookEventsbooleanfalse將 hooks 生命週期事件包括在消息流中,作為 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 服務器請求用戶輸入且沒有 hooks 首先處理它時調用。未提供時,未處理的引出請求會自動被拒絕
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 以將每個會話上下文移到第一個用戶消息中以獲得 跨機器更好的提示 cache 重用
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;
};
返回退出 Plan Mode 後的計劃狀態。

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

MCP 服務器的配置,如 mcpServerStatus() 報告的那樣。這是所有 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 字段是 "local_bash" 用於後台 Bash 命令和 Monitor 監視,"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

子代理或後台任務運行時定期發出。summary 字段僅在啟用 agentProgressSummaries 時填充。
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 啟用,模型可以自主執行沙箱外的命令,無需任何批准提示。此組合實際上允許模型無聲地逃離沙箱隔離。

另見