ツールスキーマカタログ
出荷済みプラグインが提供する、モデル向けのすべてのツールをctx.toolsします。つまり、システムプロンプトの組み立てを通じてモデルが受け取るname、description、および JSON-Schema のparametersです。これはサブシステムページ(型と各ページで生成される Cordis API 領域)を補完するものであり、このページはエージェントに提供されるツール を示します。
このファイルは GENERATED であり、pnpm run verify-tool-catalog(doc-syncの一部)によって毎回新たに検証されます。手作業で編集しないでください。cordis カタログ(純粋なソース AST パス)とは異なり、このジェネレーターは実際のコンテキストで各ツールプラグインを BOOT し、ctx.tools.schemas()を読み取ります。ツールスキーマは静的には判明しないためです(実行時に展開される列挙値、連結された説明、設定駆動の名前、生の JSON-Schema MCP ツール)。完全性ガードはpackages/*/tool-*を glob 検索し、ジェネレーターの boot マニフェストにパッケージがない場合は失敗します。そのため、新しいツールが文書化されないままになることはありません。ツールスキーマカタログの Agent Noteを参照してください。
対象範囲: packages/*/tool-*配下の出荷済み製品ツールです。各ツールは DEFAULT 設定で boot されます。ただし、Config フィールドがデフォルトなしで REQUIRED の場合は例外です。その場合はジェネレーターが選択する必要があり、このページで示す分岐はパッケージごとの注記に記録されます。登録されるツール NAME は読み込み時の設定にできるため(例: tool-subagentのtoolName)、デプロイでは異なる、または追加の名前でパッケージが公開される場合があります。そのような出荷済みエイリアスがある場合は、パッケージごとの注記に記録されます。examples/のデモツール(例: echo)は、cordis カタログのパッケージのみを対象とする範囲に合わせて除外されます。
ツールパッケージマップ
この表では、モデルから見えるツール名を、その背後にあるプラグインパッケージおよびサービスの抽象的な接続点に対応付けます。正確な JSON Schemas は、以下のパッケージセクションに続きます。
| ツールパッケージ | モデルから見える名前 | 必要なもの | 書き込み先 / 影響対象 | 同梱エイリアス | デプロイに関する注記 |
|---|---|---|---|---|---|
@deepseek-ai/dsh-tool-ask-user | ask_user_question | ctx.tools, ctx.userQuestions | tool/call, tool/result after a UI/provider answers the question | - | ask_user_question は、アクティブな UI プロバイダーが人間の回答を返すまでツール呼び出しを一時停止します。 |
@deepseek-ai/dsh-tools | run_code | ctx.tools, ctx.codeRuntime (execution time), ctx.systemPrompt | tool/call, one tool/code-dispatch-start + tool/code-dispatch pair per bridged sub-call, tool/result | - | Code Mode Agent Note を参照してください。これは、mode: code / mode: both の下でフィルタリング可能な機能レイヤーの外側にある予約済みトランスポートとして、ツールレジストリが所有します。code では、これがレジストリ唯一のワイヤー寄与です。その他の可視機能は、読み込まれたランタイムの言語で生成された SDK セクションに宣言され、プログラムはネイティブ並行性契約(送信順の開始とポリシー、並行性安全な本体は最大 maxParallelSubCalls まで重複)に従ってスケジュールされたバインディングを通じて呼び出します。これらは完全な保護付きツールパイプラインに再入し、各ネストされた実行をこの外側の結果に関連付けます。 |
@deepseek-ai/dsh-plan-mode | exit_plan_mode | ctx.tools, ctx.systemPrompt, ctx.userQuestions (execution time, opportunistic) | tool/call, plan/mode inactive on an approved review, tool/result | - | exit_plan_mode は、計画が非アクティブな間もモデル向けスキーマに残るため、遷移時に計画ポリシーの変更へツールカタログの変動が追加されません。その execute パスは計画モード外の呼び出しを拒否します。計画モードでは、ユーザー質問の境界を介して計画を提示し(承認 / フィードバック付きで計画を継続)、承認されるとステップ境界で計画モードが非アクティブになったことを記録します。 |
@deepseek-ai/dsh-tool-bash | bash | ctx.tools, ctx.shell, ctx.systemPrompt, ctx.shellEnv, ctx.jobs at call time for run_in_background | tool/call, tool/result | - | bash ツールは、bash executor 境界のモデル向けコンシューマーです。run_in_background の実行は汎用 ctx.jobs ランタイムに登録され、@deepseek-ai/dsh-tool-jobs の job_* ツールを通じて収集または停止されます。enableRunInBackground 設定(既定値は true)は、無効にするとパラメーター自体を完全に削除します。 |
@deepseek-ai/dsh-tool-pwsh | pwsh | ctx.tools, ctx.shell, ctx.systemPrompt, ctx.shellEnv, ctx.jobs at call time for run_in_background | tool/call, tool/result | - | pwsh ツールは、Windows 構成向けの bash executor 境界における PowerShell 方言コンシューマーです(@deepseek-ai/dsh-pwsh-local などの PowerShell executor が ctx.shell を支えます)。サンドボックス制御を除き、bash ツールを呼び出し単位で反映します。run_in_background の実行は汎用 ctx.jobs ランタイムに登録され、job_* ツールを通じて収集または停止され、管理対象の DSH_* 環境は @deepseek-ai/dsh-shell-env から取得されます。各呼び出しは新しいプロセスで実行され(永続 PTY セッションはありません)、ネイティブの C:\... パスと $env:NAME 変数を使用します。 |
@deepseek-ai/dsh-tool-cordis | cordis_define, cordis_inspect_list, cordis_inspect_query, cordis_inspect_self, cordis_run, cordis_stop, cordis_undefine | ctx.tools, ctx.dynamicCordisRunner | tool/call, tool/result, process-local dynamic package lifecycle | - | いずれの同梱ツリーにも含まれません(意図的なオプトインです。動的パッケージコードは実ランタイムへ到達します。.agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.md を参照してください)。ツールセットは、定義レジストリと vm サンドボックスを所有する @deepseek-ai/dsh-cordis-host-runner から ctx.dynamicCordisRunner を注入します。これがない構成ではツールは決して有効化されません。実行中のパッケージは、停止、未定義化、または DSH の再起動まで、追加のモデルから見えるツールを登録できます。変更された完全なリクエストヘッダーは、そのツールセットの変更を記録します。 |
@deepseek-ai/dsh-tool-bash-persistent | bash | ctx.tools, ctx.terminals, an owning Agent at execution time | tool/call, PTY shell state, tool/result | - | 所有者ごとに分離された永続 bash ツールです。デプロイ構成が PTY バックエンドを提供し、モデル向け環境説明を上書きできます。 |
@deepseek-ai/dsh-tool-str-replace-editor | str_replace_editor | ctx.tools, ctx.fs | tool/call, fs/observed after view presence/absence, edit absence, or successful mutation, tool/result | - | ファイルシステム境界上の、独立した view/create/unique リテラル置換 / 行挿入ツールです。任意のシェルまたはターミナル API と組み合わせられます。 |
@deepseek-ai/dsh-tool-fs | edit, read, read_image, write | ctx.tools, ctx.fs, ctx.systemPrompt, ctx.attachments (read_image registration), ctx.llm + an image-capable route (read_image execution) | tool/call, fs/write-intent or fs/edit-intent for mutations, fs/observed after read presence/absence or successful file operation, durable attachment (read_image), tool/result | - | 読み取り後に書き込み / 編集するポリシーは、@deepseek-ai/dsh-fs-observation-policy(fs/* イベントゲートプラグイン、スキーマ変更なし)によって追加されます。これらのツールを読み込むデプロイでは、これも読み込むことが想定されます。read_image は ctx.attachments なしには登録されません。そのスキーマはルートに依存せず、実行は正確にルーティングされたモデルが画像入力を宣言している場合にのみ許可されます。 |
@deepseek-ai/dsh-tool-fs-search | glob, grep | ctx.tools, ctx.subprocess, ctx.systemPrompt | tool/call, tool/result | - | glob と grep は無条件の検出ツールであり、ctx.subprocess を通じてパッケージ化された ripgrep バイナリ(@vscode/ripgrep)を通常のフォアグラウンド呼び出しとして起動します(バックグラウンドジョブにはなりません)。ホストに rg をインストールする必要も、シェルレイヤーもありません。カタログは sampleOverCapGlobResults: true を使用するため、デプロイではこの動作を明示的に選択する必要があります。上限に達した結果は、任意の ctx.spillStore バックエンドを通じて完全な整形済みリストを保存します。共置デプロイでバックエンドがローカルパスを公開する場合、返されたロケーターは後続の読み取り / 検索に使用できます。 |
@deepseek-ai/dsh-tool-terminal | terminal_close, terminal_list, terminal_open, terminal_read, terminal_send, terminal_signal | ctx.tools, ctx.terminals, ctx.systemPrompt, ctx.jobs at call time for run_in_background | tool/call, tool/result | - | 6 つのターミナルツールはオプトインであり、単発のシェル / ファイルシステムツールを補完します。terminal_send(run_in_background: true) は ctx.jobs に登録されます。TUI、名前付きキーシーケンス、BEL、リサイズ、自動開始、エージェント間共有はスキーマに含まれません。 |
@deepseek-ai/dsh-tool-goal | create_goal, get_goal, update_goal | ctx.tools, ctx.agents, ctx.goals, ctx.systemPrompt, a calling Agent in an authorized open turn | tool/call, goal/change for mutations, tool/result | - | create、edit、pause、resume には直接の人間ルート権限が必要です。complete と blocked は、正確な現在の目標ラウンドも受け付けます。blocked の既定の下限は、承認済みラウンド 3 回です。 |
@deepseek-ai/dsh-schedule | schedule_create, schedule_delete, schedule_list | ctx.tools, ctx.sessions, Session persistence, a future live root Agent | tool/call, schedule/change create or delete, tool/result | - | オプトインの Schedule プラグインが読み込まれた後に作成された、ライブのルート Agent スコープ内でのみ登録されます。バージョン 1 は after_seconds、明示的な絶対時刻 at、上限付き固定レート every_seconds を受け付け、セッションローカル配信を開示します。管理の読み取りと変更には、共有 Session 永続化バリアが必要です。 |
@deepseek-ai/dsh-tool-lsp | lsp | ctx.tools, ctx.lsp, ctx.systemPrompt | tool/call, tool/result | - | lsp ツールは、プロバイダー選択と言語サーバーのサブプロセスを ctx.lsp の背後に置くため、モデルから見えるスキーマはプロバイダー間で安定しています。実行時に登録済みプロバイダー(例: @deepseek-ai/dsh-lsp-stdio)が必要です。存在しない場合、クエリはスキーマを変更せず、構造化された LSP_UNAVAILABLE エラーを返します。 |
@deepseek-ai/dsh-tool-ralph | ralph | ctx.tools, ctx.workflowEngine, ctx.subagents, ctx.systemPrompt, a calling Agent (exec.agent parents every fresh round) | tool/call, tool/result, workflow and child session events during execution | - | 固定のフォアグラウンドワークフローでは、ラウンドごとに 1 つの新しい構造化子エージェントを開始します。モデルが選択できるのは、不変の目標と任意のラウンド上限だけです。 |
@deepseek-ai/dsh-tool-skill | skill | ctx.tools, ctx.agents, ctx.skills | tool/call, tool/result, user/message replacement catalogs via agent.inject() | - | - |
@deepseek-ai/dsh-tool-session-query | session_event_read, session_event_search, session_event_trace, session_search, session_trace | ctx.tools, ctx.systemPrompt, ctx.sessionQuery, a calling Agent for workspace authority | tool/call, tool/result | - | 5 つの読み取り専用ツールは、プロバイダーのカーソルを隠し、不変の呼び出し元エージェントセッションからすべての結果を認可します。このパッケージはオプトインです。強制期限または上限付きインライン出力が必要な構成では、汎用 timeout または spill ポリシーもマウントします。 |
@deepseek-ai/dsh-tool-subagent | subagent | ctx.tools, ctx.subagents, ctx.systemPrompt | tool/call, tool/result, child session events through the chosen provider | subagent, subagent_fork | 登録されるツール名は読み込み時の toolName 設定(既定値 subagent)であり、上記のスキーマはその既定値です。同梱構成はこのパッケージをサブエージェントバックエンドごとに一度読み込むため、モデルには fork バックエンドにバインドされた subagent_fork も見えます。各インスタンスの説明、run_in_background パラメーター、システムプロンプトポリシーは、それぞれの backgroundMode と enableRunInBackground に従います。そのため、同梱された 2 つのスキーマは同一ではありません。subagent は continuable であり、省略された呼び出しを自動精算配信付きのバックグラウンドに既定設定します。一方、subagent_fork は one-shot のままで、フォアグラウンドに既定設定します。packages/bundle/base/cordis.patch.yml と examples/acp-agent/cordis.yml を参照してください。 |
@deepseek-ai/dsh-tool-subagent-control | interrupt_agent, list_agents, send_message | ctx.tools, ctx.subagents, ctx.agents and ctx.sessionProjections (list_agents only) | tool/call, tool/result, child session events through ctx.subagents | - | 継続可能なバックグラウンド子エージェントに対する、グローバル名付き制御ツールです。プロバイダーにバインドされた tool-subagent インスタンスは個別の委任ツールを登録し、このパッケージは send_message と interrupt_agent を一度だけ登録します。さらに、別途読み込まれる /list-agents プラグインからの list_agents も登録します(そのカタログ行は sessionProjections とライブ Agent レジストリを使用します)。 |
@deepseek-ai/dsh-tool-subagent-report | report | ctx.subagents, ctx.systemPrompt, a live continuable in-process child Agent | tool/call, tool/result, a user-role message in the direct parent session | - | グローバルではなく、継続可能なインプロセス子ごとに登録されます。そのため、このスキーマはそのような子の内部でのみ見え、グローバルな toolFilter をまたいで存続します。同じ寄与は子スコープの tool:report プロンプトセクションをインストールしますが、このカタログには表示されません。親向けの send_message ツールは独立してインストールされます。 |
@deepseek-ai/dsh-tool-jobs | job_kill, job_list, job_output | ctx.tools, ctx.jobs, ctx.systemPrompt | tool/call, tool/result, user/message via agent.inject() for background completion notices | - | 種類に依存しないバックグラウンドジョブコントローラーです。バックグラウンド bash コマンド、PTY 送信、サブエージェントは、同じ 3 つのツールで読み取り、一覧表示、終了を行います。プラグインを読み込むと、プロデューサーの ctx.jobs.start() を有効化するコントローラーがアタッチされます。 |
@deepseek-ai/dsh-tool-todo | todo_write | ctx.tools, owning Agent session | tool/call, todo/write, tool/result | - | todo_write はセッション所有の状態です。UI は最新の todo/write イベントをチェックリストとして描画します。allowParallelInProgress は既定値なしで必須のため、カタログにはその選択が記載されます。すなわち、複数の in_progress 項目を促す説明を持つ true です。false を選択するデプロイでは、正確に 1 つのアクティブタスクを求める説明を持つ同じツールを受け取ります。 |
@deepseek-ai/dsh-tool-workflow | workflow | ctx.tools, ctx.workflowEngine, ctx.systemPrompt, a calling Agent (exec.agent parents the script children) | tool/call, tool/result | - | - |
@deepseek-ai/dsh-tool-web | web_fetch, web_search | ctx.tools, ctx.web, ctx.systemPrompt | tool/call, tool/result | - | web_search と web_fetch は、プロバイダー選択を ctx.web の背後に置くため、モデルから見えるスキーマはバックエンドの切り替えをまたいで安定しています。 |
@deepseek-ai/dsh-tool-ask-user
ask_user_question
続行前に確認、選択、または不足情報が必要な場合は、ユーザーに簡潔な質問をします。安定した id を付けた質問を 1 つ以上送信します。id は回答でエコーされます。
{
"type": "object",
"properties": {
"questions": {
"type": "array",
"description": "Questions to ask the user before continuing.",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"id": {
"type": "string",
"description": "Stable id for this question; echoed in the answer."
},
"question": {
"type": "string",
"description": "The specific question to ask the user."
},
"header": {
"type": "string",
"description": "Optional short heading for the question, such as \"Confirm\" or \"Choose Mode\"."
},
"options": {
"type": "array",
"description": "Optional choices to show the user. If you recommend one, put it first and append \"(Recommended)\" to that label.",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"label": {
"type": "string",
"description": "Short user-facing option label."
},
"description": {
"type": "string",
"description": "One sentence explaining the tradeoff or impact."
}
},
"required": [
"label"
]
}
},
"multi_select": {
"type": "boolean",
"description": "Whether the user may select more than one option. Defaults to false."
}
},
"required": [
"id",
"question"
]
}
}
},
"required": [
"questions"
]
}出典: packages/interaction/tool-ask-user/src/index.ts
ask_user_question は、アクティブな UI プロバイダーが人間の回答を返すまでツール呼び出しを一時停止します。
@deepseek-ai/dsh-tools
run_code
利用可能なツールに対して TypeScript プログラムを実行します。必須引数は 2 つです。code(async 関数の BODY。消去可能な構文のみ。トップレベルの await と return が使用できます)と、プログラムの内容を短く要約した description です。システムプロンプト内の宣言に従って、ツールを await tools.name(args) として呼び出します。出力または return した内容だけが返されます。内容を厳選してください。
{
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "The program: the body of an async TypeScript function."
},
"description": {
"type": "string",
"description": "Clear, concise description of what this program does in active voice, 5-10 words (shown in the UI). Examples: \"Count TODO markers across packages\"; \"Read failing test and its fixture\"; \"Rename config key in every cordis.yml\"."
}
},
"required": [
"code",
"description"
]
}出典: packages/core/tools/src/code-mode.ts
mode: code / mode: both の下で、フィルタリング可能な機能レイヤーの外側にある予約済みトランスポートとして、ツールレジストリが所有します(Code Mode Agent Note を参照)。code の下では、これがレジストリ唯一のワイヤーへの寄与です。その他の可視機能は、ロードされたランタイムの言語で生成された SDK セクションに宣言され、プログラムはネイティブの並行実行契約(送信順の開始とポリシー、並行実行が安全な本体は最大 maxParallelSubCalls まで重複)に基づいてスケジュールされたバインディングを通じてそれらを呼び出します。それらは完全な保護付きツールパイプラインに再入し、各ネストした実行をこの外側の結果にリンクします。
@deepseek-ai/dsh-plan-mode
exit_plan_mode
プランモードでのみ使用します。ユーザーのレビュー用にプランを提示し、承認されたらプランモードを終了します。完全なプランを Markdown で送信し、プラン名を付けた # 見出しから開始します。ユーザーは承認(次のステップからプランを実行)するか、プランニングを継続できます。フィードバックはツール結果として返されるため、修正して再提示してください。
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"description": "The complete plan, as markdown, starting with a # heading that names it."
}
},
"required": [
"plan"
]
}出典: packages/plan/plan-mode/src/index.ts
exit_plan_mode は、プランニングが非アクティブな間もモデル向けスキーマに残るため、遷移時にプランポリシーの変更に加えてツールカタログの変動が発生しません。その実行パスはプランモード外での呼び出しを拒否します。プランモードでは、ユーザー質問の抽象的な接続点を介してプランを提示し(承認 / フィードバック付きでプランニングを継続)、承認されるとステップ境界でプランモードが非アクティブになったことを記録します。
@deepseek-ai/dsh-tool-bash
bash
bash コマンド(bash -c)を実行し、その stdout/stderr を返します。各呼び出しは新しいシェルで実行されます。呼び出し間で状態(cwd、変数、関数)は保持されないため、cd を使用する代わりに workdir を渡してください。ゼロ以外の終了は [exit code: N] として報告されます。現在の Harness 環境の情報は管理された $DSH_* 変数を通じて公開されます。必要に応じて確認してください。コマンドはファイルサンドボックス内で実行される場合があります。ブロックされたファイル操作は [sandbox: file access denied under <mode> mode] として報告されます。これはポリシーによる拒否であり、コマンドのバグではありません。別の方法で再試行しないでください。長い出力は末尾まで切り詰められ、完全な出力は利用可能な場合にパスが報告されるファイルへ保存されます。長時間実行コマンドには run_in_background: true を設定します。呼び出しは直ちにジョブ ID を返します。出力は job_output で読み取り、job_kill で停止します。
{
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "The bash command to execute."
},
"description": {
"type": "string",
"description": "Clear, concise description of what this command does in active voice, 5-10 words (shown in the UI). Examples: \"ls\" → \"List files in current directory\"; \"git status\" → \"Show working tree status\"; \"npm install\" → \"Install package dependencies\"."
},
"timeoutMs": {
"type": "number",
"description": "Timeout in milliseconds. The executor applies its configured default and cap, and kills the command on expiry."
},
"workdir": {
"type": "string",
"description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
},
"run_in_background": {
"type": "boolean",
"description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
}
},
"required": [
"command",
"description"
]
}出典: packages/shell/tool-bash/src/index.ts
bash ツールは、bash 実行者の抽象的な接続点を利用するモデル向けコンシューマーです。run_in_background の実行は汎用の ctx.jobs ランタイムに登録され、@deepseek-ai/dsh-tool-jobs の job_* ツールを通じて収集または停止されます。enableRunInBackground 設定(デフォルトは true)は、無効にするとパラメーターを完全に削除します。
@deepseek-ai/dsh-tool-pwsh
pwsh
PowerShell コマンド(pwsh -Command)を実行し、その stdout/stderr を返します。各呼び出しは新しい pwsh プロセスで実行されます。状態(cwd、変数、関数)は呼び出し間で保持されないため、cd を使用する代わりに workdir を渡してください。パスはネイティブの Windows 形式(C:\...)を使用します。環境変数は $env:NAME で読み取ります。ゼロ以外の終了は [exit code: N] として報告されます。現在の Harness 環境に関する情報は、管理対象の $env:DSH_* 変数を通じて公開されます。必要に応じて確認してください。コマンドはファイルサンドボックス下で実行される場合があります。ブロックされたファイル操作は [sandbox: file access denied under <mode> mode] として報告されます。これはポリシーによる拒否であり、コマンドのバグではありません。別の方法で再試行しないでください。長い出力は末尾まで切り詰められ、完全な出力は利用可能な場合、報告されたパスのファイルに保存されます。Windows では、強制終了されたコマンドはシグナルマーカーなしで [exit code: 1] として確定します。コマンドの失敗ではなく中断として扱ってください。長時間実行するコマンドには run_in_background: true を設定してください。呼び出しは直ちにジョブ ID を返します。出力は job_output で読み取り、job_kill で停止します。
{
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "The PowerShell command to execute."
},
"description": {
"type": "string",
"description": "Clear, concise description of what this command does in active voice, 5-10 words (shown in the UI). Examples: \"ls\" → \"List files in current directory\"; \"git status\" → \"Show working tree status\"; \"Get-Process\" → \"List running processes\"."
},
"timeoutMs": {
"type": "number",
"description": "Timeout in milliseconds. The executor applies its configured default and cap, and kills the command on expiry."
},
"workdir": {
"type": "string",
"description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
},
"run_in_background": {
"type": "boolean",
"description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
}
},
"required": [
"command",
"description"
]
}出典: packages/shell/tool-pwsh/src/index.ts
pwsh ツールは、Windows 構成向けの bash 実行者抽象シームにおける PowerShell 方言のコンシューマーです(@deepseek-ai/dsh-pwsh-local のような PowerShell 実行者が ctx.shell を支えます)。サンドボックス制御を除き、bash ツールを呼び出し単位でそのまま反映します。run_in_background の実行は汎用の ctx.jobs ランタイムに登録され、job_* ツールで収集・停止されます。また、管理対象の DSH_* 環境は @deepseek-ai/dsh-shell-env から提供されます。各呼び出しは新しいプロセスで実行されます(永続的な PTY セッションはありません)。パスはネイティブの C:\... 形式で、変数は $env:NAME です。
@deepseek-ai/dsh-tool-cordis
cordis_define
不変の Cordis Package を定義します。新しい Plugin では kind:"new" を使用し、3~6 文字の小文字の英字によるセマンティックプレフィックスのみを指定してください。Host が最終的な pluginId と packageId を返します。既存の Plugin を変更するには、正確な pluginId を指定して kind:"existing" を使用し、古いバージョンを上書きせずに Package を追加します。code.host と code.client の少なくとも一方を指定してください。各値は Cordis Plugin を返すプレーンな JavaScript 関数本体です。TypeScript、JSX、または import の変換は行われません。Service、Event、Builtin、Slot、またはトークンに依存する前に Inspect で照会してください。Define はパラメーターと構文の検証、およびソースの記録のみを行います。承認の要求、apply の実行、currentPackageId の変更は行いません。成功したら、返された ID を使って cordis_run を呼び出してください。
{
"type": "object",
"properties": {
"plugin": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"kind": {
"type": "string",
"const": "new"
},
"idPrefix": {
"type": "string",
"description": "Suggested semantic prefix of 3–6 lowercase English letters; the Host adds a unique numeric suffix."
}
},
"required": [
"kind",
"idPrefix"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"kind": {
"type": "string",
"const": "existing"
},
"pluginId": {
"type": "string",
"description": "Exact ID of an existing Plugin; the new Package is appended to that instance."
}
},
"required": [
"kind",
"pluginId"
]
}
]
},
"name": {
"type": "string",
"description": "Short, readable Package name."
},
"purpose": {
"type": "string",
"description": "One-sentence, user-facing description of the Package purpose."
},
"code": {
"type": "object",
"additionalProperties": false,
"properties": {
"host": {
"type": "string",
"description": "Plain JavaScript function body that returns the Host-half Cordis Plugin."
},
"client": {
"type": "string",
"description": "Plain JavaScript function body that returns the browser Client-half Cordis Plugin."
}
}
}
},
"required": [
"plugin",
"name",
"purpose",
"code"
]
}出典: packages/extensions/tool-cordis/src/index.ts
cordis_inspect_list
ローカルの Host Provider と Client から同期された最新マニフェストを含め、現在 Host が認識しているすべての Cordis Inspect Provider を一覧表示します。各エントリには、platform、目的、読み取り専用メソッド、入出力スキーマが含まれます。Package を作成または変更する前にこの Tool を呼び出し、結果から cordis_inspect_query 用の provider と method を選択してください。名前を推測したり、Inspect メソッドを Plugin コードから呼び出せるビジネス Service として扱ったりしないでください。
{
"type": "object",
"properties": {}
}出典: packages/extensions/tool-cordis/src/index.ts
cordis_inspect_query
Inspect Provider によって明示的に宣言された読み取り専用クエリを実行します。platform、provider、method は cordis_inspect_list から取得する必要があり、input はその method のスキーマを満たす必要があります。cordis_define の前にこの Tool を使用して、正確な Service メソッド、Event モード、Builtin シグネチャ、Tool スキーマ、テーマトークン、または実行中の Slot ツリーと props を読み取ってください。Host クエリはローカルで実行されます。Client クエリは最初の有効なページ応答を待機し、ページが応答するか Tool がキャンセルされるまで保留されます。この Tool はビジネス Service メソッドを呼び出したり、ランタイムを変更したりできません。Service.listService と Event.listEvents では、まず input なしでクエリを実行してコンパクトなシグネチャディレクトリを参照し、その後、正確な service または event をクエリして構造化された契約と参照先の型を確認してください。Slots.listSubTree では、まず root なしでクエリを実行してコンパクトなツリーを参照し、その後、正確な root をクエリして完全な登録契約と props を確認してください。
{
"type": "object",
"properties": {
"platform": {
"type": "string",
"description": "Runtime platform that owns the Provider.",
"enum": [
"host",
"client"
]
},
"provider": {
"type": "string",
"description": "Exact Provider ID returned by cordis_inspect_list."
},
"method": {
"type": "string",
"description": "Exact method name declared by the Provider manifest."
},
"input": {
"description": "Optional query input; it must satisfy the method input schema."
}
},
"required": [
"platform",
"provider",
"method"
]
}出典: packages/extensions/tool-cordis/src/index.ts
cordis_inspect_self
現在の Session が所有する動的 Cordis オブジェクトを、詳細度を段階的に上げて調べます。ID を指定しない場合は、Plugin の概要のみを一覧表示します。pluginId のみを指定した場合は、バージョンポインター、最新の Run、およびすべての Package の概要を返します。pluginId と packageId の両方を指定した場合にのみ、その不変の Package の Host/Client ソースとランタイム診断を返します。packageId を単独で指定することはできません。@pluginId を処理する前、非同期障害を修復する前、または更新版を定義する前に、正確な Package を照会してください。この Tool は読み取り専用です。コードの実行もバージョンポインターの変更も行いません。
{
"type": "object",
"properties": {
"pluginId": {
"type": "string",
"description": "Stable Plugin ID returned by cordis_define or injected by @pluginId; omit it to list every current Plugin."
},
"packageId": {
"type": "string",
"description": "Exact immutable Package ID owned by pluginId; when specified, source and diagnostics are returned."
}
}
}出典: packages/extensions/tool-cordis/src/index.ts
cordis_run
動的 Plugin の正確な Package を 1 つ有効化します。初回の有効化、currentPackageId の再起動、またはロールバックには mode:"run" を使用します。current が存在する場合は、Plugin が現在停止していても、別の Package に切り替えるには mode:"update" を使用します。認可されていない Client Package は承認リクエストを作成し、awaiting-approval を返します。認可済みの Package は starting を返し、ブラウザー内で非同期に継続します。どちらの結果も、Tool 内で最終結果を待機しません。currentPackageId は完全に成功した後にのみ変更されます。失敗時には、古い current と対象の next が残ります。非同期の成功、拒否、または技術的な失敗は state と steering を通じて報告されます。技術的な失敗の後は、cordis_inspect_self で診断を読み取り、同じ Plugin を修正して、自律的に再試行してください。ユーザーが拒否した後は、再度承認を求めないでください。
{
"type": "object",
"properties": {
"pluginId": {
"type": "string",
"description": "Stable Plugin ID returned by cordis_define."
},
"packageId": {
"type": "string",
"description": "Exact immutable Package ID to activate under that Plugin."
},
"mode": {
"type": "string",
"description": "Use run for the first activation, restarting current, or rollback; use update to switch from current to a different Package.",
"enum": [
"run",
"update"
]
}
},
"required": [
"pluginId",
"packageId",
"mode"
]
}出典: packages/extensions/tool-cordis/src/index.ts
cordis_stop
動的 Plugin の現在の Run を停止し、未完了の承認または有効化リクエストを取り消します。Plugin、すべての不変の Package、grant、currentPackageId、および nextPackageId は保持されるため、後で直接実行または更新できます。すでに停止している Plugin の停止は、冪等に成功します。効果を一時的に無効化するにはこの Tool を使用してください。永続的に削除するには cordis_undefine を使用します。
{
"type": "object",
"properties": {
"pluginId": {
"type": "string",
"description": "Stable dynamic Plugin ID to stop."
}
},
"required": [
"pluginId"
]
}出典: packages/extensions/tool-cordis/src/index.ts
cordis_undefine
現在の Session が所有する動的 Plugin を永続的に削除します。実行中または承認待ちの場合は、まず停止してリクエストを取り消し、その後すべての Package、grant、バージョンポインターを削除します。これが返された後は、その pluginId、packageId、@ 参照、および Package のビジネスビューは無効になります。履歴カードには「Plugin が削除されました」という記録だけが残ります。再起動またはロールバックのためにバージョンを残す必要がある場合は、この Tool を呼び出さないでください。代わりに cordis_stop を使用します。
{
"type": "object",
"properties": {
"pluginId": {
"type": "string",
"description": "Stable dynamic Plugin ID to remove permanently."
}
},
"required": [
"pluginId"
]
}出典: packages/extensions/tool-cordis/src/index.ts
どの配布ツリーにも含まれていません(意図的なオプトインです。動的 Package コードは実際のランタイムに到達します。.agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.md を参照してください)。ツールセットは、定義レジストリと vm サンドボックスを所有する @deepseek-ai/dsh-cordis-host-runner から ctx.dynamicCordisRunner を注入します。これがない構成では、ツールは有効化されません。実行中のパッケージは、停止、未定義化、または DSH の再起動まで、モデルから見える追加のツールを登録できます。完全に変更されたリクエストヘッダーには、それらのツールセット変更が記録されます。
@deepseek-ai/dsh-tool-bash-persistent
bash
永続的な bash シェルでコマンドを実行します。現在のディレクトリやエクスポート済み環境変数を含む状態は、このエージェントでは呼び出し間で保持されます。
{
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "The bash command to run. Relative path is preferred in the command."
}
},
"required": [
"command"
]
}出典: packages/shell/tool-bash-persistent/src/index.ts
所有者ごとに分離された永続 bash ツールです。デプロイ構成が PTY バックエンドを提供し、モデル向けの環境説明を上書きする場合があります。
@deepseek-ai/dsh-tool-str-replace-editor
str_replace_editor
ファイルを表示、作成、編集するためのカスタム編集ツール
- 状態は、コマンド呼び出しおよびユーザーとの会話をまたいで保持されます。
pathがファイルの場合、viewはcat -nを適用した結果を表示します。pathがディレクトリの場合、viewは非表示でないファイルとディレクトリを最大 2 階層まで一覧表示します。- 指定した
pathがすでにファイルとして存在する場合、createコマンドは使用できません。 commandが長い出力を生成した場合、出力は切り詰められ、<response clipped>で示されます。
str_replace コマンドの使用に関する注意事項:
old_strパラメーターは、元のファイルから連続する 1 行以上と完全に一致する必要があります。空白文字に注意してください。old_strパラメーターがファイル内で一意でない場合、置換は実行されません。一意にするため、old_strに十分なコンテキストを含めてください。new_strパラメーターには、old_strを置き換える編集済みの行を含める必要があります。
{
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "The commands to run. Allowed options are: `view`, `create`, `str_replace`, `insert`.",
"enum": [
"view",
"create",
"str_replace",
"insert"
]
},
"path": {
"type": "string",
"description": "Absolute path to file or directory, e.g. `/repo/file.py` or `/repo`."
},
"file_text": {
"type": "string",
"description": "Required parameter of `create` command, with the content of the file to be created."
},
"insert_line": {
"type": "integer",
"description": "Required parameter of `insert` command. The `new_str` will be inserted AFTER the line `insert_line` of `path`."
},
"new_str": {
"type": "string",
"description": "Optional parameter of `str_replace` command containing the new string (if not given, no string will be added). Required parameter of `insert` command containing the string to insert."
},
"old_str": {
"type": "string",
"description": "Required parameter of `str_replace` command containing the string in `path` to replace."
},
"view_range": {
"type": "array",
"description": "Optional parameter of `view` command when `path` points to a file. If none is given, the full file is shown. If provided, the file will be shown in the indicated line number range, e.g. [11, 12] will show lines 11 and 12. Indexing at 1 to start. Setting `[start_line, -1]` shows all lines from `start_line` to the end of the file.",
"items": {
"type": "integer"
}
}
},
"required": [
"command",
"path"
]
}ソース: packages/fs/tool-str-replace-editor/src/index.ts
ファイルシステムの境界をまたいで、view/create/unique リテラルの置換または行の挿入を行うスタンドアロンツールです。任意のシェルまたはターミナル API と組み合わせて使用できます。
@deepseek-ai/dsh-tool-fs
edit
リテラルテキストを置換して、既存の UTF-8 テキストファイルを編集します。
{
"type": "object",
"properties": {
"file_path": {
"type": "string",
"description": "Path to edit, resolved by the filesystem backend."
},
"old_string": {
"type": "string",
"description": "Literal text to replace. Must match exactly."
},
"new_string": {
"type": "string",
"description": "Literal replacement text. Use an empty string to delete the match."
},
"replace_all": {
"type": "boolean",
"description": "Replace all matches. Defaults to false; when false, old_string must appear exactly once."
}
},
"required": [
"file_path",
"old_string",
"new_string"
]
}ソース: packages/fs/tool-fs/src/index.ts
read
UTF-8 テキストファイルを読み取り、行番号付きの内容を返します。
{
"type": "object",
"properties": {
"file_path": {
"type": "string",
"description": "Path to read, resolved by the filesystem backend."
},
"offset": {
"type": "number",
"description": "1-based first line to return. Defaults to 1."
},
"limit": {
"type": "number",
"description": "Maximum number of lines to return. Defaults to 2000."
}
},
"required": [
"file_path"
]
}ソース: packages/fs/tool-fs/src/index.ts
read_image
PNG/JPEG/WebP/GIF ファイルを読み取り、画像そのものを返します。現在のモデルが画像入力を受け付ける必要があります。
{
"type": "object",
"properties": {
"file_path": {
"type": "string",
"description": "Path to the image file, resolved by the filesystem backend."
}
},
"required": [
"file_path"
]
}ソース: packages/fs/tool-fs/src/index.ts
write
UTF-8 テキストファイルを作成するか、完全に置換します。
{
"type": "object",
"properties": {
"file_path": {
"type": "string",
"description": "Path to write, resolved by the filesystem backend."
},
"content": {
"type": "string",
"description": "Full UTF-8 text content to write."
}
},
"required": [
"file_path",
"content"
]
}ソース: packages/fs/tool-fs/src/index.ts
読み取り前の書き込み/編集ポリシーは @deepseek-ai/dsh-fs-observation-policy(スキーマを変更しない fs/* イベントゲートプラグイン)によって追加されます。このツールを読み込むデプロイメントでは、それも読み込むことが想定されています。read_image は ctx.attachments なしでは登録されません。そのスキーマはルートに依存せず、実行は、正確にルーティングされたモデルが画像入力を宣言している場合にのみ許可されます。
@deepseek-ai/dsh-tool-fs-search
glob
パスが glob パターンに一致するファイルを検索します。一致するファイルパスのみを返し、ディレクトリは返しません。隠しファイルおよび無視されたファイルも含まれます(VCS メタデータディレクトリは除外されます)。最大 100 件のパスが更新時刻順に返されます。結果がそれより多い場合は、トップレベルエントリ全体からサンプリングした 100 件のパスを返し、その旨と、完全なソート済みリストの保存先を報告します。このツールはディレクトリエントリを列挙しません。
{
"type": "object",
"properties": {
"pattern": {
"type": "string",
"description": "Glob pattern to match file paths against (e.g. \"**/*.ts\", \"src/**/*.test.js\"). A pattern with no \"/\" matches the basename at any depth, so \"*\" and \"*.ts\" both search the whole tree; include a separator to anchor the depth."
},
"path": {
"type": "string",
"description": "Directory to search in. Defaults to the session workspace; a relative path resolves against it."
}
},
"required": [
"pattern"
]
}ソース: packages/fs/tool-fs-search/src/index.ts
grep
ripgrep 正規表現でファイル内容を検索します。一致した行を行番号付きで、ファイルごとにまとめて返します。最初の 250 件の一致はインラインで返されます。上限に達した結果では、完全な一致リストの保存先が報告されます。周辺の文脈を確認するには、一致したファイルに対して read を使用してください。
{
"type": "object",
"properties": {
"pattern": {
"type": "string",
"description": "Regular expression to search for (ripgrep syntax)."
},
"path": {
"type": "string",
"description": "File or directory to search. Defaults to the session workspace; a relative path resolves against it."
},
"include": {
"type": "string",
"description": "One glob filter for which files to search (e.g. \"*.ts\", \"*.{js,jsx}\"). Not a list; negation is not supported."
}
},
"required": [
"pattern"
]
}ソース: packages/fs/tool-fs-search/src/index.ts
glob と grep は、パッケージ化された ripgrep バイナリ(@vscode/ripgrep)を ctx.subprocess 経由で通常のフォアグラウンド呼び出しとして起動する、無条件の探索ツールです(バックグラウンドジョブとしては実行しません)。ホストへの rg インストールやシェルレイヤーは不要です。カタログでは sampleOverCapGlobResults: true を使用します。デプロイメントではその動作を明示的に選択する必要があります。上限に達した結果では、完全に整形されたリストがオプションの ctx.spillStore バックエンドを通じて保存されます。コロケーションされたデプロイメントでバックエンドがローカルパスを公開する場合、返されたロケーターは後続操作で読み取り/検索できます。
@deepseek-ai/dsh-tool-terminal
terminal_close
1 つの永続ターミナルを閉じ、そのキャプチャされた所有プロセスツリーが終了するまで待機します。
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Terminal session id."
}
},
"required": [
"sessionId"
]
}ソース: packages/terminal/tool-terminal/src/index.ts
terminal_list
現在のエージェントが所有する永続ターミナルセッションを一覧表示します。
{
"type": "object",
"properties": {}
}出典: packages/terminal/tool-terminal/src/index.ts
terminal_open
登録済みのバックエンド型から、永続的で所有者ごとに分離されたターミナルセッションを作成します。ツール呼び出しをまたいで維持する必要があるシェルまたは REPL の状態に使用します。
{
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Registered terminal backend type, usually \"shell\"."
},
"name": {
"type": "string",
"description": "Optional owner-local display name such as \"main\" or \"gdb\"."
},
"cwd": {
"type": "string",
"description": "Initial working directory. Defaults to the deployment workspace root."
}
},
"required": [
"type"
]
}出典: packages/terminal/tool-terminal/src/index.ts
terminal_read
入力を送信せずに、永続ターミナルに保持されている出力を範囲指定して 1 ページ分読み取ります。
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Terminal session id."
},
"offset": {
"type": "number",
"description": "Newest-relative line offset (default 0)."
},
"count": {
"type": "number",
"description": "Requested line count (default 500; backend caps apply)."
}
},
"required": [
"sessionId"
]
}出典: packages/terminal/tool-terminal/src/index.ts
terminal_send
永続ターミナルにテキストを送信します。デフォルトでは Enter が送信され、プロンプト、stdin 待機、出力の停止、タイムアウト、またはセッション終了まで呼び出しは待機します。バックグラウンドモードでは、job_output/job_kill 用のジョブ ID が返されます。
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Terminal session id returned by terminal_open or terminal_list."
},
"text": {
"type": "string",
"description": "UTF-8 text to write to the terminal."
},
"submit": {
"type": "boolean",
"description": "Submit Enter after text (default true). Set false for control characters or incomplete REPL input."
},
"run_in_background": {
"type": "boolean",
"description": "Return a job id immediately; collect with job_output or stop with job_kill."
}
},
"required": [
"sessionId",
"text"
]
}出典: packages/terminal/tool-terminal/src/index.ts
terminal_signal
許可されたシグナルを、永続ターミナルの現在のフォアグラウンドプロセスグループに送信します。
{
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Terminal session id."
},
"signal": {
"type": "string",
"description": "Signal to deliver. Shell-targeted SIGKILL is rejected; use terminal_close.",
"enum": [
"SIGINT",
"SIGTERM",
"SIGKILL",
"SIGTSTP",
"SIGHUP"
]
}
},
"required": [
"sessionId",
"signal"
]
}出典: packages/terminal/tool-terminal/src/index.ts
6 つのターミナルツールはオプトインであり、単発のシェル/ファイルシステムツールを補完します。terminal_send(run_in_background: true) は ctx.jobs を使用して登録します。TUI、名前付きキーシーケンス、BEL、リサイズ、自動開始、エージェント間共有はスキーマに含まれません。
@deepseek-ai/dsh-tool-goal
create_goal
現在の直接的な人間のリクエストが、自律的な目標ラウンドをまたいで継続すべき長期実行の目的である場合に、同一セッションで永続化される完了目標を 1 件作成します。ユーザーが「目標を作成」と明示しなくても、その意図を推論できます。些細な単一ターン作業には使用しないでください。実行では、人間以外の権限およびサブエージェントの権限は拒否されます。
{
"type": "object",
"properties": {
"objective": {
"type": "string",
"description": "The concrete completion objective inferred from the direct human request."
},
"max_goal_rounds": {
"type": "number",
"description": "Optional positive safe-integer limit on automatic continuation rounds."
}
},
"required": [
"objective"
]
}出典: packages/goal/tool-goal/src/index.ts
get_goal
正確な ID/リビジョン、目的、フェーズ、完了した継続ラウンド数、ラウンド上限、存在する場合のブロッカー理由、および次の継続が有効化されているかどうかを含め、現在の同一セッション目標を読み取ります。目標を更新する前に呼び出してください。
{
"type": "object",
"properties": {}
}出典: packages/goal/tool-goal/src/index.ts
update_goal
正確な現在の目標リビジョンを更新します。edit、pause、resume には、トップレベルの人間からの直接リクエストが必要です。現在の目標の自動継続中は、complete と blocked も使用できます。blocked は設定された最小ラウンド数に達する前には拒否されます。同じ条件がそのラウンド間で継続したことを判断する責任はモデルにあり、blocked_reason で説明しなければなりません。
{
"type": "object",
"properties": {
"goal_id": {
"type": "string",
"description": "Exact id returned by get_goal."
},
"revision": {
"type": "number",
"description": "Exact positive revision returned by get_goal."
},
"action": {
"type": "string",
"description": "edit | pause | resume | complete | blocked",
"enum": [
"edit",
"pause",
"resume",
"complete",
"blocked"
]
},
"objective": {
"type": "string",
"description": "Replacement objective; valid only with action edit."
},
"max_goal_rounds": {
"type": "number",
"description": "Replacement cap; valid only with action edit."
},
"blocked_reason": {
"type": "string",
"description": "Concrete blocking condition; required only with action blocked."
}
},
"required": [
"goal_id",
"revision",
"action"
]
}出典: packages/goal/tool-goal/src/index.ts
create、edit、pause、resume には直接の人間によるルート権限が必要です。complete と blocked では、正確な現在の目標ラウンドも受け付けます。blocked のデフォルトの下限は、受理済みラウンド 3 回です。
@deepseek-ai/dsh-schedule
schedule_create
現在のセッションにリマインダーを 1 件作成します。空でないプロンプトと、次のセレクターのうちちょうど 1 つを指定します。安全な正の整数の after_seconds 遅延、厳密なオフセット日時またはローカル日時オブジェクトとしての at、または 300 以上の安全な整数の every_seconds です。固定レートのリマインダーは作成時刻に合わせた状態を維持し、見逃した発生はスキップして、期限超過したルールごとに最新の発生 1 件をまとめて処理します。配信はセッションローカルです。このセッションが稼働中の場合にのみリマインダーは予定時刻に実行され、それ以外の場合はセッションが再開されるまで期限超過のままになります。
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"description": "Reminder content to present when the target becomes due."
},
"after_seconds": {
"type": "number",
"description": "Positive safe-integer delay in seconds."
},
"every_seconds": {
"type": "number",
"description": "Fixed-rate safe-integer interval in seconds, at least 300."
},
"at": {
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"time_zone": {
"type": "string"
}
},
"required": [
"date",
"time",
"time_zone"
]
}
],
"description": "Absolute target as strict offset RFC 3339 or local date/time with an explicit IANA zone."
}
},
"required": [
"prompt"
]
}ソース: packages/schedule/schedule/src/tools.ts
schedule_delete
現在のセッションでアクティブなリマインダーを、schedule_create または schedule_list が返した完全一致の ID を指定して 1 件削除します。不明な ID またはすでに完了した ID の場合は、deleted false が返されます。
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Exact session-local schedule id."
}
},
"required": [
"id"
]
}ソース: packages/schedule/schedule/src/tools.ts
schedule_list
現在のセッションでアクティブなすべてのリマインダーを作成順に一覧表示します。完全一致の ID、UTC の対象時刻、スケジュール済みまたは期限超過の状態、セッションローカルの配信モードが含まれます。
{
"type": "object",
"properties": {}
}ソース: packages/schedule/schedule/src/tools.ts
オプトインした Schedule プラグインの読み込み後に作成された、ライブのルート Agent スコープ内でのみ登録されます。バージョン 1 は after_seconds、明示的な絶対時刻 at、上限付き固定レート every_seconds を受け入れ、セッションローカルの配信を明示します。管理の読み取りと変更には、共有 Session 永続化バリアが必要です。
@deepseek-ai/dsh-tool-lsp
lsp
正確なコードナビゲーションのために言語サーバーへ問い合わせます。operation には goToDefinition、findReferences、goToImplementation、hover のいずれかを指定します。line と character は 1 始まりの UTF-16 カーソル座標です。findReferences には宣言も含まれます。
{
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "goToDefinition, findReferences, goToImplementation, or hover.",
"enum": [
"goToDefinition",
"findReferences",
"goToImplementation",
"hover"
]
},
"file_path": {
"type": "string",
"description": "The source file to query, relative to the workspace or absolute."
},
"line": {
"type": "number",
"description": "One-based line of the cursor."
},
"character": {
"type": "number",
"description": "One-based UTF-16 column of the cursor."
}
},
"required": [
"operation",
"file_path",
"line",
"character"
]
}ソース: packages/lsp/tool-lsp/src/index.ts
lsp ツールは、プロバイダーの選択と言語サーバーのサブプロセスを ctx.lsp の背後に保持するため、モデルから見えるスキーマはプロバイダー間で安定しています。実行時には登録済みのプロバイダー(例: @deepseek-ai/dsh-lsp-stdio)が必要です。存在しない場合、クエリはスキーマを変更せず、構造化された LSP_UNAVAILABLE エラーを返します。
@deepseek-ai/dsh-tool-ralph
ralph
不変の 1 つの目標に向けて、フォアグラウンドで新規エージェントの Ralph ループを実行します。直接の人間ユーザーが Ralph または新規エージェント反復を明示的に要求した場合にのみ使用してください。各ラウンドでは、親の会話や以前の子セッションを持たない新しい子を開始します。共有ワークスペースが長期記憶となり、ラウンド間を渡るのは上限付きの構造化レポートのみです。ワーカーが完了または具体的なブロッカーを報告したとき、またはラウンド上限に達したときに呼び出しは返ります。通常の長時間実行される同一セッション作業には goal ツールを使用します。
{
"type": "object",
"properties": {
"objective": {
"type": "string",
"description": "The immutable completion objective for every fresh Ralph round."
},
"maxRounds": {
"type": "number",
"description": "Optional positive safe-integer round cap, bounded by the deployment ceiling."
}
},
"required": [
"objective"
]
}ソース: packages/workflow/tool-ralph/src/index.ts
固定のフォアグラウンドワークフローでは、各ラウンドで新しい構造化された子を 1 つ開始します。モデルが選択するのは不変の目標と任意のラウンド上限のみです。
@deepseek-ai/dsh-tool-skill
skill
利用可能なスキルの完全な命令を読み込みます。タスクがそのスキルを指定しているか、明らかに一致する場合は、タスクに取りかかる前にセッションのスキルカタログにある正確なスキル名を指定してこれを呼び出してください。
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The exact skill name from the available skills list."
}
},
"required": [
"name"
]
}ソース: packages/skill/tool-skill/src/index.ts
@deepseek-ai/dsh-tool-session-query
session_event_read
認可されたセッションから、完全で省略されていないイベント 1 件と、任意で隣接する生イベントの要約を読み取ります。
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "Target session id. Omit for the current session."
},
"seq": {
"type": "integer",
"description": "Target event sequence number."
},
"before": {
"type": "integer",
"description": "Number of preceding raw events to summarize. Omit for none."
},
"after": {
"type": "integer",
"description": "Number of following raw events to summarize. Omit for none."
}
},
"required": [
"seq"
]
}ソース: packages/session-query/tool-session-query/src/index.ts
session_event_search
認可された 1 つのセッションで過去のイベントを検索します。現在のセッションでは、この呼び出しを実行するステップは除外されます。
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "Target session id. Omit for the current session."
},
"query": {
"type": "string",
"description": "Literal full-text query over the target session."
},
"seq_from": {
"type": "integer",
"description": "Inclusive event sequence lower bound."
},
"seq_to": {
"type": "integer",
"description": "Inclusive event sequence upper bound."
},
"time_from": {
"type": "string",
"description": "Inclusive timezone-qualified ISO 8601 event-time lower bound."
},
"time_to": {
"type": "string",
"description": "Inclusive timezone-qualified ISO 8601 event-time upper bound."
},
"event_types": {
"type": "array",
"description": "Event types to include.",
"items": {
"type": "string"
}
},
"surfaces": {
"type": "array",
"description": "Event surfaces to include.",
"items": {
"type": "string",
"enum": [
"current",
"shadowed",
"log-only"
]
}
}
},
"required": [
"query"
]
}ソース: packages/session-query/tool-session-query/src/index.ts
session_event_trace
認可されたセッション内の 1 つのイベントについて、直接の置換と、引用元イベントとのすべての関係を読み取ります。
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "Target session id. Omit for the current session."
},
"seq": {
"type": "integer",
"description": "Target event sequence number."
}
},
"required": [
"seq"
]
}出典: packages/session-query/tool-session-query/src/index.ts
session_search
呼び出し元ワークスペース内の過去のセッションを検索し、各セッションから最も一致度の高いイベントを返します。
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Literal full-text query over prior session history."
},
"session_ids": {
"type": "array",
"description": "Optional session ids to include.",
"items": {
"type": "string"
}
},
"created_at_from": {
"type": "string",
"description": "Inclusive timezone-qualified ISO 8601 creation-time lower bound."
},
"created_at_to": {
"type": "string",
"description": "Inclusive timezone-qualified ISO 8601 creation-time upper bound."
},
"parent_session_ids": {
"type": "array",
"description": "Optional direct parent session ids.",
"items": {
"type": "string"
}
},
"include_root_sessions": {
"type": "boolean",
"description": "Include sessions with no parent in the parent filter."
},
"availability": {
"type": "array",
"description": "Require at least one selected source availability.",
"items": {
"type": "string",
"enum": [
"live",
"persisted"
]
}
},
"event_seq_from": {
"type": "integer",
"description": "Inclusive event sequence lower bound."
},
"event_seq_to": {
"type": "integer",
"description": "Inclusive event sequence upper bound."
},
"event_time_from": {
"type": "string",
"description": "Inclusive timezone-qualified ISO 8601 event-time lower bound."
},
"event_time_to": {
"type": "string",
"description": "Inclusive timezone-qualified ISO 8601 event-time upper bound."
},
"event_types": {
"type": "array",
"description": "Event types to include.",
"items": {
"type": "string"
}
},
"event_surfaces": {
"type": "array",
"description": "Event surfaces to include.",
"items": {
"type": "string",
"enum": [
"current",
"shadowed",
"log-only"
]
}
}
},
"required": [
"query"
]
}出典: packages/session-query/tool-session-query/src/index.ts
session_trace
1 つのセッションを中心に、完全な可視の祖先および子孫関係を含む、認可済みセッションの系譜を読み取ります。
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "Target session id. Omit for the current session."
}
}
}出典: packages/session-query/tool-session-query/src/index.ts
5 つの読み取り専用ツールはプロバイダーのカーソルを隠し、不変の呼び出し元エージェントセッションからのすべての結果を認可します。このパッケージはオプトインです。強制された期限や制限付きのインライン出力を必要とする構成では、汎用のタイムアウトまたはスピルポリシーもマウントします。
@deepseek-ai/dsh-tool-subagent
subagent
自己完結したタスクをサブエージェント(独自のコンテキストで動作する別のエージェント)に委任し、調査、スコープを限定した実装、分析など、独立して集中できる作業をオフロードします。これにより、この会話のコンテキストを消費しません。サブエージェントは中間手順ではなく結果を返します。完全で自己完結したプロンプトを渡してください。サブエージェントにはこの会話は見えません。この呼び出しはデフォルトで結果を待機します。run_in_background: true を設定するとジョブ ID を返します。job_output で取得し、job_kill で停止します。
{
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "A short (3-5 word) description of the delegated task, for display."
},
"prompt": {
"type": "string",
"description": "The complete, self-contained task for the subagent. It does not share this conversation's context, so include everything it needs."
},
"run_in_background": {
"type": "boolean",
"description": "Whether to run as a background job and return its id. Defaults to false; collect with job_output or stop with job_kill."
}
},
"required": [
"description",
"prompt"
]
}出典: packages/subagent/tool-subagent/src/index.ts
登録されるツール名はロード時の toolName 設定(デフォルトは subagent)です。上記のスキーマはそのデフォルトです。提供される構成では、このパッケージをサブエージェントバックエンドごとに 1 回ロードするため、モデルにはフォークバックエンドにバインドされた subagent_fork も表示されます。各インスタンスの説明、run_in_background パラメーター、システムプロンプトポリシーは、それぞれの backgroundMode と enableRunInBackground に従います。そのため、提供される 2 つのスキーマは同一ではありません。subagent は continuable であり、省略された呼び出しのデフォルトを自動完了配信付きのバックグラウンドにします。一方、subagent_fork は one-shot のままで、デフォルトはフォアグラウンドです。packages/bundle/base/cordis.patch.yml と examples/acp-agent/cordis.yml を参照してください。
@deepseek-ai/dsh-tool-subagent-control
interrupt_agent
エージェント ID を指定して、バックグラウンドエージェントの現在のターンのキャンセルを要求します。対象は直接の子エージェントでも、その配下で作成されたより深いエージェントでもかまいません。停止するのは現在のターンのみです。すでにエージェントにキューイングされているメッセージは、後続の send_message まで保留されたままとなり、そのエージェントが開始したエージェントは実行を継続し、エージェント自体もフォローアップに利用できます。この呼び出しは停止要求が受け付けられるとすぐに返るため、対象は短時間実行を続ける場合があります。すでに完了したエージェントを中断しても、受け付けられるノーオペレーションです。
{
"type": "object",
"properties": {
"agent_id": {
"type": "string",
"description": "The agent id of the running agent to interrupt."
}
},
"required": [
"agent_id"
]
}出典: packages/subagent/tool-subagent-control/src/index.ts
list_agents
継続可能なバックグラウンドサブエージェントを、永続 ID とラベルで一覧表示します。完了状態をポーリングするためではなく、自分が開始したエージェントを思い出すために使用してください。ステータスはライブレジストリから取得されます。running はエージェントが現在作業中であること、idle はロード済みでターン間にあること(自身が開始したエージェントを待っている場合があります)、ready はストレージ内にのみ存在すること、すなわち再開可能であり、終了済みでも結果の取得待ちでもないことを示します。send_message は同じ会話で新しいターンを開始し、直接の子はどのステータスでも send_message の候補のままです。このスナップショットは配信を保証するものではありません。send_message が権威ある確認を実行し、それでも失敗する場合があります。読み取れなかった子は、黙って除外されるのではなく診断情報として報告されます。スコープ descendants は、安定した先行順序で自分の下にあるツリー全体を走査し、各エントリに永続的な直接親セッション ID と深さを注記します。send_message を使用できるのは深さ 1 のエントリのみです。より深いエントリは interrupt_agent の候補に限られます。
{
"type": "object",
"properties": {
"scope": {
"type": "string",
"description": "children (default) lists direct children only; descendants walks the complete tree below you.",
"enum": [
"children",
"descendants"
]
}
}
}ソース: packages/subagent/tool-subagent-control/src/list-agents.ts
send_message
サブエージェント ID を指定して、バックグラウンドのサブエージェントにメッセージを送信します。同じ会話を継続し、そのサブエージェントの次のターンになります。まだ作業中の場合、メッセージは現在のターンが終了するまで待機するため、すでに進行中の作業を変更できません。この呼び出しはサブエージェントからの回答を返さず、メッセージが配信されたことの確認のみを返します。追加の作業を依頼する際に使用してください。失敗した場合は、メッセージは配信されていません。
{
"type": "object",
"properties": {
"subagent_id": {
"type": "string",
"description": "The subagent id returned when the background subagent was started."
},
"message": {
"type": "string",
"description": "The message to deliver to the subagent."
}
},
"required": [
"subagent_id",
"message"
]
}ソース: packages/subagent/tool-subagent-control/src/index.ts
継続可能なバックグラウンドサブエージェントを制御する、グローバルに名前付けされたツールです。プロバイダーに紐付く tool-subagent インスタンスは個別の委任ツールを登録します。一方、このパッケージは send_message と interrupt_agent を一度だけ登録し、別途読み込まれる /list-agents プラグインから list_agents も登録します(このプラグインのカタログ行では sessionProjections とライブの Agent レジストリを使用します)。
@deepseek-ai/dsh-tool-subagent-report
report
自分を開始したエージェントに、選択した内容を報告します。終了する前に、自己完結した最終結果を添えて一度呼び出してください。また、そのエージェントが次に行う作業を変更する進捗や発見があれば、早めに報告してください。そのエージェントはワークスペースを共有していますが、あなたのトランスクリプト、ツール出力、または推論を自動では受け取りません。そのため、作業を完了しただけでは結果になりません。報告してもターンは終了せず、作業も完了しません。また、直接の親だけが受信します。呼び出しが失敗しても届いている可能性があるため、無条件に繰り返さないでください。
{
"type": "object",
"properties": {
"output": {
"type": "string",
"description": "Actionable content for your parent; summarize conclusions and reference relevant shared paths."
}
},
"required": [
"output"
]
}ソース: packages/subagent/tool-subagent-report/src/index.ts
グローバルではなく、継続可能なインプロセスの子ごとに登録されます。そのため、このスキーマはそのような子の内部でのみ表示され、グローバルな toolFilter を越えて存続します。同じコントリビューションにより、子スコープの tool:report プロンプトセクションも導入されますが、このカタログには表示されません。親向けの send_message ツールは独立して導入されます。
@deepseek-ai/dsh-tool-jobs
job_kill
ジョブ ID を指定して、実行中のバックグラウンドジョブのキャンセルを要求します。すぐに返ります。ジョブの作業が実際に停止すると、ジョブは killed として確定します。
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by the tool that started the background work."
},
"reason": {
"type": "string",
"description": "Optional short reason, recorded in the log and forwarded to the job."
}
},
"required": [
"job_id"
]
}ソース: packages/jobs/tool-jobs/src/index.ts
job_list
バックグラウンドジョブ(実行中および終了済み)を、ID、種類、ステータスとともに一覧表示します。
{
"type": "object",
"properties": {}
}ソース: packages/jobs/tool-jobs/src/index.ts
job_output
バックグラウンドジョブを読み取ります。ストリームジョブは前回の読み取り以降の出力のみを返し、最終出力ジョブは確定後にその結果を返します。すべての応答は [status: ...] で終わります。wait: true を指定しない限り、読み取りはノンブロッキングです。指定した場合は、設定された上限まで待機します。
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by the tool that started the background work."
},
"wait": {
"type": "boolean",
"description": "Block until the job reaches a terminal status or the timeout expires. A timed-out wait returns [status: running] and leaves the job alive."
},
"timeout_ms": {
"type": "number",
"description": "Max wait in milliseconds (only meaningful with wait: true). Defaults to the configured wait timeout; capped by the configured maximum."
}
},
"required": [
"job_id"
]
}ソース: packages/jobs/tool-jobs/src/index.ts
種類に依存しないバックグラウンドジョブコントローラーです。バックグラウンドの bash コマンド、PTY 送信、サブエージェントは、同じ 3 つのツールで読み取り、一覧表示、終了できます。プラグインを読み込むと、プロデューサーの ctx.jobs.start() を有効にするコントローラーが接続されます。
@deepseek-ai/dsh-tool-todo
todo_write
現在の作業用に構造化されたタスクリストを記録・更新します。呼び出すたびにリスト全体を送信してください。前のリストは置き換えられます(部分更新や項目単位の編集はありません)。複数ステップの作業を計画し、進捗を表示するために使用します。開始前に、具体的なステップごとに todo を 1 件追加してください。実際に作業中のすべての todo は in_progress にします。作業が本当に並列で進む場合(例: 同時に実行するサブエージェントやバックグラウンドコマンド)は複数、それ以外の順次作業では 1 件にします。作業が残っている間は、少なくとも 1 つのタスクを in_progress にしてください。完了した todo はその時点で completed にします(完了をまとめて更新しないでください)。すべての作業が完了するまで、in_progress の項目がない状態にしないでください。簡単な単一ステップのタスクではリストを省略してください。ステータス: pending(未開始)、in_progress(現在作業中)、completed(完了)。
{
"type": "object",
"properties": {
"todos": {
"type": "array",
"description": "The COMPLETE task list, replacing any previous list.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"content": {
"type": "string",
"description": "What the task is — a short imperative line."
},
"status": {
"type": "string",
"description": "pending (not started) | in_progress (now) | completed (done).",
"enum": [
"pending",
"in_progress",
"completed"
]
}
},
"required": [
"content",
"status"
]
}
}
},
"required": [
"todos"
]
}ソース: packages/todo/tool-todo/src/index.ts
todo_write はセッション所有の状態です。UI は最新の todo/write イベントをチェックリストとして表示します。allowParallelInProgress はデフォルト値なしで必須であるため、カタログでは選択内容として true を示しています。その説明では複数の in_progress 項目を使用するよう案内しています。false を選択するデプロイメントでは、アクティブなタスクをちょうど 1 つにするよう求める説明の同じツールを受け取ります。
@deepseek-ai/dsh-tool-workflow
workflow
大規模にサブエージェントをオーケストレーションする JavaScript ワークフロースクリプトを実行します。多数の独立した作業に分岐する作業(多数のファイルに対する監査、移行、多角的な調査、発見事項の敵対的検証など)で使用します。ターンごとに委任する代わりに、スクリプトとしてオーケストレーションを記述します。
ワークフローの識別情報は、JSON として meta パラメータに含まれます。必須の name(短い kebab-case)および description 文字列、任意の whenToUse 文字列と phases 配列({title, detail?, provider?, model?})です。script パラメータは、トップレベル await で実行されるプレーンな JavaScript 本文のみです(TypeScript ではなく、export const meta 文も使用しません。meta はコードではなくパラメータです)。最後を return <value> で終えてください。この値は JSON シリアライズ可能である必要があり、このツールの結果になります。
スクリプト本文フック:
agent(prompt, opts?): Promise<any>— 1 つのサブエージェントを完了まで実行します。opts.schemaがない場合は子の最終テキストに解決されます。opts.schema(type/properties/required/additionalProperties/items/enum/const/oneOf のみを使用するオブジェクトルートの JSON Schema。pattern/format/numeric の境界は不可)を指定すると、検証済みオブジェクトに解決されます。子が失敗した場合はnullに解決されます(.filter(Boolean)でフィルタリングします)。その他のオプションは、label(表示)、phase(進行状況グループ)、および独立したprovider/modelLLM ターゲット上書きです(どちらか一方のみでも指定できます)。それ以外(effort/isolation/agentType)は明示的に拒否されます。pipeline(items, ...stages): Promise<any[]>— 各項目を、ステージ間にバリアを設けずに個別にステージへ通します(複数ステージの作業にはこちらを推奨します)。各ステージは(prev, item, index)を受け取ります。通常のステージで例外が発生すると、その項目はnullに移り、残りのステージはスキップされます。parallel(thunks): Promise<any[]>— 引数なし関数を並行実行し、そのすべてを待機します(バリアです。ステージが先行するすべての結果をまとめて必要とする場合にのみ使用してください)。例外を送出する thunk はnullに解決されます。phase(title)— 進行状況フェーズを開始します。log(message)— 進行状況を説明します。args— ツール呼び出しのargs入力そのものです。
フックの誤用(不正な引数、不明なオプション、未対応のスキーマ、上限超過)はエラーを送出し、常にスクリプトを終了させます。項目ごとの null に変換されることはありません。
制約: 並行実行数とエージェント総数の上限が適用されます。ファイルシステム、ネットワーク、タイマー、Node.js API は提供されません。作業はエージェントが行い、スクリプトは調整のみを行います。実行はフォアグラウンドで行われ、この呼び出しはスクリプト全体が完了すると返ります。
{
"type": "object",
"properties": {
"script": {
"type": "string",
"description": "The plain-JS workflow script body (top-level await allowed; NO `export const meta` statement; end with `return <json-value>`)."
},
"meta": {
"type": "object",
"description": "The workflow identity block (plain JSON — never code).",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "Short kebab-case workflow name."
},
"description": {
"type": "string",
"description": "One-line description of what the workflow does."
},
"whenToUse": {
"type": "string",
"description": "Optional guidance on when this workflow applies."
},
"phases": {
"type": "array",
"description": "Optional phase declarations matched by phase() calls.",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"title": {
"type": "string",
"description": "The phase title phase() calls match by exact string."
},
"detail": {
"type": "string",
"description": "Optional one-line description of the phase."
},
"provider": {
"type": "string",
"description": "Optional provider override this phase is expected to use."
},
"model": {
"type": "string",
"description": "Optional model override this phase is expected to use."
}
},
"required": [
"title"
]
}
}
},
"required": [
"name",
"description"
]
},
"args": {
"type": "object",
"description": "Optional JSON input exposed to the script as the `args` global (wrap a bare list as a field, e.g. {\"files\": [...]}).",
"additionalProperties": true
}
},
"required": [
"script",
"meta"
]
}ソース: packages/workflow/tool-workflow/src/index.ts
@deepseek-ai/dsh-tool-web
web_fetch
特定の HTTP(S) URL のコンテンツを取得し、テキストにデコードして返します。
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The HTTP(S) URL to fetch."
}
},
"required": [
"url"
]
}ソース: packages/web/tool-web/src/index.ts
web_search
最新の情報をウェブで検索します。任意の要約回答とソース URL のリストを返します。
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query."
}
},
"required": [
"query"
]
}ソース: packages/web/tool-web/src/index.ts
web_search と web_fetch はプロバイダーの選択を ctx.web の背後に保持するため、モデルから見えるスキーマはバックエンドの切り替え時も安定します。