Skip to main content

インストール

仮想環境にパッケージをインストールしてください。最近の Debian、Ubuntu、Homebrew Python インストールでは、システム Python に対して pip install を実行すると error: externally-managed-environment で失敗します。
uv、Windows PowerShell、API キーのセットアップについては、Agent SDK クイックスタートの「Setup」セクションを参照してください。

query() と ClaudeSDKClient の選択

Python SDK は Claude Code と対話するための 2 つの方法を提供します。 インタラクティブなアプリケーション(チャットインターフェースなど)や、次のアクションが Claude の応答に依存する場合は、ClaudeSDKClient を使用してください。

関数

このページの署名ブロックと裸の async for / async with フラグメントは説明用です。実行するには、本体を async def main(): ... でラップして asyncio.run(main()) を呼び出してください。

query()

デフォルトでは、Claude Code との各インタラクションのために新しいセッションを作成します。メッセージが到着するにつれて生成される非同期イテレータを返します。query() への各呼び出しは、continue_conversation=True または ClaudeAgentOptions の resume を渡さない限り、前のインタラクションのメモリなしで新しく開始します。セッション を参照してください。

パラメータ

戻り値

会話からのメッセージを生成する AsyncIterator[Message] を返します。

例 - オプション付き

tool()

型安全性を備えた MCP ツールを定義するためのデコレータ。

パラメータ

入力スキーマオプション

  1. シンプルな型マッピング(推奨):
  2. JSON Schema 形式(複雑な検証用):
  3. TypedDict クラス:NotRequired のキーが required から除外される型付きスキーマ。
    • Python 3.11 以降:typing から TypedDict と NotRequired をインポートします。
    • Python 3.10:typing には NotRequired がありません。TypedDict と NotRequired は typing_extensions からインポートしてください。SDK は Python 3.10 で typing_extensions をインストールします。
シンプルなマッピング形式と TypedDict 形式では、型を Annotated[type, "description"] でラップすると、フィールドの説明を設定できます。

戻り値

ツール実装をラップし、SdkMcpTool インスタンスを返すデコレータ関数。

例

ToolAnnotations

ツールの動作ヒント。tool() の annotations 引数として渡されます。ToolAnnotations は MCP SDK の mcp.types.ToolAnnotations を maxResultSizeChars フィールドで拡張し、各ヒントを camelCase または snake_case で記述できます:ToolAnnotations(readOnlyHint=True) と ToolAnnotations(read_only_hint=True) は同等です。オブジェクトからヒントを読み取る際は、インストールされている mcp パッケージが宣言している表記を使用してください:mcp 1.x では .readOnlyHint、2.x では .read_only_hint を使用し、.maxResultSizeChars はどちらでも動作します。SDK がアノテーションを受け入れる場所であればどこでも、プレーンな mcp.types.ToolAnnotations を渡すこともできます。 snake_case 名と型付き maxResultSizeChars フィールドには Python Agent SDK 0.2.140 以降が必要です。バージョン 0.1.31 から 0.2.139 は mcp.types.ToolAnnotations を変更なしで再エクスポートします。バージョン 0.1.55 から 0.2.139 では、maxResultSizeChars をキーワード引数として渡すことができます:MCP クラスは追加フィールドを受け入れ、SDK は値を Claude Code に転送します。 すべてのフィールドはオプションです。クライアントはセキュリティ決定のためにこれらのヒントに依存すべきではありません。

create_sdk_mcp_server()

Python アプリケーション内で実行されるインプロセス MCP サーバーを作成します。

パラメータ

戻り値

ClaudeAgentOptions.mcp_servers に渡すことができる McpSdkServerConfig オブジェクトを返します。

例

list_sessions()

メタデータを含む過去のセッションをリストします。プロジェクトディレクトリでフィルタするか、すべてのプロジェクト全体のセッションをリストします。同期的です。すぐに返します。

パラメータ

戻り値の型:SDKSessionInfo

例

プロジェクトの 10 個の最新セッションを出力します。結果は last_modified の降順でソートされるため、最初の項目が最新です。directory を省略するとすべてのプロジェクト全体を検索します。

get_session_messages()

過去のセッションからメッセージを取得します。同期的です。すぐに返します。

パラメータ

戻り値の型:SessionMessage

例

get_session_info()

プロジェクトディレクトリ全体をスキャンせずに、ID でシングルセッションのメタデータを読み取ります。同期的です。すぐに返します。

パラメータ

SDKSessionInfo を返すか、セッションが見つからない場合は None。

例

プロジェクトディレクトリをスキャンせずに、シングルセッションのメタデータを検索します。前の実行からセッション ID を既に持っている場合に便利です。

rename_session()

カスタムタイトルエントリを追加することでセッションの名前を変更します。繰り返し呼び出しは安全です。最新のタイトルが優先されます。同期的です。

パラメータ

session_id が有効な UUID でない場合、または title が空の場合は ValueError を発生させます。セッションが見つからない場合は FileNotFoundError。

例

最新のセッションの名前を変更して、後で見つけやすくします。新しいタイトルは、その後の読み取りで SDKSessionInfo.custom_title に表示されます。

tag_session()

セッションにタグを付けます。None を渡してタグをクリアします。繰り返し呼び出しは安全です。最新のタグが優先されます。同期的です。

パラメータ

session_id が有効な UUID でない場合、またはサニタイズ後に tag が空の場合は ValueError を発生させます。セッションが見つからない場合は FileNotFoundError。

例

セッションにタグを付けてから、後の読み取りでそのタグでフィルタします。既存のタグをクリアするには None を渡します。

fork_session()

セッションのトランスクリプトを新しいセッションにコピーし、元のセッションを変更せずに会話を別の方向に進められるようにします。会話の途中の時点から分岐するには、up_to_message_id を渡します。同期的です。

パラメータ

session_id が新しいセッションの UUID である ForkSessionResult を返します。フォークを続行するには、これを resume として渡します。フォークには元のセッションのファイルチェックポイントが含まれないため、フォーク前に取得したチェックポイントまで巻き戻すことはできません。 fork_session() は次の例外を発生させます:
  • ValueError:session_id または up_to_message_id が有効な UUID ではない
  • ValueError:セッションにメッセージがない、または up_to_message_id がトランスクリプト内のどのメッセージにも一致しない
  • FileNotFoundError:セッションが見つからない

例

最新のセッションを新しいタイトルでフォークし、そのフォークを再開します。元のセッションは独自の履歴を保持します。

クラス

ClaudeSDKClient

複数の交換にわたってセッションを維持します。 これは TypeScript SDK の query() 関数が内部的にどのように機能するかの Python 同等物です。会話を続けることができるクライアントオブジェクトを作成します。query() との比較 を参照してください。

メソッド

コンテキストマネージャーサポート

クライアントは自動接続管理のための非同期コンテキストマネージャーとして使用できます:
重要: メッセージを反復処理する場合、早期に終了するために break を使用することは避けてください。これは asyncio クリーンアップの問題を引き起こす可能性があります。代わりに、反復を自然に完了させるか、フラグを使用して必要なものを見つけたときを追跡してください。

例 - 会話を続ける

例 - ClaudeSDKClient でのストリーミング入力

query() はユーザーメッセージ辞書の非同期イテレータも受け入れるため、送信時にプロンプトを組み立てたり、画像などのコンテンツブロックを含めたりできます。Claude Code は最初に生成されたメッセージが到着するとすぐに応答を開始し、イテレータが完了するのを待たず、receive_response() はそのレスポンスを終了する ResultMessage で停止します。Claude が回答する前に読むべきすべてのものを 1 つのメッセージに入れてください。このジェネレータが行うように、各 query() 呼び出しを独自の receive_response() ループとペアにしてください。

例 - 割り込みの使用

割り込み後のバッファ動作: interrupt() は停止信号を送信しますが、メッセージバッファをクリアしません。割り込まれたタスクによって既に生成されたメッセージ(その ResultMessage を含む)はストリームに残ります。新しいクエリの応答を読む前に、receive_response() でそれらをドレインする必要があります。interrupt() の直後に新しいクエリを送信し、receive_response() を 1 回だけ呼び出すと、割り込まれたタスクのメッセージが受け取られ、新しいクエリの応答ではありません。

例 - 高度な権限制御

型

@dataclass vs TypedDict: このSDKは2種類の型を使用します。@dataclassで装飾されたクラス(ResultMessage、AgentDefinition、TextBlockなど)は実行時にオブジェクトインスタンスであり、属性アクセスをサポートします:msg.result。TypedDictで定義されたクラス(ThinkingConfigEnabled、McpStdioServerConfig、SyncHookJSONOutputなど)は実行時にプレーンな辞書であり、キーアクセスが必要です:config["budget_tokens"]であり、config.budget_tokensではありません。ClassName(field=value)呼び出し構文は両方で機能しますが、dataclassのみが属性を持つオブジェクトを生成します。

SdkMcpTool

@toolデコレータで作成されたSDK MCPツールの定義。

Transport

カスタムトランスポート実装用の抽象基底クラス。カスタムチャネル(例えば、ローカルサブプロセスの代わりにリモート接続)を介してClaudeプロセスと通信するために使用します。
これは低レベルの内部API です。インターフェースは将来のリリースで変更される可能性があります。カスタム実装はインターフェースの変更に合わせて更新する必要があります。
インポート:from claude_agent_sdk import Transport

ClaudeAgentOptions

Claude Codeクエリの設定dataclass。

遅いまたは停止したAPI応答を処理

CLIサブプロセスはAPI タイムアウトと停止検出を制御するいくつかの環境変数を読み込みます。ClaudeAgentOptions.envを通じてそれらを渡します:
  • API_TIMEOUT_MS:Anthropicクライアントのリクエスト単位のタイムアウト(ミリ秒)。デフォルト600000。メインループとすべてのサブエージェントに適用されます。
  • CLAUDE_CODE_MAX_RETRIES:最大APIリトライ。デフォルト10、上限15。各リトライは独自のAPI_TIMEOUT_MSウィンドウを取得します。 無人実行で長い停止を待つ必要がある場合は、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 Codeはサブエージェントを中止し、停止を親に報告します。バックグラウンドサブエージェントの場合、タスクも失敗とマークし、部分的な結果を添付します。
  • CLAUDE_ENABLE_STREAM_WATCHDOGとCLAUDE_STREAM_IDLE_TIMEOUT_MS:ヘッダーが到着したがレスポンスボディがストリーミングを停止したときにリクエストを中止するストリームウォッチドッグ。ウォッチドッグはすべてのプロバイダーでデフォルトでオンです。無効にするにはCLAUDE_ENABLE_STREAM_WATCHDOG=0を設定します。CLAUDE_STREAM_IDLE_TIMEOUT_MSはデフォルト300000で、その最小値にクランプされます。中止後、自動リトライはレスポンスがどこまで進んだかに基づいて、Claude Codeが何をするかをカバーします。 ANTHROPIC_BASE_URLの背後にあるゲートウェイがキープアライブピングで開いたままにしているレスポンスをウォッチドッグが待機している間、include_partial_messagesを設定するホストはping StreamEventメッセージを受け取り続けます。無応答を理由にセッションをタイムアウトさせるのではなく、これらのフレームを生存確認として扱ってください。v2.1.257より前は、最後の実際のストリームイベントから5分後にこれらのフレームが停止していました。

OutputFormat

構造化出力検証の設定。これをdictとしてClaudeAgentOptionsのoutput_formatフィールドに渡します:

SystemPromptPreset

オプションの追加を含むClaude Codeのプリセットシステムプロンプトを使用するための設定。

SystemPromptCustom

文字列としてsystem_promptを渡すのと同等のオブジェクト形式のカスタムシステムプロンプト。snapshotも設定できます。claude-agent-sdk v0.2.153以降が必要です。

SystemPromptFile

文字列として渡す代わりにファイルからカスタムシステムプロンプトを読み込むための設定。SDKはこれをCLI --system-prompt-fileフラグにマップします。プロンプトが大きい場合はファイル形式を使用します:SDKはCLIサブプロセスargvで文字列system_promptを渡し、これはSDKがAPIリクエストを送信する前にOSコマンドライン長制限の対象になります。Linuxでは単一の引数が約128 KBより長い場合、Argument list too longでプロセス生成に失敗します。Windowsではコマンドライン全体が約32 KBに制限されているため、文字列形式はより低いしきい値で失敗します。

SettingSource

SDKが設定を読み込むファイルシステムベースの設定ソースを制御します。

デフォルト動作

setting_sourcesが省略されるかNoneで、skillsが設定されていない場合、query()はClaude Code CLIと同じファイルシステム設定を読み込みます:ユーザー、プロジェクト、ローカル。skillsが設定されている場合、setting_sources行は現在のデフォルトを説明します。エンドポイント管理ポリシーはすべての場合に読み込まれます。サーバー管理設定は、セッションが適格な設定の組織認証情報で認証するときに取得されます。詳細については、settingSourcesが制御しないものを参照してください。

setting_sourcesを使用する理由

ファイルシステム設定を無効にします:
Python SDK 0.1.59以前では、空のリストはオプションを省略するのと同じように扱われたため、setting_sources=[]はファイルシステム設定を無効にしませんでした。新しいリリースにアップグレードして、空のリストが有効になるようにしてください。TypeScript SDKは影響を受けません。
特定の設定ソースのみを読み込みます:
SDK専用アプリケーション:
CLAUDE.mdプロジェクト指示を読み込むには、setting_sourcesに"project"を含めます。CLAUDE.mdの読み込みがシステムプロンプトオプションとどのように相互作用するかについては、システムプロンプトを変更を参照してください。

設定の優先順位

複数のソースが読み込まれる場合、設定は次の優先順位(最高から最低)でマージされます:
  1. ローカル設定(.claude/settings.local.json)
  2. プロジェクト設定(.claude/settings.json)
  3. ユーザー設定(~/.claude/settings.json)
agents、allowed_tools、settingsなどのプログラム的なオプションは、ユーザー、プロジェクト、ローカルのファイルシステム設定を上書きします。管理ポリシー設定はプログラム的なオプションより優先されます。

AgentDefinition

プログラムで定義されたサブエージェントの設定。
AgentDefinitionフィールド名はdisallowedTools、permissionMode、maxTurnsなどのcamelCaseを使用します。これらの名前はTypeScript SDKと共有されるワイヤー形式に直接マップされます。これはdisallowed_toolsとpermission_modeなどの同等のトップレベルフィールドにPython snake_caseを使用するClaudeAgentOptionsとは異なります。AgentDefinitionはdataclassであるため、snake_caseキーワードを渡すと構築時にTypeErrorが発生します。

PermissionMode

ツール実行を制御するための権限モード。

EffortLevel

思考の深さをガイドするためのeffort レベル。

CanUseTool

ツール権限コールバック関数の型エイリアス。
コールバックは以下を受け取ります:
  • tool_name:呼び出されるツールの名前
  • input_data:ツールの入力パラメータ
  • context:追加情報を含むToolPermissionContext
PermissionResult(PermissionResultAllowまたはPermissionResultDeny)を返します。 コールバックはインタラクティブな権限プロンプトのSDK置き換えです:権限評価フローがプロンプトに解決するときのみ呼び出されます。allowed_toolsエントリ、設定許可ルール、またはacceptEditsやbypassPermissionsなどの権限モードによって既に承認されたツール呼び出しは、それを呼び出しません。すべてのツール呼び出しをゲートするには、代わりにPreToolUseフックを使用します。 許可ルールはモードが自動承認しないアクションを事前承認しません。権限がどのように評価されるかを参照して、どれがコールバックに到達し、dontAskとautoモードで何が起こるかを確認してください。

ToolPermissionContext

ツール権限コールバックに渡されるコンテキスト情報。

PermissionResult

権限コールバック結果の共用体型。

PermissionResultAllow

ツール呼び出しを許可する必要があることを示す結果。

PermissionResultDeny

ツール呼び出しを拒否する必要があることを示す結果。

PermissionUpdate

権限をプログラムで更新するための設定。

PermissionRuleValue

権限更新で追加、置換、または削除するルール。

ToolsPreset

Claude Codeのデフォルトツールセットを使用するためのプリセットツール設定。

ThinkingConfig

拡張思考動作を制御します。3つの設定の共用体:
オプションのdisplayフィールドは、思考テキストが"summarized"または"omitted"で返されるかどうかを制御します。Claude Opus 4.7以降では、APIデフォルトは"omitted"であるため、ThinkingBlock出力で思考コンテンツを受け取るには"summarized"を設定します。Claude Code は、Amazon Bedrock や Google Cloud の Agent Platform など、一部のプロバイダーには display の値を渡しません。これらのプロバイダーでは、display を "summarized" に設定した場合でも、Opus 4.7 以降は空の ThinkingBlock 出力を返します。 これらはTypedDictクラスであるため、実行時にはプレーンな辞書です。辞書リテラルとして構築するか、クラスをコンストラクタのように呼び出します。どちらもdictを生成します。config.budget_tokensではなくconfig["budget_tokens"]でフィールドにアクセスします:

TaskBudget

ClaudeAgentOptionsのtask_budgetフィールドで使用されるトークン内のAPI側のタスク予算。
これはTypedDictであるため、ClaudeAgentOptions(task_budget={"total": 50000})などのプレーンな辞書として渡します。

SdkBeta

SDKベータ機能のリテラル型。
ClaudeAgentOptionsのbetasフィールドで使用して、ベータ機能を有効にします。
Claude API では、context-1m-2025-08-07 ベータは Claude Sonnet 4.5 と Claude Sonnet 4 で廃止されています。いずれかのモデルでこれをまだ渡している場合、標準の 200K トークンのコンテキストウィンドウを超えるリクエストはエラーを返すため、betas から削除してください。1M トークンのコンテキストウィンドウでセッションを実行するには、claude-sonnet-5-5 や claude-opus-5-5 など、デフォルトで 1M ウィンドウで動作するモデルを model に設定します。[1m] バリアントを通じてのみ 1M に到達するモデルの場合は、claude-opus-4-6[1m] のように、モデル ID にサフィックスを追加します。

McpSdkServerConfig

create_sdk_mcp_server()で作成されたSDK MCPサーバーの設定。

McpServerConfig

MCPサーバー設定の共用体型。

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

get_mcp_status()によって報告されるMCPサーバーの設定。これはすべてのMcpServerConfigトランスポートバリアントの共用体プラス、claude.ai経由でプロキシされるサーバー用の出力のみのclaudeai-proxyバリアントです。
McpSdkServerConfigStatusはMcpSdkServerConfigのシリアライズ可能な形式で、type("sdk")とname(str)フィールドのみです。プロセス内のinstanceは省略されます。McpClaudeAIProxyServerConfigにはtype("claudeai-proxy")、url(str)、id(str)フィールドがあります。

McpStatusResponse

ClaudeSDKClient.get_mcp_status()からの応答。mcpServersキーの下のサーバーステータスのリストをラップします。

McpServerStatus

McpStatusResponseに含まれる接続されたMCPサーバーのステータス。

ContextUsageResponse

ClaudeSDKClient.get_context_usage()からの応答。これはClaude Codeがインタラクティブセッションで/contextコマンド用にレンダリングするのと同じペイロードであるため、トークンカウントと共に、Claude Codeが/context使用グリッドを描画するために使用するcolorとgridRowsなどの表示フィールドを含みます。 Claude CodeはトークンカウントAPIに複数のリクエストを送信することでこのペイロードを構築します。これらのリクエストはメッセージストリームに表示されないため、ストリームを読み取るコスト追跡はそれらを見ません。Anthropic APIでは、トークンカウントは請求されません。
各ContextUsageCategoryエントリはname、tokens、color、およびオプションのisDeferredフラグを含みます。totalTokensはセッションの現在のコンテキスト使用状況であり、maxTokensはその使用状況が測定されるウィンドウです。そのウィンドウはモデルのコンテキストウィンドウ、または自動圧縮ウィンドウが適用される場合はそれより低いそのウィンドウであり、rawMaxTokensはmaxTokensと同じ値を含みます。apiUsageはセッションの実行合計ではなく、最新のAPI応答からの使用状況を保持します。Claude CodeはオプションのdeferredBuiltinTools、systemTools、systemPromptSectionsキーを設定しないため、型が宣言していても、それらが存在しないことを期待してください。

SdkPluginConfig

SDKでプラグインを読み込むための設定。
例:
プラグインの作成と使用に関する完全な情報については、プラグインを参照してください。

メッセージ型

Message

すべての可能なメッセージの Union 型。

UserMessage

ユーザー入力メッセージ。
SDK は tool_use_result を CLI から変更されずに渡します。結果に resource_link ブロックを含む外部 MCP サーバー上のツールの場合、dict は TypeScript SDKMcpResourceLink 型のキーを持つ dict のリストを保持する resourceLinks キーを持ちます。Claude は各リンクをツール結果内のテキスト行として受け取ります。サーバーが返したファイルをレンダリングするには、そのテキストを解析する代わりに resourceLinks を読み取ってください。resourceLinks キーには Python Agent SDK 0.2.150 以降と Claude Code v2.1.257 以降が必要です。そのバージョンの SDK にバンドルされている CLI は Claude Code の要件を満たしています。 CLI は結果にリンクがない場合と、サブエージェントからの結果の場合、キーを省略します。CLI は結果ごとに最大 50 個のリンクを保持し、リストがシリアル化された JSON の 64 KiB に達するとリンクの追加を停止します。tool() で定義したプロセス内ツールは、SDK がその resource_link ブロックを CLI が結果を見る前にテキストにフラット化するため、キーを生成しません。

AssistantMessage

コンテンツブロック付きのアシスタント応答メッセージ。

AssistantMessageError

アシスタントメッセージの可能なエラータイプ。
基になる CLI プロセスは、max_output_tokens などの Literal にリストされていないエラータイプを発行できます。SDK は値を変更されずに渡すため、このリストの外の文字列を unknown と同じ方法で扱ってください。TypeScript SDKAssistantMessageError 型は、CLI が発行できる値の完全なセットをリストしています。

SystemMessage

メタデータ付きのシステムメッセージ。
独自のデータクラスを持たないサブタイプは SystemMessage として届きます。ターン間のセッションを追跡するには、CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1 を設定し、subtype が session_state_changed である各メッセージで message.data["state"] を読み取ってください。SDKSessionStateChangedMessage には、このメッセージが保持できる状態がリストされています。これらを読み取るには receive_messages() で反復処理してください。receive_response() は ResultMessage で停止し、session_state_changed メッセージはその結果の後に続く場合があるためです。

ResultMessage

コストと使用状況情報を含む最終結果メッセージ。
subtype フィールドは、他のどのフィールドが入力されるかを決定します。これは "success"、"error_during_execution"、"error_max_turns"、"error_max_budget_usd"、または "error_max_structured_output_retries" のいずれかです。Python データクラスはすべてのバリアントを 1 つの形状にフラット化するため、返された subtype に適用されないフィールドは None です。 会話がどのように終了したかについての診断詳細を含むいくつかのフィールド:
  • is_error:会話がエラー状態で終了した場合は True。error_* サブタイプでは常に True。subtype="success" では、最終モデルリクエストが失敗した場合は True。つまり、エージェントループが完了しましたが、最後の API 呼び出しがエラーを返しました。
  • api_error_status:終了する API エラーの HTTP ステータスコード。ターンがエラーなしで終了した場合は None。subtype="success" でのみ入力されます。
  • result:subtype="success" での最終アシスタントメッセージのテキスト、または error_* サブタイプでは None。subtype="success" で is_error=True の場合、これは利用可能な場合は API エラー文字列を保持しますが、空の場合もあるため、api_error_status と前の AssistantMessage コンテンツで詳細を確認してください。
  • errors:最大ターンメッセージなどのループレベルのエラー文字列。error_* サブタイプでのみ入力されます。
  • terminal_reason:クエリループが終了した理由。例:"completed"、"max_turns"、"api_error"、"aborted_streaming"、または "aborted_tools"。"aborted_streaming" または "aborted_tools" の値は、ターンが完了する前に中止されたことを意味します。一般的な原因は interrupt() と、interrupt=True で PermissionResultDeny を返すパーミッション コールバックです。CLI バージョンがフィールドより前の場合、/voice や /usage などのローカルコマンドの結果(クエリループをバイパス)、またはセッションが致命的に失敗したときに発行される合成エラー結果の場合は None。TypeScript SDK の SDKResultMessage.terminal_reason を反映しており、値の完全なセットをリストしています。
  • origin:このターンをトリガーしたユーザーメッセージの出所。ストリーミング入力モード では、これをチェックして、origin が None または {"kind": "human"} である独自のプロンプトの結果と、バックグラウンドタスク通知などの注入されたターンの結果を区別します。Python Agent SDK 0.2.137 以降が必要です。
複数のバックグラウンドタスクが近いタイミングで終了した場合、Claude Code はそれらの通知にそれぞれ 1 ターンずつではなく、1 つのターンでまとめて応答することがあります。その場合でも、通知ごとに 1 つの ResultMessage が順番に届き、それぞれの origin の kind は "task-notification" です。最後のもの以外は num_turns が 0 に設定され、result は空になります。最後のものが、すべての通知に応答したターンを保持します。 usage dict はメインエージェントループのみをカバーし、サブエージェントおよび他のネストされた、または補助的なモデル呼び出しを除外します。ストリーミング入力モード では、値はターンごとです。トークンとコストのアカウンティングについては model_usage を優先してください。usage dict は、存在する場合、以下のキーを含みます: model_usage dict はモデル名をモデルごとの使用状況にマップします。クエリパイプラインを通じて行われたすべてのモデル呼び出しをカバーします:メインループ、サブエージェント、および圧縮と Workflow エージェントなどの内部呼び出し。パーミッション分類器とトークンカウントリクエストなどのそのパイプラインの外のヘルパー呼び出しは、model_usage から除外されます。model_usage を推定値として扱い、請求書ではなく。 ストリーミング入力モード では、model_usage と total_cost_usd はターン全体で累積されるため、結果全体で合計するのではなく、最新の結果を読み取ってください。セッションの以前の呼び出しから復元された 合計を蓄積 も、呼び出しがセッションを再開する場合にカウントされます。リセットについては ストリーミング入力モードでコストを追跡 を、ゼロ化された結果については セッションクラッシュ後に合計を復旧 を参照してください。 model_usage の各値は ModelUsage TypedDict で、from claude_agent_sdk.types import ModelUsage でインポートされます。そのキーは camelCase を使用します。これは、基になる CLI プロセスから変更されずに渡される値であり、TypeScript ModelUsage 型と一致するためです:

StreamEvent

ストリーミング中の部分的なメッセージ更新のためのストリームイベント。ClaudeAgentOptions で include_partial_messages=True の場合のみ受け取られます。from claude_agent_sdk.types import StreamEvent でインポートしてください。

RateLimitEvent

レート制限ステータスが変更されたときに発行されます(例:"allowed" から "allowed_warning" へ)。ユーザーにハード制限に達する前に警告するか、ステータスが "rejected" の場合にバックオフするために使用します。

RateLimitInfo

RateLimitEvent によって運ばれるレート制限状態。

ConversationResetMessage

会話が接続を終了せずに置き換えられたときに発行されます。例:/clear の後。リセットが後の ResultMessage オブジェクトの実行中の合計にどのように影響するかについては、ストリーミング入力モードでコストを追跡 を参照してください。Python Agent SDK 0.2.137 以降が必要です。

TaskStartedMessage

バックグラウンドタスクが開始されたときに発行されます。バックグラウンドタスクは、メインターンの外で追跡されるもの:バックグラウンド Bash コマンド、Monitor ウォッチ、Agent ツール経由で生成されたサブエージェント、またはリモートエージェント。task_type フィールドはどれであるかを示します。このネーミングは Task から Agent ツールへの名前変更とは無関係です。

TaskUsage

バックグラウンドタスクのトークンとタイミングデータ。

TaskProgressMessage

実行中のバックグラウンドタスクの進捗更新で定期的に発行されます。

TaskNotificationMessage

バックグラウンドタスクが完了、失敗、または停止されたときに発行されます。バックグラウンドタスクには、run_in_background Bash コマンド、Monitor ウォッチ、バックグラウンドサブエージェントが含まれます。
CLI が 長い MCP ツール呼び出しをバックグラウンドに移動 する場合、その呼び出しのツール結果はプレースホルダーのみを保持し、呼び出しの実際の結果はこのメッセージに到着します。そのような呼び出しの "completed" 通知では、CLI は、ツールが参照によって返したファイルをリストする resource_links キーを追加します。UserMessage.tool_use_result の resourceLinks キーと同じエントリと制限があります。resource_links キーには Python Agent SDK 0.2.150 以降と Claude Code v2.1.257 以降が必要です。そのバージョンの SDK にバンドルされている CLI は Claude Code の要件を満たしています。 データクラスには resource_links のフィールドがありません。メッセージが SystemMessage から継承する data dict から読み取ってください:message.data.get("resource_links")。通知を tool_use_id で呼び出しと一致させてください。CLI は結果にリンクがない場合と、MCP ツール呼び出しではないタスクの通知の場合、キーを省略します。

コンテンツブロック型

ContentBlock

すべてのコンテンツブロックの Union 型。

TextBlock

テキストコンテンツブロック。

ThinkingBlock

思考コンテンツブロック(思考機能を持つモデル用)。

ToolUseBlock

ツール使用リクエストブロック。

ToolResultBlock

ツール実行結果ブロック。

エラー型

以下の型は、コードがキャッチするものを定義します。これらの型が発生させるエラーメッセージ、原因、および各々の修正方法については、トラブルシューティングを参照してください。

ClaudeSDKError

すべての SDK エラーの基本例外クラス。
単一ショットの query() がエラー結果で終了した場合(例えば、ターン制限エラー)、SDK は ResultError を発生させます。

CLINotFoundError

Claude Code CLI がインストールされていないか見つからない場合に発生します。

CLIConnectionError

Claude Code への接続に失敗した場合に発生します。

ProcessError

Claude Code プロセスが失敗した場合に発生します。

ResultError

ターン制限エラーや API エラーなど、実行がエラーの結果メッセージで終了したために Claude Code プロセスが終了した場合に発生します。ResultError は ProcessError のサブクラスであるため、既存の except ProcessError ハンドラーもこれをキャッチします。その属性はその結果メッセージのフィールドを保持しているため、メッセージテキストを解析することなく、実行が失敗した理由に基づいて分岐できます。Python Agent SDK 0.2.140 以降が必要です。
失敗を区別するには、subtype の前に terminal_reason を確認してください。最終リクエストが失敗した場合(例えば API エラー)、Claude Code は subtype "success" を報告し、原因を terminal_reason に記載します(例えば "api_error")。設定した制限が実行を終了する場合(例えば max_turns または max_budget_usd)、error_* サブタイプを報告します。

CLIJSONDecodeError

JSON 解析に失敗した場合に発生します。

Hook 型

hooks の使用に関する包括的なガイド、例、一般的なパターンについては、Hooks ガイド を参照してください。

HookEvent

サポートされている hook イベント型。
TypeScript SDK は、Python ではまだ利用できない追加の hook イベントをサポートしています。SDK ごとのサポートについては、hook 利用可能性テーブル を参照してください。

HookCallback

hook コールバック関数の型定義。
パラメータ:
  • input:hook_event_name に基づいた判別 Union を持つ強く型付けされたフック入力(HookInput を参照)
  • tool_use_id:オプションのツール使用識別子(ツール関連の hook 用)
  • context:追加情報を含む hook コンテキスト
HookJSONOutput を返します。

HookContext

hook コールバックに渡されるコンテキスト情報。

HookMatcher

特定のイベントまたはツールに hook をマッチングするための設定。

HookInput

すべての hook 入力型の Union 型。実際の型は hook_event_name フィールドに依存します。

BaseHookInput

すべての hook 入力型に存在する基本フィールド。

PreToolUseHookInput

PreToolUse hook イベントの入力データ。

PostToolUseHookInput

PostToolUse hook イベントの入力データ。

PostToolUseFailureHookInput

PostToolUseFailure hook イベントの入力データ。ツール実行が失敗したときに呼び出されます。

UserPromptSubmitHookInput

UserPromptSubmit hook イベントの入力データ。

StopHookInput

Stop hook イベントの入力データ。

SubagentStopHookInput

SubagentStop hook イベントの入力データ。

PreCompactHookInput

PreCompact hook イベントの入力データ。

NotificationHookInput

Notification hook イベントの入力データ。

SubagentStartHookInput

SubagentStart hook イベントの入力データ。

PermissionRequestHookInput

PermissionRequest hook イベントの入力データ。hooks がパーミッション決定をプログラムで処理できるようにします。

HookJSONOutput

hook コールバック戻り値の Union 型。

SyncHookJSONOutput

制御フィールドと決定フィールドを持つ同期 hook 出力。
Python コードで continue_(アンダースコア付き)を使用してください。CLI に送信されるときに自動的に continue に変換されます。

HookSpecificOutput

イベント固有の出力型の判別 union。hookEventName フィールドはどのフィールドが有効かを決定します。hook イベントごとに利用可能なフィールドの詳細については、hooks で実行を制御 を参照してください。

AsyncHookJSONOutput

hook 実行を遅延させる非同期 hook 出力。
Python コードで async_(アンダースコア付き)を使用してください。CLI に送信されるときに自動的に async に変換されます。

Hook 使用例

この例は 2 つの hook を登録します:1 つは rm -rf / のような危険な bash コマンドをブロックし、もう 1 つは監査のためにすべてのツール使用をログします。セキュリティ hook は matcher を介して Bash コマンドでのみ実行され、ログ hook はすべてのツールで実行されます。

ツール入出力型

組み込み Claude Code ツールの入出力スキーマのドキュメント。Python SDK はこれらを型としてエクスポートしませんが、メッセージ内のツール入出力の構造を表します。 各出力は、そのツールの UserMessage.tool_use_result から読み込む値です。キー名は Claude Code が発行する通りに表示されます。「存在する場合」または「オプション」というコメント付きで | None と注釈が付けられたキーは、適用されない場合は省略されます。

Agent

ツール名: Agent。以前の名前 Task はまだエイリアスとして受け入れられており、初期化時の SystemMessage 内の tools リストは、後方互換性のためこのツールを Task として報告します。 入力:
複雑なマルチステップタスクを自律的に処理するための新しいエージェントを起動します。 出力(ステータス:"completed"):
出力(ステータス:"async_launched"):
出力(ステータス:"remote_launched"):
サブエージェントからの結果を返します。出力は status フィールドで判別されます。完了したタスクの場合は "completed"、バックグラウンドタスクの場合は "async_launched"、Claude Code がクラウドセッションにディスパッチしたタスクの場合は "remote_launched"。sessionUrl はそのセッションにリンクし、taskId がそれを識別します。Claude Code が サブエージェントの分離 worktree を保持した 場合、completed バリアントの worktreePath はそれを見つける場所であり、worktreeBranch は Claude Code が git で worktree を作成した場合のそのブランチです。 completed バリアントでは、resolvedModel はサブエージェントが開始したモデルを名付けます。これは availableModels または別の上書きが適用される場合、リクエストされた model 入力と異なる場合があります。このフィールドには Claude Code v2.1.174 以降が必要です。async_launched バリアントでは、resolvedModel はエージェントがバックグラウンドに移動したときに使用中のモデルを名付けるため、バックグラウンド化前に発生したスワップがそこに反映されます。両方のバリアントの modelsUsed フィールドは、使用されたモデルを順序で列挙し、連続する繰り返しは折りたたまれます。モデルが実行中にスワップされた場合にのみ設定されます。modelsUsed とバックグラウンド化時の resolvedModel 動作には Claude Code v2.1.212 以降が必要です。 Claude Code は usage と totalTokens をサブエージェントの最終 API リクエストから入力します。実行全体からではありません。存在する場合、usage 内の output_tokens_details の下の thinking_tokens はそのリクエストの出力トークンのうち思考トークンであった数です。output_tokens_details キーには Python SDK v0.2.136 以降が必要です。これは Claude Code v2.1.228 をバンドルしています。fallback_credit キーには Python SDK v0.2.162 以降が必要です。これは Claude Code v2.1.285 をバンドルしています。

AskUserQuestion

ツール名: AskUserQuestion 実行中にユーザーに明確化の質問をします。使用の詳細については 承認とユーザー入力を処理 を参照してください。 入力:
出力:

Bash

ツール名: Bash フォアグラウンドの上限については、タイムアウトと出力制限 を参照してください。バックグラウンド時間制限については、バックグラウンドコマンドの時間制限 を参照してください。 入力:
出力:

Monitor

ツール名: Monitor バックグラウンドソースを実行し、各イベントを Claude に配信して、ポーリングなしで反応できるようにします。command はスクリプトを実行し、stdout 行ごとに 1 つのイベントを発行し、ws は WebSocket を開き、テキストフレームごとに 1 つのイベントを発行します。command または ws のいずれか 1 つを正確に指定してください。 Monitor がコマンドを実行する場合、Bash と同じ権限ルールに従います。WebSocket ウォッチは別途承認を求めます。ws ソースには Claude Code v2.1.195 以降が必要です。動作とプロバイダーの可用性については、Monitor ツールリファレンス を参照してください。 入力:
出力:

Edit

ツール名: Edit 入力:
出力:

Read

ツール名: Read 入力:
出力は Claude が読み込んだ内容に応じて、以下の形状のいずれかを取ります。type キーをチェックして区別してください。 出力(type:"text"):
出力(type:"image"):
出力(type:"notebook"):
出力(type:"pdf"):
出力(type:"parts"):
出力(type:"file_unchanged"):

Write

ツール名: Write 入力:
出力:

Glob

ツール名: Glob 入力:
出力:
totalMatches と countIsComplete には Claude Code v2.1.191 以降が必要です。

Grep

ツール名: Grep 入力:
出力:
Grep は各出力モードでこの dict 形状を返します。どのオプションキーが存在するかは output_mode に依存します。 totalFiles には Claude Code v2.1.208 以降が必要です。totalLines には Claude Code v2.1.210 以降が必要です。

NotebookEdit

ツール名: NotebookEdit 入力:
出力:

WebFetch

ツール名: WebFetch 入力:
出力:

WebSearch

ツール名: WebSearch 入力:
出力:

TodoWrite

ツール名: TodoWrite
以下のツールは、デフォルトでは Claude Opus 4.7、Claude Sonnet 4.6、Claude Haiku 4.5、およびそれ以前のモデルでのみ利用可能です。その他のすべてのモデル(Claude Code が認識しないモデル ID を含む)では、オプトインしない限り利用できません。
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
ツールが利用可能な場所では、Claude Code は 4 つの Task ツールを提供します。CLAUDE_CODE_ENABLE_TASKS=0 を設定した場合は、代わりに TodoWrite を提供します。このデフォルトセットは Claude Code v2.1.268 以降に適用されます。これは TypeScript Agent SDK が v0.3.268 からバンドルしています。モデルの可用性 を参照してオプトインしてください。
入力:
出力:

TaskCreate

ツール名: TaskCreate 入力:
出力:

TaskUpdate

ツール名: TaskUpdate 入力:
出力:

TaskGet

ツール名: TaskGet 入力:
出力:

TaskList

ツール名: TaskList 入力:
出力:

TaskOutput

Claude Code v2.1.277 で削除されました。以前は実行中または完了したバックグラウンドタスクから出力を取得し、BashOutput はエイリアスとして受け入れられていました。Claude はバックグラウンドタスクの出力ファイルを Read で読み込みます。 disallowed_tools エントリまたはいずれかの名前をまだ指定している拒否ルールは、警告なしに無視されます。

TaskStop

ツール名: TaskStop。以前の名前 KillShell と KillBash はまだエイリアスとして受け入れられています。 入力:
出力:

ExitPlanMode

ツール名: ExitPlanMode 入力:
出力:

ListMcpResources

ツール名: ListMcpResourcesTool 入力:
結果は dict ではなくリストであるため、tool_use_result はこのツールに対して list を保持します。 出力:

ReadMcpResource

ツール名: ReadMcpResourceTool 入力:
出力:

継続的な会話インターフェースの構築

以下の例では、1 つの ClaudeSDKClient をターン全体で接続したままにするため、Claude は以前のメッセージを覚えています。new と入力して切断して再接続し、新しいセッションを開始するか、exit と入力して会話を終了します。

エラー処理

以下の例は、query() 呼び出しを SDK が発生させる エラータイプ の 4 つのハンドラーでラップしています。 この例は ResultError をキャッチします。これには Python Agent SDK 0.2.140 以降が必要です。

サンドボックス設定

SandboxSettings

サンドボックス動作の設定。これを使用してコマンドサンドボックスを有効にし、ネットワーク制限をプログラムで設定します。
サンドボックスはプラットフォームサポートに依存し、Linux では bubblewrap や socat などのツールが必要です。デフォルトでは、enabled が True でもサンドボックスが起動できない場合、コマンドはサンドボックスなしで実行され、stderr に警告が表示されます。このデフォルト動作は TypeScript SDK とは異なり、TypeScript SDK では failIfUnavailable がデフォルトで true です。サンドボックス設定で "failIfUnavailable": True を設定して、代わりに停止するようにしてください。SDK は、宣言された SandboxSettings フィールドとともに failIfUnavailable を Claude Code に転送します。その後、query() は subtype="error_during_execution" の ResultMessage を報告し、理由は errors に含まれます。これは単一ショットの query() 呼び出しであるため、SDK はそのエラー結果を生成した後に例外を発生させます。そのため、ループを try ブロックでラップして、それを超えて続行してください。エラーの仕様については 結果を処理する を参照してください。
サンドボックス化されたコマンドがファイルに書き込まないようにするには、サンドボックス設定の denyWrite にその絶対パスを記載します(例:"filesystem": {"denyWrite": ["/home/user/project/.env"]})。SDK は、宣言された SandboxSettings フィールドとともに filesystem を Claude Code に転送します。サンドボックスが起動すると、記載された各絶対パスへの書き込みがブロックされます。

使用例

Unix ソケットセキュリティ:allowUnixSockets オプションは、サンドボックスの外に到達するシステムサービスへのアクセスを許可できます。例えば、/var/run/docker.sock を許可すると、Docker API を通じてホストシステムへの完全なアクセスが効果的に許可され、サンドボックス分離がバイパスされます。厳密に必要な Unix ソケットのみを許可し、各ソケットのセキュリティへの影響を理解してください。

SandboxNetworkConfig

サンドボックスモード用のネットワーク固有の設定。これらの設定は、親の SandboxSettings で enabled が True の場合、サンドボックス化された Bash コマンドに適用されます。WebFetch ツールには適用されず、WebFetch ツールは代わりに パーミッションルール を使用します。
組み込みサンドボックスプロキシは、リクエストされたホスト名に基づいてネットワーク許可リストを強制し、TLS トラフィックを終了または検査しないため、ドメインフロンティング などの技術がそれをバイパスする可能性があります。詳細は サンドボックスセキュリティの制限事項 を参照し、TLS 終了プロキシの設定については セキュアなデプロイ を参照してください。

SandboxIgnoreViolations

特定のサンドボックス違反を無視するための設定。

サンドボックスなしコマンドのパーミッションフォールバック

allowUnsandboxedCommands が有効な場合、モデルはツール入力で dangerouslyDisableSandbox: True を設定することでサンドボックスの外でコマンドを実行するようにリクエストできます。これらのリクエストは既存のパーミッションシステムにフォールバックします。つまり、can_use_tool ハンドラーが呼び出され、カスタム認可ロジックを実装できます。 excludedCommands エントリは代わりにサンドボックスを自動的にバイパスし、モデルの関与がありません。sandbox.excludedCommands は、エントリが適用される場合をカバーしています。 次の例は、各サンドボックスなしリクエストをログし、独自の認可ロジックが許可しない限りそれを拒否します:
dangerouslyDisableSandbox: True で実行されるコマンドはシステムへの完全なアクセスを持ちます。can_use_tool ハンドラーがこれらのリクエストを慎重に検証することを確認してください。permission_mode が bypassPermissions に設定され、allowUnsandboxedCommands が有効な場合、モデルは アクションなしモードが自動承認しないアクション を除き、承認プロンプトなしにサンドボックスの外でコマンドを自律的に実行できます。この組み合わせは、モデルがサンドボックス分離をサイレントに逃れることを効果的に許可します。

関連項目