本文へ移動
Claude Tips

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 を捕まえます
python
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 以前のコードを保守する人向けの参照です
typescript
// 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);
}

公式ドキュメント(英語)

2026年10月5日時点の内容をもとに、日本語でまとめています。

ページの一覧