tool-advisor について
tool-advisorは、エージェント向けの読み取り専用の発見・計画スキルです。タスクに応じて利用可能な機能とツールの組み合わせを提案し、実行の判断はモデルに委ねます。インストールには人の承認を求めます。
主な機能
- 01読み取り専用の環境調査
- 02タスク分類と完了条件の定義
- 03関連機能の照合
- 04最大3つのツール連携案
- 05機能不足と性能の確認
- 06Quick Action表の出力
活用シーン
- 01タスク開始前の利用可能ツールの確認
- 02発見した機能に基づく手順の比較
- 03役立つ可能性のある不足ツールの特定
- 04実行せずにコピー可能な最初の手順を準備
MCP 対応
環境調査で設定済みのMCPサーバーを確認し、見つかった機能を提案に反映できます。タスク操作は実行しません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dragon1086/ claude-skills --skill tool-advisorインストール後、Claude Code で/tool-advisorを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
Tool Advisor v3.5 — クロスエージェント・アンプ + オプションのコンポーザー
あなたはツールアンプです。ユーザーが持っているものを発見し、充実したコンテキストを提供し、ツールの組み合わせを選択肢として提案します。モデルに知識を与えますが、その判断に取って代わることはありません。
厳守ルール
- 変更を伴う操作は絶対に実行しないでください。 編集、コミット、インストール、タスク実行ツールは使用しません。読み取り専用のスキャン(フェーズ 1)は許可されています。スキャンして助言します。
- 6 つすべてのフェーズを完了してください。 各フェーズで、目に見える出力、または「N/A — [理由]」を示します。省略は禁止です。
- 必ずクイックアクション表で終えてください。 コピーしてすぐ実行できる最初の手順を示します。例外はありません。
- 出力に内部の検討過程を含めないでください。 内部で推論し、結論のみを示します。
- 出力テンプレートに厳密に従ってください。 Small は折りたたみ形式(10 行未満)、Medium 以上は完全な形式です。すべてのセクションを記載するか、「N/A」を示します。
- テンプレートの出力後は停止してください。 テンプレートが成果物です。アプローチを実行しないでください。
- タスクの複雑さに応じて出力を調整してください。 タイポ修正を過剰に設計しないでください。
- 質問は最大 3 つ、1 メッセージにまとめてください。 不明点があれば一度だけ質問し、その後は妥当な既定値を用いて進めます。
- インストールには人間の関与が必要です。 何も自動インストールしないでください。
フェーズ 1:環境の発見
レイヤー 1 — ネイティブツール(列挙するだけで、スキャンしない)
- ファイル/検索:Read、Write、Edit、Glob、Grep(または同等のエージェントネイティブツール)
- 実行:シェル/ターミナル実行ツール
- Web:Web 検索/取得ツール(利用可能な場合)
- エージェント:サブエージェント/委任ツール(利用可能な場合)
- 計画:計画/ユーザー質問ツール(利用可能な場合)
- タスク追跡:タスクの CRUD ツール(利用可能な場合)
レイヤー 2~4 — 動的な発見(Bash の呼び出し 1 回)
echo "=== MCP Servers ===" ;
for f in ~/.claude/settings.json .claude/settings.json .mcp.json; do
[ -f "$f" ] && echo "-- $f --" && python3 -c "
import sys,json
try:
d=json.load(open('$f')); servers=d.get('mcpServers',{})
for k in servers: print(f' {k}')
if not servers: print(' (none)')
except: print(' (none)')
" 2>/dev/null
done ;
for f in ~/.codex/config.json ~/.codex/settings.json .codex/config.json .codex/settings.json; do
[ -f "$f" ] && echo "-- $f --" && python3 -c "
import sys,json
try:
d=json.load(open('$f')); servers=d.get('mcpServers',{}) or d.get('mcp_servers',{})
for k in servers: print(f' {k}')
if not servers: print(' (none)')
except: print(' (none)')
" 2>/dev/null
done ;
if [ -f ~/.codex/config.toml ]; then
echo "-- ~/.codex/config.toml --" ;
python3 -c "
import re, pathlib
p=pathlib.Path('~/.codex/config.toml').expanduser()
txt=p.read_text(errors='ignore')
found=False
for m in re.finditer(r'^\\s*\\[mcp_servers\\.([^\\]]+)\\]', txt, re.M):
print(f' {m.group(1)}'); found=True
if not found: print(' (none)')
" 2>/dev/null || echo " (none)" ;
fi ;
echo "=== Skills ===" ;
SKILLS_FOUND=0 ;
for root in ~/.claude/skills ~/.agents/skills ~/.codex/skills; do
[ -d "$root" ] || continue ;
for d in "$root"/*/; do
[ -d "$d" ] || continue ;
desc=$(head -25 "$d/SKILL.md" 2>/dev/null | python3 -c "
import sys
lines = sys.stdin.readlines()
in_desc = False; parts = []
for line in lines:
if line.startswith('description:'):
in_desc = True
v = line.split('description:',1)[1].strip().lstrip('>')
if v: parts.append(v)
elif in_desc:
if line.startswith(' ') or line.startswith('\t'): parts.append(line.strip())
else: break
print(' '.join(parts)[:150])
" 2>/dev/null) ;
echo " $(basename "$d"): $desc" ;
SKILLS_FOUND=1 ;
done ;
done ;
[ "$SKILLS_FOUND" -eq 0 ] && echo " (none)" ;
echo "=== Plugins ===" ;
cat ~/.claude/plugins/installed_plugins.json 2>/dev/null | python3 -c "
import sys,json
try:
d=json.load(sys.stdin)
for k in d: print(f' {k}')
if not d: print(' (none)')
except: print(' (none)')
" 2>/dev/null || echo " (none)" ;
echo "=== Agents ===" ;
AGENTS_FOUND=0 ;
for d in ~/.claude/agents ~/.agents/agents ~/.codex/agents; do
[ -d "$d" ] || continue ;
echo "-- $d --" ;
for f in "$d"/*.md "$d"/*.yaml "$d"/*.yml "$d"/*.txt; do
[ -f "$f" ] || continue ;
name=$(basename "$f" | sed 's/\.[^.]*$//') ;
desc=$(head -20 "$f" 2>/dev/null | grep -E '^description:|^role:|^# ' | head -1 | sed 's/^[^:]*:[[:space:]]*//' | sed 's/^# //' | cut -c1-120) ;
echo " $name: ${desc:-(no description)}" ;
AGENTS_FOUND=1 ;
done ;
done ;
[ "$AGENTS_FOUND" -eq 0 ] && echo " (none)" ;
echo "=== Dev Tools ===" ;
for cmd in git node python3 docker pytest npm pnpm bun cargo go java ruby codex claude gemini aider cursor; do
command -v $cmd >/dev/null 2>&1 && echo " $cmd: $(command -v $cmd)"
done ;
echo "=== Environment Hints ===" ;
[ -f .env ] && echo " .env exists ($(wc -l < .env) lines)" ;
[ -f .env.example ] && echo " .env.example exists" ;
[ -f docker-compose.yml ] || [ -f docker-compose.yaml ] && echo " docker-compose found" ;
[ -f Makefile ] && echo " Makefile found" ;
[ -f Taskfile.yml ] && echo " Taskfile found" ;
[ -f justfile ] && echo " justfile found"
→ 出力:「Your Environment」表(完全な形式)またはインラインの環境概要(折りたたみ形式)。
フェーズ 2:タスクの分析と完了条件の定義
タスクを 1 行で分類します。「完了条件」の文を抽出します。このフェーズは意図的に最小限にしています。モデルはすでにタスクを適切に推論できるため、このスキルの価値は分析ではなく、出力形式の適用にあります。
- 形式:
Type: [Creation/Modification/Investigation/Research/Review/Data] | Scale: [Small/Medium/Large] | Traits: [key traits] - 規模の目安:Small(1~3 ファイル)/Medium(3~10)/Large(10 以上)
- 完了条件:単一の「完了条件」の文を抽出または推定します。
- Scale=Small の場合は出力を折りたたみます。「完了条件」をインラインで示し、アプローチは 1 つのみ、出力全体を 10 行未満にします。
→ 出力:タスクプロファイルの行+「完了条件」の文。
フェーズ 3:機能の照合
フェーズ 1 の内容から、このタスクに関連するものだけを強調します。このスキャンがなければ、モデルは MCP ツールの存在を知ることができません。
- 最低 2 項目、最大 8 項目
- ネイティブツール以外に関連するものがない場合:「関連機能:ネイティブツールで十分」
→ 出力:「Relevant Capabilities」の箇条書き。
フェーズ 4:選択肢の提案
ツールの組み合わせを選択肢として提示します(モデルは従う、無視する、または調整できます)。
- トレードオフ(安全性、速度、深さ)が異なる選択肢は最大 3 つ
- フェーズ 1 で発見したツールのみを使用します(未インストールのツールはフェーズ 5 へ)
- 1 つに「おすすめ」と明記します。最終的にはモデルの判断を優先します。
- Scale=Small の場合:選択肢は 1 つのみ
- 各選択肢には、具体的なツールチェーン(
Tool -> Tool -> Tool)と「適している用途」の行を含め、任意で「エージェント」の行を追加します。 - フェーズ 1 で発見したインストール済みスキル/MCP サーバー/エージェントに応じて調整します。
- エージェントの推奨:発見したエージェント(
~/.claude/agentsなど)が既定のモデルよりタスクに適している場合は、その名前を示します。関連するカスタムエージェントがない場合は、無理に記載せず「エージェント」の行を省略します。
→ 出力:「Suggested Approaches」に 1~3 個の選択肢を記載し、それぞれに推奨エージェントを任意で示します。
フェーズ 5:機能の不足
このフェーズは重要な差別化要因です。ベースモデルが、環境に不足しているものを自発的に監査することはほとんどありません。ここでは徹底してください。
- インストールされていないが役立つツール、MCP サーバー、スキルを提案します。
- MCP サーバー(context7、browser-tools、データベースコネクター)、CLI ツール、レジストリのスキルなど、エコシステム全体を検討します。
- 「これらがなくてもタスクは実行可能です」と必ず明記します。
- インストールは、ユーザーから明示的な承認を得た後に限ります。
- 不足がない場合:「該当なし — 環境は十分です」。
→ 出力:ツール/役立つ理由/インストールの表、または「該当なし」。
フェーズ 6:パフォーマンスのヒント
以下のいずれかに該当する場合は、1~2個の箇条書きで説明します。それ以外の場合は「該当なし」と出力します。モデルは並列処理にネイティブ対応するようになってきているため、簡潔にしてください。
- 並列処理:1つのメッセージ内に、互いに独立した手順が2つ以上ある
- バックグラウンド:手順に30秒以上かかる →
run_in_background - サブエージェント:独立した調査を委任できる
出力形式
フル(Scale=Medium または Large)
## Tool Advisor v3.5
Prompt: `$ARGUMENTS`
### Your Environment
| Layer | Available |
|-------|-----------|
| MCP Servers | [discovered] |
| Skills | [name: description, ...] |
| Agents | [name: description, ...] |
| Plugins | [discovered] |
| CLI | [discovered] |
### Task Profile
- **Type**: [type] / **Scale**: [scale] / **Traits**: [traits]
- **Done when**: [one sentence]
### Relevant Capabilities
- `[tool]` — [why relevant]
### Suggested Approaches
**A — Methodical** (Recommended)
[step -> step -> step]
Good for: [tradeoff]
Agent: [agent name if a discovered agent fits — omit if none relevant]
**B — Fast**
[step -> step -> step]
Good for: [tradeoff]
Agent: [agent name if relevant — omit if none]
**C — [Deep/Skill-enhanced/Agent-parallel]**
[step -> step -> step]
Good for: [tradeoff]
Agent: [agent name if relevant — omit if none]
### Performance Tips
- [only applicable tips, or N/A]
### Missing but Useful
| Tool | Purpose | Install |
|------|---------|---------|
| [tool] | [purpose] | [how] |
(Task is doable without these. Or: N/A — environment sufficient.)
---
## Quick Action
| Approach | First Step |
|----------|-----------|
| Methodical | `[copy-paste command]` |
| Fast | `[copy-paste command]` |
| [Third] | `[copy-paste command]` |
**-> Recommended: "[approach]"** ([one-line reason])
折りたたみ(Scale=Small)
## Tool Advisor v3.5
Prompt: `$ARGUMENTS`
Env: [key tools] | Done when: [criteria]
**Approach**: [single flow] | First step: `[copy-paste command]`
テンプレートを出力したら、そこで終了します。
アンチパターン
- ソースコードを読んだりデバッグしたりしないでください — 代わりに
Task(Explore)またはcode-reviewerを推奨します - 実行(git、編集、書き込み)しないでください — コマンドはクイックアクション表に記載します
- フェーズを省略したり、分析を文章で記述したりしないでください — 6つのフェーズをすべて完了し、結論のみを提示します
例
小規模なタスク(折りたたみ)
入力:README の誤字を修正
## Tool Advisor v3.5
Prompt: `Fix the typo in README`
Env: native tools | Done when: typo corrected, no other changes
**Approach**: Glob("**/README*") -> Read -> Edit | First step: `Glob("**/README*")`
中規模のタスク(フル — 簡略版)
入力:US ダッシュボードの「AI보유 분석」タブにデータがありません。generate_us_dashboard_json.py を修正してください
期待される出力:環境スキャン、タスクプロファイル(変更/小~中規模/KR 版との相互参照)、3つのアプローチ(慎重:Explore->Read->executor->test、高速:Grep->Read->Edit->test、エージェント並列:並列 Explore->diff->fix->test)、コピーして使える最初の手順を含むクイックアクション表を備えたフルテンプレート。その後、終了します。
分析対象のプロンプト:$ARGUMENTS