メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.qoder.com/llms.txt

Use this file to discover all available pages before exploring further.

Functions

query()

SDK のメインエントリ関数です。async generator を作成し、メッセージの到着順に SDKMessage をストリーム出力します。
function query(params: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query

パラメータ

パラメータ説明
promptstring | AsyncIterable<SDKUserMessage>シングルターンは文字列、マルチターンは非同期イテラブルオブジェクト
optionsOptionsオプションのセッション設定

戻り値

Query を返します。これは AsyncGenerator<SDKMessage, void> であり、for await で消費します。

Types

Options

query() の設定オブジェクトです。
フィールドデフォルト値説明
abortControllerAbortControllernew AbortController()セッションをキャンセルするコントローラー
additionalDirectoriesstring[][]AI がアクセス可能な追加ディレクトリ
agentstringundefinedメインセッションで使用する Agent 名。Agents Reference を参照
agentsRecord<string, AgentDefinition>undefinedプログラムで定義するサブエージェント。Agents Reference を参照
allowDangerouslySkipPermissionsbooleanfalse権限チェックのスキップを許可。permissionMode: 'bypassPermissions' と併用
allowedToolsstring[][]ツールホワイトリスト。事前承認で通過。組み込みツール名は Tools Reference を参照
authAuthOptionsundefined認証設定。query() で必須
canUseToolCanUseToolundefinedカスタムツール権限コールバック
continuebooleanfalse最後のセッションを継続
cwdstringprocess.cwd()作業ディレクトリ
disallowedToolsstring[][]ツールブラックリスト。allowedTools および permissionMode より優先。組み込みツール名は Tools Reference を参照
enableFileCheckpointingbooleanfalseファイルチェックポイントの有効化。rewindFiles() と併用。Checkpoint を参照
envRecord<string, string | undefined>process.envCLI プロセスに渡す環境変数
executable'bun' | 'deno' | 'node'自動検出JavaScript ランタイム
executableArgsstring[][]ランタイムに渡す引数
experimentalCloudAgentCloudAgentOptionsundefinedQoder Cloud Agent ランタイム(experimental)に切り替え。Cloud Agent を参照
extraArgsRecord<string, string | null>{}CLI に渡す追加引数
fallbackModelstringundefinedメインモデル失敗時の代替モデル
forkSessionbooleanfalseresume と併用時に新しいセッション ID にフォーク
hooksPartial<Record<HookEvent, HookCallbackMatcher[]>>{}ライフサイクルフック。Hooks を参照
includeHookEventsbooleanfalseメッセージストリームに hook ライフサイクルイベントを含める
includePartialMessagesbooleanfalsestream_event ストリームフラグメントを含める。ストリーム出力 を参照
maxTurnsnumberundefined最大対話ターン数(ツール呼び出しのラウンドトリップ数)
mcpServersRecord<string, McpServerConfig>{}MCP サーバー設定。MCP を参照
modelstringCLI デフォルト使用モデル。選択肢: 'auto' / 'ultimate' / 'performance' / 'efficient' / 'lite'
pathToQoderCLIExecutablestringバンドル済みバイナリを自動解決qodercli 実行ファイルパス
permissionModePermissionMode'default'セッション権限モード
permissionPromptToolNamestringundefined権限プロンプト用の MCP ツール名。canUseTool と排他
planModeInstructionsstringundefinedpermissionMode: 'plan' 時に計画モードのワークフロー本文を上書き
pluginsSdkPluginConfig[][]ローカルプラグインの読み込み。Plugins を参照
promptSuggestionsbooleanfalse各ターンの result 後に prompt_suggestion メッセージを発行
resolveModelModelPolicyProviderundefined動的モデル選択コールバック。渡した時点で動的コールバックモードに切り替わる。Model Policy を参照
resolveModelTimeoutMsnumber500コールバックタイムアウト(ミリ秒)。resolveModel を渡したときのみ有効
resumestringundefined復元するセッション ID
resumeSessionAtstringundefined指定メッセージ UUID から復元
sandboxSandboxSettingsundefinedサンドボックス設定
sessionIdstring自動生成セッション UUID の指定
settingsstring | Settingsundefinedインライン settings オブジェクトまたは settings ファイルパス
settingSourcesSettingSource[]CLI デフォルトロードする filesystem settings。[] で user/project/local をスキップ
skillsstring[] | 'all'undefined有効にする Skill。'all' で全て有効化。Skills を参照
spawnQoderCLIProcess(options: SpawnOptions) => SpawnedProcessundefinedカスタムプロセス spawn 関数
strictMcpConfigbooleanfalse厳密な MCP 検証
systemPromptstring | { type: 'preset'; preset: 'qodercli'; append?: string }undefinedシステムプロンプト。文字列で上書き、preset 形式では qodercli プリセットの後に append
toolConfigToolConfigundefined組み込みツール動作設定。Tools を参照
toolsstring[] | { type: 'preset'; preset: 'qodercli' }undefinedツール集合。文字列配列で利用可能ツールを制限。空配列で全ツール無効化。組み込みツール名は Tools Reference を参照

AuthOptions

type AuthOptions =
  | { type: 'accessToken'; accessToken: string | { envVar: string } }
  | { type: 'qodercli' };
形式説明
{ type: 'accessToken'; accessToken: string }PAT を直接渡す
{ type: 'accessToken'; accessToken: { envVar } }指定環境変数から PAT を読み取り。デフォルト QODER_PERSONAL_ACCESS_TOKEN
{ type: 'qodercli' }ローカルの qodercli login 状態を再利用
便利なコンストラクター:accessToken(token) / accessTokenFromEnv(envVar?) / qodercliAuth()SDK 認証 を参照。

options.agents

型: Record<string, AgentDefinition> 現在の query() セッションで利用できるカスタム Agent を登録します。オブジェクトの key が Agent 名、value がその Agent 定義です。
Agent ツールが必要です: カスタムサブエージェントは、メインセッションから組み込み Agent ツール経由で委任されます。Qoder は Agent ツールを通じてサブエージェントを起動するため、allowedToolsAgent を含める必要があります。
const q = query({
  prompt: 'Use the reviewer agent to inspect recent changes.',
  options: {
    allowedTools: ['Agent'],
    agents: {
      reviewer: {
        description: 'Reviews code quality and reports actionable findings.',
        prompt: 'Review the requested code and report concrete issues.',
        tools: ['Read', 'Grep', 'Glob'],
      },
    },
  },
});
登録後、モデルは組み込み Agent ツールを通じてこれらのサブエージェントを呼び出せます。メインセッションがタスクを委任するには、ツール集合に Agent が含まれている必要があります。allowedTools: ['Agent'] は必須の事前承認指定です。options.tools でメインセッションの利用可能ツールを絞る場合も、Agent を含めてください。

options.agent

型: string メインセッションをどの Agent 身分で実行するかを指定します。値には options.agents に登録した名前、または現在の CLI が検出した組み込み / プラグイン Agent 名を指定できます。
const q = query({
  prompt: 'Plan the implementation.',
  options: {
    agents: {
      planner: {
        description: 'Plans work before implementation.',
        prompt: 'Break work into steps, risks, and validation checks.',
        tools: ['Read', 'Grep', 'Glob'],
      },
    },
    agent: 'planner',
  },
});
設定すると、メインセッションはその Agent の promptmodel、ツール制限を使用します。省略時はデフォルトのメインセッション動作になります。

AgentDefinition

カスタム Agent の定義です。以下のフィールドは、現行 SDK でカバーされ、機能テストで検証されている安定機能です。
type AgentDefinition = {
  description: string;
  prompt: string;
  tools?: string[];
  disallowedTools?: string[];
  model?: string;
  mcpServers?: AgentMcpServerSpec[];
  skills?: string[];
  initialPrompt?: string;
  maxTurns?: number;
  effort?: EffortLevel;
  permissionMode?: PermissionMode;
};
フィールド必須説明
descriptionstringはいAgent の用途説明。モデルはこれを見ていつ呼び出すかを判断します
promptstringはいAgent のシステムプロンプト
toolsstring[]いいえAgent が使用できるツールのホワイトリスト
disallowedToolsstring[]いいえAgent のツール集合から除外するツール
modelstringいいえモデル上書き。'inherit' はメインセッションのモデルを継承します
mcpServersAgentMcpServerSpec[]いいえAgent が使用できる MCP server 仕様
skillsstring[]いいえAgent コンテキストへプリロードする skill 名
initialPromptstringいいえこの Agent がメインセッション Agent として使われるときに自動送信される最初のユーザー入力
maxTurnsnumberいいえAgent の最大 API ターン数
effortEffortLevelいいえ推論努力レベル
permissionModePermissionModeいいえこの Agent 内でのツール実行の権限モード

description

Agent がどのようなタスクに適しているかを説明します。モデルがこの Agent を選ぶかどうかに影響します。
description: 'Runs project tests, analyzes failing output, and suggests fixes.'
トリガーとなるシナリオを明確に書くことを推奨します。Helpful assistant のような広すぎる説明は避けてください。

prompt

Agent のシステムプロンプトです。役割、制約、出力形式を定義します。
prompt: `You are a security reviewer.
Check for authentication bypass, authorization bugs, injection risks, and secret leaks.
Return findings sorted by severity.`

tools

Agent が使用できるツールのホワイトリストです。設定すると、Agent は列挙されたツールだけを使用できます。
tools: ['Read', 'Grep', 'Glob']
tools を省略すると、サブエージェントのデフォルトツール表が使われます。サブエージェントのツール表は、メインセッションの allowedTools による絞り込みを継承しません。

disallowedTools

Agent のツール集合から指定ツールを除外します。
disallowedTools: ['Bash', 'Write']
disallowedTools を省略しても、サブエージェントはメインセッションの disallowedTools による絞り込みを継承しません。最終的なツール集合を明確に把握している場合を除き、通常は toolsdisallowedTools を同時に設定しないでください。

model

Agent に使用するモデルを指定します。省略時はセッションのデフォルトモデルを使います。対応するモデル階層は次の通りです。
階層説明適した用途Credit 消費
autoスマートルーティング能力とコストのバランスを取り、最適なモデルを自動選択大半の日常開発作業。デフォルト推奨~1.0x
ultimateUltimateエキスパート級の深い推論と思考能力複雑なシステム設計、高難度の問題分析~1.6x
performancePerformance高度な推論能力と高品質な出力中核機能実装、アーキテクチャ設計、リファクタリング~1.1x
efficientEfficient標準推論能力と高いコスト効率基本的なコード生成、単体テスト、日常 Q&A~0.3x
liteLite基本推論能力。無料利用クイック検証、単純なロジック、短い質問0x
Agent は次の特殊形式もサポートします。
説明
inheritメインセッションのモデルを継承
完全なモデル ID現在の CLI / backend がサポートするモデル ID を直接指定

mcpServers

この Agent が利用できる MCP server を制限または追加します。
type AgentMcpServerSpec =
  | string
  | Record<string, McpServerConfig>;
文字列形式は、セッションで既に設定されている MCP server 名を参照します。オブジェクト形式は、その Agent 専用の MCP server を設定します。MCP server 設定構造は SDK References - McpServerConfig を参照してください。

skills

Agent コンテキストにプリロードする skill 名の一覧です。通常の skill 名とプラグイン修飾名の両方をサポートします。
skills: ['review', 'sdk-test-plugin:sdk-echo']
セッションレベルの skill 動作は Skills を参照してください。

initialPrompt

この Agent が options.agent によってメインセッション Agent になったとき、最初のユーザー入力として自動送信されます。
initialPrompt: 'Start by scanning authentication and session management code.'
このフィールドはメインセッション Agent にのみ有効です。Agent ツール経由でサブエージェントとして呼ばれる場合は無視されます。

maxTurns

Agent の最大 API ターン数を制限します。コスト、実行時間、ループリスクを制御するのに適しています。
maxTurns: 6

effort

type EffortLevel = 'low' | 'medium' | 'high' | 'max';
Agent の推論努力レベルを制御します。より高い effort は、複雑なレビュー、アーキテクチャ分析、高リスク変更に適していますが、レイテンシと token 消費が増えます。

permissionMode

この Agent 内部のツール実行に対する権限モードを制御します。セッションレベルの permissionMode と同じ意味体系を使いますが、作用範囲はこの Agent に限定されます。セッションレベルの権限チェーン、allowedTools / disallowedTools / canUseTool の優先順位と例は 権限制御 を参照してください。
type PermissionMode =
  | 'default'
  | 'acceptEdits'
  | 'bypassPermissions'
  | 'yolo'
  | 'plan'
  | 'dontAsk'
  | 'auto';
意味適した用途
'default'標準権限動作。ツール呼び出しはツール集合、allow / deny ルール、ランタイム承認、CLI デフォルトポリシーを通ります大半の対話型サブエージェント
'acceptEdits'ファイル編集系操作を自動承認します。その他の機密操作は通常の権限フローに従いますワークスペースファイルの変更を許可したサブエージェント
'bypassPermissions'権限チェックをスキップします。高リスクモードで、通常は信頼済み自動化やテスト環境に限定します制御された CI、一時検証、一回限りの自動化
'yolo''bypassPermissions' の互換エイリアス。同様に権限チェックをスキップします旧設定との互換。新規コードでの優先使用は非推奨
'plan'計画モード。まず実行計画を出す用途に適し、デフォルトでは実変更を行いません計画、設計、レビュー、サブエージェントにファイルを変更させたくない場合
'dontAsk'対話確認を行いません。事前承認されていない、またはルールで許可されていない操作は拒否されます非対話環境、または確認ではなく失敗させたいワークフロー
'auto'ランタイム能力が allow / deny を自動判断します。安全なワークスペース内ファイル編集は自動許可される場合があります確認の中断を減らしつつランタイム判断を残したい場合
権限の意味は 権限制御 を参照してください。

AgentInfo

q.supportedAgents() が返す Agent の概要です。
type AgentInfo = {
  name: string;
  description: string;
  model?: string;
};
フィールド説明
namestringAgent 名
descriptionstringAgent の用途説明
modelstring | undefinedAgent のモデル上書き。未設定または model: 'inherit' の場合は通常空です
const q = query({
  prompt: 'List agents.',
  options: {
    agents: {
      reviewer: {
        description: 'Reviews code quality.',
        prompt: 'Review code and report findings.',
      },
    },
  },
});

const agents = await q.supportedAgents();
返却リストには options.agents で登録した Agent が含まれるほか、現在の CLI が検出した組み込み、プロジェクト、ユーザー、プラグイン Agent が含まれる場合があります。実際に利用できる項目は qodercli のバージョンと現在の設定に依存します。

コンテキストと呼び出し境界

  • サブエージェントは独立したコンテキストを使用し、親セッションの完全な履歴を受け取りません。
  • 親セッションからサブエージェントへ渡される主な情報は、Agent ツール呼び出し時に渡すタスク prompt です。
  • サブエージェントの中間ツール結果は親セッションに直接入りません。親セッションが受け取るのはサブエージェントの最終応答です。
  • サブエージェントはさらに自分のサブエージェントを生成できないため、サブエージェントの toolsAgent を入れないでください。
  • initialPromptoptions.agent で指定したメインセッション Agent にのみ有効です。

Model Policy

query() の動的モデル選択能力。二つのモードがあります:固定モデルモード(resolveModel を渡さず、options.model またはバックエンドのデフォルトを使用)と動的コールバックモード(resolveModel を渡し、LLM 呼び出しの都度コールバックがモデルを決定)。詳細な概念・トリガー・エラー処理は Model Policy を参照。

options.resolveModel

型: ModelPolicyProvider 動的コールバックモードのエントリポイント。渡した瞬間にこのモードに切り替わり、SDK は LLM リクエスト前に毎回コールバックを呼んでモデルを取得します。コールバックが返す model がそのリクエストの最終モデルであり、自動フォールバックはありません

options.resolveModelTimeoutMs

型: number、デフォルト 500 コールバックのタイムアウト(ミリ秒)。タイムアウトすると ModelPolicyTimeoutError がスローされ、クエリは失敗します(フォールバックなし)。resolveModel を渡したときのみ有効。

ModelPolicyProvider

コールバック関数のシグネチャ。同期・非同期どちらでも構いません。
type ModelPolicyProvider = (
  context: ModelPolicyContext,
) => ModelPolicyResult | Promise<ModelPolicyResult>;
発火シナリオは QoderModelPurpose で区別されます:
シナリオpurpose説明
メイン会話'main'各ターン / ツール間で再呼び出され、1 セッションで複数回発火する可能性あり
サブエージェント'subagent'サブエージェントは同じプロバイダを共有
WebFetch ツール'web_fetch'WebFetch がコンテンツ取得後に二次 LLM 呼び出しで要約
ImageGen ツール'image_gen'画像生成モデル選択用
コンテキスト圧縮'compact'圧縮開始前にコールバックへ圧縮用モデルを問い合わせ
BYOK任意modelCustomModel オブジェクトを渡してサードパーティ LLM 経路へ
動作のポイント:
  • 同じセッション内で複数回発火します(各ターン / ツール / サブタスク前に再度問い合わせ)。
  • コールバックが返す model がそのリクエストの最終モデルであり、SDK は再検証しません。
  • 例外スローや空 model はクエリを直接失敗させます。詳細は Model Policy — エラー処理 を参照。

ModelPolicyContext

コールバックが毎回受け取るコンテキスト。
interface ModelPolicyContext {
  purpose: QoderModelPurpose;
  sessionId: string;
  availableModels: ModelInfo[];
}
フィールド必須説明
purposeQoderModelPurposeはい当該 LLM 呼び出しの用途
sessionIdstringはい現在のセッション ID。同じセッション内の複数回コールバックで同じ値を受け取るため、キャッシュ / テレメトリキーとして使える
availableModelsModelInfo[]はい現在のアカウントで利用可能なモデル一覧(CLI が get_model_policy リクエストごとに同梱)

QoderModelPurpose

type QoderModelPurpose =
  | 'main'
  | 'subagent'
  | 'web_fetch'
  | 'image_gen'
  | 'compact';
発火シナリオ
'main'メイン会話の LLM 呼び出し
'subagent'サブエージェント呼び出し
'web_fetch'WebFetch ツールが起こす二次 LLM 呼び出し
'image_gen'ImageGen ツールが起こす画像生成呼び出し
'compact'コンテキスト圧縮 / 要約

ModelPolicyResult

コールバックの戻り値。
interface ModelPolicyResult {
  model: string | (CustomModel & { model: string });
  parameters?: Record<string, unknown>;
}
フィールド必須説明
modelstring | (CustomModel & { model: string })はい文字列: モデル識別子 / オブジェクト: BYOK 認証情報 + モデル識別子
parametersRecord<string, unknown>いいえモデルパラメータ上書き(temperature / max_tokens など)
model の形式:
  • 文字列 — バックエンドが対応する任意のモデル ID(auto / performance / glm51 など)。有効値は q.getAvailableModels() が実時間で返します。空文字不可で、空だとクエリが失敗します。
  • CustomModel オブジェクト(BYOK) — SDK はオブジェクトの model フィールドを抽出してこの呼び出しのモデル識別子として扱い、それ以外のフィールドは認証情報として CLI に転送し、サードパーティ LLM へルーティングします。

CustomModel

BYOK 認証情報。resolveModel コールバック内で model フィールドにこのオブジェクトを直接設定すると、その LLM リクエストはサードパーティプロバイダへルーティングされます。
interface CustomModel {
  provider: string;
  model: string;
  api_key: string;
  style?: string;
}
フィールド必須説明
providerstringはいプロバイダ識別子。BYOKProviderInfo.key と一致する必要あり
modelstringはいモデル識別子。SDK がこの呼び出しのモデル ID として抽出
api_keystringはいユーザーが提供する API Key
stylestringいいえ上流プロトコル形式。"openai" / "anthropic" など。デフォルト "openai"
注意点:
  • provider はカタログの key と一致しなければバックエンド認証に失敗します。
  • api_key が誤っていると認証失敗としてクエリが直接失敗します(動的コールバックモードはフォールバックしません)。
  • BYOK 呼び出しはプラットフォーム上で total_cost_usd が 0 として計上され、トークン使用量は実際の値で報告され、プロバイダ側で課金されます。

BYOK カタログ型

q.listByokProviders() が返す provider/model カタログ。
interface SDKControlGetByokConfigResponse {
  providers: BYOKProviderInfo[];
}

interface BYOKProviderInfo {
  key: string;
  display_name: string;
  api_key_url: string;
  types: BYOKModelTypeInfo[];
}

interface BYOKModelTypeInfo {
  key?: string;
  display_name: string;
  models: BYOKModelInfo[];
}

interface BYOKModelInfo {
  key: string;
  display_name: string;
  is_vl: boolean;
  is_reasoning: boolean;
  format: string;
  max_input_tokens: number;
}

BYOKProviderInfo

フィールド説明
keystringプロバイダ識別子。BYOK 時は CustomModel.provider に設定
display_namestring表示名
api_key_urlstringユーザーに API Key の取得先を案内する URL
typesBYOKModelTypeInfo[]このプロバイダ配下のモデルグループ

BYOKModelTypeInfo

フィールド説明
keystring | undefinedグループ識別子。よく見る値:cp / tp / pg
display_namestringグループ表示名
modelsBYOKModelInfo[]グループ配下のモデル

BYOKModelInfo

フィールド説明
keystringモデル ID。CustomModel.model に設定
display_namestring表示名
is_vlbooleanビジョン / マルチモーダル入力の対応可否
is_reasoningboolean推論型モデルかどうか
formatstring上流プロトコル形式(openai など)
max_input_tokensnumber最大入力トークン数

ModelInfo

q.getAvailableModels() が返す利用可能モデルのサマリ。ModelPolicyContext.availableModels の要素型としても使われます。
interface ModelInfo {
  value: string;
  displayName: string;
  isEnabled?: boolean;
}
フィールド説明
valuestringモデル識別子。ModelPolicyResult.modelq.setModel() の引数に使用可
displayNamestring表示名
isEnabledboolean | undefined現時点で利用可能か。undefined は利用可能扱い

ModelPolicyTimeoutError

class ModelPolicyTimeoutError extends Error {}
resolveModel コールバックが options.resolveModelTimeoutMs を超えても返さないときに SDK がスローします。クエリは直接失敗し、フォールバックはしません。

q.setModel()

setModel(model?: string): Promise<void>;
固定モデルモードで実行中にモデルを切り替えます。次の LLM 呼び出しから有効。固定モデルモードでのみ有効で、動的コールバックモードでは呼んでもコールバック結果を上書きしません。有効なモデル ID は ModelInfo.value を参照。

q.getAvailableModels()

getAvailableModels(): Promise<ModelInfo[]>;
現在のアカウントで利用可能なモデル一覧をリアルタイムに取得。常に最新結果を返し、キャッシュしません;一時的に取得不能なときは空配列を返し(例外はスローしません)。動的コールバックモードでは ModelPolicyContext.availableModels がすでに同等のリストを実時間で運ぶため、明示的に呼ぶ必要はありません。

q.listByokProviders()

listByokProviders(): Promise<BYOKProviderInfo[] | null>;
現在のアカウントで利用可能な BYOK provider/model カタログを配列で返します:
  • null を返す場合:CLI がこの API をサポートしていない(グレースフルフォールバック、例外なし)。
  • 配列を返す場合(空の場合あり):現在のアカウントで利用可能な provider リスト(空配列はアカウントが BYOK 未開通)。
フィールドの意味は BYOK カタログ型 を参照。

CanUseTool

ホストがカスタムするツール権限承認コールバックです。
type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  options: CanUseToolOptions,
) => Promise<PermissionResult>;

CanUseToolOptions

type CanUseToolOptions = {
  signal: AbortSignal;
  suggestions?: PermissionUpdate[];
  blockedPath?: string;
  decisionReason?: string;
  decisionReasonType?: PermissionDecisionReasonType;
  classifierApprovable?: boolean;
  title?: string;
  displayName?: string;
  description?: string;
  toolUseID: string;
  agentID?: string;
  exitPlanMode?: ExitPlanModeApprovalDetails;
};
options フィールド説明
signalAbortSignalキャンセル時に abort される
suggestionsPermissionUpdate[]CLI が提案する権限更新
blockedPathstring承認をトリガーしたファイルパス(ファイル関連シーンのみ)
decisionReasonstringCLI が提供する人間が読める承認理由
decisionReasonTypePermissionDecisionReasonType権限理由の分類
classifierApprovableboolean現在の呼び出しがランタイム分類器で自動承認可能かどうか
title / displayName / descriptionstringランタイムで生成された人間が読める承認テキスト
toolUseIDstring今回のツール呼び出し ID
agentIDstring呼び出しを発行したサブエージェント ID
exitPlanModeExitPlanModeApprovalDetails計画モードを終了するときの承認詳細
完全な使用法と例は 権限制御 を参照してください。

PermissionMode

type PermissionMode =
  | 'default'
  | 'acceptEdits'
  | 'bypassPermissions'
  | 'yolo'
  | 'plan'
  | 'dontAsk'
  | 'auto';
意味適した用途
'default'標準権限動作。ツール呼び出しは tools、allow / deny ルール、動的承認、ランタイムポリシーで処理されます大半の対話型セッション
'acceptEdits'ファイル編集系操作を自動承認します。その他の機密操作は通常の権限フローに従いますワークスペースファイルの変更を許可したセッション
'bypassPermissions'権限チェックをスキップします。allowDangerouslySkipPermissions: true も必要です信頼済み自動化またはテスト環境
'yolo''bypassPermissions' の互換エイリアス。allowDangerouslySkipPermissions: true も必要です旧設定との互換。新規コードでの優先使用は非推奨
'plan'計画モード。まず実行計画を出す用途に適し、デフォルトでは実変更を行いません計画、設計、レビュー
'dontAsk'対話確認を行いません。事前承認されていない、またはルールで許可されていない操作は拒否されます非対話環境、または確認ではなく失敗させたいワークフロー
'auto'ランタイム能力が allow / deny を自動判断します。安全なワークスペース内ファイル編集は自動許可される場合があります確認の中断を減らしつつランタイム判断を残したい場合
詳細は 権限制御 を参照してください。

PermissionResult

CanUseTool の戻り値です。
type PermissionResult =
  | {
      behavior: 'allow';
      updatedInput?: Record<string, unknown>;
      updatedPermissions?: PermissionUpdate[];
      toolUseID?: string;
      decisionClassification?: PermissionDecisionClassification;
    }
  | {
      behavior: 'deny';
      message: string;
      interrupt?: boolean;
      toolUseID?: string;
      decisionClassification?: PermissionDecisionClassification;
    };
allow.updatedInput を変更すると、ツールが実際に受け取る入力パラメータが置き換わります。deny.interrupt: true は拒否と同時にエージェントを中断します。

McpServerConfig

MCP サーバー設定。Options.mcpServers に渡します。
type McpServerConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfigWithInstance;

McpStdioServerConfig

type McpStdioServerConfig = {
  type?: 'stdio';
  command: string;
  args?: string[];
  env?: Record<string, string>;
};

McpSSEServerConfig

type McpSSEServerConfig = {
  type: 'sse';
  url: string;
  headers?: Record<string, string>;
};

McpHttpServerConfig

type McpHttpServerConfig = {
  type: 'http';
  url: string;
  headers?: Record<string, string>;
};

McpSdkServerConfigWithInstance

type McpSdkServerConfigWithInstance = {
  type: 'sdk';
  name: string;
  instance: McpServer;
};
createSdkMcpServer() ファクトリから返されます。MCP - In-Process Server を参照。

SdkPluginConfig

ローカルプラグインの読み込みです。
type SdkPluginConfig = {
  type: 'local';
  path: string;
};
フィールド説明
type'local'現在は local のみサポート
pathstringプラグインディレクトリの絶対パスまたは相対パス

CloudAgentOptions

Options.experimentalCloudAgent の型です。Cloud ランタイムの agent / session 参照を構成します。詳しい使い方は Cloud Agent を参照してください。
type CloudAgentOptions =
  | {
      session: { id: string };
      agent?: never;
      stream?: CloudAgentStreamOptions;
    }
  | {
      agent: CloudAgentReference;
      session: { create: CloudSessionCreateParams };
      stream?: CloudAgentStreamOptions;
    };

type CloudAgentReference =
  | { id: string; create?: never }
  | { create: AgentCreateParams; id?: never };

type CloudAgentStreamOptions = {
  afterId?: string;
  deltaFlushIntervalMs?: number;
};
フィールド説明
agent.idstring既存の Cloud Agent を再利用。agent.create と相互排他
agent.createAgentCreateParams新しい Cloud Agent を作成。agent.id と相互排他
session.idstring既存の Cloud session を再利用。agent を併せて渡してはならない
session.createCloudSessionCreateParams新しい Cloud session を作成。environment_id は必須
stream.afterIdstringSSE replay の起点となるイベント ID
stream.deltaFlushIntervalMsnumberデルタ内容のマージ / フラッシュ間隔(ミリ秒)

AgentCreateParams

新しい Cloud Agent を作成するためのリクエストボディです。Qoder Cloud OpenAPI の agent create フィールドに対応します。
type AgentCreateParams = {
  model: string;
  name: string;
  description?: string | null;
  system?: string | null;
  tools?: Array<{
    type: 'agent_toolset_20260401';
    enabled_tools?: Array<
      | 'bash'
      | 'write'
      | 'glob'
      | 'web_fetch'
      | 'read'
      | 'edit'
      | 'grep'
      | 'web_search'
    >;
  }>;
  mcp_servers?: Array<{ name: string; type: 'url'; url: string }>;
  skills?: Array<{ skill_id: string; type: 'custom' }>;
  metadata?: Record<string, string>;
};
フィールド説明
modelstringモデル識別子。使用可能な値:'auto' / 'ultimate' / 'performance' / 'efficient' / 'lite'
namestring人間可読の agent 名
descriptionstring | null説明
systemstring | nullsystem prompt
tools上記参照ビルトインツールセット。enabled_tools で許可リストを指定
mcp_servers上記参照URL 形式の MCP server 接続
skills上記参照ユーザー定義のカスタム Skill
metadataRecord<string, string>任意のキー / 値メタデータ

CloudSessionCreateParams

新しい Cloud session を作成するためのリクエストボディです。
type CloudSessionCreateParams = {
  environment_id: string;
  resources?: Array<{ type: 'file'; file_id: string; path?: string }>;
  title?: string | null;
  vault_ids?: Array<string>;
  memory_store_ids?: Array<string>;
};
フィールド説明
environment_idstringコンテナ環境 ID。必須
resources上記参照session コンテナにマウントするリソース(現状は file のみ)
titlestring | nullセッションタイトル
vault_idsstring[]認証情報の vault ID
memory_store_idsstring[]memory store ID

SandboxSettings

サンドボックス動作設定です。
type SandboxSettings = {
  enabled?: boolean;
  autoAllowBashIfSandboxed?: boolean;
  excludedCommands?: string[];
  allowUnsandboxedCommands?: boolean;
  network?: SandboxNetworkConfig;
  filesystem?: SandboxFilesystemConfig;
  ignoreViolations?: { file?: string[]; network?: string[] };
  enableWeakerNestedSandbox?: boolean;
};
フィールドデフォルト説明
enabledbooleanfalseサンドボックスの有効化
autoAllowBashIfSandboxedbooleantrueサンドボックス有効時に bash を自動通過
excludedCommandsstring[][]サンドボックスを静的にバイパスするコマンド(例: ['docker']
allowUnsandboxedCommandsbooleantrueモデルがサンドボックス外でコマンドを実行することを許可(canUseTool に落ちる)
networkSandboxNetworkConfigundefinedネットワーク制限
filesystemSandboxFilesystemConfigundefinedファイルシステム制限
ignoreViolations{ file?, network? }undefinedパターンで無視する違反

SandboxNetworkConfig

type SandboxNetworkConfig = {
  allowLocalBinding?: boolean;
  allowUnixSockets?: string[];
  allowAllUnixSockets?: boolean;
  httpProxyPort?: number;
  socksProxyPort?: number;
};

SandboxFilesystemConfig

type SandboxFilesystemConfig = {
  allowWrite?: string[];
  denyWrite?: string[];
  denyRead?: string[];
  allowRead?: string[];
  allowManagedReadPathsOnly?: boolean;
};

SettingSource

ロードする filesystem settings を制御します。
type SettingSource = 'user' | 'project' | 'local';
意味場所
'user'ユーザーレベルのグローバル settings~/.qoder/settings.json
'project'プロジェクト共有 settings(バージョン管理).qoder/settings.json
'local'プロジェクトローカル settings(gitignore).qoder/settings.local.json
省略時は CLI デフォルトで全ソースをロード。[] を渡すと完全にスキップします。

ToolConfig

組み込みツール動作設定です。
type ToolConfig = {
  askUserQuestion?: {
    previewFormat?: 'markdown' | 'html';
  };
};

組み込みツール一覧

toolsallowedToolsdisallowedToolscanUseTool、hooks matcher、Agent のツールホワイトリストでは、組み込みツールは下表のランタイムツール名を使用します。
カテゴリツール名説明
コマンド実行Bashshell コマンドを実行
ファイル操作Readファイル内容を読む
ファイル操作Edit文字列一致に基づいてファイルを編集
ファイル操作Writeファイルを作成または上書き
検索Globファイル名パターンで検索
検索Grep内容の正規表現で検索
ネットワークWebFetchURL 内容を取得して処理
ネットワークWebSearchWeb 検索
AgentAgentサブエージェントを呼び出す
対話AskUserQuestionユーザーに質問する
NotebookNotebookEditNotebook セルを編集
バックグラウンドタスクTaskOutputバックグラウンドタスクへ出力を送る
バックグラウンドタスクTaskStopバックグラウンドタスクを停止
計画 / worktreeExitPlanMode計画モードを終了
計画 / worktreeEnterWorktreegit worktree に入る
計画 / worktreeExitWorktreeworktree を終了
設定Config設定を読み書き
TodoTodoWriteTodo 項目を管理
MCP リソースListMcpResourcesMCP resources を列挙
MCP リソースReadMcpResourceMCP resource を読む
MCP 呼び出しMcp汎用 MCP ツール呼び出し
カスタム MCP ツール名の形式は次の通りです。
mcp__{serverName}__{toolName}

tool()

型安全な SDK MCP ツール定義を作成します。
function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (
    args: InferShape<Schema>,
    extra: RequestHandlerExtra<ServerRequest, ServerNotification>,
  ) => Promise<CallToolResult>,
  extras?: ToolExtras,
): SdkMcpToolDefinition<Schema>;
パラメータ必須意味現在の Qoder の挙動
namestringはい現在の MCP server 内で一意なツール識別子モデルから見える完全なツール名 mcp__{serverName}__{name} を構成します。登録時は空文字不可
descriptionstringはいモデルに見せるツール説明。いつ使うか、何をするか、何を返すかを説明しますツール一覧へそのまま渡され、モデルが正しく呼び出すかに直接影響します。登録時は空文字不可
inputSchemaSchema extends AnyZodRawShapeはいツール入力パラメータを定義する Zod raw shapeSDK はこれを使って MCP input schema を生成し、handler の argsInferShape<Schema> として推論します
handler(args, extra) => Promise<CallToolResult>はいツール呼び出し時に実行される非同期関数モデルがツールを呼ぶと SDK が実行します。戻り値は tool result としてモデルへ返されます
extrasToolExtrasいいえツール追加メタ情報。現在は annotations に使用SDK は対応する annotations を MCP server に登録します。権限設定の代替にはなりません
tool() 自体はツールを定義する factory 関数です。namedescription、重複ツール名などの登録制約は、createSdkMcpServer() がツール登録時に検証します。

AnyZodRawShape

type AnyZodRawShape = ZodRawShapeCompat;
AnyZodRawShape は Zod 3 / Zod 4 と互換です。これはフィールドオブジェクトを表し、z.object(...) ではありません。

InferShape

type InferShape<T extends AnyZodRawShape> = ShapeOutput<T>;
InferShape は Zod raw shape から handler の args 型を推論します。

SdkMcpToolDefinition

type SdkMcpToolDefinition<
  Schema extends AnyZodRawShape = AnyZodRawShape,
> = {
  name: string;
  description: string;
  inputSchema: Schema;
  annotations?: ToolAnnotations;
  handler: (
    args: InferShape<Schema>,
    extra: RequestHandlerExtra<ServerRequest, ServerNotification>,
  ) => Promise<CallToolResult>;
};

ToolExtras

type ToolExtras = {
  annotations?: ToolAnnotations;
};

ToolAnnotations

type ToolAnnotations = {
  title?: string;
  readOnlyHint?: boolean;
  destructiveHint?: boolean;
  openWorldHint?: boolean;
};
フィールド任意意味現在の Qoder の挙動
titlestringはいツールの人間向けタイトルMCP メタ情報。現在は検証済み Qoder 挙動能力としては説明していません
readOnlyHintbooleanはいツールが状態を変更しないことを示す現在観測できる効果は、読み取り専用ツールが同一 batch の tool calls 内で並行実行可能になる条件を満たせることです。権限スイッチではありません
destructiveHintbooleanはいツールが破壊的更新を行う可能性を示すリスクメタ情報。承認済みツールの実行を自動的に止めるものではありません
openWorldHintbooleanはいツールが外部の open world とやり取りするかを示す外部やり取りのメタ情報。承認済みツールの実行を自動的に止めるものではありません
これらのフィールドはメタ情報とスケジューリングヒントであり、権限スイッチではありません。実行可否は引き続き toolsallowedToolsdisallowedToolspermissionModecanUseTool、hooks によって決まります。機能ドキュメントで検証済み挙動能力として扱うのは readOnlyHintdestructiveHintopenWorldHint です。title は MCP メタ情報として型リファレンスに残しています。

createSdkMcpServer()

SDK と同一プロセスで動作する MCP server を作成します。
function createSdkMcpServer(
  options: CreateSdkMcpServerOptions,
): McpSdkServerConfigWithInstance;

CreateSdkMcpServerOptions

type CreateSdkMcpServerOptions = {
  name: string;
  version?: string;
  tools?: Array<SdkMcpToolDefinition<any>>;
};
フィールドデフォルト説明
name必須MCP server 名。mcp__{serverName}__{toolName} に入ります
version'1.0.0'server バージョン情報
toolsundefinedこの server に登録するツール一覧

戻り値

McpSdkServerConfigWithInstance を返します。これは options.mcpServers の値としてそのまま渡せます。完全な MCP server 設定は McpServerConfig を参照してください。
type McpSdkServerConfigWithInstance = {
  type: 'sdk';
  name: string;
  instance: McpServer;
};

CallToolResult

ツール handler は MCP プロトコルの CallToolResult を返します。
type CallToolResult = {
  content: McpToolResultContent[];
  isError?: boolean;
  _meta?: Record<string, unknown>;
};

McpToolResultContent

type McpToolResultContent =
  | { type: 'text'; text: string }
  | { type: 'image'; data: string; mimeType: string }
  | { type: 'audio'; data: string; mimeType: string }
  | {
      type: 'resource_link';
      uri: string;
      name?: string;
      description?: string;
      mimeType?: string;
    }
  | {
      type: 'resource';
      resource: {
        uri: string;
        mimeType?: string;
        text?: string;
        blob?: string;
      };
    };
フィールド説明
contentモデルへ返す content block 配列
isErrortrue の場合、ツールが意味的に失敗したことを示します
_metaツール結果メタデータ。MCP レスポンスとともに透過的に渡されます

組み込みツール入力出力型

SDK は型レベルで組み込みツールの入力 / 出力構造を提供します。注意: これらは TypeScript の型名です。権限設定では引き続き上記のランタイムツール名を使用します。

AgentInput / AgentOutput

type AgentInput = {
  prompt: string;
  agent?: string;
  timeout_ms?: number;
};

type AgentOutput = {
  result: string;
  agent?: string;
  error?: string;
};

BashInput / BashOutput

type BashInput = {
  command: string;
  timeout?: number;
  description?: string;
  run_in_background?: boolean;
  dangerouslyDisableSandbox?: boolean;
};

type BashOutput = {
  stdout: string;
  stderr: string;
  exitCode: number;
  interrupted?: boolean;
};

FileReadInput / FileReadOutput

ランタイムツール名は Read です。型名は FileReadInput / FileReadOutput のままです。
type FileReadInput = {
  file_path: string;
  offset?: number;
  limit?: number;
  pages?: string;
};

type FileReadOutput =
  | {
      type: 'text';
      text: string;
      file_path: string;
      totalLines?: number;
    }
  | {
      type: 'image';
      source: {
        type: 'base64';
        media_type: string;
        data: string;
      };
      file_path: string;
    }
  | {
      type: 'notebook';
      cells: Array<{
        cell_number: number;
        cell_type: 'code' | 'markdown' | 'raw';
        source: string;
        outputs?: string[];
      }>;
      file_path: string;
    }
  | {
      type: 'pdf';
      pages: Array<{
        page_number: number;
        content: string;
      }>;
      file_path: string;
      totalPages: number;
    }
  | {
      type: 'parts';
      parts: Array<
        | { type: 'text'; text: string }
        | { type: 'image'; source: { type: 'base64'; media_type: string; data: string } }
      >;
      file_path: string;
    }
  | {
      type: 'file_unchanged';
      file_path: string;
      message: string;
    };

FileEditInput / FileEditOutput

ランタイムツール名は Edit です。
type FileEditInput = {
  file_path: string;
  old_string: string;
  new_string: string;
  replace_all?: boolean;
};

type FileEditOutput = {
  success: boolean;
  file_path: string;
  diff?: string;
  error?: string;
};

FileWriteInput / FileWriteOutput

ランタイムツール名は Write です。
type FileWriteInput = {
  file_path: string;
  content: string;
};

type FileWriteOutput = {
  success: boolean;
  file_path: string;
  bytesWritten?: number;
  error?: string;
};

GlobInput / GlobOutput

type GlobInput = {
  pattern: string;
  path?: string;
};

type GlobOutput = {
  files: string[];
  totalMatches: number;
  truncated?: boolean;
};

GrepInput / GrepOutput

type GrepInput = {
  pattern: string;
  path?: string;
  glob?: string;
  type?: string;
  output_mode?: 'content' | 'files_with_matches' | 'count';
  head_limit?: number;
  offset?: number;
  context?: number;
  '-A'?: number;
  '-B'?: number;
  '-C'?: number;
  '-i'?: boolean;
  '-n'?: boolean;
  multiline?: boolean;
};

type GrepOutput = {
  results: string;
  matchCount: number;
  truncated?: boolean;
};

WebFetchInput / WebFetchOutput

type WebFetchInput = {
  url: string;
  prompt: string;
};

type WebFetchOutput = {
  content: string;
  url: string;
  statusCode?: number;
  error?: string;
  redirectUrl?: string;
};

WebSearchInput / WebSearchOutput

type WebSearchInput = {
  query: string;
  allowed_domains?: string[];
  blocked_domains?: string[];
};

type WebSearchOutput = {
  results: Array<{
    title: string;
    url: string;
    snippet: string;
  }>;
  query: string;
};

AskUserQuestionInput / AskUserQuestionOutput

type AskUserQuestionInput = {
  question: string;
  options?: string[];
  default?: string;
};

type AskUserQuestionOutput = {
  answer: string;
};

NotebookEditInput / NotebookEditOutput

type NotebookEditInput = {
  notebook_path: string;
  cell_id?: string;
  cell_type?: 'code' | 'markdown';
  new_source: string;
  edit_mode?: 'replace' | 'insert' | 'delete';
};

type NotebookEditOutput = {
  success: boolean;
  notebook_path: string;
  error?: string;
};

TaskOutputInput

type TaskOutputInput = {
  task_id: string;
  output: string;
};

TaskStopInput / TaskStopOutput

type TaskStopInput = {
  task_id: string;
  reason?: string;
};

type TaskStopOutput = {
  success: boolean;
  task_id: string;
  error?: string;
};

ExitPlanModeInput / ExitPlanModeOutput

type ExitPlanModeInput = {
  confirm?: boolean;
};

type ExitPlanModeOutput = {
  success: boolean;
  error?: string;
};

ConfigInput / ConfigOutput

type ConfigInput = {
  action: 'get' | 'set' | 'list';
  key?: string;
  value?: unknown;
  scope?: 'user' | 'project' | 'local';
};

type ConfigOutput = {
  success: boolean;
  value?: unknown;
  values?: Record<string, unknown>;
  error?: string;
};

EnterWorktreeInput / EnterWorktreeOutput

type EnterWorktreeInput = {
  name?: string;
};

type EnterWorktreeOutput = {
  worktree_path: string;
  branch_name: string;
  success: boolean;
  error?: string;
};

ExitWorktreeInput / ExitWorktreeOutput

type ExitWorktreeInput = {
  action: 'keep' | 'remove';
  discard_changes?: boolean;
};

type ExitWorktreeOutput = {
  success: boolean;
  error?: string;
  uncommitted_files?: string[];
  unmerged_commits?: string[];
};

TodoWriteInput / TodoWriteOutput

type TodoWriteInput = {
  todos: Array<{
    id?: string;
    content: string;
    status: 'pending' | 'in_progress' | 'completed';
    priority?: 'low' | 'medium' | 'high';
  }>;
};

type TodoWriteOutput = {
  success: boolean;
  todos: Array<{
    id: string;
    content: string;
    status: 'pending' | 'in_progress' | 'completed';
    priority?: 'low' | 'medium' | 'high';
  }>;
  error?: string;
};

ListMcpResourcesInput / ListMcpResourcesOutput

type ListMcpResourcesInput = {
  server_name: string;
};

type ListMcpResourcesOutput = {
  resources: Array<{
    uri: string;
    name: string;
    description?: string;
    mimeType?: string;
  }>;
  server_name: string;
};

ReadMcpResourceInput

type ReadMcpResourceInput = {
  server_name: string;
  uri: string;
};

McpInput / McpOutput

type McpInput = {
  server_name: string;
  tool_name: string;
  arguments?: Record<string, unknown>;
};

type McpOutput = {
  content: unknown;
  isError?: boolean;
};

ToolInputSchemas

type ToolInputSchemas =
  | AgentInput
  | BashInput
  | FileReadInput
  | FileEditInput
  | FileWriteInput
  | GlobInput
  | GrepInput
  | WebFetchInput
  | WebSearchInput
  | AskUserQuestionInput
  | NotebookEditInput
  | TaskOutputInput
  | TaskStopInput
  | ExitPlanModeInput
  | ConfigInput
  | EnterWorktreeInput
  | ExitWorktreeInput
  | TodoWriteInput
  | ListMcpResourcesInput
  | ReadMcpResourceInput
  | McpInput;

ToolOutputSchemas

type ToolOutputSchemas =
  | AgentOutput
  | BashOutput
  | FileReadOutput
  | FileEditOutput
  | FileWriteOutput
  | GlobOutput
  | GrepOutput
  | WebFetchOutput
  | WebSearchOutput
  | AskUserQuestionOutput
  | NotebookEditOutput
  | TaskStopOutput
  | ExitPlanModeOutput
  | ConfigOutput
  | EnterWorktreeOutput
  | ExitWorktreeOutput
  | TodoWriteOutput
  | ListMcpResourcesOutput
  | McpOutput;

Hooks リファレンス

使用ガイドとサンプルは Hooks を参照してください。

イベント概要

イベントトリガー制御可能な動作
PreToolUseツール呼び出し前インターセプト / 許可 / 入力の変更
PostToolUseツール成功後監査 / コンテキスト注入 / 出力の上書き
PostToolUseFailureツール失敗後エラーハンドリング / ロギング
UserPromptSubmitユーザープロンプト送信前コンテキスト注入 / インターセプト
SessionStartセッション開始時初期化 / コンテキスト注入
SessionEndセッション終了時クリーンアップ / ロギング
StopAI が生成を停止した時停止の防止、続行の強制
SubagentStartサブエージェント開始時監視 / ロギング
SubagentStopサブエージェント停止時監視 / ロギング
PreCompactコンテキスト圧縮前監視 / ロギング
PostCompactコンテキスト圧縮後監視 / ロギング
CwdChanged作業ディレクトリ変更時監視 / ロギング
InstructionsLoaded命令ファイルロード時監視 / ロギング
FileChangedファイルの作成/変更/削除時監視 / ロギング
PermissionRequestパーミッション要求時パーミッション要求を自動承認 / 拒否

HookEvent

登録可能な hook イベントの共用体型です。
type HookEvent =
  | 'PreToolUse'
  | 'PostToolUse'
  | 'PostToolUseFailure'
  | 'UserPromptSubmit'
  | 'SessionStart'
  | 'SessionEnd'
  | 'Stop'
  | 'SubagentStart'
  | 'SubagentStop'
  | 'PreCompact'
  | 'PostCompact'
  | 'CwdChanged'
  | 'InstructionsLoaded'
  | 'FileChanged'
  | 'PermissionRequest';

HookCallback

type HookCallback = (
  input: HookInput,
  toolUseID: string | undefined,
  options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;

HookCallbackMatcher

interface HookCallbackMatcher {
  matcher?: string;
  hooks: HookCallback[];
  timeout?: number;
}
フィールド説明
matcherstringオプションの正規表現。tool_name でフィルタリング
hooksHookCallback[]マッチ時に実行されるコールバックリスト
timeoutnumberオプション。タイムアウト(秒)、デフォルト 60

BaseHookInput

すべての hook イベントで共有される入力フィールドです。
interface BaseHookInput {
  hook_event_name: string;
  session_id: string;
  transcript_path: string;
  cwd: string;
}
フィールド説明
hook_event_namestringイベントタイプ識別子(例:"PreToolUse"
session_idstring現在のセッションの一意識別子
transcript_pathstringセッション記録ファイルパス(JSONL 形式)
cwdstringセッションの現在の作業ディレクトリ

HookJSONOutput

Hook コールバックの戻り値の型です。
interface HookJSONOutput {
  continue?: boolean;
  stopReason?: string;
  decision?: string;
  reason?: string;
  hookSpecificOutput?: object;
}
フィールドデフォルト説明
continuebooleantruefalse に設定するとセッションを終了。PreToolUsePostToolUsePostToolUseFailureUserPromptSubmitStopSubagentStop のみ有効
stopReasonstring停止理由(continue: false と併用)
decisionstring"approve" または "block""block" はツール実行を阻止。Stop イベントでは停止を防止し続行を強制
reasonstring決定理由(モデルに表示。Stop イベントの "block" では続行プロンプトとして注入)
hookSpecificOutputobjectイベント固有の出力(各イベント型を参照)
複数の hook が競合する decision 値を返した場合、"deny" / "block" が優先されます(最も厳格なルールが適用)。

PreToolUseHookInput

interface PreToolUseHookInput extends BaseHookInput {
  hook_event_name: 'PreToolUse';
  permission_mode: string | undefined;
  tool_name: string;
  tool_input: unknown;
}
フィールド説明
permission_modestring | undefined現在のセッションのパーミッションモード
tool_namestring呼び出されるツール名
tool_inputunknownツールに渡される引数
hookSpecificOutput
フィールド説明
hookEventName"PreToolUse"必須
permissionDecisionstring"allow" / "deny" / "ask" / "defer"
permissionDecisionReasonstringパーミッション決定理由
updatedInputRecord<string, unknown>変更されたツール入力。元の tool_input を置換
additionalContextstringモデルの次のターンに注入される追加コンテキスト

PostToolUseHookInput

interface PostToolUseHookInput extends BaseHookInput {
  hook_event_name: 'PostToolUse';
  tool_name: string;
  tool_input: unknown;
  tool_response: unknown;
}
フィールド説明
tool_namestring呼び出されたツール名
tool_inputunknownツールに渡された引数
tool_responseunknownツールの実行結果
出力動作:
フィールド場所動作
hookSpecificOutput.updatedToolOutputイベント固有出力tool_response上書き。モデルは上書き後の値のみ参照
hookSpecificOutput.additionalContextイベント固有出力補足コンテキストを追加。元の結果は変更しない
decision: "block" + reasonトップレベル出力エージェントがこのツール結果をさらに処理することを阻止
hookSpecificOutput
フィールド説明
hookEventName"PostToolUse"必須
updatedToolOutputstringツールレスポンスの内容を上書き
additionalContextstringツール結果に付加される追加コンテキスト
複数の hook が updatedToolOutput を設定した場合、最後の非空値が有効になります。チェーン変換が必要な場合は、単一のコールバック内で順次実行してください。

PostToolUseFailureHookInput

interface PostToolUseFailureHookInput extends BaseHookInput {
  hook_event_name: 'PostToolUseFailure';
  tool_name: string;
  tool_input: unknown;
  error: string;
  is_interrupt: boolean | undefined;
}
フィールド説明
tool_namestring失敗したツール名
tool_inputunknownツールに渡された引数
errorstringエラーメッセージ
is_interruptboolean | undefined中断/中止によるものかどうか

UserPromptSubmitHookInput

interface UserPromptSubmitHookInput extends BaseHookInput {
  hook_event_name: 'UserPromptSubmit';
  prompt: string;
}
フィールド説明
promptstringユーザー入力テキスト
hookSpecificOutput
フィールド説明
hookEventName"UserPromptSubmit"必須
additionalContextstringユーザープロンプトに追加される追加コンテキスト

SessionStartHookInput

interface SessionStartHookInput extends BaseHookInput {
  hook_event_name: 'SessionStart';
  source: string;
}
フィールド説明
sourcestringセッション開始理由:"startup" / "resume" / "clear" / "compact"
hookSpecificOutput
フィールド説明
hookEventName"SessionStart"必須
additionalContextstringセッション開始時に注入されるコンテキスト

SessionEndHookInput

interface SessionEndHookInput extends BaseHookInput {
  hook_event_name: 'SessionEnd';
  reason: string;
}
フィールド説明
reasonstringセッション終了理由:"clear" / "resume" / "logout" / "prompt_input_exit" / "other" / "bypass_permissions_disabled"

StopHookInput

interface StopHookInput extends BaseHookInput {
  hook_event_name: 'Stop';
  stop_hook_active: boolean;
}
フィールド説明
stop_hook_activebooleanStop hook が現在停止を防止しているかどうか
{ decision: 'block', reason: '...' } を返すと AI の停止を防止し続行を強制します。reason は続行プロンプトとしてモデルコンテキストに注入されます。

SubagentStartHookInput

interface SubagentStartHookInput extends BaseHookInput {
  hook_event_name: 'SubagentStart';
  agent_id: string;
  agent_type: string;
}
フィールド説明
agent_idstringサブエージェントインスタンスの一意識別子
agent_typestringサブエージェントのタイプ/ロール

SubagentStopHookInput

interface SubagentStopHookInput extends BaseHookInput {
  hook_event_name: 'SubagentStop';
  stop_hook_active: boolean;
}
フィールド説明
stop_hook_activebooleanStop hook が現在停止を防止しているかどうか

PreCompactHookInput

interface PreCompactHookInput extends BaseHookInput {
  hook_event_name: 'PreCompact';
  trigger: string;
  custom_instructions: string | null;
}
フィールド説明
triggerstringトリガー理由:"manual" / "auto"
custom_instructionsstring | null圧縮サマリーのカスタム命令

PostCompactHookInput

interface PostCompactHookInput extends BaseHookInput {
  hook_event_name: 'PostCompact';
  trigger: string;
  compact_summary: string;
}
フィールド説明
triggerstringトリガー理由:"manual" / "auto"
compact_summarystringコンテキスト圧縮後に生成されたサマリー

CwdChangedHookInput

interface CwdChangedHookInput extends BaseHookInput {
  hook_event_name: 'CwdChanged';
  old_cwd: string;
  new_cwd: string;
}
フィールド説明
old_cwdstring変更前の作業ディレクトリ
new_cwdstring変更後の作業ディレクトリ

InstructionsLoadedHookInput

interface InstructionsLoadedHookInput extends BaseHookInput {
  hook_event_name: 'InstructionsLoaded';
  load_reason: string;
}
フィールド説明
load_reasonstringロード理由:"nested_traversal" / "path_glob_match"

FileChangedHookInput

interface FileChangedHookInput extends BaseHookInput {
  hook_event_name: 'FileChanged';
  file_path: string;
  event: string;
}
フィールド説明
file_pathstring変更されたファイルのパス
eventstringファイルシステムイベント:"change" / "add" / "unlink"

PermissionRequestHookInput

interface PermissionRequestHookInput extends BaseHookInput {
  hook_event_name: 'PermissionRequest';
  tool_name: string;
  tool_input: unknown;
  permission_suggestions: PermissionUpdate[] | undefined;
}
フィールド説明
tool_namestringパーミッションを要求するツール
tool_inputunknownツール入力引数
permission_suggestionsPermissionUpdate[] | undefined提案されるパーミッションルール
hookSpecificOutput
フィールド説明
hookEventName"PermissionRequest"必須
decisionobjectパーミッション決定(下記参照)
decision は以下のいずれかです:
  • 承認: { behavior: "allow", updatedInput?: Record<string, unknown>, updatedPermissions?: PermissionUpdate[] }
  • 拒否: { behavior: "deny", message?: string }

Message Types

SDKMessage

Query からストリーム出力されるすべてのメッセージの判別ユニオンです。
type SDKMessage =
  | SDKAssistantMessage
  | SDKUserMessage
  | SDKUserMessageReplay
  | SDKResultMessage
  | SDKSystemMessage
  | SDKPartialAssistantMessage
  | SDKCompactBoundaryMessage
  | SDKStatusMessage
  | SDKMcpStatusChangeMessage
  | SDKAPIRetryMessage
  | SDKLocalCommandOutputMessage
  | SDKHookStartedMessage
  | SDKHookProgressMessage
  | SDKHookResponseMessage
  | SDKTaskStartedMessage
  | SDKTaskProgressMessage
  | SDKTaskNotificationMessage
  | SDKSessionStateChangedMessage
  | SDKSessionTitleChangedMessage
  | SDKBridgeStateMessage
  | SDKFilesPersistedEvent
  | SDKElicitationCompleteMessage
  | SDKPermissionDeniedMessage
  | SDKPromptSuggestionMessage
  | SDKCloudAgentEventMessage;
呼び出し側はまず message.type で分岐し、次に subtype でさらに細分化します(system / result 型のみ subtype を持ちます)。

SDKAssistantMessage

AI の完全な応答。ターンごとに1回到達します。
type SDKAssistantMessage = {
  type: 'assistant';
  uuid: string;
  session_id: string;
  parent_tool_use_id: string | null;
  message: {
    role: 'assistant';
    content: Array<
      | { type: 'text'; text: string }
      | { type: 'tool_use'; id: string; name: string; input: unknown }
      | { type: 'thinking'; thinking: string }
    >;
  };
};

SDKUserMessage

ユーザーメッセージまたはツール結果のフィードバックです。
type SDKUserMessage = {
  type: 'user';
  uuid?: string;
  session_id?: string;
  parent_tool_use_id: string | null;
  message: {
    role: 'user';
    content: Array<
      | { type: 'text'; text: string }
      | { type: 'image'; source: { type: 'base64'; media_type: string; data: string } }
      | { type: 'tool_result'; tool_use_id: string; content: string | unknown[]; is_error?: boolean }
    >;
  };
  isSynthetic?: boolean;
  tool_use_result?: unknown;
};

SDKUserMessageReplay

セッション復元時にリプレイされる履歴ユーザーメッセージです。
type SDKUserMessageReplay = SDKUserMessage & {
  uuid: string;
  session_id: string;
  isReplay: true;
};

SDKResultMessage

セッション全体が終了した時の最終メッセージです。
type SDKResultMessage =
  | {
      type: 'result';
      subtype: 'success';
      uuid: string;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      num_turns: number;
      result: string;
      permission_denials: SDKPermissionDenial[];
    }
  | {
      type: 'result';
      subtype:
        | 'error_max_turns'
        | 'error_during_execution'
        | 'error_max_structured_output_retries';
      // success と同じ共通フィールド
      errors: string[];
    };

SDKSystemMessage

セッション初期化メッセージ(subtype: 'init')。その他のシステムイベントは個別のメッセージ型で送達されます。以下の各 SDK*Message を参照してください。
type SDKSystemMessage = {
  type: 'system';
  subtype: 'init';
  uuid: string;
  session_id: string;
  qodercli_version: string;
  protocol_version?: string;
  apiKeySource: 'user' | 'project' | 'org' | 'temporary';
  cwd: string;
  model: string;
  permissionMode: PermissionMode;
  tools: string[];
  slash_commands: string[];
  output_style: string;
  agents?: string[];
  skills: string[];
  plugins: { name: string; path: string; source?: string }[];
  mcp_servers: { name: string; status: string }[];
  fast_mode_state?: 'off' | 'cooldown' | 'on';
};

SDKPartialAssistantMessage

includePartialMessages: true の有効化が必要です。トークン単位で増分ストリーム出力されます。完全な使用法は ストリーム出力 を参照してください。
type SDKPartialAssistantMessage = {
  type: 'stream_event';
  uuid: string;
  session_id: string;
  parent_tool_use_id: string | null;
  event: {
    type: string;
    index?: number;
    delta?: {
      type?: string;
      text?: string;
      partial_json?: string;
      thinking?: string;
    };
    content_block?: {
      type: string;
      id?: string;
      name?: string;
      text?: string;
    };
  };
};

SDKCompactBoundaryMessage

コンテキスト圧縮完了の境界マーカーです。
type SDKCompactBoundaryMessage = {
  type: 'system';
  subtype: 'compact_boundary';
  uuid: string;
  session_id: string;
  compact_metadata: {
    trigger: 'manual' | 'auto';
    pre_tokens: number;
    preserved_segment?: {
      head_uuid: string;
      anchor_uuid: string;
      tail_uuid: string;
    };
  };
};

SDKStatusMessage

セッション実行ステータスの変化(例: 圧縮中)です。
type SDKStatusMessage = {
  type: 'system';
  subtype: 'status';
  status: 'compacting' | null;
  permissionMode?: PermissionMode;
  uuid: string;
  session_id: string;
};

SDKMcpStatusChangeMessage

MCP コネクションプールのステータス変化です。
type SDKMcpStatusChangeMessage = {
  type: 'system';
  subtype: 'mcp_status_change';
  servers: McpServerStatus[];
  uuid: string;
  session_id: string;
};

SDKAPIRetryMessage

ネットワーク/サービス異常時の自動リトライです。
type SDKAPIRetryMessage = {
  type: 'system';
  subtype: 'api_retry';
  attempt: number;
  max_retries: number;
  retry_delay_ms: number;
  error_status: number | null;
  error: SDKAssistantMessageError;
  uuid: string;
  session_id: string;
};

SDKLocalCommandOutputMessage

ローカル slash command の出力です。
type SDKLocalCommandOutputMessage = {
  type: 'system';
  subtype: 'local_command_output';
  content: string;
  uuid: string;
  session_id: string;
};

SDKHookStartedMessage

Hook の実行開始です。
type SDKHookStartedMessage = {
  type: 'system';
  subtype: 'hook_started';
  hook_id: string;
  hook_name: string;
  hook_event: string;
  uuid: string;
  session_id: string;
};

SDKHookProgressMessage

Hook 実行中の出力です。
type SDKHookProgressMessage = {
  type: 'system';
  subtype: 'hook_progress';
  hook_id: string;
  hook_name: string;
  hook_event: string;
  stdout: string;
  stderr: string;
  output: string;
  uuid: string;
  session_id: string;
};

SDKHookResponseMessage

Hook の終了です。
type SDKHookResponseMessage = {
  type: 'system';
  subtype: 'hook_response';
  hook_id: string;
  hook_name: string;
  hook_event: string;
  output: string;
  stdout: string;
  stderr: string;
  exit_code?: number;
  outcome: 'success' | 'error' | 'cancelled';
  uuid: string;
  session_id: string;
};

SDKTaskStartedMessage

サブエージェントタスクの開始です。
type SDKTaskStartedMessage = {
  type: 'system';
  subtype: 'task_started';
  task_id: string;
  tool_use_id?: string;
  description: string;
  task_type?: string;
  workflow_name?: string;
  prompt?: string;
  uuid: string;
  session_id: string;
};

SDKTaskProgressMessage

サブエージェントタスクの進捗です。
type SDKTaskProgressMessage = {
  type: 'system';
  subtype: 'task_progress';
  task_id: string;
  tool_use_id?: string;
  description: string;
  usage: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  last_tool_name?: string;
  summary?: string;
  uuid: string;
  session_id: string;
};

SDKTaskNotificationMessage

サブエージェントタスクの終了です。
type SDKTaskNotificationMessage = {
  type: 'system';
  subtype: 'task_notification';
  task_id: string;
  tool_use_id?: string;
  status: 'completed' | 'failed' | 'stopped';
  output_file: string;
  summary: string;
  usage?: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  uuid: string;
  session_id: string;
};

SDKSessionStateChangedMessage

メインセッションの実行ステータス変化です。
type SDKSessionStateChangedMessage = {
  type: 'system';
  subtype: 'session_state_changed';
  state: 'idle' | 'running' | 'requires_action';
  uuid: string;
  session_id: string;
};

SDKSessionTitleChangedMessage

セッションタイトルの変化です。
type SDKSessionTitleChangedMessage = {
  type: 'system';
  subtype: 'session_title_changed';
  title: string;
  source: 'ai' | 'custom';
  revision: number;
  uuid: string;
  session_id: string;
};

SDKBridgeStateMessage

Bridge 接続ステータスの変化です。
type SDKBridgeStateMessage = {
  type: 'system';
  subtype: 'bridge_state';
  state: string;
  detail?: string;
  uuid: string;
  session_id: string;
};

SDKFilesPersistedEvent

ファイルチェックポイントの永続化結果です。
type SDKFilesPersistedEvent = {
  type: 'system';
  subtype: 'files_persisted';
  files: { filename: string; file_id: string }[];
  failed: { filename: string; error: string }[];
  processed_at: string;
  uuid: string;
  session_id: string;
};

SDKElicitationCompleteMessage

MCP elicitation の完了です。
type SDKElicitationCompleteMessage = {
  type: 'system';
  subtype: 'elicitation_complete';
  mcp_server_name: string;
  elicitation_id: string;
  uuid: string;
  session_id: string;
};

SDKPermissionDeniedMessage

ツール呼び出しが権限ポリシーによりショートサーキット拒否された場合(dontAsk / auto / deny rule など)です。
type SDKPermissionDeniedMessage = {
  type: 'system';
  subtype: 'permission_denied';
  tool_name: string;
  tool_use_id: string;
  agent_id?: string;
  decision_reason_type?: string;
  decision_reason?: string;
  message: string;
  uuid: string;
  session_id: string;
};

SDKPromptSuggestionMessage

promptSuggestions: true 有効化後、各ターンの result 後に受信可能な次ステップの提案です。
type SDKPromptSuggestionMessage = {
  type: 'prompt_suggestion';
  suggestion: string;
  uuid: string;
  session_id: string;
};

SDKCloudAgentEventMessage

Cloud ランタイム(options.experimentalCloudAgent)下で、Qoder Cloud session の SSE ストリームから転送されるイベントです。詳しい使い方は Cloud Agent を参照してください。
type SDKCloudAgentEventMessage = {
  type: 'cloud_agent_event';
  event: string;
  id?: string;
  data: unknown;
  uuid: string;
  session_id: string;
};
フィールド説明
eventstringCloud イベント名(例:user.messageagent.messagesession.status_idle
idstringSSE イベント ID。stream.afterId の replay 起点として使用可能
dataunknownCloud イベント payload(turn_id などのフィールドを含む)
session_idstringこのイベントが属する Cloud session ID

SDKPermissionDenial

SDKResultMessage.permission_denials 配列内の要素です。
type SDKPermissionDenial = {
  tool_name: string;
  tool_use_id: string;
  tool_input: Record<string, unknown>;
};