ツール: 概要
Tools はエージェントの手です。ツールは、モデルが会話の途中で呼び出せる機能であり、シェルコマンドの実行、HTTP URLの取得、ブラウザを開く、ファイルの書き込み、センサーの読み取りを行います。すべてのツール呼び出しは セキュリティポリシー の対象となります。成功した実行には、レシートが有効な場合に ツールレシート を含めることができます。
ツールは zeroclaw CLI のサブコマンドと混同しないでください。CLI コマンドは運用者向けであり、ツールはエージェント向けです。
エージェントは、参照するスキル、ナレッジ、および MCP バンドルを通じてツールを取得します。バンドルがエージェントにどのようにアタッチされるかについては、Agents を参照してください。プロバイダーのツール呼び出しから承認、ディスパッチ、レシート、オブザーバーイベント、および履歴エントリまでのターンレベルのパスについては、Tool execution lifecycle を参照してください。
組み込みツールを追加する前、または外部統合で置き換える前に、組み込みツールインベントリ を使用して、最小で耐久性のあるホームを選択してください。
組み込みツール
最小限のビルドには以下が含まれます:
| ツール | 何をするものか |
|---|---|
shell | ワークスペースディレクトリでシェルコマンドを実行します。コマンドの許可/拒否リストの対象となります |
file_read | 行番号付きでファイルを読み込みます。部分読み込みとバイナリファイルのbase64エンコーディングに対応しています(自律性が許可しない限り、パスはワークスペース内にある必要があります) |
file_write | ファイルを作成する(同じパス制約) |
file_edit | ファイル内の完全一致する文字列を新しい内容に置き換える |
glob_search | ワークスペース内のグロブパターンに一致するファイルを一覧表示します |
content_search | ワークスペース内のファイル内容を正規表現で検索(grep フォールバック付きの ripgrep) |
http_request | 許可リストに登録されたドメインへの HTTP GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS |
web_search_tool | ウェブ検索。プロバイダーは設定可能: DuckDuckGo(デフォルト、キー不要)、Brave、Tavily、SearXNG、Jina、または Bocha |
web_fetch | ページを取得してクリーンなプレーンテキストを返す |
browser | ヘッドレスブラウザの自動化。ブラウザの自動化 を参照してください。 |
memory_recall | 長期記憶から関連する事実、設定、コンテキストを検索します |
memory_store | 長期メモリに事実、設定、またはメモを保存する |
ask_user | アクティブなチャンネルに質問を送信し、返信を待ちます。構造化された応答のためのオプションの choices をサポートします(Telegram ではインラインキーボード、CLI では番号付きリスト)。ACP では choices は必須です。自由形式の質問は ACP の elicitation RFD を待機します。パラメーター: question(必須)、choices(オプションのリスト)、timeout_secs(デフォルト 600)。 |
escalate_to_human | 緊急度ルーティング付きの構造化されたエスカレーションメッセージを送信します。high / critical の緊急度の場合、[escalation] alert_channels に列挙されたチャネルにも通知します。パラメータ: summary(必須)、context(任意)、urgency(low/medium/high/critical、デフォルト medium)、wait_for_response(bool、デフォルト false)、timeout_secs(デフォルト 600)。ACP では、チャネルが自由形式の返信を受信できない場合、wait_for_response: true は直ちに失敗します(ACP elicitation RFD を待機中)。 |
組み込み機能と並んで常に登録されます:
| ツール | 注釈 |
|---|---|
cron_* | スケジュールされたジョブの管理: cron_add、cron_list、cron_remove、cron_update、cron_run、cron_runs |
schedule | シェル限定のワンショット/繰り返しスケジューリング |
memory_forget、memory_export、memory_purge | 長期記憶の管理 |
spawn_subagent、delegate | 子エージェントでサブタスクを実行する |
条件付きで登録済み:
| ツール | 有効化 |
|---|---|
knowledge | [knowledge].enabled = true。構造化されたリレーションシップメモリを保存します。リレーションシップメモリを参照してください |
| ハードウェアプローブ | --features hardware: GPIO の読み取り/書き込み、デバイス検出、ファームウェアの書き込み |
sop_* ツール | SOP ランタイムが有効な場合に登録されます(sop.sops_dir に空でない値が設定されている場合。デフォルトでは未設定であり、無効になっています。文書化されている値は shared/sops です):SOP を実行して検査します |
discord_search | Discord エイリアスで archive が有効になっているときに登録されます |
拡張プロトコル
組み込みツールに加えて、ZeroClawは**MCP**(Model Context Protocol)拡張インターフェースをサポートしています。任意のMCPサーバー(Claude Codeのファイルシステム、Playwright、または独自のもの)に接続すると、エージェントは起動時にそのツールを自動的に取得します。
エディターがサブプロセスとして ZeroClaw を駆動する IDE 側の統合については、ACP を参照してください。Agent Client Protocol は、エージェントが呼び出すツールではなく、受信側のセッション管理面であるため、channels 配下に配置されています。
ツールを作成する
zeroclaw-api で Tool トレイトを実装する:
#![allow(unused)]
fn main() {
#[async_trait]
pub trait Tool: Send + Sync + Attributable {
fn name(&self) -> &str;
fn description(&self) -> &str;
fn parameters_schema(&self) -> serde_json::Value; // 引数用の JSON スキーマ
async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult>;
}
}
すべての Tool は Attributable でもあるため、ツール呼び出しのログ出力や監査トレースには、ランタイムの他の部分で使用されているものと同じ <kind>.<alias> の帰属情報が付与されます。
ランタイムのツールファクトリ経由で登録します。完全なパターンについては、開発 → プラグインプロトコル を参照してください。
ツールをモデルに説明する
ツールの説明は Mozilla Fluent 文字列です。ツールごとに1つで、ロケールごとにローカライズされます。これにより、モデルのコンテキストウィンドウ内ではツールの説明を簡潔に保ちつつ、UIのローカライズを可能にします。
信頼できる情報源: crates/zeroclaw-runtime/locales/en/tools.ftl。翻訳は cargo fluent fill --locale <code> を介して生成・管理されます(Maintainers → Docs & Translations を参照)。
リスクと承認
すべてのツール呼び出しはリスクによって分類されます:
- 低 (読み取り専用、副作用なし):
file_read、memory_recall、許可されたドメインへのhttp_request GET - Medium(ローカル状態を変更):
file_write、既知の安全なコマンドを使用するshell - 高 (破壊的またはリモートの副作用): 不明なコマンドを伴う
shell、制約のない URL へのhttp_request POST
自律レベル は、各リスクティアがオペレーターの承認なしに実行できる内容を決定します。デフォルト(Supervised): 低リスクは実行、中リスクは確認要求、高リスクはブロックします。
レシートが有効な場合、実行に成功するとツールレシートが発行されます。拒否、ブロック、置換、失敗、または中断された呼び出しにはレシートは発行されません。
非CLIチャネルでのツールの無効化
スキーマにはチャネルごとの tools_allow / tools_deny フィールドはありません。ツールのゲーティングはエージェントのリスクプロファイル([risk_profiles.<alias>])に存在します。
excluded_toolsは、ローカルの CLI はそのままにしつつ、リストに記載されたツールをすべての非 CLI チャネル(Discord、Telegram、Bluesky、Matrix、Slack など)から削除します。粒度はバイナリ(CLI と非 CLI)であり、チャネルごとではありません。また、実行時に解決されるエージェント委任の許可リストからも差し引かれます。これは、下記のルールによって自動的に許可されてしまう個々の<server>__<tool>MCP 名をブロックする唯一の方法です。allowed_toolsはその逆で、エージェントモードでエージェントが呼び出せるツールの許可リストです(空または省略した場合は認可制約なしを意味し、TOML 設定ではこの 2 つを区別しません)。- MCP 例外:
allowed_toolsが空でない場合、実行時に検出された MCP ツール(名前に__を含むもの、<server>__<tool>規約)は、個別にリストする必要なく、有効な許可リストに自動的に受け入れられます。これにより、#7464 以降の eager-MCP デフォルトが、既に明示的な許可リストを固定しているエージェントでも利用可能になります。個々の MCP ツールをブロックするには、それらをexcluded_toolsにリストしてください。 - MCP の例外は、リスクプロファイルの
allowed_toolsにのみ適用されます。呼び出し元が指定する実行ごとの許可リスト(cron ジョブのallowed_tools、絞り込まれた委任呼び出しなど)は、依然として厳密な明示リストの積集合として扱われます。allowed_tools = ["cron_add"]に自身を絞り込んだジョブは、たとえエージェントのリスクプロファイルによって自動的に許可される場合であっても、指定していない実行時検出の MCP ラッパーを表に出しません。
より細かいゲート制御が必要な場合は、プロファイルの level を read_only または supervised に下げ、プロファイルごとの auto_approve / always_ask リストを使用して、機密性の高いツールをオペレーターの承認の背後にゲート制御してください。
プロファイルごとのフィールドの完全な一覧については、自律性レベルを参照してください。