登録して招待リンクを共有すると、動画再生報酬と紹介報酬を獲得できます。

検索結果 ClaudeAgentSDK
ClaudeAgentSDK コミュニティ
1つのキーワードが1つのコミュニティです。
コミュニティ作成
アカウント
見つかりません
ClaudeAgentSDK を含む検索結果
# Claude Agent SDKの便利だけど知られていない機能 🌍 エージェントの実行中にメッセージを送りたいと思ったことはありませんか?ストリーミング入力で対話的なセッションが実現します! ストリーミング入力モードを使えば、エージェント実行中にメッセージの追加、中断、画像送信が可能です。 📌 タイトル:ストリーミング入力モード 🔗 URL: 🧩 概要 ストリーミング入力モード(推奨)は、`AsyncGenerator` を使った永続的なインタラクティブセッションを提供します。通常のシングルメッセージ入力(ワンショット)と異なり、セッション中にメッセージのキューイング、画像の添付、実行の中断が可能です。`yield` でメッセージを順次送信し、条件に応じてフォローアップメッセージを動的に生成できるため、チャットインターフェースや複雑なワークフローに最適です。 🛠 使い方 ```python # Python - ストリーミング入力でインタラクティブセッション from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, AssistantMessage, TextBlock import base64 async def message_generator(): # 最初のメッセージ yield { "type": "user", "message": {"role": "user", "content": "セキュリティの問題を分析してください"}, } # フォローアップ(画像付き) with open("diagram.png", "rb") as f: image_data = base64.b64encode( yield { "type": "user", "message": { "role": "user", "content": [ {"type": "text", "text": "このアーキテクチャ図もレビューしてください"}, {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": image_data}}, ], }, } options = ClaudeAgentOptions(max_turns=10, allowed_tools=["Read", "Grep"]) async with ClaudeSDKClient(options) as client: await client.query(message_generator()) async for message in client.receive_response(): if isinstance(message, AssistantMessage): for block in message.content: if isinstance(block, TextBlock): print(block.text) ``` ```typescript // TypeScript - AsyncGenerator でメッセージを逐次送信 import { query, type SDKUserMessage } from "@anthropic-ai/claude-agent-sdk"; async function* generateMessages(): AsyncGenerator { yield { type: "user", message: { role: "user", content: "Analyze this codebase for security issues" }, parent_tool_use_id: null, }; // 条件に応じてフォローアップ await new Promise((resolve) => setTimeout(resolve, 2000)); yield { type: "user", message: { role: "user", content: "Now focus on authentication" }, parent_tool_use_id: null, }; } for await (const message of query({ prompt: generateMessages(), options: { maxTurns: 10, allowedTools: ["Read", "Grep"] } })) { if (message.type === "result" && message.subtype === "success") { console.log(message.result); } } ``` 🏗 本番システムへの組み込み方 ・チャットUIのメッセージ送信をジェネレータの `yield` に接続して、ユーザー入力をリアルタイムでエージェントに渡します ・画像アップロードを `base64` エンコードしてメッセージに含めることで、ビジュアル分析が可能になります ・中断シグナルを送信してエージェントの方向転換を行えるため、長時間実行タスクの制御に活用できます ・セッション中のコンテキストが自然に維持されるため、複数ターンの会話を管理する手間が省けます 💡 ユースケース 💬 カスタムチャットボットでユーザーとエージェントの対話的なセッションを構築する 🖼 コードレビュー中にスクリーンショットや設計図を動的に送信して分析させる 🔄 長時間のコード分析中に追加の指示やフォーカスエリアの変更を送る ⚠️ 注意点 ・シングルメッセージ入力では画像添付、動的メッセージキューイング、リアルタイム中断がサポートされません ・ステートレス環境(Lambda関数など)ではシングルメッセージ入力を使用してください ・Python ではストリーミング入力に `ClaudeSDKClient` のコンテキストマネージャが必要です ✨ ワンショットで終わらない対話こそ、AIエージェントの本領発揮です。ストリーミング入力でリッチな体験を構築しましょう! #ClaudeAgentSDK# #AIAgent#
もっと見る
# Claude Agent SDKの便利だけど知られていない機能 🌍 エージェントの応答を待つ間、画面が真っ白で不安になったことはありませんか?リアルタイムストリーミングで解決です! `include_partial_messages` を有効にすれば、テキストやツール呼び出しが生成される様子をリアルタイムで受信できます。 📌 タイトル:リアルタイム部分メッセージ 🔗 URL: 🧩 概要 `include_partial_messages`(Python)/ `includePartialMessages`(TypeScript)を `True` に設定すると、通常の `AssistantMessage` に加えて `StreamEvent` メッセージが送信されます。`StreamEvent` にはClaude APIの生のストリーミングイベント(`content_block_delta` の `text_delta` や `input_json_delta` など)が含まれ、テキストの断片やツール入力のチャンクをリアルタイムで受信できます。これにより、タイピング風のテキスト表示やツール実行中のステータス表示など、応答性の高いUIを構築できます。 🛠 使い方 ```python # Python - テキストチャンクをリアルタイム表示 from claude_agent_sdk import query, ClaudeAgentOptions from claude_agent_sdk.types import StreamEvent options = ClaudeAgentOptions(include_partial_messages=True) async for message in query(prompt="データベースの仕組みを説明してください", options=options): if isinstance(message, StreamEvent): event = message.event if event.get("type") == "content_block_delta": delta = event.get("delta", {}) if delta.get("type") == "text_delta": print(delta.get("text", ""), end="", flush=True) ``` ```typescript // TypeScript - ツール呼び出しのストリーミング表示 import { query } from "@anthropic-ai/claude-agent-sdk"; let currentTool: string | null = null; for await (const message of query({ prompt: "Read the README.md file", options: { includePartialMessages: true } })) { if (message.type === "stream_event") { const event = message.event; if (event.type === "content_block_start" && event.content_block.type === "tool_use") { currentTool = event.content_block.name; process.stdout.write(`\n[Using ${currentTool}...]`); } else if (event.type === "content_block_delta" && === "text_delta") { process.stdout.write( } else if (event.type === "content_block_stop" && currentTool) { console.log(" done"); currentTool = null; } } } ``` 🏗 本番システムへの組み込み方 ・チャットUIで `text_delta` を受信するたびにメッセージバブルにテキストを追加し、タイピング風の表示を実現します ・`content_block_start`(type: `tool_use`)でツール名を検知し、「実行中...」のスピナーを表示します ・`message_start`/`message_stop` イベントでメッセージの開始・完了を追跡します ・テキストデルタは自分で結合する必要があるため、アキュムレータを用意します 💡 ユースケース 💬 ChatGPT風のリアルタイムタイピング表示をカスタムUIに実装する 🔧 エージェントが使用中のツール名とその進捗をステータスバーに表示する 📝 長文の分析結果を、完成を待たずに部分的に表示開始する ⚠️ 注意点 ・`StreamEvent` のイベントは生のClaude APIイベントであり、蓄積済みテキストではありません。テキストデルタを自分で結合する必要があります ・構造化出力(`structured_output`)はストリーミングデルタでは送信されず、最終の `ResultMessage` にのみ含まれます ・ツール実行中(`in_tool` フラグ)はテキストストリーミングを一時停止するなど、UIの状態管理が必要です ✨ 「処理中です、お待ちください...」だけの画面はもう卒業。部分メッセージでユーザーとエージェントの距離を縮めましょう! #ClaudeAgentSDK# #AIAgent#
もっと見る
# Claude Agent SDKの便利だけど知られていない機能 🌍 エージェントがファイルを勝手に削除しようとしたら?実行時承認で安全にコントロールできます! `canUseTool` コールバックを使えば、ツール実行前にリアルタイムで承認・拒否・入力変更が可能です。 📌 タイトル:canUseTool コールバックによる実行時承認 🔗 URL: 🧩 概要 `canUseTool` はクエリオプションに渡すコールバック関数で、権限評価フローの最終ステップ(6番目)で呼び出されます。先行するステップ(allow ルールや `acceptEdits`・`bypassPermissions` モードなど)で自動承認されたツール呼び出しではコールバックは呼ばれないため、すべてのツール呼び出しに適用したいチェックは `PreToolUse` フックを使ってください。コールバックはツール名と入力パラメータを受け取り、`allow`(許可)または `deny`(拒否)を返します。許可時には入力を変更することも可能で、例えばパスをサンドボックス内に書き換えたり、危険なコマンドをブロックしたりできます。`dontAsk` モードでは呼び出されません。 🛠 使い方 ```python # Python - ツール実行の承認コールバック from claude_agent_sdk import ClaudeAgentOptions, query from claude_agent_sdk.types import PermissionResultAllow, PermissionResultDeny, HookMatcher async def can_use_tool(tool_name, input_data, context): print(f"\nツール: {tool_name}") if tool_name == "Bash": print(f"コマンド: {input_data.get('command')}") # rm コマンドをブロックしてアーカイブを提案 if "rm" in input_data.get("command", ""): return PermissionResultDeny( message="削除の代わりにアーカイブしてください" ) response = input("許可しますか? (y/n): ") if response.lower() == "y": return PermissionResultAllow(updated_input=input_data) return PermissionResultDeny(message="ユーザーが拒否しました") # ダミーフック(Python のストリーミングモードで必要) async def dummy_hook(input_data, tool_use_id, context): return {"continue_": True} ``` ```typescript // TypeScript - 入力を変更して許可する例 import { query } from "@anthropic-ai/claude-agent-sdk"; for await (const message of query({ prompt: "Clean up temporary files", options: { canUseTool: async (toolName, input) => { if (toolName === "Bash") { // パスをサンドボックス内に書き換え const sandboxed = { ...input, command: input.command.replace("/tmp", "/tmp/sandbox") }; return { behavior: "allow", updatedInput: sandboxed }; } return { behavior: "allow", updatedInput: input }; } } })) { /* ... */ } ``` 🏗 本番システムへの組み込み方 ・Web UIでツール実行の承認ダイアログを表示し、ユーザーの判断を返します ・`context.suggestions` から `PermissionUpdate` を取得し、「今後も許可」の永続化ルールを設定できます ・危険な操作(`rm`、`DROP TABLE` など)は自動的にブロックし、安全な代替案をメッセージで提案します ・入力のサニタイズ(パスの制限、パラメータの上書き)で、エージェントの行動範囲を動的に制御します 💡 ユースケース 🔒 本番データベースへの書き込みコマンドを承認制にする 📁 ファイル操作を特定のディレクトリに制限する(パスの動的書き換え) 👥 マルチユーザー環境で、ユーザーの権限レベルに応じてツール利用を制御する ⚠️ 注意点 ・Python では `canUseTool` を使うにはストリーミングモードと `PreToolUse` フックの設定が必要です ・`dontAsk` モードではコールバックがスキップされるため、セキュリティ上の制限にはフックを使用してください ・コールバックは回答まで無期限に実行を一時停止します。長時間のケースには `defer` フック決定を利用してください ✨ 「全部おまかせ」か「全部手動」かの二択ではなく、canUseTool で「要所だけ人間が判断する」スマートな運用を実現しましょう! #ClaudeAgentSDK# #AIAgent#
もっと見る
# Claude Agent SDKの便利だけど知られていない機能 🌍 エージェントの実行コスト、ちゃんと把握できていますか?詳細なトラッキングで可視化しましょう! Claude Agent SDKは、クエリごとにトークン使用量とコストの詳細な内訳を提供します。 📌 タイトル:詳細なコスト・使用量トラッキング 🔗 URL: 🧩 概要 `ResultMessage` には `total_cost_usd`(推定コスト)、`usage`(トークン内訳)、`num_turns`(ターン数)が含まれており、成功・エラーを問わずすべての結果で取得可能です。さらに `model_usage`(Python)/ `modelUsage`(TypeScript)を使えば、モデルごとのコスト・トークン内訳も確認できます。並列ツール実行時は同一メッセージIDで重複するため、IDベースの重複排除が正確なカウントに必要です。 🛠 使い方 ```python # Python - クエリの総コストを取得 from claude_agent_sdk import query, ResultMessage async for message in query(prompt="プロジェクトを要約してください"): if isinstance(message, ResultMessage): print(f"総コスト: ${ or 0}") # モデルごとの内訳 if message.model_usage: for model, usage in message.model_usage.items(): print(f" {model}: ${usage['costUSD']:.4f}") print(f" 入力トークン: {usage['inputTokens']}") print(f" キャッシュ読取: {usage['cacheReadInputTokens']}") ``` ```typescript // TypeScript - 複数クエリのコストを累積 import { query } from "@anthropic-ai/claude-agent-sdk"; let totalSpend = 0; for (const prompt of prompts) { for await (const message of query({ prompt })) { if (message.type === "result") { totalSpend += // モデルごとの内訳 for (const [model, usage] of Object.entries(message.modelUsage)) { console.log(`${model}: $${usage.costUSD.toFixed(4)}`); } } } } console.log(`合計: $${totalSpend.toFixed(4)}`); ``` 🏗 本番システムへの組み込み方 ・`total_cost_usd` を監視システムに送信して、コスト傾向をリアルタイムで可視化します ・`model_usage` でモデル別コストを分析し、サブエージェントのコスト配分を最適化します ・`resume` で同一セッションを再開した呼び出しの結果には、そのセッションの過去の利用分も含まれます(Claude Code v2.1.277 以降)。この場合は最新の結果を読み、合算すると二重計上になります。セッションを共有しない独立した呼び出しはアプリケーション側で合算ロジックを実装します ・エラー時もコストは発生するため、失敗した `ResultMessage` からも必ずコストを記録します 💡 ユースケース 💰 マルチテナント環境でユーザーごとの利用コストをレポートする 📊 モデル別のコスト内訳を分析して、最適なモデル構成を見つける 🔍 キャッシュトークン(`cache_read_input_tokens`)の割合を監視して、プロンプトキャッシュの効果を測定する ⚠️ 注意点 ・`total_cost_usd` はクライアント側の概算値であり、実際の請求額とは異なる場合があります。正確な請求情報は Usage and Cost API を利用してください ・並列ツール呼び出し時は同一IDのメッセージが重複するため、IDで重複排除しないとトークン数が膨らみます ・`ENABLE_PROMPT_CACHING_1H` を設定すると1時間TTLのキャッシュが有効になりますが、書き込みコストが高くなります ✨ コストの可視化なくしてコスト最適化なし。まずはトラッキングを組み込んで、エージェントの「お財布事情」を把握しましょう! #ClaudeAgentSDK# #AIAgent#
もっと見る
# Claude Agent SDKの便利だけど知られていない機能 🌍 エージェントの作業ディレクトリ外のファイルにもアクセスを許可できる additionalDirectories オプションをご紹介します。 モノレポや共有ライブラリなど、複数ディレクトリにまたがるプロジェクトで威力を発揮します。 📌 タイトル:作業ディレクトリ外への追加アクセス許可 🔗 URL: 🧩 概要 `additionalDirectories` は `query()` のオプションで、エージェントが作業ディレクトリ(cwd)以外のパスにアクセスすることを許可する機能です。通常、エージェントは cwd 内のファイルのみを操作できますが、このオプションで追加のディレクトリを指定すると、そのパス内のファイルも読み書きできるようになります。`acceptEdits` パーミッションモードでは、追加ディレクトリ内の編集も自動承認されます。モノレポの別パッケージや共有ライブラリのディレクトリにアクセスする場合に特に有用です。 🛠 使い方 `query()` のオプションに `add_dirs`(TypeScript では `additionalDirectories`)を渡します。 ```python from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage # モノレポ内の複数パッケージにアクセスを許可 async for message in query( prompt="Update the shared utility functions and fix the imports in the web app", options=ClaudeAgentOptions( # cwd はデフォルトでプロセスの現在ディレクトリ add_dirs=[ "/path/to/monorepo/packages/shared-utils", "/path/to/monorepo/packages/web-app", ], permission_mode="acceptEdits", # 追加ディレクトリ内の編集も自動承認 allowed_tools=["Read", "Edit", "Write", "Grep", "Glob"], ), ): if isinstance(message, ResultMessage) and message.subtype == "success": print(message.result) # 共有ライブラリとメインプロジェクトを同時に操作 async for message in query( prompt="Check the shared library API and update our integration code", options=ClaudeAgentOptions( add_dirs=[ "/path/to/shared-library", ], allowed_tools=["Read", "Edit", "Grep", "Glob"], ), ): if isinstance(message, ResultMessage) and message.subtype == "success": print(message.result) ``` 🏗 本番システムへの組み込み方 ・モノレポ構成では、関連するパッケージのパスを `add_dirs` に列挙することで、パッケージ間の依存関係を考慮した変更が可能になります ・`acceptEdits` モードと組み合わせると、追加ディレクトリ内のファイル編集(Edit、Write)やファイルシステム操作(mkdir、rm、mv、cp)も自動承認されます ・保護対象のパスへの書き込みは追加ディレクトリに含めても依然としてプロンプトが表示されます 💡 ユースケース 📦 モノレポ開発:共有パッケージと個別アプリの両方を同時に変更する 📚 共有ライブラリ参照:外部ライブラリのソースを読み取り、正しいAPI使用法を確認しながらコーディングする 🔧 設定ファイルの集中管理:プロジェクト外の設定ディレクトリにアクセスして設定を更新する ⚠️ 注意点 ・追加ディレクトリ外のパスへのアクセスは引き続きブロックまたはプロンプトが表示されます ・`bypassPermissions` モードでは全パスが許可されるため、`add_dirs` の設定とは無関係に動作します ・エージェントのセキュリティ境界を広げることになるため、必要最小限のパスのみを指定してください ・`acceptEdits` での自動承認は cwd と追加ディレクトリの範囲内に限定されます ✨ additionalDirectories を活用することで、複数ディレクトリにまたがるプロジェクトでもエージェントがシームレスに作業できるようになります。 #ClaudeAgentSDK# #AIAgent#
もっと見る
# Claude Agent SDKの便利だけど知られていない機能 🌍 @tool デコレータと create_sdk_mcp_server で、独自の関数をエージェントのツールとしてインプロセスで実行できます。 データベースアクセス、外部API呼び出し、ドメイン固有のロジックをエージェントに提供する方法を解説します。 📌 タイトル:インプロセス・カスタムツール (create_sdk_mcp_server / @tool) 🔗 URL: 🧩 概要 カスタムツールは、SDK のインプロセス MCP サーバーを使って独自の関数を Claude から呼び出せるようにする機能です。Python では `@tool` デコレータ、TypeScript では `tool()` ヘルパーでツールを定義し、`create_sdk_mcp_server` でラップして `query()` に渡します。ツールはアプリケーションプロセス内で実行され、別プロセスは不要です。ツール名は `mcp__{server_name}__{tool_name}` の形式になります。`readOnlyHint` アノテーションで並列実行を有効にし、`isError` で復旧可能なエラーをエージェントに伝え、画像(base64)やリソースの返却も可能です。 🛠 使い方 `@tool` デコレータでツールを定義し、`create_sdk_mcp_server` でサーバーにまとめます。 ```python from typing import Any import httpx from claude_agent_sdk import tool, create_sdk_mcp_server, query, ClaudeAgentOptions, ResultMessage @tool( "get_temperature", "Get the current temperature at a location", {"latitude": float, "longitude": float}, ) async def get_temperature(args: dict[str, Any]) -> dict[str, Any]: async with httpx.AsyncClient() as client: response = await client.get( "", params={ "latitude": args["latitude"], "longitude": args["longitude"], "current": "temperature_2m", }, ) data = response.json() return { "content": [ {"type": "text", "text": f"Temperature: {data['current']['temperature_2m']}"} ] } # インプロセスMCPサーバーにラップ weather_server = create_sdk_mcp_server( name="weather", version="1.0.0", tools=[get_temperature], ) # query() に渡して使用 async for message in query( prompt="What's the temperature in Tokyo?", options=ClaudeAgentOptions( mcp_servers={"weather": weather_server}, allowed_tools=["mcp__weather__get_temperature"], ), ): if isinstance(message, ResultMessage) and message.subtype == "success": print(message.result) ``` 🏗 本番システムへの組み込み方 ・エラーハンドリングでは例外をスローせず `{"is_error": True}` を返すことで、エージェントループを継続させつつ Claude にリカバリーさせることができます ・`readOnlyHint=True` アノテーションを設定すると、副作用のないツールを他のリードオンリーツールと並列実行できます ・画像を返す場合は `{"type": "image", "data": base64_str, "mimeType": "image/png"}` 形式のコンテンツブロックを使用します ・`structuredContent` フィールドでツール結果を機械可読な JSON として返却できます(ただし Python の `@tool` では未サポート、スタンドアロン MCP サーバーが必要) 💡 ユースケース 🗄 データベースアクセス:エージェントに直接 DB クエリを実行させる 🌐 外部API連携:社内 API やサードパーティサービスをツールとして公開する 📊 データ可視化:グラフを生成し画像(base64)として返却する 🔧 ドメインロジック:計算、変換、バリデーションなど特定の業務ロジックをツール化する ⚠️ 注意点 ・Python の dict スキーマではすべてのキーが必須になります。オプションパラメータは schema に含めず、description で説明して `args.get()` で読み取ってください ・`structuredContent` は Python の `@tool` デコレータでは転送されません(スタンドアロン MCP サーバーを使用) ・ツール検索(tool search)はデフォルトで有効で、SDK MCP ツールのスキーマは必要になるまで遅延ロードされます。無効にすると `tools` 配列のすべてのツールが毎ターンのコンテキストを消費します ・アノテーションはメタデータであり強制力はありません。`readOnlyHint=True` でも handler が書き込みを行う場合があります ✨ インプロセスのカスタムツールにより、エージェントの能力を自由に拡張でき、外部プロセスの管理も不要です。 #ClaudeAgentSDK# #AIAgent#
もっと見る
# Claude Agent SDKの便利で実践的な使い方 📝 プリセット・追記・完全置換の3段階でシステムプロンプトを柔軟にカスタマイズできます。 システムプロンプトの変更は、`systemPrompt` で Claude Code プリセット・追記(append)・カスタム文字列の3段階のカスタマイズを提供する機能です。 📌 タイトル:システムプロンプトの変更 🔗 URL: 🧩 概要 `preset: "claude_code"` で Claude Code 完全版プロンプト、`append` で既存プリセットへの追記、カスタム文字列で完全置換が可能です。出力スタイルファイルで CLI/SDK 横断のペルソナ再利用もできます。 🛠 使い方 `system_prompt` に3つの形式を指定できます。プリセット使用は `{"type": "preset", "preset": "claude_code"}`、追記は `"append": "追加指示"` を加え、完全置換は文字列を直接渡します。`excludeDynamicSections: true` でプロンプトキャッシュのクロスセッション共有が可能です。 🏗 実践的な使い方 ・コーディングエージェントには `preset: "claude_code"` で完全版プロンプト(ツールガイダンス・安全ルール)を利用します。 ・`append` で「Python には必ず docstring と型ヒントを付ける」等のチーム規約を追記します。何も削らない最もリスクの低いカスタマイズです。 ・サポートボット・データ分析アシスタントなど独自ペルソナにはカスタム文字列で完全置換します。 ・`excludeDynamicSections: true` でプロンプトキャッシュをユーザー/マシン横断で共有し、フリートのコストを削減します。 💡 ユースケース 🤖 Claude Code 互換のコーディングエージェント 📋 チーム規約の自動適用 🎭 独自ペルソナのカスタムエージェント ⚠️ 注意点 カスタム文字列で完全置換する場合は、ツールガイダンスと安全命令を自前で用意する必要があります。`excludeDynamicSections` は TS v0.2.98+ / Python v0.1.58+ で利用可能です。 #ClaudeAgentSDK# #AI#
もっと見る
# Claude Agent SDKの便利で実践的な使い方 🔍 数百〜数千のツールを効率的に管理し、必要なツールだけオンデマンドでロードできます。 ツール検索は、大量のツールをコンテキストに事前ロードする代わりに、必要なツールだけを実行時に検索・ロードする機能です。 📌 タイトル:多くのツールにスケーリングするツール検索 🔗 URL: 🧩 概要 `ENABLE_TOOL_SEARCH=auto` でツール定義がコンテキストを圧迫する場合に自動的にツール検索を有効化します。50ツールで10〜20Kトークン消費、30〜50ツール超で選択精度が低下する問題を解決します。 🛠 使い方 ```bash export ENABLE_TOOL_SEARCH=auto:5 # コンテキストの5%超で有効化 ``` 🏗 実践的な使い方 ・エンタープライズ MCP サーバー(数百ツール)接続時に、必要なツールだけオンデマンド検索してコンテキスト圧迫を防ぎます。 ・`auto:5` で「ツール定義がコンテキストの5%超ならツール検索を有効化」と自動判定。小規模(10ツール未満)なら `false` で事前ロードの方が高速です。 ・ツール説明に「キーワード、チャネル、日付範囲で Slack メッセージを検索」のような具体的キーワードを入れ、検索ヒット率を向上させます。 💡 ユースケース 🏢 大規模 MCP サーバーのツール管理 💰 トークンコストの最適化 🎯 ツール選択精度の維持 ⚠️ 注意点 Claude Sonnet 4 / Opus 4 以降が必要です(Haiku 非対応)。カタログ上限1万ツール、検索ごとに3〜5ツール返却。Vertex AI とサードパーティ `ANTHROPIC_BASE_URL` ではデフォルト無効です。 #ClaudeAgentSDK# #AI#
もっと見る
# Claude Agent SDKの便利で実践的な使い方 🛡 プロンプトインジェクション対策・認証情報プロキシ・最小権限で多層防御を構築しましょう。 セキュアデプロイメントは、分離技術・認証情報プロキシ・ネットワーク制御でエージェントの安全な本番運用を実現するガイドです。 📌 タイトル:AI エージェントの安全なデプロイ 🔗 URL: 🧩 概要 sandbox-runtime / Docker / gVisor / Firecracker の分離技術、認証情報プロキシパターン、ネットワーク・ファイルシステム制御を組み合わせた多層防御を提供します。 🛠 使い方 分離強度に応じて技術を選択:単一開発者/CI は sandbox-runtime、マルチテナントは gVisor/Firecracker。認証情報は Envoy / mitmproxy / LiteLLM で境界外注入します。 🏗 実践的な使い方 ・認証情報プロキシパターン:API キーをエージェント境界外のプロキシで注入し、エージェントは認証情報を見ずに API 呼び出しします。`ANTHROPIC_BASE_URL` でルーティング。 ・最小権限:必要ディレクトリのみ読み取り専用マウント、`.env`・`~/.aws/credentials`・`*.pem` を除外、`--network none` + Unix ソケットプロキシでネットワーク制限。 ・クラウドではプライベートサブネット + クラウドファイアウォールでプロキシ以外の送信を全ブロックし、許可リスト強制・認証情報注入・全トラフィックログを実現します。 💡 ユースケース 🔐 認証情報のエージェント境界外管理 🌐 ネットワーク制限による外部送信の防止 🏢 マルチテナント環境での強分離 ⚠️ 注意点 信頼できないコンテンツ(README、Web ページ、ユーザー入力)にはプロンプトインジェクションが含まれる可能性があります。ネットワーク制御は最後の防衛線として必ず設定してください。 #ClaudeAgentSDK# #AI#
もっと見る
# Claude Agent SDKの便利だけど知られていない機能 🌍 SDK エージェントが読み込む設定ファイルを、setting_sources で細かくコントロールできます。 CLAUDE.md、スキル、フック、settings.json の読み込み元を選択的に制御し、マルチテナント環境での分離も実現できます。 📌 タイトル:setting_sources による .claude/ 設定の選択的ロード 🔗 URL: 🧩 概要 `setting_sources`(TypeScript では `settingSources`)は、SDK がファイルシステムからどの設定を読み込むかを制御するオプションです。3つのソースがあります。`"project"` は `/.claude/` 配下の settings.json、フック、CLAUDE.md、スキルを読み込みます。`"user"` は `~/.claude/` 配下のユーザーレベル設定を読み込みます。`"local"` は `.claude/settings.local.json` や `CLAUDE.local.md` を読み込みます。省略時はすべて(`["user", "project", "local"]`)が有効になります。空配列 `[]` を渡すとすべてのファイルシステム設定を無効化できます。なお、マネージドポリシーと `~/.claude.json` は常に読み込まれます。 🛠 使い方 `setting_sources` にリストを渡して、必要なソースのみを有効化します。 ```python from claude_agent_sdk import query, ClaudeAgentOptions # プロジェクトとユーザーの設定を読み込む async for message in query( prompt="Help me refactor the auth module", options=ClaudeAgentOptions( setting_sources=["user", "project"], # CLAUDE.md, skills, hooks を有効化 allowed_tools=["Read", "Edit", "Bash"], ), ): pass # すべてのファイルシステム設定を無効化(プログラムで渡す設定のみ使用) async for message in query( prompt="Analyze this code", options=ClaudeAgentOptions( setting_sources=[], # ファイルシステムからの設定読み込みを完全に無効化 ), ): pass ``` 🏗 本番システムへの組み込み方 ・マルチテナント環境では `setting_sources=[]` と `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` を組み合わせて、テナント間の設定漏洩を防止できます ・CLAUDE.md を SDK エージェントで活用するには `"project"` を含める必要があります(含めないと読み込まれません) ・各ソースの読み込み先は以下の通りです: - `"project"`: `/.claude/` から settings.json とフック、`` と親ディレクトリから CLAUDE.md とルール - `"user"`: `~/.claude/` からユーザー設定、CLAUDE.md、ルール - `"local"`: `/.claude/settings.local.json` と親ディレクトリの CLAUDE.local.md 💡 ユースケース 🔒 セキュアなマルチテナント:各テナントを独立したファイルシステムで実行し、`setting_sources=[]` で他テナントの設定を遮断する 🏗 CI/CD パイプライン:`"project"` のみを有効にして、リポジトリ固有の CLAUDE.md とスキルだけを読み込む 👤 ユーザーカスタマイズの許可:`"user"` を含めることで、開発者個人の `~/.claude/CLAUDE.md` も反映する ⚠️ 注意点 ・`setting_sources` で制御できないものがあります:マネージドポリシー、`~/.claude.json`、オートメモリ(`~/.claude/projects/` 配下)、 MCP コネクタ ・オートメモリを無効にするには `autoMemoryEnabled: false` または環境変数 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` を設定してください ・`setting_sources` を明示的に設定する場合、デフォルトの3ソースすべてが無効化されるため、必要なソースを漏れなくリストしてください ✨ setting_sources を適切に設定することで、エージェントの設定読み込みを精密に制御し、安全で予測可能な動作を実現できます。 #ClaudeAgentSDK# #AIAgent#
もっと見る