ツールシステム ToolRegistry
源码版本v2026.7.20
職務
Tool は agent が呼べる原子関数(ターミナル、ブラウザ、ファイル、MCP、スキル呼び出し……)。ToolRegistry はモジュールインポート時に AST 走査で tools/*.py のツールを自動発見して登録し、name → ToolEntry のルックアップテーブルを主ループのツールディスパッチに供給する。ツールは静的——スキルの「進化可能」と対照的。
主要ファイル
discover_builtin_tools:67-86— AST 走査でtools/*.pyからツール登録モジュールを見つける_is_registry_register_call / _module_registers_tools:30-43— モジュールがregistry.registerを呼ぶか判定class ToolEntry:87-153— 単一ツールのメタデータ(handler、schema、toolset、キャッシュフラグ)class ToolRegistry:217-365— レジストリ本体def register:365-436— ツール一つを登録、内部でToolEntryを構築get_entry / register_toolset_alias:274-290— 照合と toolset エイリアスregister_plugin_override_policy:316-365— プラグイン工具の名前空間准入ポリシーregistry シングルトン:765—registry = ToolRegistry()(モジュールレベルシングルトン)tool_error / tool_result:784-810— ツール戻り値の標準ラップtools/ ディレクトリ— 約 80 のツールファイル(terminal/browser/web/file/mcp/skills/delegate…)
データフロー
- 起動期
init_agent:276が toolsets 設定をトリガーする。 discover_builtin_tools:67がtools/ディレクトリを走査し、AST で各モジュールがregistry.registerを呼ぶか判定(tools/registry.py:30)。- 該当モジュールがインポートされ、モジュールレベルの
registry.register(...)が実行されてToolEntryがregistry シングルトン:765に書き込まれる。 - 主ループは毎ラウンド、有効な toolsets に対応する
ToolEntry.schemaを provider へ送るtoolsフィールドに集める。 - provider が tool_call を返す → 主ループは
get_entry(name)(tools/registry.py:274) で handler を探して実行 → 結果をtool_result:798でラップして戻す。
まとめ
ツールシステムの核は「インポート即登録」——AST 走査で手動のリスト管理を回避し、新規ツールは tools/ に register を呼ぶファイルを置くだけ。registry シングルトンが唯一の真実の情報源で、主ループは読むだけ。スキルとの違い:ツールは固定関数、スキルは学習ループで書き換え可能なフロー。