SDK の API リファレンス
Agent SDK の関数・クラス・Options と ClaudeAgentOptions の全フィールド・メッセージとフックの型・ツールの入力・サンドボックス設定を、TypeScript と Python で並べた辞書です。
Agent SDK の TypeScript 版(@anthropic-ai/claude-agent-sdk)と Python 版(claude-agent-sdk)の API を、辞書として引けるようにまとめたページです。関数・主要な型・オプションの全フィールド・メッセージの型・フックの型・ツールの入力・サンドボックスの設定を表にしています。使い方は Agent SDK の基本、セッションと入出力は SDK のセッションと入出力、ツール・権限・フックは SDK のツール・権限・拡張 にあります。
- 入口は
query()。TypeScript はQueryオブジェクト、Python は非同期イテレーターを返す - 設定は TypeScript が
Options、Python がClaudeAgentOptions(名前は camelCase と snake_case で対応する) - 結果メッセージの
subtypeとtotal_cost_usdが、成否と費用の見積もりを持つ - TypeScript の SDK バージョンは同梱の Claude Code のバージョンに合わせて進み(v0.3.191 が Claude Code v2.1.191 を同梱)、機能ごとの要件は表の説明にある
インストール#
| 言語 | コマンド | 備考 |
|---|---|---|
| TypeScript | npm install @anthropic-ai/claude-agent-sdk |
プラットフォーム別のネイティブバイナリを optional dependency として同梱する |
| Python | pip install claude-agent-sdk |
仮想環境へ入れる。最近の Debian・Ubuntu・Homebrew の Python では、システムの Python へ pip install すると error: externally-managed-environment で失敗する |
- TypeScript は、パッケージマネージャーが optional dependencies を飛ばすと
Native CLI binary for <platform>-<arch> not foundを投げます。libcのフィールドを適用しない Yarn 1.x では、Linux で glibc と musl の両方のパッケージが入ります(v0.2.141 以降の SDK は正しいほうを起動します) - TypeScript のルートのエントリは
zodと@modelcontextprotocol/sdkの自前のコピーを持ちます。/coreのエントリはそれらを自分のnode_modulesから読みます。1つのプロセスでは、ルートか/coreのどちらか一方だけから読み込みます(両方だと SDK のクラスと状態が2つできる) - 単一の実行ファイルへのコンパイルは、
bun build --compileの場合に起動の失敗の原因が違います(Agent SDK の基本 の「CLI の起動」)
関数#
TypeScript#
| 関数 | 内容 |
|---|---|
query({ prompt, options }) |
メッセージを順に返す非同期ジェネレーター(Query)を作る。prompt は文字列か AsyncIterable<SDKUserMessage> |
startup({ options, initializeTimeoutMs }) |
CLI のサブプロセスを先に起動し、初期化の手順まで済ませる。WarmQuery を返し、あとで .query() を1回だけ呼べる。initializeTimeoutMs の既定は 60000 |
prewarm({ options, initializeTimeoutMs }) |
(Alpha。v0.3.282 以降)セッションが決まる前に予備のプロセスを起こす。SpareProcess を返し、あとで claim() で結び付ける |
tool(name, description, inputSchema, handler, extras?) |
型安全な MCP ツールの定義を作る。入力は Zod のスキーマ(Zod 3 と 4 に対応) |
createSdkMcpServer({ name, version?, instructions?, tools?, alwaysLoad?, timeout? }) |
アプリと同じプロセスで動く MCP サーバーを作る |
listSessions(options?) |
過去のセッションを軽いメタデータで一覧にする |
getSessionMessages(sessionId, options?) |
過去のセッションのトランスクリプトから、user と assistant のメッセージを読む |
getSessionInfo(sessionId, options?) |
1つのセッションのメタデータを読む(見つからなければ undefined) |
renameSession(sessionId, title, options?) |
セッションの名前を変える(最後の名前が有効) |
tagSession(sessionId, tag, options?) |
セッションにタグを付ける(null で消す) |
resolveSettings(options?) |
(Alpha)CLI を起動せず、あるディレクトリで有効な設定を、CLI と同じ統合の処理で求める |
startup() と prewarm() の詳しいところです。
startup():アプリの起動時などに早めに呼び、プロンプトが決まったら返り値の.query()を呼ぶと、サブプロセスの起動と初期化を待たずに済みます。作業ディレクトリがまだ分からないならprewarm()を使いますprewarm():予備のプロセスは、options.cwdがあればそこで、なければ Claude Code の設定ディレクトリの下の私用の一時ディレクトリで待ちます。予備1つがおよそ 230〜260 MB のメモリを使います。optionsにresume・continue・forkSessionがあると投げます。claimで設定できないもの(mcpServers・hooks・canUseTool・settingSources・systemPrompt・pluginsなど)は予備の寿命の間固定なので、組み合わせごとに予備を1つ持ちます
tool() の引数です。
| 引数 | 型 | 内容 |
|---|---|---|
name |
string |
ツールの名前 |
description |
string |
ツールが何をするかの説明 |
inputSchema |
Schema extends AnyZodRawShape |
入力パラメーターを定義する Zod のスキーマ |
handler |
(args, extra) => Promise<CallToolResult> |
ツールの処理を行う非同期関数 |
extras |
{ annotations?; searchHint?; alwaysLoad? } |
任意。annotations は MCP の挙動のヒント。searchHint はツール検索が有効なとき、後回しのツール一覧に出る1行の説明。alwaysLoad: true は全スキーマを最初のプロンプトに残す |
createSdkMcpServer() のオプションです。
| オプション | 型 | 内容 |
|---|---|---|
name |
string |
MCP サーバーの名前 |
version |
string |
任意のバージョン文字列 |
instructions |
string |
任意。initialize で返り、モデルへは MCP の指示ブロックとして出る |
tools |
Array<SdkMcpToolDefinition> |
tool() で作ったツール定義の配列 |
alwaysLoad |
boolean |
true なら、このサーバーの全ツールが最初のプロンプトに残り、ツール検索の後ろに回らない |
timeout |
number |
このサーバーのツール呼び出しのタイムアウト(ミリ秒)。MCP_TOOL_TIMEOUT の代わりに適用される。1000 以上の整数(v0.3.248 以降) |
セッション関数のオプションと戻り値です。
| 関数 | オプション | 内容 |
|---|---|---|
listSessions |
dir・limit・includeWorktrees(既定 true) |
dir を省くとすべてのプロジェクト。git リポジトリ内の dir では、全 worktree のセッションを含める |
getSessionMessages |
dir・limit・offset |
dir を省くとすべてのプロジェクトから探す |
getSessionInfo・renameSession・tagSession |
dir |
省くとすべてのプロジェクトのディレクトリから探す |
SDKSessionInfo のプロパティです。
| プロパティ | 型 | 内容 |
|---|---|---|
sessionId |
string |
セッションの一意の ID(UUID) |
summary |
string |
表示用の題。カスタムの題・直近のプロンプト・自動生成の要約・最初のプロンプトのどれか |
lastModified |
number |
最終更新の時刻(エポックからのミリ秒) |
fileSize |
number | undefined |
セッションファイルのバイト数。ローカルの JSONL のときだけ入る |
customTitle |
string | undefined |
カスタムの題(--name・/rename・フックの sessionTitle・renameSession())。なければ自動生成の題 |
firstPrompt |
string | undefined |
セッションの最初の意味あるユーザーのプロンプト |
gitBranch |
string | undefined |
セッションの終わりの git ブランチ |
cwd |
string | undefined |
セッションの作業ディレクトリ |
tag |
string | undefined |
ユーザーが付けたタグ |
createdAt |
number | undefined |
作成時刻(最初の項目のタイムスタンプ。ミリ秒) |
SessionMessage のプロパティです。
| プロパティ | 型 | 内容 |
|---|---|---|
type |
"user" | "assistant" |
メッセージの役割 |
uuid |
string |
メッセージの一意の識別子 |
session_id |
string |
属するセッション |
message |
unknown |
トランスクリプトの生のペイロード |
parent_tool_use_id |
string | null |
サブエージェントのメッセージでは、それを起こした Agent か Skill の呼び出しの tool_use_id |
parent_agent_id |
string | null |
入れ子のサブエージェントのメッセージでは、それを起こしたサブエージェントの agentId(Claude Code v2.1.202 以降) |
resolveSettings() のオプションと戻り値です。
| オプション | 型 | 既定 | 内容 |
|---|---|---|---|
cwd |
string |
process.cwd() |
project と local の設定を解決する基準のディレクトリ |
settingSources |
SettingSource[] |
全ソース | 読み込むファイルのソース。[] で user・project・local を飛ばす |
managedSettings |
Settings |
undefined |
組み込むホストが渡す、ポリシー層の設定。policyHelper は実行しない |
serverManagedSettings |
Settings |
undefined |
/api/claude_code/settings のサーバー管理の設定。渡したときだけ含める |
戻り値の ResolvedSettings は、effective(統合後の設定)・provenance(各キーを与えたソース)・sources(ソースごとの生の設定。優先度の低い順)を持ちます。MDM のソースは読みますが、policyHelper は実行せず、サーバー管理の設定は取得しません。
Python#
| 関数 | 内容 |
|---|---|
query(*, prompt, options=None, transport=None) |
既定では呼び出しごとに新しいセッションを作り、メッセージを返す非同期イテレーターを返す。前の対話の記憶は、continue_conversation=True か resume を渡さない限りない |
tool(name, description, input_schema, annotations=None) |
MCP ツールを定義するデコレーター。SdkMcpTool を返す |
create_sdk_mcp_server(name, version="1.0.0", tools=None) |
アプリ内で動くプロセス内の MCP サーバーを作る。McpSdkServerConfig を返し、mcp_servers に渡す |
list_sessions(directory=None, limit=None, offset=0, include_worktrees=True) |
過去のセッションを一覧にする |
get_session_messages(session_id, directory=None, limit=None, offset=0) |
セッションのメッセージを読む |
get_session_info(session_id, directory=None) |
1つのセッションの情報を読む |
rename_session(session_id, title, directory=None) |
セッションの名前を変える |
tag_session(session_id, tag, directory=None) |
セッションにタグを付ける(None で消す) |
tool() の入力スキーマは、簡単な型の対応({"text": str, "count": int, "enabled": bool}、推奨)か、複雑な検証のための JSON Schema 形式(type・properties・required・minimum など)です。
Python の SDKSessionInfo のプロパティです。
| プロパティ | 型 | 内容 |
|---|---|---|
session_id |
str |
セッションの一意の ID |
summary |
str |
表示用の題 |
last_modified |
int |
最終更新の時刻(エポックからのミリ秒) |
file_size |
int | None |
セッションファイルのバイト数(リモートのストレージでは None) |
custom_title |
str | None |
ユーザーが付けた題。なければ自動生成の題 |
first_prompt |
str | None |
最初の意味あるユーザーのプロンプト |
git_branch |
str | None |
セッションの終わりの git ブランチ |
cwd |
str | None |
作業ディレクトリ |
tag |
str | None |
ユーザーが付けたタグ |
created_at |
int | None |
作成時刻(ミリ秒) |
Python の SessionMessage は、type("user" か "assistant")・uuid・session_id・message(生の内容)・parent_tool_use_id・parent_agent_id(Python Agent SDK 0.2.140 以降)を持ちます。
query() と ClaudeSDKClient の違い(Python)#
| 機能 | query() |
ClaudeSDKClient |
|---|---|---|
| セッション | 既定で新しいセッションを作る | 同じセッションを使い回す |
| 会話 | 1回のやり取り | 同じ文脈で複数のやり取り |
| 接続 | 自動で管理 | 手動で制御 |
| ストリーミング入力 | 使える | 使える |
| 割り込み | 使えない | 使える |
| フック | 使える | 使える |
| 自作ツール | 使える | 使える |
| 会話の継続 | continue_conversation か resume で手動 |
自動 |
| 向く用途 | 1回きりの作業 | 続く会話 |
チャット画面のような対話的なアプリや、次の動作が Claude の応答に依存するときは ClaudeSDKClient を使います。
ClaudeSDKClient のメソッド#
| メソッド | 内容 |
|---|---|
__init__(options, transport) |
クライアントを初期化する |
connect(prompt) |
任意の最初のプロンプトかメッセージのストリームつきで接続する |
query(prompt, session_id="default") |
ストリーミングモードで新しいリクエストを送る |
receive_messages() |
Claude からのすべてのメッセージを非同期イテレーターで受け取る |
receive_response() |
ResultMessage まで(含む)のメッセージを受け取る |
interrupt() |
割り込みの信号を送る(ストリーミングモードだけ) |
set_permission_mode(mode) |
現在のセッションの権限モードを変える |
set_model(model) |
現在のセッションのモデルを変える。None で Claude Code の既定のモデルに戻る |
rewind_files(user_message_id) |
ファイルを、その user メッセージの時点の状態へ戻す。enable_file_checkpointing=True が必要 |
get_context_usage() |
コンテキストの窓の使用量を、カテゴリ・スキル・ツール別に分けて返す(ContextUsageResponse)。対話のセッションの /context と同じデータ。計算のために、メッセージのストリームに現れないトークン数え上げ(token counting)の API リクエストを複数回出す(ストリームを読むコスト集計には見えない。Anthropic API ではトークン数え上げに課金されない)。apiUsage は最新の API 応答の使用量で、セッションの累計ではない。型の任意のキー deferredBuiltinTools・systemTools・systemPromptSections は Claude Code が設定しないので、型にあっても無いものとして扱う。型 ContextUsageResponse のキーは categories・totalTokens・maxTokens・rawMaxTokens・percentage・model・isAutoCompactEnabled・memoryFiles・mcpTools・agents・gridRows と任意のキー |
get_mcp_status() |
設定済みの MCP サーバーすべての状態を取る(McpStatusResponse) |
reconnect_mcp_server(server_name) |
失敗した、または切れた MCP サーバーへの接続を再試行する |
toggle_mcp_server(server_name, enabled) |
MCP サーバーを途中で有効・無効にする。stdio・SSE・HTTP のサーバーを無効にするとツールが外れる |
stop_task(task_id) |
動いているバックグラウンドのタスクを止める。そのあと "stopped" の TaskNotificationMessage が来る |
get_server_info() |
使えるコマンドと出力スタイルを含む、サーバーの初期化の情報を取る |
disconnect() |
切断する |
注意
async with ClaudeSDKClient() as client: で、接続と切断を任せられます。メッセージの反復を break で途中で抜けると、asyncio の後始末の問題を起こすことがあります。反復は最後まで進めるか、フラグで見つけたかを追います。
TypeScript の Options#
query() に渡す設定です(既定の列の「CLI の既定」は、CLI が決める値)。
| プロパティ | 型 | 既定 | 内容 |
|---|---|---|---|
abortController |
AbortController |
new AbortController() |
処理を取り消すためのコントローラー |
additionalDirectories |
string[] |
[] |
Claude が使える追加のディレクトリ。それぞれ --add-dir で渡され、project の設定ソースがあればスキル・コマンド・サブエージェントも読み込まれる |
agent |
string |
undefined |
メインスレッドのエージェント名。agents オプションか設定で定義済みであること |
agents |
Record<string, AgentDefinition> |
undefined |
サブエージェントをプログラムで定義する |
agentProgressSummaries |
boolean |
false |
true で、サブエージェントの1行の進捗の要約を作り、task_progress イベントの summary で転送する |
allowDangerouslySkipPermissions |
boolean |
false |
権限を飛ばす機能を有効にする。permissionMode: 'bypassPermissions' に必須(起動時も setPermissionMode() でのあとからも) |
allowedTools |
string[] |
[] |
確認なしで自動承認するツール。Claude をこれらだけに制限しない。タスク管理のツールを入れると有効にもなる |
betas |
SdkBeta[] |
[] |
ベータ機能を有効にする |
canUseTool |
CanUseTool |
undefined |
権限の評価が確認へ回ったときだけ呼ばれる、独自の権限の関数 |
continue |
boolean |
false |
直近の会話を続ける |
cwd |
string |
process.cwd() |
作業ディレクトリ |
debug |
boolean |
false |
Claude Code のプロセスのデバッグモード |
debugFile |
string |
undefined |
デバッグログを書くファイルパス。デバッグモードも暗黙に有効にする |
disallowedTools |
string[] |
[] |
拒否するツール。素の名前は文脈から外し、範囲指定のルールは一致する呼び出しをすべてのモードで拒否する |
effort |
'low' | 'medium' | 'high' | 'xhigh' | 'max' |
undefined |
応答にかける労力。適応型の思考と組み合わさり、思考の深さを導く |
enableFileCheckpointing |
boolean |
false |
巻き戻し用にファイルの変更を追跡する |
env |
Record<string, string | undefined> |
process.env |
環境変数。指定すると、サブプロセスの環境を置き換える(統合ではない)。PATH などを残すには { ...process.env, YOUR_VAR: 'value' }。CLAUDE_AGENT_SDK_CLIENT_APP でアプリを User-Agent に示せる |
executable |
'bun' | 'deno' | 'node' |
自動検出 | 使う JavaScript のランタイム |
executableArgs |
string[] |
[] |
実行ファイルへ渡す引数 |
extraArgs |
Record<string, string | null> |
{} |
追加の引数 |
fallbackModel |
string |
undefined |
本命が失敗したときのモデル。カンマ区切りで複数 |
forkSession |
boolean |
false |
resume で再開するとき、元を続けずに新しいセッション ID へ分岐する |
forwardSubagentText |
boolean |
false |
サブエージェントのテキストと思考のブロックを、parent_tool_use_id つきの assistant・user のメッセージとして転送する。省くと、tool_use と tool_result だけ。すべての入れ子の深さは v2.1.219 以降(それより前は深さ1のみ)。フォークしたスキルが起こすサブエージェントは v2.1.275 以降 |
hooks |
Partial<Record<HookEvent, HookCallbackMatcher[]>> |
{} |
イベントごとのフックのコールバック |
includeHookEvents |
boolean |
false |
フックのライフサイクルのイベントを、メッセージストリームに含める。SessionStart と Setup のものは常に含まれる |
includePartialMessages |
boolean |
false |
部分メッセージのイベントを含める |
loadTimeoutMs |
number |
60000 |
(Alpha)再開時の sessionStore.load() と listSubkeys() の呼び出しごとのタイムアウト(ミリ秒) |
managedSettings |
Settings |
undefined |
ホストのプロセスが、起こしたセッションへ渡すポリシー層の設定。管理者が配った管理設定があるマシンでは、管理者の最優先のソースが parentSettingsBehavior: 'merge' を設定しない限り無視される |
maxBudgetUsd |
number |
undefined |
クライアント側の費用の見積もりがこの USD に達したらクエリを止める。呼び出し自身の支出だけを数える |
maxThinkingTokens |
number |
undefined |
非推奨。thinking を使う。思考の最大トークン数 |
maxTurns |
number |
undefined |
エージェントのターン(ツール使用の往復)の最大数 |
mcpServers |
Record<string, McpServerConfig> |
{} |
MCP サーバーの設定 |
model |
string |
CLI の既定 | Claude のモデルのエイリアスか完全なモデル名 |
onElicitation |
(request, { signal }) => Promise<ElicitationResult> |
undefined |
MCP サーバーが入力を求め、フックが先に処理しなかったときに呼ばれる。なければ自動で拒否される |
outputFormat |
{ type: 'json_schema', schema: JSONSchema } |
undefined |
エージェントの結果の出力形式 |
outputStyle |
string |
undefined |
Options のフィールドではない。インラインの settings か設定ファイルで指定する |
pathToClaudeCodeExecutable |
string |
同梱のネイティブバイナリから自動で解決 | Claude Code の実行ファイルのパス。optional dependencies を飛ばした、または対応外のプラットフォームのときだけ要る |
permissionMode |
PermissionMode |
undefined |
セッションの権限モード。省くと auto モードで始まることがある |
permissionPromptToolName |
string |
undefined |
権限確認に使う MCP ツール名 |
permissionPrompts |
'host' | 'none' |
'host' |
権限確認に誰が答えるか。'host' は canUseTool か permissionPromptToolName のツールへ回し、'none' は確認が要る呼び出しを拒否する(Claude Code v2.1.259 以降) |
persistSession |
boolean |
true |
false でディスクへのセッションの保存を止める。あとで再開できなくなる |
planModeInstructions |
string |
undefined |
plan モードの独自の手順。permissionMode が 'plan' のとき、既定の手順の本体を置き換える |
plugins |
SdkPluginConfig[] |
[] |
ローカルのパスからプラグインを読み込む |
projectConfigRoot |
string |
undefined |
cwd が worktree である、信頼したチェックアウトの絶対パス。project の設定・.mcp.json・.claude/ のスキルなどを、cwd でなくここから読む。CLAUDE.md とルールは cwd から。Claude Code v2.1.275 以降 |
promptSuggestions |
boolean |
false |
プロンプトの提案を有効にする。ターンのあと、予測した次のユーザーのプロンプトを持つ prompt_suggestion が出る |
resume |
string |
undefined |
再開するセッション ID |
resumeDropsTurn |
string |
undefined |
resumeSessionAt とともに、切り詰める再開が捨てるターンのプロンプトの UUID。捨てる範囲にそのターン以外のものがあると再開を拒む(Claude Code v2.1.223 以降) |
resumeSessionAt |
string |
undefined |
特定のメッセージ UUID のところまでで再開する |
sandbox |
SandboxSettings |
undefined |
サンドボックスの動作をプログラムで設定する |
sessionId |
string |
自動生成 | 自動生成の代わりに使う、セッションの UUID |
sessionStore |
SessionStore |
undefined |
トランスクリプトを外部のバックエンドへ写し、別のホストで再開できるようにする |
sessionStoreFlush |
'batched' | 'eager' |
'batched' |
(Alpha)sessionStore のフラッシュのモード |
settings |
string | Settings |
undefined |
インラインの設定のオブジェクト・設定ファイルのパス・インラインの JSON 文字列。applyFlagSettings() で実行時に変えられる |
settingSources |
SettingSource[] |
CLI の既定(全ソース) | 読み込むファイルベースの設定。[] で user・project・local を無効にする |
skills |
string[] | 'all' |
undefined |
セッションで使えるスキル。'all' か名前のリスト。完全な名前だけを渡す(v0.3.221 以降は、不正やワイルドカードの形を起動前に拒否する)。設定すると Skill ツールが allowedTools に自動で加わる |
spawnClaudeCodeProcess |
(options: SpawnOptions) => SpawnedProcess |
undefined |
Claude Code のプロセスを起こす独自の関数。VM・コンテナ・リモートの環境で動かすときに使う |
stderr |
(data: string) => void |
undefined |
標準エラー出力のコールバック |
strictMcpConfig |
boolean |
false |
mcpServers のサーバーだけを使い、project の .mcp.json・user の設定・プラグインの MCP サーバー・claude.ai のコネクタを無視する |
systemPrompt |
string | string[] | { type: 'custom'; ... } | { type: 'preset'; ... } |
undefined(最小のプロンプト) |
システムプロンプトの設定。詳しい形は後の表 |
taskBudget |
{ total: number } |
undefined |
(Alpha)API 側のタスクのトークン予算。設定すると、モデルは残りの予算を知らされ、ツールの使い方の調整と、上限前の締めくくりができる |
thinking |
ThinkingConfig |
対応モデルでは { type: 'adaptive' } |
Claude の思考・推論の動作 |
title |
string |
undefined |
セッションの表示用の題。resume や continue では、保存済みの題が優先される |
toolAliases |
Record<string, string> |
undefined |
組み込みのツール名を MCP のツール名へ対応づけ、Claude が組み込みの代わりに自前の MCP の実装を呼ぶようにする(例:{ Bash: 'mcp__workspace__bash' }) |
toolConfig |
ToolConfig |
undefined |
組み込みツールの動作の設定 |
tools |
string[] | { type: 'preset'; preset: 'claude_code' } |
undefined |
ツールの設定。ツール名の配列か、Claude Code の既定のツールのプリセット |
verbatimPrompts |
boolean |
false |
すべてのプロンプトを書かれたまま届ける。SDK は各 user メッセージに client_composed: true を付ける。ユーザーが打っていない内容がプロンプトに含まれるときに使う。TypeScript Agent SDK v0.3.280 以降、Claude Code v2.1.248 以降 |
systemPrompt の形です。
| 形 | 内容 |
|---|---|
| 文字列 | 自前のプロンプト |
| 文字列の配列 | SYSTEM_PROMPT_DYNAMIC_BOUNDARY を静的な部分とリクエストごとの部分の間に置いて、静的な部分をキャッシュする |
{ type: 'custom'; prompt; snapshot? } |
snapshot を設定できる自前のプロンプト(v0.3.257 以降) |
{ type: 'preset'; preset: 'claude_code'; append?; excludeDynamicSections?; snapshot? } |
Claude Code のプロンプト。append で追加し、excludeDynamicSections: true でセッションごとの文脈を最初の user メッセージへ移し、snapshot: false で毎リクエスト組み直す |
詳しい使い方は SDK のツール・権限・拡張 の「システムプロンプト」にあります。
遅い API 応答・止まった API 応答を扱う#
CLI のサブプロセスは、API のタイムアウトと停滞の検出を制御するいくつかの環境変数を読みます。TypeScript は env に、Python は ClaudeAgentOptions.env に渡します。
| 変数 | 内容 |
|---|---|
API_TIMEOUT_MS |
Anthropic のクライアントのリクエストごとのタイムアウト(ミリ秒)。既定 600000。メインのループとすべてのサブエージェントに効く |
CLAUDE_CODE_MAX_RETRIES |
API の再試行の最大数。既定 10、上限 15。再試行ごとに自分の API_TIMEOUT_MS の窓を持つので、最悪の実時間はおよそ API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) に待機を足したもの。無人の実行で長い障害を待つなら CLAUDE_CODE_RETRY_WATCHDOG=1(一時的な容量のエラーを無期限に再試行し、Claude Code v2.1.199 以降では、ほかの一時的なエラーの既定を 300 に上げ、この変数の上限を外す) |
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS |
サブエージェントの停滞の監視。ストリームの監視が有効なあいだの既定は CLAUDE_STREAM_IDLE_TIMEOUT_MS に5分を足した値で、その変数を上げない限り 600000。監視が無効なら 600000(v2.1.257 より前は常に 600000)。タイマーはストリームのイベントごとにリセットされる。停滞すると、サブエージェントを中止して親へ知らせる。バックグラウンドのサブエージェントは失敗とし、途中結果を付ける |
CLAUDE_ENABLE_STREAM_WATCHDOG と CLAUDE_STREAM_IDLE_TIMEOUT_MS |
ヘッダーは届いたが本文のストリームが止まったとき、リクエストを中止する監視。既定ですべてのプロバイダーで有効で、CLAUDE_ENABLE_STREAM_WATCHDOG=0 で無効。CLAUDE_STREAM_IDLE_TIMEOUT_MS の既定は 300000 で、その値が下限 |
ANTHROPIC_BASE_URL の向こうのゲートウェイが keep-alive の ping で応答を開けたままにしているあいだ、includePartialMessages(Python は include_partial_messages)を設定したホストは ping のストリームイベントを受け取り続けます。これは沈黙でタイムアウトとするのでなく、生存の合図として読みます(v2.1.257 より前は、最後の本物のストリームイベントの5分後に止まった)。
Python の ClaudeAgentOptions#
データクラスです。stderr や env は、TypeScript の Options と動きが違う点があります(env は継承した環境の上に重なる)。
| プロパティ | 型 | 既定 | 内容 |
|---|---|---|---|
tools |
list[str] | ToolsPreset | None |
None |
ツールの設定。{"type": "preset", "preset": "claude_code"} で Claude Code の既定のツール |
allowed_tools |
list[str] |
[] |
確認なしで自動承認するツール。Claude をこれらに制限しない |
system_prompt |
str | SystemPromptPreset | SystemPromptCustom | SystemPromptFile | None |
None |
システムプロンプト。文字列・プリセット(任意の append)・自前のオブジェクト・ファイルから読む形 |
mcp_servers |
dict[str, McpServerConfig] | str | Path |
{} |
MCP サーバーの設定か、設定ファイルのパス |
strict_mcp_config |
bool |
False |
mcp_servers のサーバーだけを使い、project の .mcp.json・user の設定・プラグインの MCP サーバー・claude.ai のコネクタを無視する(CLI の --strict-mcp-config) |
permission_mode |
PermissionMode | None |
None |
ツール使用の権限モード |
continue_conversation |
bool |
False |
直近の会話を続ける |
resume |
str | None |
None |
再開するセッション ID |
session_id |
str | None |
None |
自動生成の代わりに使うセッション ID(有効な UUID)。fork_session を同時に設定しない限り、continue_conversation や resume と併用できない |
max_turns |
int | None |
None |
エージェントのターン(ツール使用の往復)の最大数 |
max_budget_usd |
float | None |
None |
クライアント側の費用の見積もりがこの USD に達したら止める |
disallowed_tools |
list[str] |
[] |
拒否するツール |
model |
str | None |
None |
Claude のモデルのエイリアスか完全なモデル名 |
fallback_model |
str | None |
None |
本命が失敗したときのモデル。カンマ区切りで複数 |
betas |
list[SdkBeta] |
[] |
有効にするベータ機能 |
output_format |
dict[str, Any] | None |
None |
構造化出力の形式(例:{"type": "json_schema", "schema": {...}}) |
permission_prompt_tool_name |
str | None |
None |
権限確認に使う MCP ツール名 |
cwd |
str | Path | None |
None |
作業ディレクトリ |
cli_path |
str | Path | None |
None |
Claude Code の CLI の実行ファイルのパス |
settings |
str | None |
None |
設定ファイルのパスか、インラインの JSON 文字列 |
add_dirs |
list[str | Path] |
[] |
Claude が使える追加のディレクトリ。--add-dir で渡される |
env |
dict[str, str] |
{} |
継承したプロセスの環境の上に重ねる環境変数。CLAUDE_AGENT_SDK_CLIENT_APP でアプリを User-Agent に示せる |
extra_args |
dict[str, str | None] |
{} |
CLI へそのまま渡す追加の引数 |
max_buffer_size |
int | None |
None |
CLI の標準出力をバッファするときの最大バイト数 |
debug_stderr |
Any |
sys.stderr |
非推奨。SDK は値を無視する。stderr のコールバックを使う |
stderr |
Callable[[str], None] | None |
None |
CLI の標準エラー出力のコールバック |
can_use_tool |
CanUseTool | None |
None |
権限の評価が確認へ回ったときだけ呼ばれる、ツールの権限のコールバック |
hooks |
dict[HookEvent, list[HookMatcher]] | None |
None |
イベントを横取りするフックの設定 |
user |
str | None |
None |
POSIX で、Claude Code のサブプロセスが動く OS のユーザーアカウント。親の環境(HOME を含む)を保ち、cwd で動く |
include_partial_messages |
bool |
False |
部分メッセージのストリーミングイベント(StreamEvent)を返す |
include_hook_events |
bool |
False |
フックのライフサイクルのイベントを HookEventMessage としてストリームに含める |
forward_subagent_text |
bool |
False |
サブエージェントのテキストと思考のブロックをストリームへ転送する(Python Agent SDK 0.2.140 以降) |
verbatim_prompts |
bool |
False |
すべてのプロンプトを書かれたまま届ける。SDK は各 user メッセージに client_composed を True で付け、ストリームのメッセージに指定した値を上書きする |
fork_session |
bool |
False |
resume で再開するとき、元を続けずに新しいセッション ID へ分岐する |
resume_session_at |
str | None |
None |
再開するとき、この UUID のメッセージまで(含む)の会話だけを読む。resume と、たいてい fork_session と組み、前の時点から分岐する(Python Agent SDK 0.2.137 以降) |
resume_drops_turn |
str | None |
None |
resume_session_at の切り詰めが捨てるターンの、user のプロンプトの UUID。捨てる範囲にそのターン以外のものがあると CLI は再開を拒む(Python Agent SDK 0.2.137 以降、Claude Code v2.1.223 以降) |
agents |
dict[str, AgentDefinition] | None |
None |
プログラムで定義したサブエージェント |
setting_sources |
list[SettingSource] | None |
None(CLI の既定。全ソース) |
読み込むファイルベースの設定。[] で user・project・local を無効にする。skills を設定してこの項目を省くと、user と project だけが読み込まれるので、local を残すには明示する |
skills |
list[str] | Literal["all"] | None |
None |
セッションで使えるスキル。完全な名前だけを渡す。不正やワイルドカードの形は ValueError(Python Agent SDK 0.2.129 以降)。設定すると Skill ツールが allowed_tools に自動で加わる |
sandbox |
SandboxSettings | None |
None |
サンドボックスの動作をプログラムで設定する |
plugins |
list[SdkPluginConfig] |
[] |
ローカルのパスからプラグインを読み込む |
max_thinking_tokens |
int | None |
None |
非推奨。thinking を使う |
thinking |
ThinkingConfig | None |
None |
拡張思考の動作。max_thinking_tokens より優先される |
effort |
EffortLevel | None |
None |
思考の深さの労力 |
enable_file_checkpointing |
bool |
False |
巻き戻し用にファイルの変更を追跡する |
session_store |
SessionStore | None |
None |
トランスクリプトを外部のバックエンドへ写す |
session_store_flush |
Literal["batched", "eager"] |
"batched" |
session_store へ写した項目をいつフラッシュするか。"batched" はターンごと、またはバッファが満ちたとき。"eager" はフレームごとにバックグラウンドで |
load_timeout_ms |
int |
60000 |
再開時の session_store.load() と list_subkeys() の呼び出しごとのタイムアウト(ミリ秒) |
task_budget |
TaskBudget | None |
None |
API 側のトークン予算。{"total": <int>} を渡す。output_config.task_budget として、task-budgets-2026-03-13 のベータヘッダーつきで送る |
Python のシステムプロンプトの型です。
| 型 | フィールド | 内容 |
|---|---|---|
SystemPromptPreset |
type("preset")・preset("claude_code")・append・exclude_dynamic_sections・snapshot |
Claude Code のプロンプト。snapshot は claude-agent-sdk v0.2.153 以降 |
SystemPromptCustom |
type("custom")・prompt・snapshot |
文字列と同じ自前のプロンプトに snapshot を足せる形。コマンドライン引数で渡るので長さの上限が効く(v0.2.153 以降) |
SystemPromptFile |
type("file")・path |
ファイルからプロンプトを読む(CLI の --system-prompt-file)。大きなプロンプトに使う |
設定ソースと型#
| 型 | 内容 |
|---|---|
SettingSource |
"user"(~/.claude/settings.json)・"project"(.claude/settings.json)・"local"(.claude/settings.local.json) |
PermissionMode |
"default"・"acceptEdits"・"bypassPermissions"・"plan"・"dontAsk"・"auto" |
EffortLevel(Python) |
"low"・"medium"・"high"・"xhigh"(対応しないモデルでは "high" に落ちる)・"max" |
PermissionBehavior |
"allow"・"deny"・"ask" |
PermissionUpdateDestination(TypeScript) |
"userSettings"・"projectSettings"・"localSettings"・"session"・"cliArg" |
ApiKeySource(TypeScript) |
init メッセージの apiKeySource。Claude Code が報告するのは4つ:ANTHROPIC_API_KEY(環境変数のキー)・apiKeyHelper(apiKeyHelper が返したキー)・/login managed key(Claude Console のアカウントでログインしたとき保存したキー)・none(API キーなし。claude.ai のログイン・ベアラートークン・クラウドプロバイダーなどで認証)。型にはほかに user・project・org・temporary・oauth が古いコードのために残るが、報告されない(Agent SDK v0.3.234 以降が4つを型に載せる) |
ConfigScope(TypeScript) |
"local"・"user"・"project" |
SdkBeta(Python) |
"context-1m-2025-08-07"。Claude API では Claude Sonnet 4.5 と Sonnet 4 向けに終了済みで、まだ渡すと標準の200kトークンを超えるリクエストはエラーになるので betas から外す。1M トークンの窓にするには、model を既定で1M で動くモデル(claude-sonnet-5-5・claude-opus-5-5 など)にする。[1m] の変種でだけ1M に届くモデルは、claude-opus-4-6[1m] のようにモデル ID へ接尾辞を付ける |
settingSources を省くと、user・project・local を読みます。組み合わせたときの優先順位(高い順)は、local・project・user です。agents・allowedTools・settings などのプログラムのオプションは、user・project・local のファイルの設定を上書きし、管理ポリシーの設定はプログラムのオプションより優先されます。
AgentDefinition#
| フィールド | 型 | 必須 | 内容 |
|---|---|---|---|
description |
string |
はい | このエージェントをいつ使うかの説明 |
prompt |
string |
はい | システムプロンプト |
tools |
string[] |
いいえ | 許可するツール名。省くと、サブエージェントが使えるすべてのツールを継承する |
disallowedTools |
string[] |
いいえ | ツールから外すツール名。MCP のサーバー単位のパターンも使える |
model |
string |
いいえ | モデルの上書き。エイリアス('fable'・'opus'・'sonnet'・'haiku'・'inherit')か完全なモデル ID(Python の説明の例は "sonnet"・"opus"・"haiku"・"inherit") |
skills |
string[] |
いいえ | 起動時に先読みするスキル名 |
memory |
'user' | 'project' | 'local' |
いいえ | このエージェントのメモリの出どころ |
mcpServers |
(string | object)[] |
いいえ | このエージェントで使える MCP サーバー(名前かインラインの設定) |
initialPrompt |
string |
いいえ | メインスレッドのエージェントとして動くとき、最初のユーザーターンとして自動で送られる |
maxTurns |
number |
いいえ | 止まるまでのターンの上限 |
background |
boolean |
いいえ | 呼ばれたとき、止まらないバックグラウンドのタスクとして動かす |
criticalSystemReminder_EXPERIMENTAL |
string |
いいえ | 実験的。システムプロンプトへ足す重要なリマインダー(TypeScript の型にある。Python の説明表には載っていない) |
omitClaudeMd |
boolean |
いいえ | サブエージェントとして動くとき、user・project・local の CLAUDE.md を読まない。TypeScript のみ(v0.3.271 以降) |
effort |
'low' | 'medium' | 'high' | 'xhigh' | 'max' | number |
いいえ | このエージェントの推論の労力 |
permissionMode |
PermissionMode |
いいえ | このエージェント内のツール実行の権限モード |
Python の AgentDefinition はデータクラスで、omitClaudeMd を持ちません。フィールド名は通信の形に合わせて camelCase のままで、ClaudeAgentOptions の snake_case と違います。
CanUseTool と権限の結果#
TypeScript の CanUseTool は (toolName, input, options) => Promise<PermissionResult | null> です。
options のフィールド |
型 | 内容 |
|---|---|---|
signal |
AbortSignal |
処理を中止するときの信号 |
suggestions |
PermissionUpdate[] |
再度の確認を避けるための権限の更新の提案。Bash の確認には localSettings を行き先とする提案が入る |
blockedPath |
string |
権限要求を起こしたファイルパス(ある場合) |
mcpServer |
{ name: string; source: string } |
mcp__* のツールで、そのサーバーと定義の出どころ(Agent SDK v0.3.274 以降) |
decisionReason |
string |
この権限要求が起きた理由 |
defaultToNo |
boolean |
true なら、1回の誤キーで承認させない。確認の画面は拒否を選んだ状態で開く(Agent SDK v0.3.268 以降) |
suppressAlwaysAllowRule |
boolean |
true なら、常に許可する選択肢を出さない(v0.3.268 以降) |
toolUseID |
string |
このツール呼び出しの、アシスタントメッセージの中での識別子 |
agentID |
string |
サブエージェントの中で動いているとき、そのサブエージェントの ID |
requestId |
string |
control_request の包みの request_id |
- コールバックは通常
PermissionResultを返します。nullを返してよいのは、アプリが自前の経路でcontrol_responseを送り済みで、requestIdを返してあるときだけです。ほかの場合にnullを返すと、ツール呼び出しは無期限にブロックされたままになります(requestIdとnullの返しは Claude Code v2.1.199 以降) PermissionResultは{ behavior: "allow"; updatedInput?; updatedPermissions?; toolUseID? }か{ behavior: "deny"; message; interrupt?; toolUseID? }です
Python の CanUseTool は (tool_name, input_data, context) -> PermissionResult で、context は ToolPermissionContext です。
| フィールド | 型 | 内容 |
|---|---|---|
signal |
Any | None |
将来の中止の信号のために予約 |
suggestions |
list[PermissionUpdate] |
CLI からの権限の更新の提案。Bash の確認には localSettings の提案が入る |
tool_use_id |
str | None |
この確認の対象のツール呼び出しの識別子。can_use_tool に渡るときは常に入る |
agent_id |
str | None |
サブエージェントからの呼び出しならそのサブエージェントの ID。メインなら None |
blocked_path |
str | None |
権限要求を起こしたファイルパス |
decision_reason |
str | None |
PreToolUse フックが "ask" を返したときの permissionDecisionReason |
title |
str | None |
確認の文の全体(例:Claude wants to read foo.txt) |
display_name |
str | None |
ツールの動作の短い名詞句(例:Read file)。ボタンのラベル向け |
description |
str | None |
権限の画面向けの人が読める副題 |
Python の戻り値は PermissionResultAllow(behavior="allow", updated_input, updated_permissions) と PermissionResultDeny(behavior="deny", message="", interrupt=False) です。
PermissionUpdate#
type は "addRules"・"replaceRules"・"removeRules"・"setMode"・"addDirectories"・"removeDirectories" のどれかです。
| フィールド | 内容 |
|---|---|
rules |
追加・置き換え・削除するルール(toolName と任意の ruleContent) |
behavior |
ルールの操作の振る舞い("allow"・"deny"・"ask") |
mode |
setMode で設定するモード |
directories |
ディレクトリの追加・削除の対象 |
destination |
適用先。"userSettings"・"projectSettings"・"localSettings"・"session"(TypeScript は "cliArg" も) |
ThinkingConfig#
| 種類 | フィールド | 内容 |
|---|---|---|
adaptive |
type・display? |
いつどれだけ推論するかをモデルが決める(Opus 4.6 以降) |
enabled |
type・budgetTokens(Python は budget_tokens)・display? |
思考のトークンの予算を固定する |
disabled |
type |
拡張思考なし |
display("summarized" か "omitted")は、思考のテキストを返すかを決めます。Claude Opus 4.7 以降の API の既定は "omitted" なので、思考の内容を受け取るには "summarized" を指定します。Python の ThinkingConfig は TypedDict で、実行時は普通の辞書です(config["budget_tokens"] のように読む)。
MCP サーバーの設定#
| 型 | フィールド |
|---|---|
| stdio | type?("stdio")・command・args?・env? |
| SSE | type: "sse"・url・headers? |
| HTTP | type: "http"・url・headers? |
SDK(TypeScript の McpSdkServerConfigWithInstance) |
type: "sdk"・name・timeout?・instance |
SDK(Python の McpSdkServerConfig) |
type: "sdk"・name・instance |
| claude.ai プロキシ(状態の報告用) | type: "claudeai-proxy"・url・id |
プラグインの設定#
| フィールド | 型 | 内容 |
|---|---|---|
type |
'local' |
'local' だけ(いまはローカルのプラグインだけに対応) |
path |
string |
プラグインのディレクトリへの絶対パスか相対パス |
skipMcpDiscovery(TypeScript のみ) |
boolean |
true なら、スキル・フック・エージェント・コマンドは読み込むが、.mcp.json やマニフェストの mcpServers は読まない。アプリがそのプラグインの MCP 接続を持つときに設定する |
ToolConfig(TypeScript)#
askUserQuestion.previewFormat('markdown' か 'html')が、AskUserQuestion の選択肢の preview フィールドを有効にし、内容の形式を決めます。未設定なら、Claude はプレビューを出しません。
SandboxSettings#
| プロパティ | 型 | 既定 | 内容 |
|---|---|---|---|
enabled |
boolean |
false |
コマンド実行のサンドボックスを有効にする |
failIfUnavailable(TypeScript) |
boolean |
true |
enabled が true なのにサンドボックスを起動できないとき、起動時に止める。false で、標準エラーへ警告を出して、サンドボックスなしの実行に切り替える |
autoAllowBashIfSandboxed |
boolean |
true |
サンドボックスが有効なとき、Bash のコマンドを自動承認する |
excludedCommands |
string[] |
[] |
サンドボックスの制限を回避するコマンド(例:['docker *'])。モデルを介さず自動で、サンドボックスなしで動く |
allowUnsandboxedCommands |
boolean |
true |
モデルが、サンドボックスの外での実行を要求することを許す。true なら、モデルが入力に dangerouslyDisableSandbox を設定でき、権限の仕組みに回る |
network |
SandboxNetworkConfig |
undefined |
ネットワーク固有の設定 |
filesystem(TypeScript) |
SandboxFilesystemConfig |
undefined |
読み書きの制限のファイルシステム固有の設定 |
ignoreViolations |
TypeScript は Record<string, string[]>、Python は SandboxIgnoreViolations |
undefined |
無視する違反。TypeScript はコマンドの部分文字列(* で全コマンド)から、無視する違反の文面の部分文字列への対応。Python は file と network のパターンのリスト |
enableWeakerNestedSandbox |
boolean |
false |
互換性のため、弱い入れ子のサンドボックスを有効にする |
ripgrep(TypeScript) |
{ command: string; args?: string[] } |
undefined |
サンドボックス環境用の ripgrep のバイナリの設定 |
補足
サンドボックスはプラットフォームの対応に依存し、Linux では bubblewrap や socat などのツールにも依ります。TypeScript では、enabled が true で起動できないと、query() は subtype: "error_during_execution" の結果を返し、理由を errors に入れます。Python の既定は違い、起動できないとサンドボックスなしで動き、標準エラーへ警告が出ます。Python で止めたいなら、サンドボックスの設定に "failIfUnavailable": True を入れます(まだ SandboxSettings に宣言はないが、SDK は Claude Code へ転送する)。
SandboxNetworkConfig(サンドボックスされた Bash のコマンドに効き、WebFetch ツールは制限しません。WebFetch は権限ルールで制御します)です。
| プロパティ | 型 | 既定 | 内容 |
|---|---|---|---|
allowedDomains |
string[] |
[] |
サンドボックスのプロセスが使えるドメイン名 |
deniedDomains |
string[] |
[] |
使えないドメイン名。allowedDomains より優先される |
strictAllowlist(TypeScript) |
boolean |
false |
ネットワークの許可リストの外のホストへのアクセスを、確認でなく拒否する。サンドボックスされたコマンドだけで強制され、user・管理・CLI の --settings のものだけが有効(project は無視される) |
allowManagedDomainsOnly |
boolean |
false |
管理設定だけ。設定すると、管理設定の allowedDomains と WebFetch(domain:...) の許可ルールだけが有効になる。SDK からは managedSettings を通す。Python の SDK のオプションで設定しても効果がない |
allowLocalBinding |
boolean |
false |
ローカルのポートへのバインドを許す(開発サーバーなど) |
allowUnixSockets |
string[] |
[] |
プロセスが使える Unix ソケットのパス(例:Docker のソケット)。Python では macOS のみで、Linux では無視される |
allowAllUnixSockets |
boolean |
false |
すべての Unix ソケットを許す |
allowMachLookup(Python) |
list[str] |
[] |
macOS のみ。許可する XPC・Mach のサービス名。末尾のワイルドカードに対応する |
httpProxyPort |
number |
undefined |
ネットワーク要求の HTTP プロキシのポート |
socksProxyPort |
number |
undefined |
ネットワーク要求の SOCKS プロキシのポート |
SandboxFilesystemConfig(TypeScript)は allowWrite・denyWrite・denyRead(どれもファイルパスのパターンの string[]、既定 [])です。
注意
allowUnixSockets は、サンドボックスの外に届くシステムのサービスへのアクセスを与えることがあります。たとえば /var/run/docker.sock を許すと、Docker API を通してホストの完全なアクセスを実質与え、サンドボックスの分離を迂回できます。本当に必要なソケットだけを許します。組み込みのサンドボックスのプロキシは、要求されたホスト名で許可リストを強制し、TLS を終端も検査もしないので、ドメインフロンティングなどで迂回されうります(SDK の本番運用、サンドボックス)。
サンドボックスの外での実行(allowUnsandboxedCommands)は、モデルが入力に dangerouslyDisableSandbox: true を設定して求め、その要求は既存の権限の仕組みに戻るので、canUseTool のハンドラーが呼ばれて、独自の認可の判断を実装できます。excludedCommands の項目は、モデルを介さずに、呼び出しをサンドボックスの外に出します。
Query オブジェクトのメソッド(TypeScript)#
query() が返す Query は、AsyncGenerator<SDKMessage, void> を拡張します。
| メソッド | 内容 |
|---|---|
interrupt() |
クエリを中断する(ストリーミング入力のみ)。CLI が interrupt_receipt_v1 を宣言していれば、中断が届いたとき保留中だったメッセージを列挙した SDKControlInterruptResponse で解決する。v2.1.205 より前の CLI では undefined |
rewindFiles(userMessageId, options?) |
ファイルを、指定した user メッセージの時点の状態に戻す。{ dryRun: true } でプレビュー。enableFileCheckpointing: true が必要 |
setPermissionMode() |
権限モードを変える(ストリーミング入力のみ) |
setModel() |
モデルを変える(ストリーミング入力のみ)。undefined か "default" で Claude Code の既定のモデルに戻る |
setMaxThinkingTokens() |
非推奨。thinking を使う。null で、思考をセッションの既定に戻す |
applyFlagSettings(settings) |
実行時に、セッションのフラグ設定の層へ設定を統合する(ストリーミング入力のみ) |
updateSettings(source, settings) |
許可リストにある1つのキーを、project の local 設定か user 設定のファイルへ書く。v0.3.257 以降 |
initializationResult() |
対応するコマンド・モデル・アカウント情報・出力スタイルの設定を含む、初期化の結果の全体を返す |
reinitialize() |
実行中の CLI へ initialize の制御リクエストを送り直し、最初の接続時のキャッシュでなく新しい結果を返す。通信の途切れのあと(切断のあとにセッションへつなぎ直すとき)に使うと、保留中の権限要求が canUseTool へ再び届く。コールバックは要求 ID ごとに冪等にする(Claude Code v2.1.195 以降) |
supportedCommands() |
使えるコマンドを返す(v0.3.216 以降は途中の変更を反映) |
supportedModels() |
表示情報つきで、使えるモデルを返す |
supportedAgents() |
使えるサブエージェントを AgentInfo[] で返す |
mcpServerStatus() |
接続中の MCP サーバーの状態を McpServerStatus[] で返す |
getContextUsage(opts?) |
コンテキストの窓の使用量を、カテゴリ・スキル・ツール別に分けて返す。既定では、対話のセッションの /context が示すものと同じデータで、ストリームに現れないトークン数え上げの API リクエストで計算する(detail が 'full'(既定)のとき。ストリームを読むコスト集計には見えず、Anthropic API では課金されない。'summary' なら直近の応答の使用量とローカルの見積もりで答え、トークン数え上げのリクエストは出ない)。apiUsage は最新の API 応答の使用量で、セッションの累計ではない。detail オプションは Agent SDK v0.3.257 以降 |
readFile(path, options?) |
セッションのファイルシステムのファイルを読む。パスは cwd を基準に解決される。読み取りの上限は maxBytes(既定 1 MB、上限 10 MB)、バイナリは { encoding: 'base64' }。許可の拒否・ファイルなし・通信エラーでは null(TypeScript SDK v0.2.121 以降) |
reloadPlugins(options?) |
プラグインをディスクから読み直す(Agent SDK v0.2.85 以降。holdOnCacheImpact は v0.3.268 以降) |
reloadSkills() |
スキルをディスクから読み直す(Agent SDK v0.3.163 以降) |
reloadOutputStyles() |
出力スタイルをディスクから読み直す(Agent SDK v0.3.261 以降) |
accountInfo() |
アカウント情報を返す |
reconnectMcpServer(serverName) |
MCP サーバーを名前で再接続する。.mcp.json などの設定ファイルの項目と同じ名前なら、mcpServers か setMcpServers() で設定したほうを再接続する(Claude Code v2.1.257 以降) |
toggleMcpServer(serverName, enabled) |
MCP サーバーを名前で有効・無効にする。無効にするとサーバーが切れてツールが外れる。途中で setMcpServers() で足した stdio・SSE・HTTP サーバーのツールが外れるのは Claude Code v2.1.285 以降。createSdkMcpServer() で作ったプロセス内サーバー(mcpServers でも setMcpServers() でも)を切ってツールを外すのは v2.1.286 以降で、無効にすると実行中のツール呼び出しも失敗し、Claude にはハンドラーの終了を待たずにエラー結果がすぐ返る |
setMcpServers(servers) |
このセッションの MCP サーバーの集合を動的に置き換える。追加・削除されたサーバーとエラーを持つ McpSetServersResult を返す |
readMcpResource(serverName, uri) |
(Alpha)接続した MCP サーバーから、MCP Apps の ui:// リソースを1つ読む。TypeScript Agent SDK v0.3.280 以降 |
streamInput(stream) |
複数ターンの会話のため、入力メッセージをクエリへ流す |
stopTask(taskId) |
動いているバックグラウンドのタスクを ID で止める |
close() |
クエリを閉じ、裏のプロセスを終了させる。強制的に終わらせ、リソースを片づける |
applyFlagSettings() の効き方です。
| 範囲 | キー |
|---|---|
| 次のターンから | effortLevel・ultracode・permissions・hooks・skillOverrides・fastMode・agent。agent を切り替えると、そのエージェントのモデルの上書きとフックも次のターンから適用される。システムプロンプトは次のターン、またはセッションが記録したプロンプトを再利用しているなら圧縮のあと |
| 現在のターンの間 | model。Claude がターンの途中で動いているときに切り替えると、生成中の応答は元のモデルで終わり、次のモデル呼び出しから新しいモデル(サブエージェントは自分のモデルのまま。v2.1.212 より前は次のターンまで待った) |
| 実行中は効かない | システムプロンプトのオプション(起動時に一度だけ解決される。呼び出しは成功するが、値は元のまま) |
effortLevelは労力のレベル名を受け、"ultracode"(xhighの労力で ultracode をオン)も受けます。TypeScript では{ ultracode: true, effortLevel: "xhigh" }を渡します。ultracodeのキーだけなら、いまの労力のレベルのまま ultracode をオンにします- 値は、
query()のsettingsオプションが起動時に設定したものの上に統合される、フラグ設定の層に書かれます。続けて呼ぶと、最上位のキーが浅く統合されます(permissionsを2回目に渡すと、前のpermissionsのオブジェクト全体が置き換わる) - キーを消すには
nullを渡します。多くのキーは、起動時のsettings、続いて優先度の低いソースの値に戻ります。modelを消すと、設定ファイルがmodelを設定していても、Claude Code の既定のモデルに戻ります。effortLevel: nullはモデルの既定の労力、agent: nullは次のターンからエージェントなし、ultracode: nullは ultracode をオフにします。undefinedは JSON のシリアライズで落ちるので効果がありません - Python に同等のメソッドはありません
updateSettings() の効き方です。
| ソース | 受け付けるキー | 内容 |
|---|---|---|
"localSettings" |
outputStyle |
project の local 設定(.claude/settings.local.json)へ統合する。新しいスタイルは次のリクエストから効く |
"userSettings" |
effortLevel |
user 設定の modelSettings に、そのセッションの現在のモデルの既定の労力として保存する。max は書かれない(セッション限り)。実行中のセッションの労力は変わらないので、変えたいなら applyFlagSettings() も呼ぶ。TypeScript SDK v0.3.277 以降 |
どちらも文字列の値で、ほかのキーを持つ要求・リモートの通信路で動くセッション・名指ししたソースを settingSources が除いているセッションでは拒否されます。キーの削除はできません。
WarmQuery は query(prompt)(1回だけ呼べる)と close() を持ち、AsyncDisposable なので await using が使えます。SpareProcess は claim({ prompt, options })・claimed・exited・close() を持ちます。claim では options.cwd が必須で、additionalDirectories・model・permissionMode・maxThinkingTokens・settings・appendSystemPrompt・title・agents・env のセッション用のトークンも指定できます。claimed が option_not_applied で始まるメッセージで拒否されたときは、model か maxThinkingTokens が効かないまま動いています。それ以外の拒否では、プロンプトは動いていないので、query() でセッションを始めます。
メッセージの型#
TypeScript の SDKMessage#
query() が返すメッセージのユニオンです。主な型です。
| 型 | type と subtype |
内容 |
|---|---|---|
SDKAssistantMessage |
assistant |
アシスタントの応答。message は Anthropic SDK の BetaMessage。parent_tool_use_id・error・aborted・timestamp・context_usage などを持つ |
SDKUserMessage |
user |
ユーザーの入力 |
SDKUserMessageReplay |
user(isReplay: true) |
UUID が必須の、再生されたユーザーメッセージ。外から注入された peer や channel のターンも、再生として届く |
SDKResultMessage |
result |
最終結果 |
SDKSystemMessage |
system(init) |
初期化メッセージ |
SDKPartialAssistantMessage |
stream_event |
部分メッセージ(includePartialMessages のときだけ) |
SDKCompactBoundaryMessage |
system(compact_boundary) |
圧縮の境界。compact_metadata に trigger("manual" か "auto")と pre_tokens |
SDKInformationalMessage |
system(informational) |
警告・通知・フックのフィードバックなどの文字の表示。level は "info"・"notice"・"suggestion"・"warning" |
SDKWorkerShuttingDownMessage |
system |
ワーカーの穏やかな終了。reason は "host_exit" や "remote_control_disabled" など |
SDKStatusMessage |
状態の更新(例:圧縮中) | |
SDKHookStartedMessage・SDKHookProgressMessage・SDKHookResponseMessage |
フックの開始・実行中の出力・完了 | |
SDKPluginInstallMessage |
プラグインのインストールの進み。CLAUDE_CODE_SYNC_PLUGIN_INSTALL を設定したとき |
|
SDKToolProgressMessage |
ツールの実行中の進み | |
SDKToolUseSummaryMessage |
会話でのツール使用の要約 | |
SDKAuthStatusMessage |
認証の流れの間 | |
SDKTaskStartedMessage・SDKTaskProgressMessage・SDKTaskUpdatedMessage・SDKTaskNotificationMessage |
バックグラウンドのタスクの開始・進み・状態の変化・完了や失敗や停止の通知。task_type は "local_bash"(Bash と Monitor)・"local_agent"・"remote_agent" |
|
SDKBackgroundTasksChangedMessage |
生きているバックグラウンドのタスクの集合が変わったとき | |
SDKThinkingTokensMessage |
思考ブロックの生成中に、それまでの思考トークンの推定値 | |
SDKFilesPersistedEvent |
ファイルのチェックポイントがディスクに保存されたとき | |
SDKRateLimitEvent |
レート制限に当たったとき | |
SDKCommandsChangedMessage |
使えるコマンドの集合が途中で変わったとき。commands が更新後の全リスト |
|
SDKPromptSuggestionMessage |
promptSuggestions が有効で、ターンの提案が作られたとき。予測した次のユーザーのプロンプト |
|
SDKConversationResetMessage |
セッションを終えずに会話が置き換わったとき(query() では /clear とその別名) |
|
SDKPermissionDeniedMessage |
権限の仕組みが、対話の確認なしでツール呼び出しを拒否したとき(canUseTool も permissionPromptToolName もない -p や query() では、確認になるはずの呼び出しを、PermissionRequest フックが許可しないかぎり拒否する) |
|
SDKLocalCommandOutputMessage |
Claude Code は出さない。/context や /usage を送った出力は SDKAssistantMessage で届く |
ほかに、ユニオンには SDKSessionStateChangedMessage・SDKNotificationMessage・SDKMemoryRecallMessage・SDKElicitationCompleteMessage・SDKAPIRetryMessage・SDKMirrorErrorMessage が含まれます。
SDKAssistantMessageError は、'authentication_failed'・'oauth_org_not_allowed'・'account_on_hold'・'billing_error'・'rate_limit'・'overloaded'・'invalid_request'・'model_not_found'・'server_error'・'max_output_tokens'・'cloud_credential_error'・'unknown' のどれかです。
'model_not_found':選んだモデルが存在しないか、アカウントやデプロイで使えない'overloaded':サーバーが満杯で API が 529 を返した('rate_limit'は、自分の割り当てに対する 429)'account_on_hold':アカウントが保留中'cloud_credential_error':Claude Code が、動いているマシンで使える AWS か Google Cloud の認証情報を得られず、クラウドのプロバイダーへリクエストが届かなかった。多くは、クラウドのサインインがそのマシンで期限切れか未完了(認証情報のサービスが一時的に届かないときも同じ値)
aborted は、中断か中止でアシスタントメッセージがストリームの完了前に切れたとき true です(stop_reason がなく、内容が単語の途中で終わることがある。Agent SDK v0.3.214 以降)。timestamp は、メッセージの内容の生成が終わった時刻(ISO 8601)で、そのマシンの時計に由来するので表示専用に使い、順序には使いません。
SDKUserMessage のフィールドです。
| フィールド | 内容 |
|---|---|
uuid・session_id |
メッセージとセッションの識別子(任意) |
message |
Anthropic SDK の MessageParam |
pasted_content |
ユーザーが貼り付けたもの(打ったものではない)を、貼り付けごとに1項目で送る。Claude Code が各項目のテキストを打ったテキストのあとに順に足す(Agent SDK v0.3.277 以降) |
parent_tool_use_id |
親のツール使用の ID(なければ null) |
isSynthetic |
合成されたメッセージか |
shouldQuery |
false で、アシスタントのターンを起こさずにメッセージをトランスクリプトへ足す。保留され、次にターンを起こす user メッセージへ統合される。コマンドの出力のような文脈を、モデルの呼び出しなしで注入できる |
client_composed |
true で、メッセージのテキストを書かれたまま届ける。@path や @server:resource の言及を展開せず、/ で始まるテキストをコマンドとして実行しない(TypeScript Agent SDK v0.3.280 以降) |
tool_use_result |
tool_result のブロックを持つメッセージでの、ツールの構造化された出力のオブジェクト(型は unknown)。Agent ツールでは AgentOutput(completed の content はサブエージェントの報告。報告を SubagentHandback ツール呼び出しで返すサブエージェントでは、その引き渡しについての短いメモが入る。auto mode の Claude Code v2.1.271 以降では、fork 以外の completed のサブエージェントはすべてこの形)。"now" のためにバックグラウンドへ移した WebFetch・WebSearch の呼び出しでは { detachedToolCall: true }(呼び出しは動いたままで、結果は終わってから Claude に届き、同じ tool_use_id の2つ目の tool_result は来ない。v2.1.287 以降)。MCP の resource_link を含む結果では、resourceLinks の配列を持つ。structuredContent を返す MCP ツールでは、structuredContent(サーバーが送ったもの)と content(McpOutput の値)を持つオブジェクト(サブエージェントの結果には付かない)。structuredContent が JSON で 1,048,576 文字を超えるときは structuredContent を外して structuredContentOmitted: true を置く(プロセス内の SDK サーバーと _meta.ui の MCP Apps リソースを宣言するツールは対象外。v2.1.287 以降) |
origin |
メッセージの出どころ(SDKMessageOrigin) |
priority |
"now"・"next"・"later"。ターンの実行中に送ったメッセージが Claude に届くタイミング。"next"(省略も同じ)は、実行中のツール呼び出しが終わりしだい同じターンで読まれ、先にターンが終われば次のターンになる。"later" はターンの終わりまで保留して新しいターンで送る。origin: { kind: "human" } つきの "now" は、Claude Code v2.1.286 以降でバックグラウンドへ移せる作業(シェルコマンド・サブエージェント・MCP ツール呼び出し。v2.1.287 以降は WebFetch・WebSearch も)をバックグラウンドへ移し、同じターンで読まれる(応答を書いている途中や移せない作業のときはターンを中断し、次に読まれる)。その origin なしの "now" はターンを中断して次に読まれる |
inline_pastes |
message.content のうち、ユーザーが貼り付けた部分(貼り付けごとに1つの文字列)。最後のテキストブロックの貼り付けだけが包まれる |
SDKResultMessage のフィールド#
成功(subtype: "success")と、エラー("error_max_turns"・"error_during_execution"・"error_max_budget_usd"・"error_max_structured_output_retries")の2つの形があります。
| フィールド | 内容 |
|---|---|
uuid・session_id |
メッセージとセッションの識別子 |
duration_ms・duration_api_ms |
全体の時間と API の時間 |
is_error |
エラーの状態で終わったか |
num_turns |
ターン数 |
result(成功の形のみ) |
最終テキスト |
errors(エラーの形のみ) |
ループ水準のエラー文字列 |
stop_reason |
最後のターンでモデルが生成を止めた理由(end_turn・max_tokens・refusal など。クラッシュ後の合成された結果では null) |
total_cost_usd |
見積もりの費用の累計 |
usage |
メインのエージェントのループだけの使用量(サブエージェントを含まない。ストリーミング入力ではターンごと) |
modelUsage |
モデルごとの合計。サブエージェントと、圧縮・Workflow のエージェントなどの内部の呼び出しを含む(権限の分類器やトークン数えのリクエストは含まない) |
permission_denials |
拒否されたツール使用の一覧 |
structured_output |
構造化出力の検証済みの結果(成功の形のみ) |
deferred_tool_use |
PreToolUse フックが defer を返したとき、保留中のツールの id・name・input。そのとき stop_reason は "tool_deferred"。同じ session_id で再開する |
terminal_reason |
ループが終わった理由。"completed"・"max_turns"・"tool_deferred"・"aborted_streaming"・"aborted_tools"・"hook_stopped"・"stop_hook_prevented"・"background_requested"・"blocking_limit"・"rapid_refill_breaker"・"prompt_too_long"・"image_error"・"model_error"・"api_error"・"malformed_tool_use_exhausted"・"budget_exhausted"・"structured_output_retry_exhausted"・"tool_deferred_unavailable"・"turn_setup_failed" のどれか |
api_error_status |
ターンを終わらせた API エラーの HTTP ステータス(なければ省かれるか null) |
first_stream_post_ms・first_stream_post_ack_ms・first_stream_post_wall_ms |
ターンの最初のストリームイベントのアップロードにかかった時間。Claude Code は、クラウドセッションなど claude.ai へストリームするセッションでだけ記録し、query() が返す結果には載らない。Agent SDK v0.3.260 以降 |
first_stream_post_queue_wait_ms・first_stream_post_queued_behind・first_text_post_ms・first_text_post_queue_wait_ms・first_text_post_queued_behind・first_text_post_wall_ms |
結果メッセージの型に追加された任意のフィールド(*_queued_behind は "durable_post"・"ephemeral_post"・"retry_backoff"・"hold"・"none") |
ttft_ms・ttft_stream_ms・first_content_frame_ms |
最初のトークンまでの時間・最初の message_start までの時間・最初のコンテンツまでの時間(成功の形のみ。first_content_frame_ms は v0.3.260 以降) |
user_message_uuid・user_message_uuids |
このターンが答えた、あなたが送ったメッセージの uuid(user_message_uuids は答えたすべて。最大64。v0.3.259 以降) |
resume_reason |
再起動で中断されたターンを再実行したときの理由(例:interrupted_turn)。v0.3.268 以降 |
local_command |
ターンが、エージェントのループに入らずに完了したコマンドの名前(例:/compact は compact) |
queued_turn_count |
結果を出した時点で、まだ待っている origin: { kind: "human" } つきのメッセージの数(v0.3.242 以降) |
result_index |
この結果が、プロセスが書くすべての結果の中で何番目か(0 から。v0.3.268 以降) |
startup_failure_reason |
Claude Code が既知の起動の失敗で起動を拒んだとき、その理由(error_during_execution の結果。v0.3.274 以降) |
startup_failure_reason の値は次の17個です。CLAUDE_CODE_STARTUP_FAILURE_RESULTS=1 を env に入れると、すべての値でこの結果を受け取れます。入れないと、結果が書かれるのは worktree_unverified・worktree_resume_refused(worktree へ戻せない再開)と、バックグラウンドのセッションが持つ会話を continue しようとして拒まれた session_held_by_background だけで、ほかは標準エラーと 0 以外の終了で終わります。
| 値 | 止まった理由 |
|---|---|
org_pin_api_key_conflict |
管理設定が自社のサインインかクラウドゲートウェイのサインインを求めているのに、API キー・認証トークン・apiKeyHelper が設定されている |
provider_not_allowed |
管理設定がこのマシンで使える API プロバイダーを挙げていて、セッションが挙がっていないプロバイダー、または設定が固定していないエンドポイントを使う設定になっている(Claude Code v2.1.285 以降) |
org_verify_failed |
サインインした組織を、固定した組織と照合できなかった(ネットワークの失敗やトークンの失効など) |
org_pin_mismatch |
サインインが、固定した組織が許さない組織のもの |
managed_settings_invalid |
管理ポリシーの設定を読めない、固定が組織を指していない、または管理されたモデルの制限で既定の選択肢に使えるモデルがない |
remote_settings_required_unavailable |
組織が必須とする管理設定を読み込めなかった |
gateway_signin_required |
クラウドゲートウェイがこのサインインを終わらせた |
gateway_access_denied |
クラウドゲートウェイへの管理設定のリクエストが 403 で返った |
proxy_invalid |
プロキシの設定が完全な URL になっていない |
temp_dir_unusable |
ユーザーごとの一時ディレクトリが安全でない、または作れない |
cwd_unavailable |
作業ディレクトリが削除・移動された、または読めない |
shell_tool_missing |
Windows で使えるシェルのツールがない(Git Bash がなく、PowerShell もない、または CLAUDE_CODE_USE_POWERSHELL_TOOL で無効) |
session_held_by_background |
再開か継続する会話が、バックグラウンドのセッションとして動いている |
worktree_resume_refused |
セッションの worktree が安全確認に通らない、または再開が worktree の中から起動された。同じ再開をもう一度しても worktree なしで続くかは、errors に書かれる |
worktree_unverified |
いまはセッションの worktree を確認できない。再試行で成功することがある |
cli_version_too_old |
この Claude Code のバージョンが、Anthropic が求める下限より古い |
bypass_root |
root で動いているときに bypass permissions モードが求められた |
fast_mode_state・fast_mode_disabled_reason |
fast mode の状態("on"・"off"・"cooldown")と、使えない理由のコード |
origin |
この結果を起こしたユーザーメッセージの出どころ。バックグラウンドのタスクの完了などの合成の追い込みでは { kind: "task-notification" } |
fast_mode_disabled_reason のコードです。
| コード | 意味 |
|---|---|
free |
アカウントに、fast mode が要る有料のサブスクリプションか利用クレジットがない |
preference |
組織が fast mode を無効にしている |
extra_usage_disabled |
アカウントの利用クレジットがオフ |
network_error |
可用性の確認が api.anthropic.com に届かなかった |
unknown |
Claude Code が可用性を判断できなかった |
not_first_party |
セッションが Anthropic API 以外のプロバイダーを使っている |
disabled_by_env |
CLAUDE_CODE_DISABLE_FAST_MODE が設定されている |
model_not_allowed |
fast mode の Opus のモデルが、組織の availableModels の許可リストにない |
sdk_opt_in_required |
セッションが fast mode にオプトインしていない(settings オプションか applyFlagSettings() で fastMode: true を渡す) |
pending |
可用性の確認がまだ完了していない |
SDKSystemMessage(init)のフィールド#
| フィールド | 内容 |
|---|---|
uuid・session_id |
メッセージとセッションの識別子 |
agents |
使えるエージェント名 |
apiKeySource |
セッションのリクエストの API キーの出どころ |
betas |
有効なベータ |
claude_code_version |
Claude Code のバージョン |
cwd |
作業ディレクトリ |
tools |
使えるツール名 |
mcp_servers |
name・status・source?(定義の出どころ。v0.3.274 以降)を持つ MCP サーバーの一覧 |
model・permissionMode |
モデルと権限モード |
slash_commands・terminal_slash_commands |
使えるコマンド。後者は、slash_commands のうち、ローカルの端末に結び付いた画面を持つもの(exit など)。リモートやモバイルのクライアントがメニューから隠すために使う |
output_style |
出力スタイル |
skills |
使えるスキル(ユーザーが呼べるもの) |
plugins |
name と path を持つ、読み込まれたプラグイン |
plugin_errors |
プラグインの読み込みの失敗。plugin(プラグイン ID、またはディレクトリ自体が失敗したときは inline[0] のような位置の印)・type(path-not-found や manifest-validation-error などの、開いた集合のカテゴリ)・message・path(ディレクトリ自体が失敗したときの絶対パス) |
fast_mode_state・fast_mode_disabled_reason |
fast mode の状態。Claude Code v2.1.219 以降 |
effort |
次のリクエストで送る労力のレベル(送らないなら null)。Remote Control のクライアントへ送る init にだけ設定される |
capabilities |
この CLI が実装するプロトコルの振る舞い。開いた集合なので、知らない値は無視し、頼る振る舞いの値を確かめる。interrupt_receipt_v1(interrupt() が、保留中だったメッセージを列挙した受領で解決する)・interrupt_cancel_queued_v1(interrupt が cancel_queued: true を受け付け、still_queued でなく cancelled に列挙する)・sdk_mcp_manifests(initialize の制御リクエストが、プロセス内の SDK MCP サーバーの握手結果 sdkMcpServerManifests を受け付ける。Claude Code v2.1.286 以降が宣言)・sdk_mcp_tools_list_changed(SDK MCP サーバーの tools/list_changed 通知でツールを一覧し直し、途中で足したツールが Claude に届く。v2.1.286 以降が宣言) |
Python のメッセージ#
Message は UserMessage・AssistantMessage・SystemMessage・ResultMessage・StreamEvent・RateLimitEvent・ConversationResetMessage のユニオンです。
| 型 | フィールド |
|---|---|
UserMessage |
content(文字列かコンテンツブロックのリスト)・uuid・parent_tool_use_id・tool_use_result・origin(注入されたターンの出どころ。0.2.137 以降) |
AssistantMessage |
content・model・parent_tool_use_id・error・usage・message_id(1ターンのメッセージは同じ ID を共有)・stop_reason・session_id・uuid |
SystemMessage |
subtype・data(辞書) |
ResultMessage |
subtype・duration_ms・duration_api_ms・is_error・num_turns・session_id・stop_reason・total_cost_usd・usage・result・structured_output・model_usage・permission_denials・deferred_tool_use・errors・api_error_status・uuid・terminal_reason・origin |
StreamEvent |
uuid・session_id・event(生の API のストリームイベント)・parent_tool_use_id(常に None)。claude_agent_sdk.types からインポートする |
RateLimitEvent |
rate_limit_info(RateLimitInfo)・uuid・session_id。レート制限の状態が変わったとき(例:"allowed" から "allowed_warning")に出る |
ConversationResetMessage |
new_conversation_id(新しい会話の不透明な識別子)・uuid・session_id。/clear などのあと |
TaskStartedMessage |
task_id・description・uuid・session_id・tool_use_id・task_type("local_bash"・"local_agent"・"remote_agent") |
TaskProgressMessage |
task_id・description・usage(TaskUsage)・uuid・session_id・tool_use_id・last_tool_name |
TaskNotificationMessage |
task_id・status("completed"・"failed"・"stopped")・output_file・summary・uuid・session_id・tool_use_id・usage |
AssistantMessageErrorは、"authentication_failed"・"billing_error"・"rate_limit"・"invalid_request"・"server_error"・"unknown"です。CLI はmax_output_tokensなどの、このリストにない値も出し、SDK は値をそのまま渡すので、リスト外の文字列はunknownと同じに扱いますResultMessageは全バリアントを1つの形にならしたデータクラスで、subtypeに当たらないフィールドはNoneです。is_errorは、error_*では常にTrue、subtype="success"では、最後のモデルのリクエストが失敗したときTrueです。resultはsuccessのテキスト。successかつis_error=Trueのときは、API のエラー文字列が入る(空のこともある)。errorsはerror_*のときだけ。terminal_reasonの"aborted_streaming"と"aborted_tools"は、ターンが完了前に中断されたことを示します(interrupt()や権限のコールバックが原因になる)RateLimitInfoは、status("allowed"・"allowed_warning"・"rejected")・resets_at・rate_limit_type("five_hour"・"seven_day"・"seven_day_opus"・"seven_day_sonnet"・"overage")・utilization(0.0〜1.0)・overage_status・overage_resets_at・overage_disabled_reason・rawを持ちますTaskUsageはtotal_tokens・tool_uses・duration_msです。CLI が長い MCP ツールの呼び出しをバックグラウンドへ移すと、その呼び出しのツール結果にはプレースホルダーだけが入り、本当の結果はTaskNotificationMessageに届きます。resource_linksはデータクラスにフィールドがないのでmessage.data.get("resource_links")で読みます
コンテンツブロック(Python)#
| 型 | フィールド |
|---|---|
TextBlock |
text |
ThinkingBlock |
thinking・signature |
ToolUseBlock |
id・name・input |
ToolResultBlock |
tool_use_id・content・is_error |
ContentBlock は、これらと ServerToolUseBlock・ServerToolResultBlock のユニオンです。
使用量の型#
ModelUsage(TypeScript の costUSD などはクライアント側の見積もり。Python は同じ camelCase のキーを持つ TypedDict で、claude_agent_sdk.types からインポートする)です。
| フィールド | 型 | 内容 |
|---|---|---|
inputTokens・outputTokens |
number |
このモデルの入力・出力のトークン |
thinkingTokens |
number |
このモデルが生成した思考のトークン。outputTokens に含まれるので足さない。TypeScript は v0.3.257 以降、Python は 0.2.150 以降(.get() で読む) |
cacheReadInputTokens・cacheCreationInputTokens |
number |
キャッシュの読み取りと作成のトークン |
webSearchRequests |
number |
このモデルが出した Web 検索のリクエスト数 |
costUSD |
number |
このモデルの見積もりの費用(クライアント側の計算) |
contextWindow・maxOutputTokens |
number |
このモデルの文脈の窓の大きさと最大出力トークン |
canonicalModel |
string |
価格の検索に使う正規のモデル ID(Claude Code v2.1.218 以降。いつも入るとは限らない) |
provider |
string |
そのモデルを提供した API のバックエンド(firstParty・bedrock・vertex・foundry・anthropicAws・mantle・gateway) |
costBasis(TypeScript) |
'list' | 'managed' | 'unknown' |
最新のリクエストを値付けした価格表。Claude Code v2.1.246 以降 |
Python の usage の辞書のキーは、input_tokens・output_tokens・cache_creation_input_tokens・cache_read_input_tokens です(メインのエージェントのループだけ)。TypeScript の Usage(BetaUsage)は、これらに加えて cache_creation(ephemeral_5m_input_tokens と ephemeral_1h_input_tokens)・server_tool_use・service_tier・speed・inference_geo・iterations・output_tokens_details(thinking_tokens を持つ。v0.3.228 以降)・fallback_credit(null になりうる。入るかは、インストールした @anthropic-ai/sdk(0.115.0 で追加)による)を持ちます。TypeScript の NonNullableUsage は、fallback_credit を除くすべての null になりうるフィールドを null にならない形にしたものです。サブエージェントの結果(Agent の出力)の usage に fallback_credit が入るのは、TypeScript SDK v0.3.285 以降・Python SDK v0.2.162 以降(Claude Code v2.1.285 を同梱)です。output_tokens が正式な合計で、思考の内訳は観測用です。
ThinkingConfig 以外の補助の型(TypeScript)#
| 型 | 内容 |
|---|---|
SlashCommand・ModelInfo・AgentInfo |
使えるコマンド・モデル・サブエージェントの情報 |
McpServerStatus |
接続中の MCP サーバーの状態 |
McpServerProvenance |
mcp__* のツールを提供する MCP サーバーと、その定義の出どころ。フックの入力に mcp_server で入る |
McpSetServersResult |
setMcpServers() の結果(追加・削除されたサーバーとエラー) |
AccountInfo |
認証したユーザーのアカウント情報 |
RewindFilesResult |
rewindFiles() の結果。飛ばしたパスの数を skippedLinks に持つ |
SDKPermissionDenial |
拒否されたツール使用の情報 |
SDKContextUsage・SDKContextUsageCategory |
/context の報告を構造化した形と、その1行。ストリームに現れないトークン数え上げの API リクエストで計算する |
SDKMessageOrigin |
user ロールのメッセージの出どころ(origin)。human・peer・channel・task-notification など |
SDKMessageOrigin の kind は次の7つです。
kind |
内容 |
|---|---|
human |
エンドユーザーの直接の入力。打ったものを user メッセージで転送するアプリは、origin を { kind: "human" } と明示する |
channel |
チャネルから届いたメッセージ。server が元の MCP サーバー名 |
peer |
ほかのエージェント(同じプロセスのチームメイトか、別のセッション)からのメッセージ。from・fromMode?・name?・fromSession?・senderTaskId?・body?・verifiedPeerPid? を持つ |
task-notification |
新しいユーザーのプロンプトなしで届く配信(終わったバックグラウンドタスクなど)の合成のターン。subkind?("scheduled-trigger" か "peer-send-message")と fireReason? を持つ |
coordinator |
エージェントチームのコーディネーターからのメッセージ |
auto-continuation |
新しいユーザーの入力なしにセッションが続くときの合成のターン(後続のプロンプトを起こすコマンド結果など) |
unclassified |
出どころを判定できなかった注入のターン。isSynthetic: true で、ほかの種類に分類できないメッセージに付く(Claude Code v2.1.223 以降) |
SpawnedProcess・SpawnOptions |
spawnClaudeCodeProcess で独自にプロセスを起こすときの型 |
CallToolResult |
MCP のツール結果(content・structuredContent・isError) |
SDKMcpResourceLink |
MCP ツールが参照で返したファイル1つ(uri・name・title?・description?・mimeType?・size?・annotations?) |
AbortError |
中止の操作のためのエラークラス |
SDKControl*Response には、SDKControlInitializeResponse・SDKControlInterruptResponse・SDKControlGetContextUsageResponse・SDKControlReadFileResponse・SDKControlReloadPluginsResponse・SDKControlReloadSkillsResponse・SDKControlReloadOutputStylesResponse・SDKControlMcpReadResourceResponse があります。
SDKControlInitializeResponse には、任意の sdk_mcp_manifests_parked(サーバー名 → "parked"・"already_connected"・"protocol_version_mismatch"・"malformed"・"not_honoured")が加わりました。リクエスト側の sdkMcpServerManifests と、この応答の sdk_mcp_manifests_parked は、createSdkMcpServer() で作ったプロセス内の SDK MCP サーバーのためのもので、アプリが設定したり読んだりするものではありません。
フックの型#
HookEvent#
TypeScript は次の33種類です。Python は PreToolUse・PostToolUse・PostToolUseFailure・UserPromptSubmit・Stop・SubagentStop・PreCompact・Notification・SubagentStart・PermissionRequest の10種類だけです(イベントごとの対応は SDK のツール・権限・拡張 の表)。
PreToolUse・PostToolUse・PostToolUseFailure・PostToolBatch・Notification・UserPromptSubmit・UserPromptExpansion・SessionStart・SessionEnd・Stop・StopFailure・SubagentStart・SubagentStop・PreCompact・PostCompact・PreModelSwitch・PostModelSwitch・PermissionRequest・PermissionDenied・Setup・TeammateIdle・TaskCreated・TaskCompleted・Elicitation・ElicitationResult・ConfigChange・DirectoryAdded・WorktreeCreate・WorktreeRemove・InstructionsLoaded・CwdChanged・FileChanged・MessageDisplay
コールバックとマッチャー#
| 型 | 内容 |
|---|---|
HookCallback(TypeScript) |
(input: HookInput, toolUseID: string | undefined, options: { signal: AbortSignal }) => Promise<HookJSONOutput> |
HookCallback(Python) |
Callable[[HookInput, str | None, HookContext], Awaitable[HookJSONOutput]]。HookContext は signal(将来の中止のために予約) |
HookCallbackMatcher(TypeScript) |
{ matcher?: string; hooks: HookCallback[]; timeout?: number }。timeout はこのマッチャーのすべてのフックの秒数 |
HookMatcher(Python) |
matcher(ツール名かパターン。例:"Bash"・"Write|Edit")・hooks・timeout(秒。省くとイベントの既定:ほとんどのイベントで600、UserPromptSubmit などは30) |
フックの入力#
どのフックの入力にも共通のフィールドがあります。
| フィールド | 内容 |
|---|---|
session_id |
セッション ID |
transcript_path |
トランスクリプトのパス(TypeScript の BaseHookInput) |
cwd |
作業ディレクトリ |
prompt_id |
処理中のユーザーのプロンプトを識別する UUID。OpenTelemetry のイベントの prompt.id 属性と対応する(TypeScript) |
permission_mode |
権限モード(TypeScript) |
effort |
{ level: string }(TypeScript) |
agent_id・agent_type |
サブエージェントの中で発火したときに入る |
hook_event_name |
イベント名。ユニオンの判別に使う |
TypeScript のイベントごとの入力の型は、PreToolUseHookInput(tool_name・tool_input・tool_use_id・mcp_server?)・PostToolUseHookInput・PostToolUseFailureHookInput・PostToolBatchHookInput・PermissionDeniedHookInput・NotificationHookInput・UserPromptSubmitHookInput・UserPromptExpansionHookInput・SessionStartHookInput・SessionEndHookInput・StopHookInput・StopFailureHookInput・SubagentStartHookInput・SubagentStopHookInput・PreCompactHookInput・PostCompactHookInput・PreModelSwitchHookInput・PostModelSwitchHookInput・PermissionRequestHookInput・SetupHookInput・TeammateIdleHookInput・TaskCreatedHookInput・TaskCompletedHookInput・ElicitationHookInput・ElicitationResultHookInput・ConfigChangeHookInput・InstructionsLoadedHookInput・DirectoryAddedHookInput・WorktreeCreateHookInput・WorktreeRemoveHookInput・CwdChangedHookInput・FileChangedHookInput・MessageDisplayHookInput です。Python は、PreToolUseHookInput・PostToolUseHookInput・PostToolUseFailureHookInput・UserPromptSubmitHookInput・StopHookInput・SubagentStopHookInput・PreCompactHookInput・NotificationHookInput・SubagentStartHookInput・PermissionRequestHookInput を持ちます。
フックの出力#
HookJSONOutput は、同期の出力(SyncHookJSONOutput)か非同期の出力(AsyncHookJSONOutput)です。
| フィールド | 型 | 内容 |
|---|---|---|
continue(Python は continue_) |
boolean |
このフックのあと動き続けるか(既定 true) |
suppressOutput |
boolean |
トランスクリプトから標準出力を隠す |
stopReason |
string |
continue が false のときのメッセージ |
decision |
TypeScript は "approve" | "block"、Python は "block" |
決定のフィールド |
systemMessage |
string |
ユーザーへ見せる警告のメッセージ |
reason |
string |
Claude へのフィードバック |
terminalSequence(TypeScript) |
string |
Claude Code に出させる端末のエスケープシーケンス。通知やタイトルの OSC と BEL だけが許される。対話の CLI だけが出し、SDK は無視する |
hookSpecificOutput |
イベントごとの型 | イベント固有の出力。hookEventName で判別する |
async(Python は async_)・asyncTimeout |
true・number |
非同期の出力。待たずに進ませる。asyncTimeout はミリ秒 |
hookSpecificOutput のイベントごとのフィールドです(Python の型は PreToolUse・PostToolUse・PostToolUseFailure・UserPromptSubmit・Notification・SubagentStart・PermissionRequest)。
hookEventName |
フィールド |
|---|---|
PreToolUse |
permissionDecision("allow"・"deny"・"ask"・"defer")・permissionDecisionReason・updatedInput・additionalContext |
PostToolUse |
additionalContext・updatedToolOutput(updatedMCPToolOutput は非推奨)・classifierContext(TypeScript のみ。auto モードの権限分類器へ向けたツール結果のメモ。2000文字までで、同じ呼び出しに応えるすべてのフックで共有し、同期の応答でだけ効く。信頼できないツール出力を写さない) |
PostToolUseFailure・Notification・SubagentStart(Python と TypeScript)、UserPromptExpansion・Setup・PostToolBatch・Stop・SubagentStop・PostModelSwitch(TypeScript) |
additionalContext。PostModelSwitch の分は、新しいモデルが処理する次のリクエストで届く |
UserPromptSubmit |
TypeScript は additionalContext・sessionTitle・suppressOriginalPrompt(decision が "block" のとき、元のプロンプトをブロックのメッセージから外す)。Python は additionalContext だけ |
SessionStart(TypeScript) |
additionalContext・initialUserMessage・sessionTitle・watchPaths・reloadSkills(フックが入れたスキルを同じセッションで使えるよう、ディレクトリを再走査する) |
PreModelSwitch(TypeScript) |
permissionDecision("allow" は進める、"deny" は切り替えを取り消す、"ask" は確認を求める。確認の画面を出すのは対話のセッションの /model だけで、ほかの画面では "ask" は拒否として扱う) |
PermissionRequest |
Python は decision(辞書)。TypeScript は decision(behavior: "allow" に updatedInput?・updatedPermissions?、behavior: "deny" に message?・interrupt?) |
PermissionDenied(TypeScript) |
retry(再試行してよいと伝える。判定のない拒否では無視される) |
Elicitation・ElicitationResult(TypeScript) |
action("accept"・"decline"・"cancel")・content(辞書) |
CwdChanged・FileChanged(TypeScript) |
watchPaths(監視するパスの配列) |
WorktreeCreate(TypeScript) |
worktreePath(必須) |
MessageDisplay(TypeScript) |
displayContent(元のテキストの代わりに表示するテキスト。省くか変えずに返すと元を表示する) |
ツールの入力#
組み込みツールの入力の型です。TypeScript は @anthropic-ai/claude-agent-sdk/sdk-tools から型を読み込めます。Python の説明は、ツールの入出力の型の節にあります。
| ツール(名前) | 入力のフィールド |
|---|---|
Agent(旧名 Task も受け付ける) |
description・prompt・subagent_type?・model?("sonnet"・"opus"・"haiku"・"fable")・run_in_background?・name?・isolation?("worktree" か "remote")。team_name と mode は非推奨で無視される(mode は Claude Code v2.1.212 以降で無視) |
AskUserQuestion |
questions(question・header・options(label・description・preview?)・multiSelect)・answers?・annotations?・metadata? |
Bash |
command・timeout?(ミリ秒。フォアグラウンドは既定で600000に制限され、それより大きい値は丸められる)・description?・run_in_background?・dangerouslyDisableSandbox? |
Monitor |
description・timeout_ms(既定 300000、最大 3600000。実効の期限は最大 1800000)・command?・ws?(url・protocols?)。command は stdout の1行ごとに1イベント、ws は WebSocket |
Edit |
file_path・old_string・new_string・replace_all? |
Read |
file_path・offset?・limit?・pages?(PDF のページ範囲。例:"1-5") |
Write |
file_path・content |
Glob |
pattern・path? |
Grep |
pattern・path?・glob?・type?・output_mode?("content"・"files_with_matches"・"count")・-i?・-o?・-n?・-B?・-A?・-C?・context?・head_limit?・offset?・multiline? |
TaskStop |
task_id?・shell_id?(非推奨。task_id を使う) |
NotebookEdit |
notebook_path・cell_id?・new_source・cell_type?("code" か "markdown")・edit_mode?("replace"・"insert"・"delete") |
WebFetch |
url・prompt |
WebSearch |
query・allowed_domains?・blocked_domains? |
次のツールにも入力と出力の型があります。Workflow・TodoWrite・TaskCreate・TaskUpdate・TaskGet・TaskList・ExitPlanMode・EnterPlanMode・ListMcpResources(ツール名 ListMcpResourcesTool)・ReadMcpResource(ReadMcpResourceTool)・ReadMcpResourceDir(ReadMcpResourceDirTool)・RefreshMcpTools・EnterWorktree・ExitWorktree・CronCreate・CronDelete・CronList・ScheduleWakeup・RemoteTrigger・PushNotification・ReportFindings・Artifact・Projects・ShowOnboardingRolePicker、動的な MCP のツール(mcp__<server>__<tool> の形)です(ツール一覧は ツール一覧)。
TaskOutputは Claude Code v2.1.277 で、TaskOutputInputの型とともに削除されました。まだTaskOutputを名指しするdisallowedToolsや deny ルールは、警告なしに無視されます- 実験的な
REPLツールは v2.1.275 で削除されました(v2.1.274 まではenvのCLAUDE_CODE_REPL=1で有効にできた)
エラー型(Python)#
| 型 | 内容 |
|---|---|
ClaudeSDKError |
SDK のすべてのエラーの基底クラス |
CLIConnectionError |
Claude Code への接続の失敗(ClaudeSDKError のサブクラス) |
CLINotFoundError |
Claude Code の CLI が未導入か見つからない(CLIConnectionError のサブクラス)。message(既定 "Claude Code not found")と cli_path を持つ |
ProcessError |
Claude Code のプロセスの失敗。exit_code と stderr を持つ |
ResultError |
実行がエラーの結果(ターン数の上限や API エラー)で終わったとき、最後の ResultMessage のあとで送出される。ProcessError のサブクラス |
CLIJSONDecodeError |
JSON のパースの失敗。line と original_error を持つ |
- 単発の
query()がエラーの結果で終わると、最後の結果メッセージのあとでResultErrorが送出されます。Python Agent SDK 0.2.140 より前は、ClaudeSDKErrorのサブクラスでない普通のExceptionを送出していました ResultErrorはsubtype・errors(なければ空のリスト)・result・api_error_status・terminal_reason・session_id・data(結果の生のペイロード)を持ちます。失敗を見分けるには、subtypeより先にterminal_reasonを見ます。最後のリクエストが API エラーで失敗したときは、Claude Code はsubtypeを"success"、原因をterminal_reason(例:"api_error")で報告しますProcessErrorより先にResultErrorを捕まえます
try:
async for message in query(prompt="Hello"):
print(message)
except CLINotFoundError:
print("Claude Code CLI not found")
except ResultError as e:
if e.terminal_reason == "api_error":
print(f"API request failed: {e}")
else:
print(f"Query ended with an error result ({e.terminal_reason or e.subtype}): {e}")
except ProcessError as e:
print(f"Process failed with exit code: {e.exit_code}")
except CLIJSONDecodeError as e:
print(f"Failed to parse response: {e}")
そのほか#
- Python の
SdkMcpToolは、name・description・input_schema・handler・annotationsを持つデータクラスです - Python の
ToolAnnotationsは、title・readOnlyHint(既定False)・destructiveHint(既定True)・idempotentHint(既定False)・openWorldHint(既定True)・maxResultSizeChars(Claude Code がツールのテキスト結果を、ファイルに保存せず会話にインラインで残す文字数の上限。最大 500,000)を持ち、camelCase でも snake_case でも書けます(snake_case と型付きのmaxResultSizeCharsは Python Agent SDK 0.2.140 以降)。TypeScript のToolAnnotationsは MCP SDK の型で、titleと4つのヒントを持ちます。どれも、セキュリティの判断に頼ってはいけないヒントです - Python の
Transportは、独自の通信路(リモートの接続など)で Claude のプロセスとやり取りするための抽象クラスです。connect()・write(data)・read_messages()・close()・is_ready()・end_input()を実装します。低水準の内部 API で、インターフェースは今後のリリースで変わりえます - Python の
TaskBudgetは{"total": <int>}、ToolsPresetは{"type": "preset", "preset": "claude_code"}、McpStatusResponseはmcpServersにMcpServerStatusのリストを持ちます - Python の
McpServerStatusは、name・status("connected"・"failed"・"needs-auth"・"pending"・"disabled")・serverInfo(nameとversion)・error・config・scope・tools(name・description・annotations)を持ちます
削除された TypeScript の V2 セッション API#
試験的な V2 のセッション API(unstable_v2_createSession()・unstable_v2_resumeSession()・unstable_v2_prompt()、SDKSession と SDKSessionOptions の型)は、TypeScript Agent SDK 0.3.142 で削除され、もうサポートされません。移行するには、query() と、それが受け取るセッションのオプションを使います。複数ターンの会話には AsyncIterable<SDKUserMessage> を渡し、保存済みのセッションを続けるには options.resume を使います(SDK のセッションと入出力)。
V2 は、非同期ジェネレーターと yield の調整を要らなくした試験的な API でした。ターンごとに send() と stream() の組を呼ぶ形です。
| V2 の API | 内容 |
|---|---|
unstable_v2_createSession({ model, ... }) |
複数ターンの会話の新しいセッションを作り、SDKSession を返す |
unstable_v2_resumeSession(sessionId, { model, ... }) |
ID で既存のセッションを再開する |
unstable_v2_prompt(prompt, { model, ... }) |
1ターンの問い合わせのための、1回きりの便利な関数。SDKResultMessage を返す |
SDKSession |
sessionId・send(message)・stream()・close() を持つインターフェース |
- 0.2.x が V2 を含む最後のバージョンです。パッケージのバージョンは 0.2.x から直接 0.3.142 へ飛んだので、削除のバージョンと下のピン留めは、同じ境目を指しています。V2 に対応した最後のリリースを入れるには、
npm install @anthropic-ai/claude-agent-sdk@0.2で major と minor を固定します - セッションは
await using(TypeScript 5.2 以降)か、session.close()で閉じます - V2 は V1 のすべての機能に対応していませんでした。セッションの分岐(
forkSessionオプション)と、一部の高度なストリーミング入力のパターンは V1 の SDK が必要でした - 0.2.x 以前のコードを保守する人向けの参照です
// V1(現在)で同じことをする:1回きりの問い合わせ
import { query } from "@anthropic-ai/claude-agent-sdk";
const q = query({ prompt: "What is 2 + 2?", options: { model: "claude-opus-4-7" } });
for await (const msg of q) {
if (msg.type === "result" && msg.subtype === "success") console.log(msg.result);
}
公式ドキュメント(英語)
- Agent SDK reference - TypeScript
- Agent SDK reference - Python
- TypeScript SDK V2 session API (removed)
2026年10月5日時点の内容をもとに、日本語でまとめています。