組み込みツール
Mistermorph のツールは、最初からすべてを一括登録するわけではありません。実行環境に応じて段階的に注入されます。
- 静的ツール: 設定とディレクトリ文脈だけで作られるもの。
- Engine ツール: 1 回の agent engine 組み立て時に登録されるもの。
- ランタイムツール: LLM client/model や task 文脈が必要なもの。
- 専用ツール: Telegram や Slack など特定 runtime の中でだけ現れるもの。
ツール分類の早見表
| 分類 | いつ使えるか | ツール |
|---|---|---|
| 静的ツール | 設定だけで利用可能 | read_file、write_file、bash、powershell、url_fetch、web_search、contacts_send |
| Engine ツール | agent engine が 1 回組み上がると利用可能 | spawn、acp_spawn |
| ランタイムツール | LLM や必要な文脈が利用可能なとき | plan_create、todo_update |
| チャネル専用ツール | 現在の Channel が Telegram / Slack などの具体的 runtime のとき | telegram_send_voice、telegram_send_photo、telegram_send_file、message_react |
静的ツール(設定駆動)
workspace_dir、file_cache_dir、file_state_dir の関係は ファイルシステムのルート を参照してください。
Shell のデフォルト有効状態はプラットフォームごとに分かれます。
- Linux / macOS:
bashがデフォルトで有効、powershellはデフォルトで無効です。 - Windows:
powershellがデフォルトで有効、bashはデフォルトで無効です。 - どちらも
tools.<name>.enabledで明示的に上書きできます。
read_file
ローカルのテキストファイルを読み込みます。Agent は設定ファイル、ログ、キャッシュ結果、SKILL.md、状態ファイルの確認に使います。
- 主な制約:
tools.read_file.deny_pathsの制約を受けます。file_cache_dir/...とfile_state_dir/...のエイリアスに対応します。
write_file
ローカルファイルへ上書きまたは追記で書き込みます。中間結果の保存、状態ファイルの更新、ダウンロード結果の保存に使います。
- 主な制約: 書き込み先は
file_cache_dir/file_state_dir配下に制限されます。相対パスはデフォルトでfile_cache_dir配下になります。サイズはtools.write_file.max_bytesに制限されます。
bash
ローカルの bash コマンドを実行します。既存 CLI の利用、一時的な変換処理、スクリプト実行、環境確認に使います。
- 主な制約:
deny_pathsと内部 deny-token ルールの制約を受け、子プロセスには許可済み環境変数だけが渡されます。 - 現在の分離実行挙動:
run_in_subtask=trueを明示すると、コマンドは 1 層の direct boundary で実行されます。runtime が stream sink を持つ場合、stdout/stderr はコマンド終了前にプレビューへ流れます。
powershell
ローカルの PowerShell コマンドを実行します。Windows 向けの shell ツールで、既存 CLI の呼び出し、スクリプト実行、ローカル環境確認に使います。
- 主な制約:
tools.powershell.enabledで無効化できます。deny_pathsと内部 deny-token ルールの制約を受け、子プロセスには許可済み環境変数だけが渡されます。 - 現在の挙動:
bashと同じfile_cache_dir/file_state_dirエイリアスを使えます。file_cache_dir\foo.txtのようなバックスラッシュ形式にも対応します。 bashとの差分: 現時点ではrun_in_subtask=trueは使えません。
url_fetch
HTTP(S) リクエストを実行して応答を返すか、応答をローカルキャッシュファイルへ保存します。GET/POST/PUT/PATCH/DELETE、download_path、auth_profile に対応します。
- 主な制約: 機密性の高いリクエストヘッダはブロックされます。リクエストは Guard のネットワークポリシーの対象です。
web_search
Web 検索を行い、構造化された検索結果を返します。手がかり、候補ページ、公開情報の入口を探すのに向いています。
- 主な制約: 返るのは検索結果の要約であり、ページ全文ではありません。件数は
tools.web_search.max_resultsとコード側の上限で制御されます。
contacts_send
単一の連絡先に外向きメッセージを送ります。実際の送信経路は、連絡先プロフィールに登録された Telegram / Slack / LINE などから選ばれます。
- 主な制約: 一部の group/supergroup 文脈ではデフォルトで隠されます。
Engine ツール
これらのツールは 1 回の agent engine 組み立て時に登録されます。現在の engine 状態に依存するため、静的な base registry には含まれません。
spawn
独立した文脈と明示的なツールホワイトリストを持つ Subagent を起動します。親 agent は内側の実行終了まで同期で待ち、構造化された JSON envelope を受け取ります。
- 主な制約:
tools.spawn.enabledで無効化できます。内側の agent が使えるのは引数toolsで明示したツールだけです。生 transcript はデフォルトで親 loop に戻しません。 - 現在の観測ヒント:
spawnは任意でobserve_profileを受け取れます。defaultは実行中プレビューを保守的に扱い、long_shellは長いシェル出力やログ向き、web_extractは生の高ノイズ出力をいったん抑えます。
引数の詳細、返り値 envelope の各フィールド、test prompt、bash.run_in_subtask=true との違いは Subagents を参照してください。
acp_spawn
設定済み profile を通して外部 ACP agent を起動します。親 agent は同期で待ちますが、内側の実行は別のローカル Mister Morph loop ではなく ACP 経由です。
- 主な制約:
tools.acp_spawn.enabledで無効化できます。対応する profile がacp.agentsに必要です。現在の transport はstdioのみです。 - 現在の挙動: 1 回の
acp_spawnは 1 つの ACP session を作り、file / terminal callback を処理し、他の分離実行と同じSubtaskResultenvelope を返します。
profile 設定、実行時の流れ、Codex adapter の注意点は ACP を参照してください。
ランタイムツール
これらのツールは、Agent 実行中に動的に注入されます。
plan_create
構造化された実行計画 JSON を生成します。通常は複雑なタスク分解で使われます。
- 主な制約: ステップ数は
tools.plan_create.max_stepsに制限されます。
todo_update
file_state_dir 配下の TODO ファイルを更新します。TODO.md の一回限りの TODO、TODO.DONE.md の完了済み TODO、TODO.RECUR.md の繰り返し TODO を扱います。
- 主な制約:
addではpeopleが必要です。completeは意味的マッチングを使うため、候補がない場合や曖昧な場合はエラーになります。 - 繰り返し TODO は
action=add_recurringで追加します。
TODO ファイルと HEARTBEAT.md の実行時の流れは TODO と Heartbeat を参照してください。
専用ツール
これらのツールは、通常の CLI や汎用 embedding では存在しません。対応するチャネル runtime に十分な文脈があるときだけ注入されます。
telegram_send_voice
ローカルの音声ファイルを現在の Telegram チャットへ送ります。
- 主な制約: ローカルファイル送信のみ対応します。通常は
file_cache_dir配下のファイルが前提で、インラインの text-to-speech 生成は行いません。
telegram_send_photo
ローカル画像を Telegram にインライン写真として送ります。
- 主な制約: これは写真送信であり、文書送信ではありません。添付ファイルとして届けたい場合は
telegram_send_fileを使います。
telegram_send_file
ローカルのキャッシュファイルを Telegram にドキュメントとして送ります。
- 主な制約: 送れるのはローカルのキャッシュファイルだけです。ディレクトリは無効で、ファイルサイズ上限もあります。
message_react
現在のメッセージに軽量な emoji reaction を付けます。確認、賛同、既読に近いリアクションなど、わざわざ別のテキスト返信を出すほどではない場面に向いています。
- Telegram 版: Telegram メッセージに emoji reaction を付け、
is_bigも使えます。 - Slack 版: Slack メッセージに reaction を付けます。raw Unicode emoji ではなく Slack の emoji 名を使います。
- 主な制約: 引数の形はチャネルごとに異なります。対象メッセージ文脈がない場合、このツールは現れないか、明示的な対象指定が必要になります。
Core 組み込み時のホワイトリスト
integration.Config.BuiltinToolNames で組み込みツールを制限できます。
cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"}空配列は全組み込みツールを意味します。
設定セクション
tools:
read_file: ...
write_file: ...
spawn: ...
acp_spawn: ...
bash: ...
powershell: ...
url_fetch: ...
web_search: ...
contacts_send: ...
todo_update: ...
plan_create: ...Console の Setup / Settings 画面と /api/settings/agent の tools payload も、tools.spawn.enabled や tools.acp_spawn.enabled のような同じ入れ子構造を使います。
完全な設定は 設定フィールド を参照してください。