
Claude Code SDKで自律型エージェントを構築する: 開発者のための実践ガイド
Claude Codeのエージェント実行エンジンを、CI・自動化・マルチエージェントシステム向けのプログラム可能な部品に変える公式ライブラリ。
Claude Code SDKで自律型エージェントを構築する:実践的な開発者ガイド
Claude Code SDK — 正式にはAgent SDKと呼ばれる — は、Claude Codeの完全なエージェント型エンジンをプログラムから操作できるPythonおよびTypeScriptライブラリです。ターミナルも、キーボードの前にいる人間も不要で、あなたのアプリケーションが非同期のquery()関数を呼び出し、エージェントの作業のあらゆるステップをストリーミングで受け取るだけです。Claude Codeを対話的に使ったことがあれば、SDKは同じ「ファイルを読む/コードを編集する/コマンドを実行する」というループを、CIパイプライン、コードレビューボット、マルチエージェントオーケストレーター、あるいは任意のバックエンドサービスに組み込める合成可能なライブラリとして提供してくれます。
Agent SDKとは何か — そして、なぜ存在するのか
Claude Codeはターミナルツールとしてよく知られています。プロンプトを入力すると、エージェントがコードベースを推論し、組み込みツール(Read、Edit、Bash、Grepなど)を呼び出し、結果を書き戻してくれます。しかし、そのループを自動化したい瞬間 — すべてのプルリクエストでレビューをトリガーしたり、複数の専門化されたサブエージェントに処理を分散させたり、その上にプロダクトを構築したりしたい瞬間 — が来ると、対話型CLIは正しい抽象化ではなくなります。必要なのはライブラリです。
Agent SDKはそのギャップを埋めます。Anthropicの公式ドキュメントによれば、「Claude Codeを支えるのと同じツール、エージェントループ、コンテキスト管理」をPythonとTypeScriptでプログラム可能な形で公開しています。これはマーケティング用語ではなく、文字通りのアーキテクチャです。SDKはClaude Code CLIバイナリを管理されたサブプロセスとして起動し、stdio経由で通信し、すべてを型付きメッセージオブジェクトの非同期ストリームとして表示し、あなたのコードがそれを消費して反応できるようにします。
この区別にはいくつかの理由で重要な意味があります:
同じエンジン、異なるインターフェース。 CLIからSDKに切り替えても、劣った、あるいは単純なツールに移行するわけではありません。SDKはCLIのすべての機能 — MCPサーバー接続、フックのライフサイクル、スキルファイル、CLAUDE.mdメモリ、サブエージェントへの委任、そしてフルのツール一覧 — を引き継ぎます。
SDKがツール実行を代行してくれる。 Anthropic Client SDK(より低レベルのanthropic Python/JSパッケージ)を使い、Claudeにツールを呼び出させたい場合、ツールループを自分で実装する必要があります:APIを呼び出し、ツール使用のレスポンスを検出し、ツールを実行し、結果をフィードバックし、Claudeが停止するまで繰り返す、というものです。Agent SDKはそのループ全体を単一のasync for message in query(...)に集約します — Claudeがどのツールを呼び出すかを判断し、サブプロセス内でそれを実行し、タスクが完了するまでループし続けます。あなたはストリームを消費するだけです。
設計段階からヘッドレス。 CLIの許可プロンプト — 「このbashコマンドを許可しますか?」 — は人間の入力を待ってブロックします。SDKはこれをpermissionModeオプションと一連の許可モード — たとえばファイル編集を自動承認するacceptEditsや、サンドボックス化されたCI環境ですべてをプロンプトなしで実行するbypassPermissions — に置き換え、さらにカスタムフロー用のプログラム的な承認コールバックも用意しています。正確なモード名と動作はAnthropicのSDKリファレンスに記載されています(最新のリストは確認してください)が、効果は同じです:あなたの自動化がキー入力を待って止まることはありません。
同じClaude Codeエンジンに対する2つのインターフェース:人間が介在する作業のための対話型CLI、そしてあなたのアプリケーションがプロンプトを制御し、許可モードが承認ダイアログの代わりを務める、プログラムによるヘッドレス自動化のためのAgent SDK。
SDKのインストール
Anthropicは2つのパッケージを公開しています:
- TypeScript:
@anthropic-ai/claude-agent-sdk(npm) - Python:
claude-agent-sdk(pip;Python 3.10以上が必要)
TypeScriptパッケージはあなたのプラットフォーム用のネイティブClaude Codeバイナリをバンドルしているため、別途CLIをインストールする必要はありません。認証はAnthropic Consoleから取得したANTHROPIC_API_KEY環境変数を介して行います。SDKはAmazon Bedrock、Google Vertex AI、Microsoft Azure AI Foundryもサポートしています — 該当する環境変数のパターンについてはAnthropicのドキュメントを参照してください。
コアコンセプト
4つの概念を理解すれば、実際のSDK利用のほとんどをカバーできます。
1. query()関数と非同期メッセージストリーム
すべてのSDKのやり取りはquery()から始まります。prompt文字列とoptionsオブジェクトを渡すと、エージェントが作業する間、型付きメッセージオブジェクトを生成する非同期イテレータが返されます。エージェントが完了するかエラーに遭遇するとループは終了します。
受け取るメッセージには以下が含まれます:
- AssistantMessage — Claudeの推論テキストとツール呼び出しの説明
- ToolResultMessage — 各ツール実行の出力
- ResultMessage — 最終結果。成功か失敗かを示す
subtypeフィールドを持つ - SystemMessage — セッションのライフサイクルイベント(
initサブタイプがsession_idを運ぶ)
多くの本番コードでは、最終出力を取り出すためにResultMessageをフィルタリングし、エージェントが何をしたかを追跡するために任意でAssistantMessageのブロックをログに記録します。
2. ツールとallowedTools
SDKの組み込みツール一覧はClaude Codeの機能に直接対応しています:
| ツール | 機能 |
|---|---|
| Read | 作業ディレクトリ内の任意のファイルを読む |
| Write | 新規ファイルを作成する |
| Edit | 既存ファイルに正確な編集を加える |
| Bash | ターミナルコマンド、gitの操作、スクリプトを実行する |
| Glob | パターンでファイルを検索する(**/*.ts、src/**/*.py) |
| Grep | 正規表現でファイル内容を検索する |
| WebSearch | ウェブを検索する |
| WebFetch | ウェブページを取得して解析する |
| AskUserQuestion | ユーザーに確認の質問をする(対話型フロー) |
| Agent | オプションで定義したサブエージェントを起動する |
allowedToolsオプションはこれらの一部を事前承認し、追加のゲートなしにエージェントがそれらを呼び出す権限を実質的に付与します。読み取り専用の監査エージェントであれば["Read", "Glob", "Grep"]のみをリストし、フル自動化であれば["Read", "Edit", "Bash", "Glob", "Grep"]を含めることもあります。
3. 許可モード
許可モードは、エージェントがallowedToolsで事前承認されていないツールを使いたいときに何が起こるかを制御します:
acceptEdits— ファイル編集や一般的なファイルシステム操作を自動承認し、それ以外はすべてプロンプトを出す。信頼された開発ワークフローに最適。dontAsk—allowedToolsにないものはすべて黙って拒否する。ロックダウンされたヘッドレスエージェントに最適。bypassPermissions— すべてのツールをゲートなしで実行する。サンドボックス化された環境内でのみ使用すること。
SDKはプログラム的な承認コールバックも公開しているため、完全にカスタムな承認ロジックを実装できます。また利用可能なモード名は今後拡張される可能性があるため、正確かつ最新のリストと各モードの正確な動作についてはAnthropicのSDKリファレンスを確認してください。CIでは、ほとんどの場合、厳密にスコープを絞ったデフォルト拒否の設定か、あなたが管理するコンテナサンドボックス内でのbypassPermissionsを使うことになるでしょう。
4. セッション、再開、コンテキスト
query()の各呼び出しはセッションを作成(または再開)します。セッションのsession_idは最初のSystemMessage(subtype === "init")に含まれています。これをキャプチャして、後続の呼び出しでresume: sessionIdとして渡すことで、会話が中断したところから正確に再開できます — 同じファイル読み取り、同じ推論履歴、同じコンテキストウィンドウです。
これがマルチターンエージェントを構築する方法です:1回目のquery()呼び出しがモジュールを分析してsession_idをキャプチャし、2回目のquery()(resume付き)が「それ」や「先ほど読んだファイル」を再説明なしに参照します。セッションのトランスクリプトはデフォルトでローカルディスクに書き込まれます。本番環境向けには、S3、Redis、Postgresを裏付けとするSessionStoreアダプターをアタッチすることで、コンテナの再起動後もセッションを存続させることができます。
構築パターン1:CIコードレビューボット
これは「ヘッドレス自動化」のユースケースの代表例です。すべてのプルリクエストで、CIジョブがブランチをチェックアウトし、変更されたファイルを読むエージェントを実行し、レビューコメントを投稿します。
フローは以下の通りです:
- PRイベントがGitHub Actionsワークフロー(またはGitLab CIジョブ)をトリガーする。
- ランナーがブランチをチェックアウトし、レビュースクリプトを実行する。
- スクリプトがレビュープロンプト、
allowedTools: ["Read", "Glob", "Grep", "Bash"]、permissionMode: "dontAsk"でquery()を呼び出す。 - Claudeが差分を読み、パターンを検索し、所見を推論する。
ResultMessageがレビューテキストを運び、あなたのスクリプトがGitHub API経由でPRに投稿する。
重要な設計上の選択は、読み取り専用のツール一覧とともにdontAskを使うことです。エージェントはファイルを書き込んだり、ツールが許可する範囲を超えてネットワーク呼び出しを行ったりすることができないため、CIジョブが誤ってコミットをマージしたり外部APIを呼び出したりすることはありません。maxTurnsの上限(オプションで設定)はエージェントの深さを制限し、暴走したループが予算を消費しないようにします。
このフローの図解については、以下の図を参照してください。
完全に自動化されたコードレビューパイプライン。SDKエージェントは読み取り専用のツール一覧を持つCIコンテナ内で実行され、所見はResultMessageとしてストリームバックされ、あなたのコードがそれをGitHub PRコメントとして投稿します。エージェントはファイルを一切書き込まず、コンテナから一切出ません。
このパターンはフック — Claude Codeフック徹底解説で扱っているSDK機能 — で拡張し、すべてのツール呼び出しを監査ファイルにログしたり、特定のファイルパスの読み取りをブロックしたり、レビューと合わせて構造化されたテレメトリを発行したりできます。
構築パターン2:マルチエージェントのツールチェーン
SDKのagentsオプションを使うと、それぞれ独自のシステムプロンプト、ツール一覧、権限を持つ名前付きサブエージェントを定義できます。メインエージェントは組み込みのAgentツールを介してそれらに作業を委任します。サブエージェントのメッセージにはparent_tool_use_idフィールドが含まれているため、どの委任がどの出力を生み出したかを正確に追跡できます。
実践的な例として、セキュリティ監査のエージェントチェーンでは、code-scannerサブエージェントがGrepとGlobを使って潜在的な脆弱性を見つけ、dependency-checkerサブエージェントがBashを実行してパッケージのメタデータを照会し、コーディネーターエージェントが両方の報告を統合された監査にまとめます。各サブエージェントはその役割に必要な最小限のツールアクセスしか持たないため、サブエージェントが危険なコマンドを幻覚として生成した場合でも被害範囲が限定されます。
マルチエージェントチェーンは自然に分解できるタスクに向いています:1つの関心事につき1つのエージェント、それぞれ絞り込まれたツール一覧を持ち、ReadとAgentだけを必要とするコーディネーターがオーケストレーションします。マルチエージェントアーキテクチャがCLAUDE.mdメモリやスキルファイルといったClaude Codeの機能とどう組み合わさるかについて、より広い視点はハーネスエンジニアリングガイドを参照してください。
構築パターン3:ヘッドレス自動化パイプライン
コードレビューを超えて、SDKはエージェントがより大きなパイプラインの一ステップとなる、あらゆる定期的な自動化に威力を発揮します:
毎晩の依存関係監査。 cronジョブがquery()を呼び出し、古くなったパッケージをチェックし、セキュリティスキャナーを実行し、構造化されたレポートを作成するようプロンプトします。Bashツールがnpm auditやpip checkを実行し、Readがロックファイルを検査します。ResultMessageがSlack通知に送られます。
PRマージ時の翻訳とi18n。 PRがマージされると、Webhookが起動するエージェントがGlobとReadで変更された文字列ファイルを読み、Writeで翻訳版を作成し、Bash(gh pr createを実行)経由で新しいPRを開きます。
ログの異常検知。 最近のログ出力をquery()のプロンプトにパイプで渡します。エージェントは必要に応じて追加のコンテキストファイルを読み、ログを推論し、構造化された所見を出力します。ファイル書き込みは不要で、読み取り専用のツール一覧で十分です。
ドキュメント同期。 PRがマージされた後、エージェントが更新されたソースファイルを読み、対応するドキュメントページを書き換え、変更をコミットします。permissionMode: "acceptEdits"がプロンプトなしでファイル書き込みを処理します。
共通のスレッドはこうです:query()が独自仕立てのLLM統合を置き換えます。ツールループを実装したり、コンテキストウィンドウを手動で管理したり、次に何を実行するかを決めるためにモデル出力をパースしたりする必要はありません。オーケストレーションはエージェントが処理し、あなたはプロンプトを供給して結果を消費するだけです。
実例:バグ修正エージェント
公式のクイックスタートはこのパターンを明快に示しています(以下のコードはドキュメント化されたAPIに沿っています — 正確な構文はAnthropicのクイックスタートドキュメントで確認してください):
例示用Python(正確なAPIは公式ドキュメントで確認してください):
# 例示用 — 正確なインポートパスとオプション名は公式ドキュメントで確認してください
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
async def run_bug_fixer(file_path: str):
async for message in query(
prompt=f"Review {file_path} for bugs that would cause crashes. Fix any issues.",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob"],
permission_mode="acceptEdits",
),
):
if isinstance(message, AssistantMessage):
for block in message.content:
if hasattr(block, "text"):
print(block.text)
elif isinstance(message, ResultMessage):
print(f"Completed: {message.subtype}")
asyncio.run(run_bug_fixer("src/utils.py"))例示用TypeScript(正確なAPIは公式ドキュメントで確認してください):
// 例示用 — 正確なインポートパスとオプション名は公式ドキュメントで確認してください
import { query } from "@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Review src/utils.ts for crash-causing bugs and fix them.",
options: {
allowedTools: ["Read", "Edit", "Glob"],
permissionMode: "acceptEdits",
},
})) {
if (message.type === "assistant" && message.message?.content) {
for (const block of message.message.content) {
if ("text" in block) console.log(block.text);
}
}
if (message.type === "result") console.log("Done:", message.subtype);
}これを実行すると何が起こるか:ClaudeがReadツールを使ってutils.py(または.ts)を読み、コードを推論し、エッジケースを特定し、次にEditを呼び出して防御的な処理を挿入します。推論とツール呼び出しがAssistantMessageオブジェクトとしてストリームされていくのが見え、最終的なResultMessageが完了を知らせます。編集を検証するためにファイルを再度読み直すことも含め、エージェントループ全体がSDKによって管理されています。
これがAnthropicのモデルAPIを直接呼び出すのとSDKが異なる点です:ツール実行レイヤーを実装する必要がありません。ClaudeがReadをいつ呼び出すかを判断し、それを呼び出し、ファイル内容を受け取り、推論を続けます。このループは自律的です。
権限、サンドボックス化、本番環境における安全性
本番環境で自律型エージェントを実行するには、エージェントが何に触れられるかを慎重に考える必要があります。SDKはいくつかの重層的な制御を提供します。
ツールのスコープ設定が第一の防御線です。エージェントがBashを必要としないなら、allowedToolsに含めないでください。["Read", "Glob", "Grep"]のみを持つエージェントは、プロンプトが何を指示していようとも、ファイルを変更したり、シェルコマンドを実行したり、ネットワーク呼び出しを行ったりすることができません。
許可モードは第二のゲートを提供します。dontAskは、allowedToolsの外にあるものはプロンプトを出す代わりに黙って拒否されることを保証します。これはヘッドレス環境において重要です — ユーザー入力を待ってハングするプロンプトはパイプラインを止めてしまいます。
cwdオプションはエージェントのファイルシステムアクセスを特定のディレクトリにスコープします。マルチテナント環境では、テナントごとの作業ディレクトリを渡すことで、異なるテナントのエージェントが互いのファイルを読めないようにします。
テナント分離には追加の手順が必要です:テナント間で設定が漏れないようにsettingSources: []を設定し、自動メモリの読み込みを防ぐためにCLAUDE_CODE_DISABLE_AUTO_MEMORY=1を設定し、CLAUDE_CONFIG_DIRをテナントごとのパスに向けます。これらはAnthropicのホスティングガイドに詳しく記載されています。
コンテナのサンドボックス化は外側の殻です。Bashアクセスを必要とする本番エージェントには、ネットワークの外部接続を明示的に許可したドメインに制限したコンテナ内でSDKを実行してください。Modal、E2B、Cloudflare Sandboxes、Fly Machines、Vercel Sandboxといったプロバイダーが、サンドボックス化されたSDKデプロイメントのオプションとしてAnthropicのドキュメントで挙げられています。
**maxTurns**はツール使用の往復回数の上限を設け、コストと暴走ループの両方を制限します。タスクの想定される複雑さに応じて設定してください — 単純なファイル読み取りレビューであれば5〜10ターン、複雑なマルチファイルのリファクタリングであれば30〜50ターンが必要かもしれません。
本番環境向けのフックと権限フローを構築するチーム向けに、Claude CodeフックガイドはPreToolUseとPostToolUseのフックライフサイクルを詳しく解説しており、ツール呼び出しが実行される前にそれをブロック、変換、ログするフックコールバックの書き方も含まれています。
MCP:エージェントを外部システムに接続する
SDKはModel Context Protocol(MCP)を完全にサポートしており、これによりエージェントをMCPサーバーを公開しているあらゆる外部システム — データベース、ブラウザ自動化、Jira、Slack、GitHub、そして数百のコミュニティ製サーバー — に接続できます。
MCPサーバーはmcpServersオプションで設定します — 各エントリは実行するコマンドとオプションの引数を指定します。SDKはそれらのサーバーをサブプロセスとして起動し、エージェントは組み込みツールを呼び出すのと同じ方法でそれらのツールを呼び出せます。これが、コードレビューエージェントに課題トラッカーへのアクセスを与えたり、ドキュメントエージェントを会社のナレッジベースに接続したりする方法です。
権限モデルはMCPツール呼び出しにも適用されます — allowedToolsにはMCPツール名を含めることができ、permissionModeはリストされていないツールに対して何が起こるかを支配します。
落とし穴とよくある注意点
セッションはデフォルトでサブプロセスにローカルです。 セッションのトランスクリプトはホストのローカルディスク上の~/.claude/projects/に置かれます。コンテナ化された環境や水平スケールされたデプロイメントでは、これは再起動やノードの再割り当て時にセッション状態が失われることを意味します。コンテナをまたいで再開する必要があるセッションにはSessionStoreアダプターを使ってください。
サブプロセスモデルはメモリに影響を及ぼします。 実行中の各セッションは独立したサブプロセスです。50個の並行セッションを実行するということは、50個のClaude Codeプロセスを実行するということです。公式のガイダンスは出発点としてエージェントあたり約1GiBのRAMですが、実際のメモリ使用量はセッションの長さとツールの活動状況に依存します。それに応じてコンテナのサイズを決め、セッションの深さを制限するためにmaxTurnsを設定してください。
大規模なサブエージェントのファンアウトはレート制限に達します。 オーケストレーターが20個のサブエージェントに同時に処理を委任すると、Anthropicの APIレート制限に達する可能性が高いです。広範囲なファンアウトはバッチに分割し、ディスパッチ間に小さな遅延を追加してください。
bypassPermissionsには本物のサンドボックスが必要です。 このモードはすべての許可ゲートをスキップします。これは、実行コンテキスト全体をあなたが所有するCIコンテナのような完全に制御された環境向けに設計されています。開発者のマシン上で使用すること — エージェントがSSHキー、クラウド認証情報、任意のファイルシステムパスにアクセスできる環境 — はセキュリティリスクです。
TypeScript SDKはClaude Codeバイナリをバンドルしており、Pythonは別途それを必要としません。 しかし両方のSDKは特定のCLIバージョンに固定されています。SDKパッケージをアップグレードすると、その下にあるCLIもアップグレードされます。マイナーアップグレードの前にチェンジログを確認してください — 破壊的な動作変更はそこで告知されます。
プロンプトテキストとツールの入力はデフォルトでOTELエクスポートに含まれません。 これは意図的なプライバシー上の動作です。デバッグ目的でプロンプトレベルのトレーシングが必要な場合は、Anthropicのオブザーバビリティガイドに記載されている環境変数を通じて明示的にオプトインする必要があります。
古いSDKバージョンは新しいモデルをサポートしていない可能性があります。 Anthropicのドキュメントには、最近のモデルはthinkingパラメータAPIの変更により最新のSDKバージョンを必要とする場合があると記載されており、古いSDKは新しいモデルに対して失敗する可能性があります。新しいモデルを採用する際は、常にチェンジログを確認し、動作確認済みのバージョンに固定してください。
SDK対CLI:どちらが必要か?
ほとんどの開発者にとって、答えは「両方」です — そしてそれは意図的な設計です。
対話型CLIは日々の開発に適したツールです:未知のコードベースを探索したり、複雑なバグを対話的に解決したり、一度限りのリファクタリングを実行したりする場合です。SDKは人間が介在せずに実行する必要のあるあらゆるもの向けのツールです:CI、スケジュールされたタスク、アプリケーション機能、マルチエージェントパイプラインなどです。
SDKとCLIは競合する製品ではありません。CLIで対話的に開発したワークフローは、そのままSDKの自動化に変換されます — 同じツール、同じ許可の概念、同じCLAUDE.mdメモリとスキルシステムです。今日ターミナルでclaudeを使ってプロトタイプするレビューワークフローは、明日にはSDKを搭載したCIボットになります。
Claude Codeのウェブ版を使うチーム(Claude CodeをWebで使うガイドで解説)にとって、SDKはウェブセッションとプログラムによるオーケストレーションを組み合わせる扉を開きます — ウェブから長時間実行のタスクを開始し、その後バックエンドからプログラムでそれにフックできます。
よくある質問
Claude Code SDK(Agent SDK)とは正確には何ですか?
Claude Codeの完全なエージェント型エンジン — ツール、権限、セッション管理、サブエージェント、MCP — をプログラム可能な非同期APIとして公開する、Python(claude-agent-sdk)およびTypeScript(@anthropic-ai/claude-agent-sdk)のライブラリです。query()を呼び出し、プロンプトとオプションを渡すと、エージェントの作業が型付きメッセージオブジェクトとしてストリームバックされます。
SDKを使うためにClaude Codeをインストールする必要がありますか?
TypeScript SDKの場合は不要です — パッケージがネイティブのClaude Codeバイナリをバンドルしています。Python SDKの場合は、claude-agent-sdkパッケージが依存関係を処理します。ただし、Anthropic Consoleから取得したAnthropic APIキーは必要です。
AnthropicのAPI上のClaude以外のモデルでSDKを使えますか?
はい。SDKは環境変数を通じてAmazon Bedrock、Google Vertex AI、Microsoft Azure AI Foundry、AWS上のClaude Platformをサポートしています。ANTHROPIC_BASE_URLを設定することで、カスタムプロキシ経由でリクエストをルーティングすることもできます。
GitHub ActionsワークフローでSDKをどう使えばよいですか?
ANTHROPIC_API_KEYをGitHub Actionsのシークレットとして追加し、ワークフローでPRブランチをチェックアウトし、SDKパッケージをインストールし、エージェントスクリプトを実行します。エージェントがCI環境内でファイルを変更できないよう、読み取り専用のallowedTools一覧とともにpermissionMode: "dontAsk"を使ってください。Anthropicのドキュメントは、カスタムSDKコードを書かずにPRレビューと課題のトリアージを自動化する専用のGitHub Actions統合についても解説しています。
Agent SDKとManaged Agentsの違いは何ですか? Agent SDKは、あなた自身のプロセスとインフラストラクチャ内でエージェントループを実行するライブラリです。Managed AgentsはAnthropicがエージェントとサンドボックスを実行するホスト型REST APIです — あなたはイベントを送信し、結果をストリームバックします。SDKはローカルでのプロトタイピングやファイルシステム上で直接動作するエージェントに適しており、Managed Agentsはコンテナインフラを運用したくない本番環境に適しています。
エージェントがアクセスできる範囲をどう制限すればよいですか?
allowedToolsを使って利用可能なツールを制限し、permissionMode: "dontAsk"でその一覧の外のものをすべて拒否し、cwdでファイルシステムアクセスを特定のディレクトリにスコープしてください。マルチテナントのデプロイメントでは、さらにsettingSources: []とCLAUDE_CODE_DISABLE_AUTO_MEMORY=1を設定してください。
SDKはストリーミング出力をサポートしていますか?
はい — query()からの非同期イテレータはメッセージをリアルタイムでストリームします。ライブ出力が不要な場合(最終結果だけを気にするバックグラウンドジョブやCIパイプライン向け)、Anthropicのドキュメントはすべてのメッセージを返す前に収集する単一ターンモードについて説明しています。公式ドキュメントのストリーミング対単一ターンモードを参照してください。
複数のエージェントを並行して実行できますか?
はい。各query()呼び出しは独立したサブプロセスを起動します。N個の並行セッションを実行できますが — それぞれが別々のプロセスであるため、それに応じてメモリをプロビジョニングし、APIレート制限に注意してください。単一のオーケストレーターからの並行サブエージェントのファンアウトについては、レート制限に達しないようディスパッチをバッチ処理してください。
セッションがタスクの途中でクラッシュした場合はどうなりますか?
デフォルトでは、セッションのトランスクリプトはコンテナにローカルであり、再起動時に失われます。再起動を乗り越えるには、SessionStoreアダプター(S3、Redis、Postgres)を設定し、オプションで渡してください。その後、新しいコンテナでsession_idによってセッションを再開できます。
ローカル環境なしでエージェントを実行する
SDKの価値提案は自動化です — しかし、その自動化を実際に動かすには本物のインフラストラクチャが必要です:PythonまたはNodeのランタイム、APIキー、コンテナ戦略、サンドボックス化の判断、そして初めての本番デプロイの前に権限モデリングに費やす時間です。
そのセットアップの手間なくエージェントのアイデアを反復したい開発者向けに、Happycapyはブラウザ上で直接Claude Codeスタイルのエージェントを実行します。ローカルへのインストールも、サブプロセス管理も、コンテナのプロビジョニングも不要です。プロンプトを持ち込めば、Happycapyが実行環境を処理してくれます — 150以上のモデルとセキュアなクラウドサンドボックスへのアクセス付きです。これは、後にSDKで本番化するエージェントの動作をプロトタイピングするための近道です。

