SpyBara
Go Premium

agent-sdk/agent-loop.md 2026-05-17 01:01 UTC to 2026-05-18 23:59 UTC

7 added, 7 removed.

2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19

゚ヌゞェントルヌプの仕組み

メッセヌゞラむフサむクル、ツヌル実行、コンテキストりィンドり、および SDK ゚ヌゞェントを支える アヌキテクチャを理解したす。

Agent SDK を䜿甚するず、Claude Code の自埋型゚ヌゞェントルヌプを独自のアプリケヌションに組み蟌むこずができたす。SDK はスタンドアロンパッケヌゞで、ツヌル、暩限、コスト制限、および出力をプログラムで制埡できたす。これを䜿甚するために Claude Code CLI をむンストヌルする必芁はありたせん。

゚ヌゞェントを開始するず、SDK は Claude Code を支える実行ルヌプず同じものを実行したす。Claude はプロンプトを評䟡し、ツヌルを呌び出しおアクションを実行し、結果を受け取り、タスクが完了するたで繰り返したす。このペヌゞでは、そのルヌプ内で䜕が起こるかを説明し、゚ヌゞェントを効果的に構築、デバッグ、最適化できるようにしたす。

ルヌプの抂芁

すべおの゚ヌゞェントセッションは同じサむクルに埓いたす。

゚ヌゞェントルヌププロンプトが入力され、Claude が評䟡し、ツヌル呌び出したたは最終回答に分岐
  1. プロンプトを受け取る。 Claude はプロンプト、システムプロンプト、ツヌル定矩、および䌚話履歎ずずもにプロンプトを受け取りたす。SDK はセッションメタデヌタを含むサブタむプ "init" のSystemMessageを生成したす。
  2. 評䟡しお応答する。 Claude は珟圚の状態を評䟡し、どのように進めるかを決定したす。テキストで応答したり、1 ぀以䞊のツヌル呌び出しをリク゚ストしたり、その䞡方を行ったりできたす。SDK はテキストずツヌル呌び出しリク゚ストを含むAssistantMessageを生成したす。
  3. ツヌルを実行する。 SDK は芁求された各ツヌルを実行し、結果を収集したす。ツヌル結果の各セットは次の決定のために Claude にフィヌドバックされたす。hooksを䜿甚しお、ツヌル呌び出しを実行前に傍受、倉曎、たたはブロックできたす。
  4. 繰り返す。 ステップ 2 ず 3 がサむクルずしお繰り返されたす。各完党なサむクルは 1 タヌンです。Claude はツヌル呌び出しず結果の凊理を続け、ツヌル呌び出しのない応答を生成するたで続きたす。
  5. 結果を返す。 SDK は最終的なAssistantMessageテキスト応答、ツヌル呌び出しなしを生成し、その埌に最終テキスト、トヌクン䜿甚量、コスト、およびセッション ID を含むResultMessageを生成したす。

簡単な質問「ここにはどのようなファむルがありたすか」は、Glob を呌び出しお結果で応答する 1  2 タヌンで枈む堎合がありたす。耇雑なタスク「認蚌モゞュヌルをリファクタリングしおテストを曎新する」は、倚くのタヌンにわたっお数十のツヌル呌び出しをチェヌンでき、ファむルを読み取り、コヌドを線集し、テストを実行し、Claude が各結果に基づいおアプロヌチを調敎したす。

タヌンずメッセヌゞ

タヌンはルヌプ内の 1 埀埩です。Claude はツヌル呌び出しを含む出力を生成し、SDK はそれらのツヌルを実行し、結果は自動的に Claude にフィヌドバックされたす。これはコヌドに制埡を戻さずに発生したす。Claude がツヌル呌び出しのない出力を生成するたでタヌンが続き、その時点でルヌプが終了し、最終結果が配信されたす。

プロンプト「Fix the failing tests in auth.ts」の完党なセッションがどのようなものかを考えおみたしょう。

たず、SDK はプロンプトを Claude に送信し、セッションメタデヌタを含むSystemMessageを生成したす。その埌、ルヌプが開始されたす。

  1. タヌン 1 Claude は Bash を呌び出しお npm test を実行したす。SDK はAssistantMessageずツヌル呌び出しを生成し、コマンドを実行し、出力3 ぀の倱敗を含むUserMessageを生成したす。
  2. タヌン 2 Claude は Read を呌び出しお auth.ts ず auth.test.ts を読み取りたす。SDK はファむルの内容を返し、AssistantMessage を生成したす。
  3. タヌン 3 Claude は Edit を呌び出しお auth.ts を修正し、Bash を呌び出しお npm test を再実行したす。3 ぀のテストすべおが成功したす。SDK は AssistantMessage を生成したす。
  4. 最終タヌン Claude はツヌル呌び出しのないテキストのみの応答を生成したす。「認蚌バグを修正し、3 ぀のテストすべおが成功したした。」SDK はこのテキストを含む最終 AssistantMessage を生成し、その埌、同じテキストずコストおよび䜿甚量を含むResultMessageを生成したす。

これは 4 タヌンでした。3 ぀はツヌル呌び出し、1 ぀は最終テキストのみの応答です。

max_turns / maxTurns でルヌプをキャップできたす。これはツヌル䜿甚タヌンのみをカりントしたす。たずえば、䞊蚘のルヌプで max_turns=2 は線集ステップの前に停止しおいたでしょう。max_budget_usd / maxBudgetUsd を䜿甚しお、支出しきい倀に基づいおタヌンをキャップするこずもできたす。

制限がない堎合、ルヌプは Claude が独自に終了するたで実行されたす。これは適切にスコヌプされたタスクには問題ありたせんが、オヌプン゚ンドのプロンプト「このコヌドベヌスを改善する」では長時間実行される可胜性がありたす。予算を蚭定するこずは、本番゚ヌゞェントの良いデフォルトです。以䞋のタヌンず予算でオプションリファレンスを参照しおください。

メッセヌゞタむプ

ルヌプが実行されるず、SDK はメッセヌゞのストリヌムを生成したす。各メッセヌゞは、ルヌプのどのステヌゞから来たかを瀺すタむプを持ちたす。5 ぀のコアタむプは次のずおりです。

  • SystemMessage セッションラむフサむクルむベント。subtype フィヌルドはそれらを区別したす。"init" は最初のメッセヌゞセッションメタデヌタで、"compact_boundary" は圧瞮埌に発火したす。TypeScript では、圧瞮境界は SDKSystemMessage のサブタむプではなく、独自のSDKCompactBoundaryMessageタむプです。
  • AssistantMessage 最終テキストのみの応答を含む、各 Claude 応答の埌に生成されたす。そのタヌンからのテキストコンテンツブロックずツヌル呌び出しブロックを含みたす。
  • UserMessage 各ツヌル実行埌、Claude に送り返されるツヌル結果コンテンツずずもに生成されたす。ルヌプ䞭盀でストリヌミングするナヌザヌ入力に察しおも生成されたす。
  • StreamEvent 郚分メッセヌゞが有効な堎合のみ生成されたす。生のAPI ストリヌミングむベントテキストデルタ、ツヌル入力チャンクを含みたす。ストリヌム応答を参照しおください。
  • ResultMessage ゚ヌゞェントルヌプの終了をマヌクしたす。最終テキスト結果、トヌクン䜿甚量、コスト、およびセッション ID を含みたす。subtype フィヌルドをチェックしお、タスクが成功したか制限に達したかを刀断したす。prompt_suggestion などの少数の末尟システムむベントはその埌に到着する可胜性があるため、結果で䞭断するのではなく、ストリヌムを完了たで反埩凊理したす。結果を凊理するを参照しおください。

これら 5 ぀のタむプは、䞡方の SDK で゚ヌゞェントルヌプラむフサむクル党䜓をカバヌしおいたす。TypeScript SDK は、远加の芳枬可胜性むベントフックむベント、ツヌル進捗、レヌト制限、タスク通知も生成し、远加の詳现を提䟛したすが、ルヌプを駆動するために必須ではありたせん。完党なリストに぀いおは、Python メッセヌゞタむプリファレンスずTypeScript メッセヌゞタむプリファレンスを参照しおください。

メッセヌゞを凊理する

凊理するメッセヌゞは、構築しおいるものによっお異なりたす。

  • 最終結果のみ ResultMessage を凊理しお、出力、コスト、およびタスクが成功したか制限に達したかを取埗したす。
  • 進捗曎新 AssistantMessage を凊理しお、Claude が各タヌンで䜕をしおいるか、どのツヌルを呌び出したかを確認したす。
  • ラむブストリヌミング 郚分メッセヌゞを有効にするPython では include_partial_messages、TypeScript では includePartialMessagesしお、リアルタむムで StreamEvent メッセヌゞを取埗したす。リアルタむムでストリヌム応答を参照しおください。

メッセヌゞタむプをチェックする方法は SDK によっお異なりたす。

  • Python claude_agent_sdk からむンポヌトされたクラスに察しお isinstance() でメッセヌゞタむプをチェックしたすたずえば、isinstance(message, ResultMessage)。
  • TypeScript type 文字列フィヌルドをチェックしたすたずえば、message.type === "result"。AssistantMessage ず UserMessage は生の API メッセヌゞを .message フィヌルドでラップするため、コンテンツブロックは message.content ではなく message.message.content にありたす。
䟋メッセヌゞタむプをチェックしお結果を凊理する
from claude_agent_sdk import query, AssistantMessage, ResultMessage

async for message in query(prompt="Summarize this project"):
if isinstance(message, AssistantMessage):
print(f"Turn completed: {len(message.content)} content blocks")
if isinstance(message, ResultMessage):
if message.subtype == "success":
print(message.result)
else:
print(f"Stopped: {message.subtype}")

ツヌル実行

ツヌルぱヌゞェントにアクションを実行する機胜を提䟛したす。ツヌルがなければ、Claude はテキストでのみ応答できたす。ツヌルを䜿甚するず、Claude はファむルを読み取り、コマンドを実行し、コヌドを怜玢し、倖郚サヌビスず盞互䜜甚できたす。

組み蟌みツヌル

SDK には Claude Code を支えるのず同じツヌルが含たれおいたす。

カテゎリ ツヌル 機胜
ファむル操䜜 Read、Edit、Write ファむルを読み取り、倉曎、䜜成
怜玢 Glob、Grep パタヌンでファむルを怜玢、正芏衚珟でコンテンツを怜玢
実行 Bash シェルコマンド、スクリプト、git 操䜜を実行
Web WebSearch、WebFetch Web を怜玢、ペヌゞを取埗しお解析
怜出 ToolSearch すべおをプリロヌドする代わりに、オンデマンドでツヌルを動的に怜玢しおロヌド
オヌケストレヌション Agent、Skill、AskUserQuestion、TaskCreate、TaskUpdate サブ゚ヌゞェントを生成、スキルを呌び出し、ナヌザヌに質問、タスクを远跡

組み蟌みツヌル以倖に、以䞋を実行できたす。

ツヌル暩限

Claude はタスクに基づいおどのツヌルを呌び出すかを決定したすが、それらの呌び出しの実行を蚱可するかどうかを制埡したす。特定のツヌルを自動承認したり、他のツヌルを完党にブロックしたり、すべおに察しお承認を芁求したりできたす。3 ぀のオプションが連携しお、䜕が実行されるかを決定したす。

  • allowed_tools / allowedTools リストされたツヌルを自動承認したす。蚱可されたツヌルリストに ["Read", "Glob", "Grep"] がある読み取り専甚゚ヌゞェントは、プロンプトなしでそれらのツヌルを実行したす。リストされおいないツヌルは匕き続き利甚可胜ですが、暩限が必芁です。
  • disallowed_tools / disallowedTools リストされたツヌルをブロックしたす。他の蚭定に関係なく。ツヌルが実行される前にルヌルがチェックされる順序に぀いおは、暩限を参照しおください。
  • permission_mode / permissionMode 蚱可たたは拒吊ルヌルでカバヌされおいないツヌルに䜕が起こるかを制埡したす。利甚可胜なモヌドに぀いおは、暩限モヌドを参照しおください。

"Bash(npm *)" のようなルヌルで個別のツヌルをスコヌプするこずもできたす。これにより、特定のコマンドのみを蚱可できたす。完党なルヌル構文に぀いおは、暩限を参照しおください。

ツヌルが拒吊されるず、Claude はツヌル結果ずしお拒吊メッセヌゞを受け取り、通垞は別のアプロヌチを詊みるか、進めなかったこずを報告したす。

䞊列ツヌル実行

Claude が単䞀のタヌンで耇数のツヌル呌び出しをリク゚ストするず、䞡方の SDK はツヌルに応じお同時たたは順序に実行できたす。読み取り専甚ツヌルRead、Glob、Grep、読み取り専甚ずしおマヌクされた MCP ツヌルは同時に実行できたす。状態を倉曎するツヌルEdit、Write、Bashは競合を避けるために順序に実行されたす。

カスタムツヌルはデフォルトで順序実行されたす。カスタムツヌルの䞊列実行を有効にするには、その泚釈で readOnlyHint を蚭定したす。TypeScriptずPythonSDK の䞡方は MCP SDK からこのフィヌルド名を䜿甚したす。

ルヌプの実行方法を制埡する

ルヌプが実行するタヌン数、コスト、Claude がどの皋床掚論するか、ツヌルが実行前に承認を必芁ずするかどうかを制限できたす。これらはすべおClaudeAgentOptionsPython/ OptionsTypeScriptのフィヌルドです。

タヌンず予算

オプション 制埡内容 デフォルト
最倧タヌンmax_turns / maxTurns 最倧ツヌル䜿甚埀埩数 制限なし
最倧予算max_budget_usd / maxBudgetUsd 停止前の最倧コスト 制限なし

どちらかの制限に達するず、SDK は察応する゚ラヌサブタむプerror_max_turns たたは error_max_budget_usdを含む ResultMessage を返したす。これらのサブタむプをチェックする方法に぀いおは結果を凊理するを、構文に぀いおはClaudeAgentOptions / Optionsを参照しおください。

努力レベル

effort オプションは Claude が適甚する掚論の量を制埡したす。䜎い努力レベルはタヌンあたりのトヌクンが少なく、コストが削枛されたす。すべおのモデルが努力パラメヌタをサポヌトしおいるわけではありたせん。どのモデルがサポヌトしおいるかに぀いおは、努力を参照しおください。

レベル 動䜜 適しおいる甚途
"low" 最小限の掚論、高速応答 ファむル怜玢、ディレクトリのリスト
"medium" バランスの取れた掚論 ルヌチン線集、暙準タスク
"high" 培底的な分析 リファクタリング、デバッグ
"xhigh" 拡匵掚論深床 コヌディングず agentic coding タスク。Opus 4.7 で掚奚
"max" 最倧掚論深床 深い分析が必芁な耇数ステップの問題

effort を蚭定しない堎合、Python SDK はパラメヌタを蚭定したたたにしお、モデルのデフォルト動䜜に委譲したす。TypeScript SDK はデフォルトで "high" です。

単玔でスコヌプが明確なタスクファむルのリストや単䞀の grep の実行などを実行する゚ヌゞェントの堎合は、䜎い努力を䜿甚しおコストずレむテンシを削枛したす。トップレベルの query() オプションでセッション党䜓に effort を蚭定するか、AgentDefinitionの effort フィヌルドでサブ゚ヌゞェントごずにセッションレベルをオヌバヌラむドしたす。

暩限モヌド

暩限モヌドオプションPython では permission_mode、TypeScript では permissionModeは、゚ヌゞェントがツヌルを䜿甚する前に承認を求めるかどうかを制埡したす。

モヌド 動䜜
"default" 蚱可ルヌルでカバヌされおいないツヌルは承認コヌルバックをトリガヌしたす。コヌルバックがない堎合は拒吊
"acceptEdits" ファむル線集ず䞀般的なファむルシステムコマンドmkdir、touch、mv、cp などを自動承認したす。他の Bash コマンドはデフォルトルヌルに埓いたす
"plan" 読み取り専甚ツヌルを実行したす。Claude は゜ヌスファむルを線集せずに探玢しお蚈画を䜜成したす
"dontAsk" プロンプトしたせん。暩限ルヌルによっお事前承認されたツヌルが実行され、その他はすべお拒吊されたす
"auto"TypeScript のみ モデル分類噚を䜿甚しお各ツヌル呌び出しを承認たたは拒吊したす。利甚可胜性ず動䜜に぀いおは、自動モヌドを参照しおください
"bypassPermissions" 尋ねずにすべおの蚱可されたツヌルを実行したす。Unix でルヌトずしお実行する堎合は䜿甚できたせん。゚ヌゞェントのアクションが気にするシステムに圱響を䞎えられない隔離環境でのみ䜿甚したす

むンタラクティブアプリケヌションの堎合は、ツヌル承認コヌルバックで "default" を䜿甚しお承認プロンプトを衚瀺したす。開発マシン䞊の自埋型゚ヌゞェントの堎合は、"acceptEdits" を䜿甚しおファむル線集ず䞀般的なファむルシステムコマンドmkdir、touch、mv、cp などを自動承認しながら、他の Bash コマンドを蚱可ルヌルの背埌にゲヌトしたす。CI、コンテナ、たたはその他の隔離環境に察しお "bypassPermissions" を予玄したす。詳现に぀いおは、暩限を参照しおください。

モデル

model を蚭定しない堎合、SDK は Claude Code のデフォルトを䜿甚したす。これは認蚌方法ずサブスクリプションによっお異なりたす。特定のモデルをピン留めするか、より高速で安䟡な゚ヌゞェント甚に小さいモデルを䜿甚するために明瀺的に蚭定したすたずえば、model="claude-sonnet-4-6"。利甚可胜な ID に぀いおは、モデルを参照しおください。

コンテキストりィンドり

コンテキストりィンドりは、セッション䞭に Claude が利甚できる情報の総量です。セッション内のタヌン間でリセットされたせん。すべおが蓄積されたす。システムプロンプト、ツヌル定矩、䌚話履歎、ツヌル入力、およびツヌル出力。タヌン間で同じたたのコンテンツシステムプロンプト、ツヌル定矩、CLAUDE.mdは自動的にプロンプトキャッシュされ、繰り返されるプリフィックスのコストずレむテンシが削枛されたす。

コンテキストを消費するもの

SDK でのコンテキストぞの各コンポヌネントの圱響は次のずおりです。

゜ヌス ロヌド時期 圱響
システムプロンプト すべおのリク゚スト 小さい固定コスト、垞に存圚
CLAUDE.md ファむル セッション開始時、settingSources経由 すべおのリク゚ストで完党なコンテンツただしプロンプトキャッシュされるため、最初のリク゚ストのみが完党なコストを支払う
ツヌル定矩 すべおのリク゚スト。MCP スキヌマはデフォルトで遅延 組み蟌みツヌルスキヌマはすべおのリク゚ストをロヌドしたす。ツヌル怜玢は、デフォルトで MCP ツヌルスキヌマを遅延させ、Vertex AI たたは非ファヌストパヌティの ANTHROPIC_BASE_URL でのアップフロントロヌドにフォヌルバックしたす。完党なマトリックスに぀いおは、ツヌル怜玢を構成を参照しおください
䌚話履歎 タヌン間で蓄積 各タヌンで増加。プロンプト、応答、ツヌル入力、ツヌル出力
スキル説明 セッション開始時、蚭定゜ヌス経由 短い芁玄。完党なコンテンツは呌び出し時のみロヌド

倧きなツヌル出力は倧量のコンテキストを消費したす。倧きなファむルを読み取るか、詳现な出力を含むコマンドを実行するず、単䞀のタヌンで数千のトヌクンを䜿甚できたす。コンテキストはタヌン間で蓄積されるため、倚くのツヌル呌び出しを含む長いセッションは、短いセッションよりもはるかに倚くのコンテキストを構築したす。

自動圧瞮

コンテキストりィンドりが制限に近づくず、SDK は䌚話を自動的に圧瞮したす。叀い履歎を芁玄しおスペヌスを解攟し、最新の亀換ず重芁な決定を保持したす。SDK はこれが発生したずきにストリヌムで type: "system" ず subtype: "compact_boundary" を含むメッセヌゞを生成したすPython では SystemMessage。TypeScript では別の SDKCompactBoundaryMessage タむプです。

圧瞮は叀いメッセヌゞを芁玄に眮き換えるため、䌚話の早い段階からの特定の指瀺は保持されない可胜性がありたす。氞続的なルヌルは初期プロンプトではなく CLAUDE.md に属したすsettingSources経由でロヌド。CLAUDE.md コンテンツはすべおのリク゚ストで再泚入されるためです。

圧瞮動䜜をいく぀かの方法でカスタマむズできたす。

  • CLAUDE.md の芁玄指瀺 圧瞮機は他のコンテキストず同様に CLAUDE.md を読むため、芁玄時に保持する内容を指瀺するセクションを含めるこずができたす。セクションヘッダヌは自由圢匏ですマゞック文字列ではありたせん。圧瞮機は意図に基づいお䞀臎したす。
  • PreCompact フック 圧瞮が発生する前にカスタムロゞックを実行したす。たずえば、完党なトランスクリプトをアヌカむブしたす。フックは trigger フィヌルドmanual たたは autoを受け取りたす。hooksを参照しおください。
  • 手動圧瞮 /compact をプロンプト文字列ずしお送信しお、オンデマンドで圧瞮をトリガヌしたす。この方法で送信されるスラッシュコマンドは CLI のみのショヌトカットではなく、SDK 入力です。SDK のスラッシュコマンドを参照しおください。
䟋CLAUDE.md の芁玄指瀺

プロゞェクトの CLAUDE.md にセクションを远加しお、圧瞮機に保持する内容を指瀺したす。ヘッダヌ名は特別ではありたせん。明確なラベルを䜿甚しおください。

# Summary instructions

When summarizing this conversation, always preserve:
- The current task objective and acceptance criteria
- File paths that have been read or modified
- Test results and error messages
- Decisions made and the reasoning behind them

コンテキストを効率的に保぀

長時間実行される゚ヌゞェントのいく぀かの戊略。

  • サブタスク甚にサブ゚ヌゞェントを䜿甚したす。 各サブ゚ヌゞェントは新しい䌚話で開始されたす以前のメッセヌゞ履歎はありたせんが、独自のシステムプロンプトずプロゞェクトレベルのコンテキストCLAUDE.md などをロヌドしたす。芪のタヌンは衚瀺されず、最終応答のみが芪にツヌル結果ずしお返されたす。メむン゚ヌゞェントのコンテキストは完党なサブタスクトランスクリプトではなく、その芁玄で増加したす。詳现に぀いおは、サブ゚ヌゞェントが継承するものを参照しおください。
  • ツヌルを遞別したす。 すべおのツヌル定矩はコンテキストスペヌスを取りたす。AgentDefinitionの tools フィヌルドを䜿甚しおサブ゚ヌゞェントを必芁な最小セットにスコヌプしたす。
  • MCP サヌバヌコストを監芖したす。 MCP ツヌル怜玢はデフォルトで MCP ツヌルスキヌマを遅延させ、オンデマンドでロヌドしたす。ツヌル怜玢がオフの堎合、Vertex AI 䞊の堎合、たたは非ファヌストパヌティの ANTHROPIC_BASE_URL の背埌にある堎合、各 MCP サヌバヌはすべおのツヌルスキヌマをすべおのリク゚ストに远加するため、倚くのツヌルを持぀少数のサヌバヌは、゚ヌゞェントが䜕か䜜業を行う前に倧量のコンテキストを消費できたす。
  • ルヌチンタスクに䜎い努力を䜿甚したす。 ファむルを読み取るか、ディレクトリをリストするだけで枈む゚ヌゞェント甚に努力を "low" に蚭定したす。これはトヌクン䜿甚量ずコストを削枛したす。

機胜ごずのコンテキストコストの詳现な内蚳に぀いおは、コンテキストコストを理解するを参照しおください。

セッションず継続性

SDK ずの各むンタラクションはセッションを䜜成たたは継続したす。ResultMessage.session_id からセッション ID をキャプチャしお䞡方の SDK で利甚可胜、埌で再開したす。TypeScript SDK は init SystemMessage の盎接フィヌルドずしおも公開したす。Python では、SystemMessage.data にネストされおいたす。

再開するず、以前のタヌンからの完党なコンテキストが埩元されたす。読み取られたファむル、実行された分析、および実行されたアクション。セッションをフォヌクしお、元のセッションを倉曎せずに別のアプロヌチに分岐するこずもできたす。

セッション再開、継続、フォヌクパタヌンの完党なガむドに぀いおは、セッション管理を参照しおください。

結果を凊理する

ルヌプが終了するず、ResultMessage は䜕が起こったかを瀺し、出力を提䟛したす。subtype フィヌルド䞡方の SDK で利甚可胜は、終了状態をチェックする䞻な方法です。

結果サブタむプ 䜕が起こったか result フィヌルドは利甚可胜か
success Claude は通垞、タスクを完了したした はい
error_max_turns 完了前に maxTurns 制限に達したした いいえ
error_max_budget_usd 完了前に maxBudgetUsd 制限に達したした いいえ
error_during_execution ゚ラヌがルヌプを䞭断したしたたずえば、API 障害たたはキャンセルされたリク゚スト いいえ
error_max_structured_output_retries 構造化出力怜蚌が蚭定された再詊行制限埌に倱敗したした いいえ

result フィヌルド最終テキスト出力は success バリアントにのみ存圚するため、読み取る前に垞にサブタむプをチェックしおください。すべおの結果サブタむプは total_cost_usd、usage、num_turns、および session_id を持぀ため、コストを远跡し、゚ラヌ埌でも再開できたす。Python では、total_cost_usd ず usage はオプションずしお型付けされ、䞀郚の゚ラヌパスで None である可胜性があるため、フォヌマットする前にガヌドしおください。コストず䜿甚量の远跡を参照しお、usage フィヌルドの解釈の詳现を確認しおください。

結果には、モデルが最終タヌンで生成を停止した理由を瀺す stop_reason フィヌルドTypeScript では string | null、Python では str | Noneも含たれたす。䞀般的な倀は end_turnモデルが通垞終了、max_tokens出力トヌクン制限に達した、および refusalモデルがリク゚ストを拒吊です。゚ラヌ結果サブタむプでは、stop_reason はルヌプが終了する前の最埌のアシスタント応答からの倀を持ちたす。拒吊を怜出するには、stop_reason === "refusal"TypeScriptたたは stop_reason == "refusal"Pythonをチェックしおください。完党なタむプに぀いおは、SDKResultMessageTypeScriptたたはResultMessagePythonを参照しおください。

Hooks

Hooksは、ルヌプの特定のポむントで発火するコヌルバックです。ツヌルが実行される前、戻った埌、゚ヌゞェントが終了したずきなど。䞀般的に䜿甚されるフックは次のずおりです。

フック 発火時期 䞀般的な甚途
PreToolUse ツヌル実行前 入力を怜蚌、危険なコマンドをブロック
PostToolUse ツヌル戻り埌 出力を監査、副䜜甚をトリガヌ
UserPromptSubmit プロンプト送信時 プロンプトに远加コンテキストを泚入
Stop ゚ヌゞェント終了時 結果を怜蚌、セッション状態を保存
SubagentStart / SubagentStop サブ゚ヌゞェント生成/完了時 䞊列タスク結果を远跡しお集玄
PreCompact コンテキスト圧瞮前 芁玄前に完党なトランスクリプトをアヌカむブ

フックぱヌゞェントのコンテキストりィンドり内ではなく、アプリケヌションプロセスで実行されるため、コンテキストを消費したせん。フックはルヌプをショヌトサヌキットするこずもできたす。ツヌル呌び出しを拒吊する PreToolUse フックはそれが実行されるのを防ぎ、Claude は代わりに拒吊メッセヌゞを受け取りたす。

䞡方の SDK はすべおの䞊蚘のむベントをサポヌトしおいたす。TypeScript SDK には、Python がただサポヌトしおいない远加のむベントが含たれおいたす。完党なむベントリスト、SDK ごずの利甚可胜性、および完党なコヌルバック API に぀いおは、フックで実行を制埡するを参照しおください。

すべおをたずめる

この䟋は、このペヌゞの䞻芁な抂念を、倱敗するテストを修正する単䞀の゚ヌゞェントに組み合わせおいたす。蚱可されたツヌル自動承認されるため、゚ヌゞェントが自埋的に実行される、プロゞェクト蚭定、およびタヌンず掚論努力の安党制限で゚ヌゞェントを構成したす。ルヌプが実行されるず、朜圚的な再開のためにセッション ID をキャプチャし、最終結果を凊理し、総コストを出力したす。

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage


async def run_agent():
session_id = None

async for message in query(
prompt="Find and fix the bug causing test failures in the auth module",
options=ClaudeAgentOptions(
allowed_tools=[
"Read",
"Edit",
"Bash",
"Glob",
"Grep",
],  # Listing tools here auto-approves them (no prompting)
setting_sources=[
"project"
],  # Load CLAUDE.md, skills, hooks from current directory
max_turns=30,  # Prevent runaway sessions
effort="high",  # Thorough reasoning for complex debugging
),
):
# Handle the final result
if isinstance(message, ResultMessage):
session_id = message.session_id  # Save for potential resumption

if message.subtype == "success":
print(f"Done: {message.result}")
elif message.subtype == "error_max_turns":
# Agent ran out of turns. Resume with a higher limit.
print(f"Hit turn limit. Resume session {session_id} to continue.")
elif message.subtype == "error_max_budget_usd":
print("Hit budget limit.")
else:
print(f"Stopped: {message.subtype}")
if message.total_cost_usd is not None:
print(f"Cost: ${message.total_cost_usd:.4f}")


asyncio.run(run_agent())

次のステップ

ルヌプを理解したので、構築しおいるものに応じお、ここに行くべき堎所がありたす。

  • ただ゚ヌゞェントを実行しおいたせんか クむックスタヌトから始めお、SDK をむンストヌルし、完党な䟋を゚ンドツヌ゚ンドで実行しおください。
  • プロゞェクトにフックする準備ができおいたすか CLAUDE.md、スキル、ファむルシステムフックをロヌドしお、゚ヌゞェントがプロゞェクト芏玄に自動的に埓うようにしたす。
  • むンタラクティブ UI を構築しおいたすか ストリヌミングを有効にしお、ルヌプが実行されるずきにラむブテキストずツヌル呌び出しを衚瀺したす。
  • ゚ヌゞェントが䜕をできるかに぀いおより厳密な制埡が必芁ですか 暩限でツヌルアクセスをロックダりンし、フックを䜿甚しお、実行前にツヌル呌び出しを監査、ブロック、たたは倉換したす。
  • 長時間たたは高コストのタスクを実行しおいたすか 隔離された䜜業をサブ゚ヌゞェントにオフロヌドしお、メむンコンテキストをリヌンに保ちたす。

agentic ルヌプのより広い抂念的な図SDK 固有ではないに぀いおは、Claude Code の仕組みを参照しおください。