通俗版 Claude Code 文档

结构照原 docs,内容改成真能照着做的人话版。

查看原始文档 目录顺序与官方保持一致

SDK references

TypeScript SDK

TypeScript SDK 这一页讲的,就是 TypeScript SDK 这件事在 Claude Code 里到底怎么用。

页面信息

对应原页

Agent SDK reference - TypeScript

页面性质

第三方中文解释页

使用建议

先看人话解释,再对照原页命令和代码

这页不是官方原文,而是顺着官方文档结构做的中文解释版。命令、参数、配置名这些硬东西尽量保留,解释部分则尽量讲成人能照着做的话。

如果你碰到特别敏感的配置、权限或企业环境差异,最好顺手点上面的“查看原始文档”再核一遍。

这一页先讲明白

这页主要讲 TypeScript SDK:Complete API reference for the TypeScript Agent SDK, including all functions, types, and interfaces.

你可以把它当成"SDK references"这块里专门管这一摊事的说明书。

你可以把"TypeScript SDK"理解成 SDK references 这一栏里的一把专门工具。这页不是让你背书,而是教你什么时候该把这把工具拿出来。

原文这页大多会按 Installation、Functions、query()、Parameters 这些环节往下讲。

翻成人话,大概就是:createSdkMcpServer()

第一,先别一上来全开全配。先按最小一步试通,确认没跑偏,再继续往下加。

第二,命令、配置名、参数名这些硬东西尽量保留原样。人话解释是帮你听懂,不是帮你改关键字。

第三,照着原文这几个环节挨个过:Installation -> Functions -> query() -> Parameters。像下地先看水路、再试机器、再正式开干,一步一步最稳。

终端里敲

原页关键片段:Installation

真到动手的时候了,下面这条直接敲一遍,看它回什么。

npm install @anthropic-ai/claude-agent-sdk
关键片段

原页关键片段:query()

先看下面这块原始片段,等会儿再回头看解释会顺得多。

function query({
  prompt,
  options
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query;
关键片段

原页关键片段:startup() 1

这一段要真抓重点,通常就抓下面这块原文。

function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;
终端里敲

原页关键片段:startup() 2

先别急着往下翻,下面这条命令跑完,心里才有底。

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

// Pay startup cost upfront
const warm = await startup({ options: { maxTurns: 3 } });

// Later, when a prompt is ready, this is immediate
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}
关键片段

原页关键片段:tool() 1

先看下面这块原始片段,等会儿再回头看解释会顺得多。

function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,
  extras?: { annotations?: ToolAnnotations }
): SdkMcpToolDefinition<Schema>;
终端里敲

原页关键片段:tool() 2

这一段不是只让你理解意思,下面这条命令就是现在要跑的。

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()

下面这块是这一段最值钱的原文样板,先对着看一眼。

function createSdkMcpServer(options: {
  name: string;
  version?: string;
  tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance;
关键片段

原页关键片段:listSessions() 1

这一段要真抓重点,通常就抓下面这块原文。

function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;
终端里敲

原页关键片段:listSessions() 2

先别急着往下翻,下面这条命令跑完,心里才有底。

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() 1

"getSessionMessages()"这一段里最要紧的原始写法在下面,先看它怎么落地。

function getSessionMessages(
  sessionId: string,
  options?: GetSessionMessagesOptions
): Promise<SessionMessage[]>;
终端里敲

原页关键片段:getSessionMessages() 2

看到这里,别光点头,下面这条命令先跑起来再说。

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()

"getSessionInfo()"这一段里最要紧的原始写法在下面,先看它怎么落地。

function getSessionInfo(
  sessionId: string,
  options?: GetSessionInfoOptions
): Promise<SDKSessionInfo | undefined>;

预留广告位

正文中段响应式广告 等你后面真接 AdSense,这里再放正式广告。

Documentation Index

这里不是让你背"Documentation Index"这个词,而是让你看它真干活时怎么使。

Installation

这里主要是在交代"Installation"这一块会碰到哪些事。

终端里敲

Installation

真到动手的时候了,下面这条直接敲一遍,看它回什么。

npm install @anthropic-ai/claude-agent-sdk

Functions

这一块主要是在说"Functions"真到手上该怎么用,哪里最容易踩坑。

query()

别把这段只当成标题看,它其实是在给"query()"划边界。

关键片段

query()

先看下面这块原始片段,等会儿再回头看解释会顺得多。

function query({
  prompt,
  options
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query;

startup()

这一段主要是在把"startup()"讲实,不是只摆个标题给你看。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

startup() 1

这一段要真抓重点,通常就抓下面这块原文。

function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;
终端里敲

startup() 2

先别急着往下翻,下面这条命令跑完,心里才有底。

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

// Pay startup cost upfront
const warm = await startup({ options: { maxTurns: 3 } });

// Later, when a prompt is ready, this is immediate
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}

tool()

看到这里,就把"tool()"当成一件真要上手的活来看。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

tool() 1

先看下面这块原始片段,等会儿再回头看解释会顺得多。

function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,
  extras?: { annotations?: ToolAnnotations }
): SdkMcpToolDefinition<Schema>;
终端里敲

tool() 2

这一段不是只让你理解意思,下面这条命令就是现在要跑的。

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()

这里不是让你背"createSdkMcpServer()"这个词,而是让你看它真干活时怎么使。

如果你打算把外接能力往里挂,这里提到的 hooks、MCP、skills、memory 都要分清各自负责哪一摊。

关键片段

createSdkMcpServer()

下面这块是这一段最值钱的原文样板,先对着看一眼。

function createSdkMcpServer(options: {
  name: string;
  version?: string;
  tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance;

listSessions()

这一段主要是在把"listSessions()"讲实,不是只摆个标题给你看。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

listSessions() 1

这一段要真抓重点,通常就抓下面这块原文。

function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;
终端里敲

listSessions() 2

先别急着往下翻,下面这条命令跑完,心里才有底。

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()

这一块主要是在说"getSessionMessages()"真到手上该怎么用,哪里最容易踩坑。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

getSessionMessages() 1

"getSessionMessages()"这一段里最要紧的原始写法在下面,先看它怎么落地。

function getSessionMessages(
  sessionId: string,
  options?: GetSessionMessagesOptions
): Promise<SessionMessage[]>;
终端里敲

getSessionMessages() 2

看到这里,别光点头,下面这条命令先跑起来再说。

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()

这一块主要是在说"getSessionInfo()"真到手上该怎么用,哪里最容易踩坑。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

getSessionInfo()

"getSessionInfo()"这一段里最要紧的原始写法在下面,先看它怎么落地。

function getSessionInfo(
  sessionId: string,
  options?: GetSessionInfoOptions
): Promise<SDKSessionInfo | undefined>;

renameSession()

这一块主要是在说"renameSession()"真到手上该怎么用,哪里最容易踩坑。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

renameSession()

"renameSession()"这一段里最要紧的原始写法在下面,先看它怎么落地。

function renameSession(
  sessionId: string,
  title: string,
  options?: SessionMutationOptions
): Promise<void>;

tagSession()

这一块主要是在说"tagSession()"真到手上该怎么用,哪里最容易踩坑。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

tagSession()

"tagSession()"这一段里最要紧的原始写法在下面,先看它怎么落地。

function tagSession(
  sessionId: string,
  tag: string | null,
  options?: SessionMutationOptions
): Promise<void>;

resolveSettings()

这里不是让你背"resolveSettings()"这个词,而是让你看它真干活时怎么使。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

resolveSettings() 1

下面这块是这一段最值钱的原文样板,先对着看一眼。

function resolveSettings(
  options?: ResolveSettingsOptions
): Promise<ResolvedSettings>;
终端里敲

resolveSettings() 2

真到动手的时候了,下面这条直接敲一遍,看它回什么。

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}`);

Types

这一块主要是在说"Types"真到手上该怎么用,哪里最容易踩坑。

Options

这一段主要是在把"Options"讲实,不是只摆个标题给你看。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

Options

这一段要真抓重点,通常就抓下面这块原文。

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",
    },
  },
});

Query object

这一块主要是在说"Query object"真到手上该怎么用,哪里最容易踩坑。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

Query object 1

"Query object"这一段里最要紧的原始写法在下面,先看它怎么落地。

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;
}
终端里敲

Query object 2

看到这里,别光点头,下面这条命令先跑起来再说。

const q = query({ prompt: messageStream });

// Override the model for the rest of the session
await q.applyFlagSettings({ model: "claude-opus-4-6" });

// Later: clear the override and fall back to lower-precedence settings
await q.applyFlagSettings({ model: null });

WarmQuery

这一块主要是在说"WarmQuery"真到手上该怎么用,哪里最容易踩坑。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

WarmQuery

"WarmQuery"这一段里最要紧的原始写法在下面,先看它怎么落地。

interface WarmQuery extends AsyncDisposable {
  query(prompt: string | AsyncIterable<SDKUserMessage>): Query;
  close(): void;
}

SDKControlInitializeResponse

这一段主要是在把"SDKControlInitializeResponse"讲实,不是只摆个标题给你看。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

SDKControlInitializeResponse

这一段要真抓重点,通常就抓下面这块原文。

type SDKControlInitializeResponse = {
  commands: SlashCommand[];
  agents: AgentInfo[];
  output_style: string;
  available_output_styles: string[];
  models: ModelInfo[];
  account: AccountInfo;
  fast_mode_state?: "off" | "cooldown" | "on";
};

AgentDefinition

这一段主要是在把"AgentDefinition"讲实,不是只摆个标题给你看。

关键片段

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;
};

AgentMcpServerSpec

这一块主要是在说"AgentMcpServerSpec"真到手上该怎么用,哪里最容易踩坑。

如果你打算把外接能力往里挂,这里提到的 hooks、MCP、skills、memory 都要分清各自负责哪一摊。

关键片段

AgentMcpServerSpec

"AgentMcpServerSpec"这一段里最要紧的原始写法在下面,先看它怎么落地。

type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;

SettingSource

看到这里,就把"SettingSource"当成一件真要上手的活来看。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

SettingSource 1

先看下面这块原始片段,等会儿再回头看解释会顺得多。

type SettingSource = "user" | "project" | "local";
直接对 Claude 说

SettingSource 2

这一步不用你自己动手配什么,把下面这句话交出去就行。

// Do not load user, project, or local settings from disk
const result = query({
  prompt: "Analyze this code",
  options: { settingSources: [] }
});
关键片段

SettingSource 3

先看下面这块原始片段,等会儿再回头看解释会顺得多。

const result = query({
  prompt: "Analyze this code",
  options: {
    settingSources: ["user", "project", "local"] // Load all settings
  }
});
改配置

SettingSource 4

这一段说完,最后还得写到配置里才算真的生效。

// Load only project settings, ignore user and local
const result = query({
  prompt: "Run CI checks",
  options: {
    settingSources: ["project"] // Only .claude/settings.json
  }
});

PermissionMode

这里不是让你背"PermissionMode"这个词,而是让你看它真干活时怎么使。

关键片段

PermissionMode

下面这块是这一段最值钱的原文样板,先对着看一眼。

type PermissionMode =
  | "default" // Standard permission behavior
  | "acceptEdits" // Auto-accept file edits
  | "bypassPermissions" // Bypass all permission checks
  | "plan" // Planning mode - read-only tools only
  | "dontAsk" // Don't prompt for permissions, deny if not pre-approved
  | "auto"; // Use a model classifier to approve or deny each tool call

CanUseTool

这一块主要是在说"CanUseTool"真到手上该怎么用,哪里最容易踩坑。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

CanUseTool

"CanUseTool"这一段里最要紧的原始写法在下面,先看它怎么落地。

type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  options: {
    signal: AbortSignal;
    suggestions?: PermissionUpdate[];
    blockedPath?: string;
    decisionReason?: string;
    toolUseID: string;
    agentID?: string;
  }
) => Promise<PermissionResult>;

PermissionResult

这一段主要是在把"PermissionResult"讲实,不是只摆个标题给你看。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

PermissionResult

这一段要真抓重点,通常就抓下面这块原文。

type PermissionResult =
  | {
      behavior: "allow";
      updatedInput?: Record<string, unknown>;
      updatedPermissions?: PermissionUpdate[];
      toolUseID?: string;
    }
  | {
      behavior: "deny";
      message: string;
      interrupt?: boolean;
      toolUseID?: string;
    };

ToolConfig

这一段主要是在把"ToolConfig"讲实,不是只摆个标题给你看。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

ToolConfig

这一段要真抓重点,通常就抓下面这块原文。

type ToolConfig = {
  askUserQuestion?: {
    previewFormat?: "markdown" | "html";
  };
};

McpServerConfig

这一块主要是在说"McpServerConfig"真到手上该怎么用,哪里最容易踩坑。

如果你打算把外接能力往里挂,这里提到的 hooks、MCP、skills、memory 都要分清各自负责哪一摊。

关键片段

McpServerConfig 1

"McpServerConfig"这一段里最要紧的原始写法在下面,先看它怎么落地。

type McpServerConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfigWithInstance;
关键片段

McpServerConfig 2

"McpServerConfig"这一段里最要紧的原始写法在下面,先看它怎么落地。

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

McpServerConfig 3

"McpServerConfig"这一段里最要紧的原始写法在下面,先看它怎么落地。

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

McpServerConfig 4

"McpServerConfig"这一段里最要紧的原始写法在下面,先看它怎么落地。

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

SdkPluginConfig

看到这里,就把"SdkPluginConfig"当成一件真要上手的活来看。

关键片段

SdkPluginConfig 1

先看下面这块原始片段,等会儿再回头看解释会顺得多。

type SdkPluginConfig = {
  type: "local";
  path: string;
};
关键片段

SdkPluginConfig 2

先看下面这块原始片段,等会儿再回头看解释会顺得多。

plugins: [
  { type: "local", path: "./my-plugin" },
  { type: "local", path: "/absolute/path/to/plugin" }
];

Message Types

这里不是让你背"Message Types"这个词,而是让你看它真干活时怎么使。

SDKMessage

看到这里,就把"SDKMessage"当成一件真要上手的活来看。

关键片段

SDKMessage

先看下面这块原始片段,等会儿再回头看解释会顺得多。

type SDKMessage =
  | SDKAssistantMessage
  | SDKUserMessage
  | SDKUserMessageReplay
  | SDKResultMessage
  | SDKSystemMessage
  | SDKPartialAssistantMessage
  | SDKCompactBoundaryMessage
  | SDKStatusMessage
  | SDKLocalCommandOutputMessage
  | SDKHookStartedMessage
  | SDKHookProgressMessage
  | SDKHookResponseMessage
  | SDKPluginInstallMessage
  | SDKToolProgressMessage
  | SDKAuthStatusMessage
  | SDKTaskNotificationMessage
  | SDKTaskStartedMessage
  | SDKTaskProgressMessage
  | SDKTaskUpdatedMessage
  | SDKFilesPersistedEvent
  | SDKToolUseSummaryMessage
  | SDKRateLimitEvent
  | SDKPermissionDeniedMessage
  | SDKPromptSuggestionMessage;

SDKAssistantMessage

这一块主要是在说"SDKAssistantMessage"真到手上该怎么用,哪里最容易踩坑。

看这段时要特别盯工具和权限边界,别为了省事一把全开。

关键片段

SDKAssistantMessage

"SDKAssistantMessage"这一段里最要紧的原始写法在下面,先看它怎么落地。

type SDKAssistantMessage = {
  type: "assistant";
  uuid: UUID;
  session_id: string;
  message: BetaMessage; // From Anthropic SDK
  parent_tool_use_id: string | null;
  error?: SDKAssistantMessageError;
};

SDKUserMessage

这里不是让你背"SDKUserMessage"这个词,而是让你看它真干活时怎么使。

这里还牵扯作用域,意思就是这条规则到底管当前项目、你个人,还是只管这一趟会话。

关键片段

SDKUserMessage

下面这块是这一段最值钱的原文样板,先对着看一眼。

type SDKUserMessage = {
  type: "user";
  uuid?: UUID;
  session_id: string;
  message: MessageParam; // From Anthropic SDK
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  shouldQuery?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
};

照着做一遍

如果你不想来回翻,就先照这几步顺着做。

每做完一步就看一下结果,再决定要不要继续往下。

终端里敲

第 1 步:Installation

真到动手的时候了,下面这条直接敲一遍,看它回什么。

npm install @anthropic-ai/claude-agent-sdk
关键片段

第 2 步:query()

先看下面这块原始片段,等会儿再回头看解释会顺得多。

function query({
  prompt,
  options
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query;
关键片段

第 3 步:startup() 1

这一段要真抓重点,通常就抓下面这块原文。

function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;
终端里敲

第 4 步:startup() 2

先别急着往下翻,下面这条命令跑完,心里才有底。

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

// Pay startup cost upfront
const warm = await startup({ options: { maxTurns: 3 } });

// Later, when a prompt is ready, this is immediate
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}

一眼看懂这一页

先把这页到底在讲什么看明白,再去碰具体命令和配置,最不容易绕晕。

TypeScript SDK
   |
   v
这是 SDK references 里的一摊要紧活
   |
   v
先弄懂,再下手

文末提醒

这站会按官方 docs 的导航和内容变化继续重生成,原站加页、删页、改页时,这里会跟着更新。

人话解释会尽量顺着原页往下讲,但命令、参数名、配置名这些硬东西还是保留原样,免得你抄过去跑不起来。