Functions
query()
SDK のメインエントリ関数です。到着順にメッセージをストリーミングする非同期イテレータを作成します。
Parameters
| パラメータ | 型 | 説明 |
|---|---|---|
prompt | str | AsyncIterable[dict[str, Any]] | 単一ターンの場合は文字列を渡し、マルチターンの場合は非同期イテラブルを渡します |
options | QoderAgentOptions | 任意のセッション構成 |
Return Value
AsyncIterator[Message] を返し、async for で消費します。
QoderSDKClient
クラスベースのマルチターン会話 API です。ターンをまたいでセッション状態を保持したり、モデルやパーミッションモードを動的に切り替えたりするシナリオに適しています。
| メソッド | 説明 |
|---|---|
client.query(prompt) | 新しいターンのユーザー入力を送信 |
client.receive_response() | ResultMessage までメッセージを消費 |
client.receive_messages() | セッション全体のメッセージストリームを受信するバックグラウンド非同期イテレータ |
client.connect(prompt) / client.disconnect() | 接続を手動で管理 |
client.interrupt() | 現在の生成またはツール実行を中断 |
client.set_model(model) | 実行時にモデルを切り替え |
client.set_permission_mode(mode) | 実行時にパーミッションモードを切り替え |
client.stop_task(task_id) | バックグラウンドタスクを停止 |
client.apply_flag_settings(settings) | フラグレベルの設定を注入 |
client.supported_agents() | 現在利用可能なエージェントを一覧表示 |
client.get_mcp_status() | すべての MCP サーバーのステータスを取得 |
client.set_mcp_servers(servers) | MCP サーバー構成を置き換え |
client.reconnect_mcp_server(name) | 特定の MCP サーバーを再接続 |
client.toggle_mcp_server(name, enabled) | MCP サーバーの有効/無効を切り替え |
client.get_available_models() | 利用可能なモデル一覧を取得 |
Types
QoderAgentOptions
query() および QoderSDKClient の構成オブジェクトです。Python SDK では snake_case のフィールド名を使用します。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
auth | InternalAuthOptions | dict | None | None | 認証構成 |
on_auth_expired | Callable | None | None | 認証期限切れ時のコールバック。セッションごとに最大 1 回トリガーされます |
tools | list[str] | ToolsPreset | None | None | ツールセット。文字列配列を渡すと利用可能なツールを制限します。組み込みツール名は 組み込みツール一覧 を参照 |
allowed_tools | list[str] | [] | ツール許可リスト。記載されたツールは事前に承認されます |
disallowed_tools | list[str] | [] | ツール拒否リスト。allowed_tools と permission_mode より優先されます |
can_use_tool | CanUseTool | None | カスタムツールパーミッションコールバック |
permission_mode | PermissionMode | None | セッションパーミッションモード |
allow_dangerously_skip_permissions | bool | False | パーミッションチェックのスキップを許可。permission_mode="bypassPermissions" と併用 |
permission_prompt_tool_name | str | None | None | パーミッションプロンプト用の MCP ツール名。can_use_tool と相互排他 |
model | str | None | None | 使用するモデル |
fallback_model | str | None | None | メインモデル失敗時のフォールバックモデル |
resolve_model | ModelPolicyProvider | None | 動的モデル選択コールバック。渡すと動的コールバックモードに切り替わります。詳細は モデルポリシー を参照 |
resolve_model_timeout_ms | int | 500 | コールバックタイムアウト(ミリ秒)。resolve_model を渡した場合のみ有効 |
system_prompt | str | SystemPromptPreset | SystemPromptFile | None | None | システムプロンプト |
cwd | str | Path | None | None | 作業ディレクトリ |
env | dict[str, str | None] | {} | CLI プロセスに渡す環境変数 |
cli_path | str | Path | None | None | qodercli 実行ファイルへのパス |
session_id | str | None | None | セッション UUID を指定 |
resume | str | None | None | 再開するセッション ID |
continue_conversation | bool | False | 直近のセッションを継続 |
fork_session | bool | False | resume と併用すると、新しいセッション ID にフォーク |
max_turns | int | None | None | 最大会話ターン数 |
include_partial_messages | bool | False | StreamEvent ストリーミング断片を含める。詳細は ストリーミング出力 を参照 |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | MCP サーバー構成。詳細は MCP を参照 |
allowed_mcp_server_names | list[str] | [] | 利用可能な MCP サーバーを制限 |
strict_mcp_config | bool | False | 厳密な MCP 検証 |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | ライフサイクルフック。詳細は Hooks を参照 |
agents | dict[str, AgentDefinition] | None | None | プログラム的に定義されたサブエージェント。詳細は Agents リファレンス を参照 |
agent | str | None | None | メインスレッドが使用するエージェント名。詳細は Agents リファレンス を参照 |
settings | str | Path | Settings | None | None | インライン設定オブジェクトまたは設定ファイルパス |
setting_sources | list[SettingSource] | None | None | 読み込むファイルシステム設定 |
add_dirs | list[str | Path] | [] | AI がアクセス可能な追加ディレクトリ |
extra_args | dict[str, str | None] | {} | CLI に渡す追加引数 |
plugins | list[SdkPluginConfig] | [] | ローカルプラグインを読み込む。詳細は Plugins を参照 |
skills | list[str] | Literal["all"] | None | None | 有効化するスキル。"all" を渡すとすべて有効化 |
enable_file_checkpointing | bool | None | None | ファイルチェックポイントを有効化 |
thinking | ThinkingConfig | None | None | Thinking 構成 |
Authentication
| ファクトリ関数 | 説明 |
|---|---|
access_token(token) | PAT を直接渡す |
access_token_from_env() | デフォルトの環境変数 QODER_PERSONAL_ACCESS_TOKEN から読み取る |
access_token_from_env("MY_PAT") | 指定した環境変数から読み取る |
qodercli_auth() | ローカルの qodercli login セッションを再利用 |
Agents Reference
このページでは、SDK Agents に関する安定した設定項目をまとめます。入門と利用シーンについては サブエージェント利用ガイド を参照してください。Sources of Available Agents
現在のセッションで利用可能な Agent は、複数のソースから提供される場合があります:| ソース | 説明 |
|---|---|
| SDK 登録 | QoderAgentOptions.agents を介して現在のセッションに登録 |
| CLI 組み込み | qodercli 起動時に登録される組み込み Agent |
| ユーザー / プロジェクト設定 | ユーザーまたはプロジェクトの設定ディレクトリ内の Agent 定義 |
| プラグイン | ロード済みプラグインが提供する Agent |
/agents を実行して現在検出されている Agent を確認できます。コマンドラインでは qodercli agents list を実行します。Python SDK では QoderSDKClient の接続後、client.supported_agents() を呼び出して現在のセッションで利用可能な Agent のサマリを取得できます。
QoderAgentOptions.agents
型: dict[str, AgentDefinition] | None
現在のセッションで利用可能なカスタム Agent を登録します。dict のキーは Agent 名、値はその Agent の定義です。
Agentツールが必要: カスタムサブエージェントは、メインセッションが組み込みのAgentツールを介して委譲する必要があるため、allowed_toolsにAgentツールを含める必要があります。
Agent ツールを介してこれらのサブエージェントを呼び出せます。メインセッションは作業を委譲するため、ツールセットに Agent を含める必要があります。allowed_tools=["Agent"] は必須の事前認可形式です。tools でメインセッションの利用可能ツールを絞り込む場合も、そこに Agent を含めてください。
QoderAgentOptions.agent
型: str | None
メインセッションがどの Agent のアイデンティティとして実行されるかを指定します。値は agents に登録された名前、または現在の CLI が検出した組み込み / プラグイン Agent 名です。
prompt、model、ツール制限を使用します。省略した場合は、デフォルトのメインセッション動作が使用されます。
AgentDefinition
カスタム Agent の定義です。Python SDK の AgentDefinition は dataclass で、フィールド名はプロトコルスタイルの camelCase を使用します。以下のフィールドは、SDK で現在カバーされ、検証済みの安定した機能です。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
description | str | はい | Agent の用途説明。モデルはこれを使って Agent を呼び出すかどうかを判断 |
prompt | str | はい | Agent のシステムプロンプト |
tools | list[str] | None | いいえ | この Agent のツール許可リスト |
disallowedTools | list[str] | None | いいえ | この Agent のツールセットから除外するツール |
model | str | None | いいえ | モデルのオーバーライド。"inherit" はメインセッションのモデルを継承 |
mcpServers | list[str | dict[str, Any]] | None | いいえ | この Agent が利用可能な MCP サーバー指定 |
skills | list[str] | None | いいえ | Agent コンテキストにプリロードするスキル名 |
initialPrompt | str | None | いいえ | この Agent をメインセッション Agent として使用する際に自動送信される最初のユーザー入力 |
maxTurns | int | None | いいえ | Agent の最大 API ターン数 |
effort | "low" | "medium" | "high" | "max" | None | いいえ | 推論の effort レベル |
permissionMode | PermissionMode | None | いいえ | この Agent 内のツール実行に対する権限モード |
dataclasses.asdict() を使って AgentDefinition を initialize リクエストにシリアライズし、qodercli は現在の Agent スキーマに従ってパースします。
description
Agent がどんなタスクに適しているかを記述します。モデルがこの Agent を選択するかどうかに影響します。
Helpful assistant のような広範な記述は避けてください。
prompt
Agent のシステムプロンプト。役割、制約、出力形式を定義するために使用します。
tools
Agent のツール許可リスト。設定すると、Agent はリストされたツールのみ使用可能です。
tools を省略すると、サブエージェントのデフォルトツールセットが使用されます。サブエージェントのツールセットは、メインセッションの allowed_tools の絞り込みを継承しません。
disallowedTools
Agent のツールセットから特定のツールを除外します。
disallowedTools を省略すると、サブエージェントはメインセッションの disallowed_tools の絞り込みを継承しません。最終的なツールセットを明示的に把握している場合を除き、通常は tools と disallowedTools を併用しないでください。
model
Agent のモデルを指定します。省略するとセッションのデフォルトモデルが使用されます。Python の型レベルでは str | None で、SDK はローカルで特定の文字列を制限しません。一般的なモデル階層は以下のとおりです:
| 値 | 階層 | 説明 | 適用 | クレジットコスト |
|---|---|---|---|---|
"auto" | スマートルーティング | 能力とコストのバランスを取り、最適なモデルをインテリジェントに選択 | ほとんどの日常的な開発作業。推奨デフォルト | 約 1.0x |
"ultimate" | アルティメット | エキスパートレベルの深い推論と思考能力 | 複雑なシステム設計と難しい分析 | 約 1.6x |
"performance" | パフォーマンス | 高度な推論と高品質な出力 | コア実装、アーキテクチャ設計、リファクタリング | 約 1.1x |
"efficient" | エフィシェント | コスト効率の良い標準的な推論 | 基本的なコード生成、ユニットテスト、日常的な Q&A | 約 0.3x |
"lite" | ライト | 基本的な推論、無料で使用可能 | 簡易検証、シンプルなロジック、簡単な質問 | 0x |
| 値 | 説明 |
|---|---|
"inherit" | メインセッションのモデルを継承。通常 supported_agents() には反映されない |
| 完全なモデル ID | 現在の CLI / バックエンドがサポートするモデル ID を直接指定 |
mcpServers
tools=["mcp__server__tool"] も併せて設定し、サーバーの全ツールを Agent に公開しないようにしてください。
skills
Agent コンテキストにプリロードするスキル名のリスト。プレーンなスキル名とプラグイン修飾名の両方をサポートします。
initialPrompt
QoderAgentOptions.agent を通じてこの Agent がメインセッション Agent になるとき、最初のユーザー入力として自動送信されます。
Agent ツール経由でサブエージェントとして呼び出される場合は無視されます。
maxTurns
Agent の最大 API ターン数を制限します。コスト、実行時間、ループのリスクを制御するために使用します。
effort
effort が高いほど、複雑なレビュー、アーキテクチャ分析、リスクの高い変更に通常適していますが、レイテンシとトークン使用量が増加します。
permissionMode
この Agent 内のツール実行に対する権限モードを制御します。セッションレベルの permission_mode と同じ意味を持ちますが、スコープはこの Agent に限定されます。セッションレベルの権限チェーン、allowed_tools / disallowed_tools / can_use_tool の優先順位、例については 権限制御 を参照してください。
| 値 | 意味 | 適用 |
|---|---|---|
"default" | 標準的な権限動作。ツール呼び出しは依然としてツールセット、許可 / 拒否ルール、ランタイム承認、または CLI のデフォルトポリシーを通過 | ほとんどのインタラクティブなサブエージェント |
"acceptEdits" | ファイル編集操作を自動的に受け入れる。他のセンシティブな操作は引き続き権限フローに従う | ワークスペースファイルの変更が承認されているサブエージェント |
"bypassPermissions" | 権限チェックをスキップ。高リスクモード。通常は信頼された自動化またはテスト環境のみ | 制御された CI、一時検証、ワンオフ自動化 |
"yolo" | "bypassPermissions" の互換エイリアス。同様に権限チェックをスキップ | 古い設定との互換性。新規コードでは推奨されない |
"plan" | プランモード。先にプランを生成するのに適しており、デフォルトでは実際の変更を行わない | 計画、設計、レビュー、またはサブエージェントがファイルを変更すべきでないケース |
"dontAsk" | インタラクティブな確認をしない。事前認可されていないか、ルールで許可されていない操作は拒否 | 非インタラクティブ環境、またはプロンプトではなく失敗すべきワークフロー |
"auto" | ランタイム能力が許可または拒否を自動決定 | 確認による中断を減らしつつ、ランタイム判断を保持 |
AgentInfo
QoderSDKClient.supported_agents() が返す Agent サマリ。
AgentInfo という名前の TypedDict をエクスポートしていません。supported_agents() の戻り値の型は list[dict[str, Any]] です。上記の構造は、実際に返される dict の安定したフィールド規約です。
| フィールド | 型 | 説明 |
|---|---|---|
name | str | Agent 名 |
description | str | Agent の用途説明 |
model | str | None | Agent のモデルオーバーライド。未設定または model="inherit" の場合は通常空 |
agents で登録された Agent や、現在の CLI が検出した組み込み、プロジェクト、ユーザー、プラグインの Agent が含まれる場合があります。実際に利用可能なエントリは qodercli のバージョンと現在の設定に依存します。
Context and Invocation Boundaries
- サブエージェントは独立したコンテキストを使用し、親セッションの完全な履歴を受け取りません。
- 親セッションからサブエージェントに渡される主要な情報は、
Agentツールに供給されるタスクプロンプトです。 - サブエージェントの中間ツール結果は親セッションに直接入りません。親セッションはサブエージェントの最終応答を受け取ります。
- サブエージェントは自身のサブエージェントを生成できないため、サブエージェントの
toolsにAgentを含めないでください。 initialPromptはagentで指定されたメインセッション Agent でのみ有効です。
Related Documentation
Model Policy
query() の動的なモデル選択機能。2 つのモード: 固定モデル(resolve_model を渡さず options.model またはバックエンドのデフォルトを使用)と動的コールバック(resolve_model を渡し、すべての LLM 呼び出し前にコールバックがモデルを決定)。概念、トリガー、エラー処理の詳細は Model Policy を参照。
options.resolve_model
型: ModelPolicyProvider
動的コールバックモードのエントリーポイント。一度渡すと動的コールバックモードが有効になり、SDK は LLM リクエストごとにこのコールバックを呼び出してモデルを取得する。コールバックが返した model がそのリクエストの最終モデルであり、自動フォールバックは存在しない。
options.resolve_model_timeout_ms
型: int、デフォルト 500
コールバックのタイムアウト(ミリ秒)。タイムアウトすると ModelPolicyTimeoutError がスローされ、クエリは失敗する(フォールバックなし)。resolve_model を渡したときのみ有効。
ModelPolicyProvider
コールバック関数のシグネチャ。同期でも非同期でもよい。
QoderModelPurpose によって区別される:
| シナリオ | purpose | 備考 |
|---|---|---|
| メイン会話 | 'main' | ターンやツールごとに再呼び出し — セッション中に何度もトリガーされ得る |
| サブエージェント | 'subagent' | サブエージェントは同じプロバイダを共有 |
| WebFetch ツール | 'web_fetch' | WebFetch がコンテンツを取得した後、要約用に 2 回目の LLM 呼び出しが行われる |
| ImageGen ツール | 'image_gen' | 画像生成モデルの選択に使用 |
| コンテキスト圧縮 | 'compact' | 圧縮開始前に、圧縮用モデルをコールバックに問い合わせる |
| BYOK | 任意 | model を CustomModel オブジェクトに設定するとサードパーティ LLM へルーティング |
- コールバックは 1 セッション内で何度もトリガーされ得る(各ターン / ツール / サブタスク前に再呼び出し)。
- コールバックが返した
modelがそのリクエストの最終モデルであり、SDK は再検証しない。 - 例外をスローしたり空の
modelを返した場合、クエリは直ちに失敗する。Model Policy — エラー処理 を参照。
ModelPolicyContext
コールバック呼び出しのたびに渡されるコンテキスト。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
purpose | QoderModelPurpose | はい | この LLM 呼び出しの用途 |
sessionId | str | はい | 現在のセッション ID。セッション中のコールバック呼び出しで同じ値が渡されるため、キャッシュ / テレメトリのキーとして利用可能 |
agentId | str | はい | 呼び出しを開始した Agent の識別子 |
turnIndex | int | はい | 現在のターンインデックス |
availableModels | ModelInfo[] | はい | アカウントが現在リアルタイムで利用可能なモデル(CLI が get_model_policy リクエストごとにリストを送る) |
QoderModelPurpose
| 値 | トリガーシナリオ |
|---|---|
'main' | メイン会話の LLM 呼び出し |
'subagent' | サブエージェント呼び出し |
'web_fetch' | WebFetch ツールがトリガーする 2 回目の LLM 呼び出し |
'image_gen' | ImageGen ツールがトリガーする画像生成呼び出し |
'compact' | コンテキスト圧縮 / 要約 |
ModelPolicyResult
コールバックの戻り値。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
model | str | CustomModel | はい | 文字列: モデル識別子。オブジェクト: BYOK 認証情報 + モデル識別子 |
parameters | dict[str, Any] | いいえ | モデルパラメータの上書き(例: temperature、max_tokens) |
model の形式:
- 文字列 — バックエンドがサポートする任意のモデル ID(
auto/performance/glm51など)。有効な値の正確な集合はclient.get_available_models()がリアルタイムで返す。空でない こと。さもなくばクエリは失敗する。 CustomModelオブジェクト(BYOK) — SDK はオブジェクトのmodelフィールドをこの呼び出しのモデル識別子として抽出し、残りのフィールドを認証情報として CLI へ転送し、サードパーティ LLM へルーティングする。
CustomModel
BYOK 認証情報。resolve_model コールバック内で model フィールドにこのオブジェクトを直接設定すると、その LLM リクエストはサードパーティプロバイダへルーティングされる。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
provider | str | はい | プロバイダキー — BYOKProviderInfo.key と一致する必要がある |
model | str | はい | モデル識別子 — SDK がこの呼び出しのモデル ID として抽出 |
api_key | str | はい | ユーザーが提供する API キー |
url | str | いいえ | デフォルトのベース URL を上書き |
style | str | いいえ | 上流プロトコルスタイル。例: "openai" / "anthropic"。デフォルトは "openai" |
providerはカタログ内のkeyと一致する必要がある。さもなくばバックエンド認証が失敗する。api_keyが誤っていると認証が失敗し、クエリは直ちに失敗する(動的コールバックモードはフォールバックしない)。- BYOK 呼び出しは
total_cost_usdをプラットフォーム上で 0 として報告する。トークン使用量はそのまま報告され、プロバイダ側で課金される。
BYOK Catalog Types
client.list_byok_providers() が返すプロバイダ / モデルカタログ。
BYOKProviderInfo
| フィールド | 型 | 説明 |
|---|---|---|
key | str | プロバイダキー — BYOK の CustomModel.provider に設定 |
display_name | str | 表示名 |
api_key_url | str | ユーザーが API キーを取得する URL |
url | str | 推論リクエスト用のベース URL |
fields | list[BYOKFieldInfo] | プロバイダがユーザーに入力を要求するフィールド一覧 |
types | list[BYOKModelTypeInfo] | このプロバイダ配下のモデルグループ |
BYOKFieldInfo
| フィールド | 型 | 説明 |
|---|---|---|
key | str | フィールドキー(例: api_key) |
display_name | str | ユーザーに表示される名前 |
type | str | フィールドタイプ(例: "free_input") |
mandatory | bool | 必須かどうか |
BYOKModelTypeInfo
| フィールド | 型 | 説明 |
|---|---|---|
key | str | グループキー。一般的な値: cp / tp / pg(任意) |
display_name | str | グループ表示名 |
models | list[BYOKModelInfo] | グループ内のモデル |
BYOKModelInfo
| フィールド | 型 | 説明 |
|---|---|---|
key | str | モデル ID — CustomModel.model に設定 |
display_name | str | 表示名 |
is_vl | bool | ビジョン / マルチモーダル入力をサポートするか |
is_reasoning | bool | 推論モデルかどうか |
format | str | 上流プロトコル形式(例: openai) |
max_input_tokens | int | 最大入力トークン数 |
ModelInfo
client.get_available_models() が返す利用可能モデルのサマリ。ModelPolicyContext.availableModels の要素型としても使用される。
| フィールド | 型 | 説明 |
|---|---|---|
value | str | モデル識別子。ModelPolicyResult.model や client.set_model() の引数として使用可能 |
displayName | str | 表示名 |
isEnabled | bool | undefined | 現在利用可能かどうか。undefined は利用可能として扱われる |
ModelPolicyTimeoutError
resolve_model コールバックが options.resolve_model_timeout_ms 以内に返らなかった場合に SDK がスローする。クエリは直ちに失敗し、フォールバックはない。
client.set_model()
ModelInfo.value を参照。
client.get_available_models()
ModelPolicyContext.availableModels が同じ最新リストを既に持つため、明示的にこのメソッドを呼ぶ必要はない。
client.list_byok_providers()
Noneを返す: CLI がこの API をサポートしていない(グレースフルフォールバック、例外なし)。- 配列を返す(空の可能性あり): 現在のアカウントで利用可能なプロバイダ一覧(空配列はアカウントが BYOK を有効化していないことを意味する)。
CanUseTool
ホスト定義のカスタムツール権限承認コールバック。
ToolPermissionContext
| フィールド | 型 | 説明 |
|---|---|---|
signal | asyncio.Event | None | キャンセル時にセットされる |
suggestions | list[Any] | CLI からの権限更新提案 |
blocked_path | str | None | 認可をトリガーするファイルパス(ファイル関連シナリオのみ) |
decision_reason | str | None | CLI からの人間可読な認可理由 |
decision_reason_type | str | None | 権限理由の分類 |
classifier_approvable | bool | None | 現在の呼び出しがランタイム分類器によって自動承認可能かどうか |
title / display_name / description | str | None | 実行時に生成された人間可読な認可テキスト |
tool_use_id | str | None | このツール呼び出しの ID |
agent_id | str | None | 呼び出しを開始したサブエージェント ID |
exit_plan_mode | ExitPlanModeApprovalDetails | None | プランモード終了時の承認詳細 |
PermissionMode
| 値 | 意味 | 適用対象 |
|---|---|---|
"default" | 標準的な権限挙動。ツール呼び出しは tools、allow / deny ルール、動的承認、またはランタイムポリシーで処理 | 多くの対話セッション |
"acceptEdits" | ファイル編集操作を自動承認。その他の機微な操作は通常の権限フローに従う | ワークスペース変更が承認済みのセッション |
"bypassPermissions" | 権限チェックをスキップ。allow_dangerously_skip_permissions=True も併設する必要あり | 信頼された自動化やテスト環境 |
"yolo" | "bypassPermissions" の互換エイリアス。allow_dangerously_skip_permissions=True も併設する必要あり | 旧設定との互換用。新規コードでは非推奨 |
"plan" | プランモード。まずプランを生成する用途に適し、デフォルトでは実変更を行わない | 計画、設計、レビュー |
"dontAsk" | 対話的に問わず、事前認可されないかルールで許可されない操作は拒否 | 非対話環境、またはプロンプトせず失敗させたいワークフロー |
"auto" | ランタイム能力が許可 / 拒否を自動決定。安全なワークスペースのファイル編集は自動許可される可能性あり | 確認の中断を減らしつつランタイム判断を残したい場合 |
PermissionResult
CanUseTool の戻り値。
allow.updated_input を変更すると、ツールが実際に受け取るパラメータが置き換えられる。deny.interrupt=True は拒否に加えて Agent を中断する。
can_use_tool が受け取る tool_name は完全なツール名。例: "Bash"、"Read"、"mcp__orders__lookup_order"。
McpServerConfig
MCP サーバー設定。QoderAgentOptions.mcp_servers に渡す。
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfig
create_sdk_mcp_server() ファクトリが返す。MCP - インプロセスサーバー を参照。
McpServerToolPolicy
SdkPluginConfig
ローカルプラグインを読み込む。
| フィールド | 型 | 説明 |
|---|---|---|
type | "local" | 現在は local のみサポート |
path | str | プラグインディレクトリへの絶対または相対パス |
SettingSource
どのファイルシステム設定を読み込むかを制御。
| 値 | 意味 | 場所 |
|---|---|---|
"user" | ユーザーレベルのグローバル設定 | ~/.qoder/settings.json |
"project" | プロジェクト共有設定(バージョン管理対象) | .qoder/settings.json |
"local" | プロジェクトローカル設定(gitignore 対象) | .qoder/settings.local.json |
[] を渡すと完全にスキップされる。
Tools Reference
このページでは、安定したツール関連 API、組み込みツール一覧、および型定義をまとめます。利用パスやシナリオについては ツール利用ガイド を参照してください。注: Python SDK は現時点で、TypeScript SDK のBashInput、FileReadInput、ToolInputSchemasなどの組み込みツール入力 / 出力型コレクションをエクスポートしていません。実装状況は該当セクションで明示しています。
ToolConfig
TypeScript SDK は、一部の組み込みツールの挙動を設定するために options.toolConfig を提供しています:
QoderAgentOptions.tool_config フィールドをエクスポートしていません。AskUserQuestion は引き続き、tools、allowed_tools、disallowed_tools、can_use_tool、フックマッチャーで実行時ツール名として利用できます。
Built-in Tool List
tools、allowed_tools、disallowed_tools、can_use_tool、フックマッチャー、および Agent ツール許可リストでは、組み込みツールは下表の実行時ツール名を使用します。
| カテゴリ | ツール名 | 説明 | Python SDK の状況 |
|---|---|---|---|
| コマンド実行 | Bash | シェルコマンドを実行 | 権限 / ツールスコープ設定で利用可能 |
| ファイル操作 | Read | ファイル内容を読み取り | 権限 / ツールスコープ設定で利用可能 |
| ファイル操作 | Edit | 文字列マッチでファイルを編集 | 権限 / ツールスコープ設定で利用可能 |
| ファイル操作 | Write | ファイルの作成または上書き | 権限 / ツールスコープ設定で利用可能 |
| 検索 | Glob | ファイル名パターンで検索 | 権限 / ツールスコープ設定で利用可能 |
| 検索 | Grep | コンテンツ正規表現で検索 | 権限 / ツールスコープ設定で利用可能 |
| ネットワーク | WebFetch | URL の内容を取得・処理 | 権限 / ツールスコープ設定で利用可能 |
| ネットワーク | WebSearch | ウェブ検索 | 権限 / ツールスコープ設定で利用可能 |
| エージェント | Agent | サブエージェントを呼び出し | 権限 / ツールスコープ設定で利用可能 |
| インタラクション | AskUserQuestion | ユーザーへの質問 | 権限 / ツールスコープ設定で利用可能 |
| ノートブック | NotebookEdit | ノートブックセルを編集 | 権限 / ツールスコープ設定で利用可能 |
| バックグラウンドタスク | TaskOutput | バックグラウンドタスクへ出力を送信 | 権限 / ツールスコープ設定で利用可能 |
| バックグラウンドタスク | TaskStop | バックグラウンドタスクを停止 | 権限 / ツールスコープ設定で利用可能 |
| プラン / ワークツリー | ExitPlanMode | プランモードを終了 | 権限 / ツールスコープ設定で利用可能 |
| プラン / ワークツリー | EnterWorktree | git ワークツリーに入る | 権限 / ツールスコープ設定で利用可能 |
| プラン / ワークツリー | ExitWorktree | ワークツリーを抜ける | 権限 / ツールスコープ設定で利用可能 |
| 設定 | Config | 設定の読み書き | 権限 / ツールスコープ設定で利用可能 |
| Todo | TodoWrite | Todo 項目を管理 | 権限 / ツールスコープ設定で利用可能 |
| MCP リソース | ListMcpResources | MCP リソースを一覧表示 | 権限 / ツールスコープ設定で利用可能 |
| MCP リソース | ReadMcpResource | MCP リソースを読み取り | 権限 / ツールスコープ設定で利用可能 |
| MCP 呼び出し | Mcp | 汎用 MCP ツール呼び出し | 権限 / ツールスコープ設定で利用可能 |
tool()
SDK MCP ツール定義を作成します。Python 版はデコレータ形式で、ハンドラは @tool(...) でラップされます。
| パラメータ | 型 | 必須 | 意味 | 現在の Qoder の挙動 |
|---|---|---|---|---|
name | str | はい | 現在の MCP サーバー内でのツールの一意な識別子 | モデルから見えるフルツール名 mcp__{serverName}__{name} を構成。登録時に非空であることが必須 |
description | str | はい | モデルに示すツール説明 — いつ使うか、何をするか、何を返すか | ツール一覧にそのまま渡され、モデルが正しく呼び出せるかに直接影響する。登録時に非空であることが必須 |
input_schema | type | dict[str, Any] | はい | ツールの入力パラメータを定義 | SDK が MCP 入力スキーマを生成。単純な dict、TypedDict、または完全な JSON Schema dict をサポート |
annotations | ToolAnnotations | None | いいえ | 追加のツールメタデータ | SDK が annotations を MCP サーバーに登録。権限設定を置き換えるものではない |
tool() 自体はツールを定義するのみで、デコレートされた async ハンドラがツール呼び出し時に実行される関数です。name、description、ツール名の重複などの登録制約は、create_sdk_mcp_server() でツール登録時に検証されます。
input_schema
Python SDK には TypeScript SDK の AnyZodRawShape / InferShape はありません。Python 版の input_schema は次の形式をサポートします:
| Python 形式 | JSON Schema の意味 |
|---|---|
str | {"type": "string"} |
int | {"type": "integer"} |
float | {"type": "number"} |
bool | {"type": "boolean"} |
list[T] | array、items 付き |
dict | object |
Annotated[T, "..."] | T のスキーマに description を追加 |
TypedDict | object; required / NotRequired に基づいて required を生成 |
TypeScript-only schema helper types
| TypeScript 参照型 | Python SDK の状況 | Python での同等機能 |
|---|---|---|
AnyZodRawShape | 未実装 / 未エクスポート | dict[str, type]、TypedDict、または完全な JSON Schema dict を使用 |
InferShape | 未実装 / 未エクスポート | ハンドラは args dict を受け取る。静的型付けが必要なら、ビジネス側で独自の TypedDict を宣言する |
ToolExtras | 未実装 / 未エクスポート | Python では、annotations を @tool() の第 4 引数として直接渡す |
SdkMcpTool
@tool() デコレータは SdkMcpTool を返します。通常は手動で構築する必要はありません。
ToolInvocationContext
ToolInvocationContext を渡します。extra.signal は CLI が実行中のツール呼び出しをキャンセルしたときにセットされます。
ToolAnnotations
Python 版は mcp.types.ToolAnnotations を直接使用します。
| フィールド | 型 | 省略可 | 意味 | 現在の Qoder の挙動 |
|---|---|---|---|---|
title | str | はい | ツールの人間可読タイトル | MCP メタデータ。現状 Qoder で検証済みの挙動能力ではない |
readOnlyHint | bool | はい | ツールが状態を変更しないことを示す | 観測可能な効果としては、読み取り専用ツールは同一バッチ内のツール呼び出しで並列実行の対象になる。権限スイッチではない |
destructiveHint | bool | はい | ツールが破壊的な更新を行う可能性を示す | リスクメタデータ。現状、許可されたツール実行を自動でブロックしない |
openWorldHint | bool | はい | ツールが外部のオープンワールドと相互作用するかを示す | 外部対話メタデータ。現状、許可されたツール実行を自動でブロックしない |
maxResultSizeChars | int | はい | ツール結果サイズの上限を示す | Python SDK は _meta["anthropic/maxResultSizeChars"] に書き込み、CLI が読み取る。これは Python で現在使用されている MCP 型拡張フィールド |
tools、allowed_tools、disallowed_tools、permission_mode、can_use_tool、フックによって決まります。
create_sdk_mcp_server()
SDK と同一プロセス内で動作する MCP サーバーを作成します。
| パラメータ | デフォルト | 説明 |
|---|---|---|
name | 必須 | MCP サーバー名。mcp__{serverName}__{toolName} で使われる |
version | "1.0.0" | サーバーのバージョン情報 |
tools | None | このサーバーに登録するツールのリスト |
CreateSdkMcpServerOptions
TypeScript SDK は CreateSdkMcpServerOptions というオブジェクトパラメータを使いますが、Python SDK はこの型をエクスポートしておらず、オプションオブジェクトも使いません。Python での同等物は create_sdk_mcp_server(name, version="1.0.0", tools=None) の 3 つの関数パラメータです。
Return Value
QoderAgentOptions.mcp_servers の値として直接利用できる McpSdkServerConfig を返します。
McpServerToolPolicy
tools ポリシーフィールドは Python 型に存在します。主に MCP サーバー設定レイヤでのツール権限ポリシーに使われます。一般的なインプロセス SDK サーバー統合では、依然として allowed_tools、disallowed_tools、permission_mode、can_use_tool、フックを通じて制御します。
CallToolResult
Python SDK は独自の CallToolResult 型をエクスポートしていません。ハンドラは dict を返し、SDK がそれを MCP の CallToolResult に変換します。
McpToolResultContent
Python SDK は現在、次のコンテンツブロックを認識します:
| 種類 | Python ハンドラ dict | 現在の Qoder の挙動 |
|---|---|---|
| テキスト | {"type": "text", "text": "..."} | TextContent に変換 |
| 画像 | {"type": "image", "data": "...", "mimeType": "image/png"} | ImageContent に変換 |
| リソースリンク | {"type": "resource_link", "uri": "...", "name": "...", "description": "..."} | TextContent にダウングレードし、name / uri / description を連結 |
| 埋め込みテキストリソース | {"type": "resource", "resource": {"text": "..."}} | TextContent に変換 |
| 埋め込みバイナリリソース | {"type": "resource", "resource": {"blob": "..."}} | 現状はスキップされ、警告がログ出力される |
- Python ハンドラは
is_errorを使い、MCP / TypeScript のisErrorというフィールド名ではない。SDK は内部で MCP のisErrorにマッピングする。 - Python ハンドラのトップレベル
_metaは現状CallToolResultに渡されない。 - Python の
call_tool変換ロジックは現状audioコンテンツブロックを扱わない。MCP の型としてAudioContentがインポートされていても、{"type": "audio"}を返すハンドラは未対応コンテンツの警告分岐に入る。
can_use_tool
ツール権限承認コールバックは共通型で定義されており、参照しやすさのためここに再掲します。
PermissionResult
can_use_tool が受け取る tool_name はフルツール名で、例えば Bash、Read、mcp__orders__lookup_order です。
MCP Status Tool Information
Python SDK はMcpToolInfo と McpToolAnnotations をエクスポートし、QoderSDKClient.get_mcp_status() が返すサーバー単位のツール情報を表現します。
readOnly、destructive、openWorld であり、ToolAnnotations 入力の readOnlyHint、destructiveHint、openWorldHint ではありません。idempotentHint は現状ステータスのツール一覧にエコーされません。
Built-in Tool Input/Output Types
TypeScript SDK は組み込みツールの入力 / 出力構造を型レベルで提供しています。Python SDK は現状これらの TypedDict をエクスポートしておらず、ToolInputSchemas / ToolOutputSchemas のユニオン型もエクスポートしていません。注意: 下表の型名は TypeScript 参照型名であり、Python の権限設定とツール許可リストでは依然として組み込みツール一覧の実行時ツール名を使用します。
| TypeScript 型 | Python SDK の状況 |
|---|---|
AgentInput / AgentOutput | 未エクスポート |
BashInput / BashOutput | 未エクスポート |
FileReadInput / FileReadOutput | 未エクスポート。実行時ツール名は Read のまま |
FileEditInput / FileEditOutput | 未エクスポート。実行時ツール名は Edit のまま |
FileWriteInput / FileWriteOutput | 未エクスポート。実行時ツール名は Write のまま |
GlobInput / GlobOutput | 未エクスポート |
GrepInput / GrepOutput | 未エクスポート |
WebFetchInput / WebFetchOutput | 未エクスポート |
WebSearchInput / WebSearchOutput | 未エクスポート |
AskUserQuestionInput / AskUserQuestionOutput | 未エクスポート |
NotebookEditInput / NotebookEditOutput | 未エクスポート |
TaskOutputInput | 未エクスポート |
TaskStopInput / TaskStopOutput | 未エクスポート |
ExitPlanModeInput / ExitPlanModeOutput | 未エクスポート |
ConfigInput / ConfigOutput | 未エクスポート |
EnterWorktreeInput / EnterWorktreeOutput | 未エクスポート |
ExitWorktreeInput / ExitWorktreeOutput | 未エクスポート |
TodoWriteInput / TodoWriteOutput | 未エクスポート |
ListMcpResourcesInput / ListMcpResourcesOutput | 未エクスポート |
ReadMcpResourceInput | 未エクスポート |
McpInput / McpOutput | 未エクスポート |
ToolInputSchemas | 未エクスポート |
ToolOutputSchemas | 未エクスポート |
TypedDict または dataclass を定義してください。
Related Documentation
Hooks Reference
使い方ガイドと例については Hooks を参照してください。Event Overview
| イベント | トリガー | 制御可能な動作 |
|---|---|---|
PreToolUse | ツール呼び出しの前 | ブロック / 許可 / 入力の変更 |
PostToolUse | ツールが成功した後 | 監査 / コンテキスト注入 / 出力の上書き |
PostToolUseFailure | ツールが失敗した後 | エラーハンドリング / ロギング |
UserPromptSubmit | ユーザープロンプトが送信される前 | コンテキスト注入 / ブロック |
SessionStart | セッション開始時 | 初期化 / コンテキスト注入 |
SessionEnd | セッション終了時 | クリーンアップ / ロギング |
Stop | AI が生成を停止するとき | 停止をブロックして強制継続 |
SubagentStart | サブエージェントが開始するとき | 観測 / ログ |
SubagentStop | サブエージェントが停止するとき | 観測 / ログ |
PreCompact | コンテキスト圧縮の前 | 観測 / ログ |
PostCompact | コンテキスト圧縮の後 | 観測 / ログ |
CwdChanged | 作業ディレクトリ変更時 | 観測 / ログ |
InstructionsLoaded | 指示ファイルがロードされたとき | 観測 / ログ |
FileChanged | ファイルが作成/変更/削除されたとき | 観測 / ログ |
PermissionRequest | パーミッションが要求されたとき | パーミッション要求の自動許可 / 拒否 |
HookEvent
登録可能な hook イベントの Union 型。
HookCallback
HookMatcher
| フィールド | 型 | 説明 |
|---|---|---|
hooks | list[HookCallback] | マッチした際に実行されるコールバックのリスト |
matcher | str | None | 任意の正規表現。tool_name でフィルタリング |
timeout | int | None | 任意のタイムアウト(秒)。デフォルト 60 |
BaseHookInput
すべての hook イベントで共通の入力フィールド。
| フィールド | 型 | 説明 |
|---|---|---|
hook_event_name | str | イベントタイプの識別子(例: "PreToolUse") |
session_id | str | 現在のセッションの一意な識別子 |
transcript_path | str | セッションのトランスクリプトファイル(JSONL 形式)へのパス |
cwd | str | セッションの現在の作業ディレクトリ |
HookJSONOutput
hook コールバックの戻り値の型。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
continue_ | bool | None | None(True と等価) | False を設定するとセッションを終了する。PreToolUse、PostToolUse、PostToolUseFailure、UserPromptSubmit、Stop、SubagentStop でのみ有効 |
stop_reason | str | None | None | セッションを停止する理由(人間可読)。continue_=False と組み合わせて使う |
decision | str | None | None | "approve" または "block"。"block" はツール実行をブロックする。Stop イベントでは "block" は停止をブロックして強制継続する |
reason | str | None | None | 判断の理由(モデルに表示される。Stop イベントの "block" 判断では、継続プロンプトとしてコンテキストに注入される) |
hook_specific_output | dict | None | None | イベント固有の出力(各イベント型を参照) |
Python SDK ではcontinue_は JSON キー"continue"に対応します(キーワード衝突回避のため)。 複数の hook が競合するdecisionを返した場合、"deny"/"block"が優先されます(最も厳しいルールが勝つ)。
PreToolUseHookInput
| フィールド | 型 | 説明 |
|---|---|---|
permission_mode | str | None | セッションの現在のパーミッションモード |
tool_name | str | 呼び出されるツールの名前 |
tool_input | Any | ツールに渡されるパラメータ |
hook_specific_output (hookSpecificOutput):
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "PreToolUse" | 必ず設定する |
permissionDecision | str | "allow" / "deny" / "ask" / "defer" |
permissionDecisionReason | str | パーミッション判断の理由 |
updatedInput | dict | 元の tool_input を置き換える変更済みのツール入力 |
additionalContext | str | モデルの次のターンに注入される追加コンテキスト |
PostToolUseHookInput
| フィールド | 型 | 説明 |
|---|---|---|
tool_name | str | 呼び出されたツールの名前 |
tool_input | Any | ツールに渡されたパラメータ |
tool_response | Any | ツール実行の結果 |
| フィールド | 場所 | 動作 |
|---|---|---|
hookSpecificOutput.updatedToolOutput | イベント固有出力 | tool_response を 上書き。モデルには上書き後の値のみが見える |
hookSpecificOutput.additionalContext | イベント固有出力 | 元の結果を変更せずに補足コンテキストを 追加 |
decision: "block" + reason | トップレベル出力 | エージェントがツール結果をさらに処理することを防ぐ |
hook_specific_output (hookSpecificOutput):
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "PostToolUse" | 必ず設定する |
updatedToolOutput | str | ツールのレスポンス内容を上書きする |
additionalContext | str | ツール結果と一緒に追加される追加コンテキスト |
複数の hook が updatedToolOutput を設定した場合、最後の空でない値 が勝ちます。連鎖的な変換を行う場合は、1 つのコールバック内で順次処理してください。
PostToolUseFailureHookInput
| フィールド | 型 | 説明 |
|---|---|---|
tool_name | str | 失敗したツールの名前 |
tool_input | Any | ツールに渡されたパラメータ |
error | str | エラーメッセージ |
is_interrupt | bool | None | 中断 / アボートによるものかどうか |
UserPromptSubmitHookInput
| フィールド | 型 | 説明 |
|---|---|---|
prompt | str | ユーザーが入力したテキスト |
hook_specific_output (hookSpecificOutput):
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "UserPromptSubmit" | 必ず設定する |
additionalContext | str | ユーザープロンプトに追加されるコンテキスト |
SessionStartHookInput
| フィールド | 型 | 説明 |
|---|---|---|
source | str | セッション開始の理由: "startup" / "resume" / "clear" / "compact" |
hook_specific_output (hookSpecificOutput):
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "SessionStart" | 必ず設定する |
additionalContext | str | セッション開始時に注入されるコンテキスト |
SessionEndHookInput
| フィールド | 型 | 説明 |
|---|---|---|
reason | str | セッション終了の理由: "clear" / "resume" / "logout" / "prompt_input_exit" / "other" / "bypass_permissions_disabled" |
StopHookInput
| フィールド | 型 | 説明 |
|---|---|---|
stop_hook_active | bool | 現在 Stop hook が停止をブロックしているかどうか |
{"decision": "block", "reason": "..."} を返すと、AI の停止をブロックして強制継続させます。reason は継続プロンプトとしてモデルのコンテキストに注入されます。
SubagentStartHookInput
| フィールド | 型 | 説明 |
|---|---|---|
agent_id | str | サブエージェントインスタンスの一意な識別子 |
agent_type | str | サブエージェントの種別 / 役割 |
SubagentStopHookInput
| フィールド | 型 | 説明 |
|---|---|---|
stop_hook_active | bool | 現在 Stop hook が停止をブロックしているかどうか |
PreCompactHookInput
| フィールド | 型 | 説明 |
|---|---|---|
trigger | str | トリガー理由: "manual" / "auto" |
custom_instructions | str | None | 圧縮サマリーに対するカスタム指示 |
PostCompactHookInput
| フィールド | 型 | 説明 |
|---|---|---|
trigger | str | トリガー理由: "manual" / "auto" |
compact_summary | str | コンテキスト圧縮後に生成されたサマリー |
CwdChangedHookInput
| フィールド | 型 | 説明 |
|---|---|---|
old_cwd | str | 変更前の作業ディレクトリ |
new_cwd | str | 変更後の作業ディレクトリ |
InstructionsLoadedHookInput
| フィールド | 型 | 説明 |
|---|---|---|
load_reason | str | ロード理由: "nested_traversal" / "path_glob_match" |
FileChangedHookInput
| フィールド | 型 | 説明 |
|---|---|---|
file_path | str | 変更されたファイルのパス |
event | str | ファイルシステムイベント: "change" / "add" / "unlink" |
PermissionRequestHookInput
| フィールド | 型 | 説明 |
|---|---|---|
tool_name | str | パーミッションを要求しているツール |
tool_input | Any | ツール入力パラメータ |
permission_suggestions | list | None | 推奨されるパーミッションルール |
hook_specific_output (hookSpecificOutput):
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "PermissionRequest" | 必ず設定する |
decision | dict | パーミッション判断(下記参照) |
decision は次のいずれかです:
- 承認:
{"behavior": "allow", "updatedInput": {...}, "updatedPermissions": [...]} - 拒否:
{"behavior": "deny", "message": "..."}
Message Types
AssistantMessage
AI の完全な応答で、ターンごとに 1 回配信されます。content は TextBlock と ToolUseBlock のリストです。
ResultMessage
セッション全体の終了時に送られる最終メッセージです。
SystemMessage
セッションのシステムメッセージです。subtype == "init" の場合、data に初期化情報(session_id、model、tools など)が含まれます。
StreamEvent
include_partial_messages=True が必要です。トークン単位でストリーミングされます。
event["type"] の値:
event["type"] | 説明 |
|---|---|
message_start | メッセージ開始 |
content_block_start | ブロック開始(text / tool_use / thinking) |
content_block_delta | 増分: text_delta / input_json_delta / thinking_delta |
content_block_stop | ブロック終了 |
message_delta | メッセージレベルの状態変化(例: stop_reason) |
message_stop | 完全なターンの終了 |
Content Blocks
AssistantMessage.content の要素: