ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #53 - Claude Agent SDK」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
Claude Agent SDK
今回は、Claude Code上で強力なエージェントを構築するためのツールコレクション「Claude Agent SDK」をキャッチアップしました。
Claude Agent SDKのGitHubリポジトリはこちらです。
今回のポイント
Claude Agent SDKとは
Claude Agent SDKは、Claude CodeをPythonやTypeScriptで制御するためのSDKです。 2025年9月にClaude Code SDKから名称変更されました。
Claude Agent SDKは、Python版とJS/TS版が版が提供されています。 以後、この記事はPython版を対象とします。
Claude Agent SDKのセットアップ
Claude Agent SDKのPython版は、pip install claude-agent-sdkでインストール可能です。
Claude Agent SDKを使用する環境には、Claude Codeがインストールされている必要があります。 また、Claude Codeの認証が完了している必要があります。
Claude Agent SDKの基本的な使い方
Claude Agent SDKには、2つの使用方法があります。
query()ClaudeSdkClient
query()
Claude Agent SDKのquery()は、会話履歴を必要とせず、一度だけClaude Codeを呼び出す際に便利です。
query()を使うサンプルコードは次のようになります。
import anyio from claude_agent_sdk import query async def main() -> None: async for message in query(prompt="2+2は?"): print(message) anyio.run(main)
ClaudeSdkClient
ClaudeSdkClientは、query()よりも高機能なインターフェースです。
複数ターンの会話や、Hooks・Custom Toolsなどの機能がサポートされています。
ClaudeSdkClientを使うサンプルコードは次のようになります。
import asyncio from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, ClaudeSDKClient, TextBlock, ) async def main() -> None: options = ClaudeAgentOptions(permission_mode="acceptEdits") async with ClaudeSDKClient(options=options) as client: await client.query("examplesディレクトリにPythonのHello Worldを書いて") async for message in client.receive_response(): print(message) await client.query("日本語で「こんにちは」と表示するようにして") async for message in client.receive_response(): print(message) asyncio.run(main())
Claude Agent SDKのいくつかの機能を試してみた
Claude Agent SDKのいくつかの機能を試してみました。
ファイルを編集させる
Claude Agent SDKは、Claude CodeをPythonやTypeScriptから実行するライブラリです。 そのため、Claude Codeが持っているRead・Write・Editなどのツールがそのまま使用可能となっています。
「examplesディレクトリにHello Worldを書いて」という指示に対して、実際にディレクトリやファイルが作成されることを確認しました。

システムプロンプトの変更
Claude Agent SDKでは、通常のClaude Codeと異なり、システムプロンプトを変更できます。
完全にカスタマイズしたシステムプロンプトを使用することもできれば、Claude Codeのシステムプロンプトに一部追記して使用するといったこともできます。 また、CLAUDE.mdも自動的に読み込まれるとのことです。
Interrupts
Claude Agent SDKには、処理を中断する「Interrupts」機能もあります。
これは、Claude Codeの使用時に、エージェントの実行中に「escキー」を入力して、エージェントの処理を中断するのと同じ機能です。
LangGraphにおけるHuman-in-the-LoopのためのInterrupts機能とは異なるものになります。
うまく動かなかった機能
いくつかうまく動かなかった機能もありました。
Streamint Input
Claude Codeへの入力をストリーミングとして与える機能です。
LLMの出力のようなトークン単位のストリーミングではなく、次々と指示を出す際のメッセージ単位のストリーミングのようです。
この機能については、ドキュメントのままのコードではうまく動作しませんでした。
Advanced permission control
ClaudeAgentOptionsで、can_use_toolという引数に関数を設定することで、ツールの実行許可などが柔軟に可能という機能があります。
options = ClaudeAgentOptions(
can_use_tool=custom_permission_handler,
allowed_tools=["Read", "Write", "Edit"]
)
たしかに便利そうではあるのですが、今回試した範囲ではうまく動作しませんでした。
https://docs.claude.com/en/api/agent-sdk/python#example-advanced-permission-control
次回のご案内
以上、今回は「Claude Agent SDK」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #54 - Agentic Commerce Protocol」ということで、ChatGPTの商品購入機能で使われている「Agentic Commerce Protocol」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!