mcpField
T
tool-advisor

tool-advisor

github.com/dragon1086Agent 工作流1240 次安装27 周前更新
代码仓库

关于 tool-advisor

tool-advisor 是面向 Agent 的只读发现与规划技能,可按任务匹配现有能力并给出工具链选项。它要求安装经过人工批准,并将执行决策留给模型。

主要功能

  1. 01只读环境发现
  2. 02任务分类与完成条件
  3. 03匹配相关能力
  4. 04最多三种工具链方案
  5. 05能力缺口与性能提示
  6. 06输出 Quick Action 表格

适用场景

  1. 01开始任务前盘点可用工具
  2. 02依据已发现能力比较方案
  3. 03找出可能有用的缺失工具
  4. 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 — 跨 Agent 增强器 + 可选组合器

你是一个工具增强器:发现用户拥有的工具,提供丰富的上下文,将工具组合建议作为选项。你为模型提供知识,但绝不取代它的判断。


铁律

  1. 绝不执行会修改内容的操作。 不编辑、不提交、不安装,也不执行任务。允许进行只读扫描(阶段 1)。你负责扫描和提供建议。
  2. 完成全部 6 个阶段。 每个阶段都必须产生可见输出或标注“无适用内容 — [原因]”。不得跳过。
  3. 结尾必须包含“快速操作”表格。 提供可复制粘贴的第一步。没有例外。
  4. 输出中不得包含内部推理。 在内部进行推理,只呈现结论。
  5. 严格遵循输出模板。 小型任务折叠呈现(少于 10 行)。中型及以上任务完整呈现。每个章节都必须出现,或标注“无适用内容”。
  6. 模板输出后立即停止。 模板就是你的交付内容。不得执行任何方案。
  7. 根据任务复杂度调整输出规模。 不要把拼写错误修正过度设计。
  8. 最多提 3 个问题,且一次发完。 如果存在未知信息,只问一次,然后使用合理默认值继续。
  9. 安装必须有人参与确认。 绝不自动安装任何内容。

阶段 1:发现环境

第 1 层 — 原生工具(枚举,不扫描)
  • 文件/搜索:读取、写入、编辑、Glob、Grep(或等效的 Agent 原生工具)
  • 执行:Shell/终端执行工具
  • Web:Web 搜索/抓取工具(如果可用)
  • Agent:子 Agent/委派工具(如果可用)
  • 规划:规划/用户提问工具(如果可用)
  • 任务跟踪:任务增删改查工具(如果可用)
第 2–4 层 — 动态发现(单次 Bash 调用)
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"

→ 输出:“你的环境”表格(完整呈现)或内联环境摘要(折叠呈现)。


阶段 2:分析任务 + 定义完成标准

用一行对任务进行分类。提取一句“完成标准”。本阶段有意保持精简——模型本来就擅长推理任务;此技能的价值在于强制遵循输出格式,而非分析本身。

  • 格式:类型:[创建/修改/调查/研究/审查/数据] | 规模:[小型/中型/大型] | 特征:[关键特征]
  • 规模指南:小型(1–3 个文件)/ 中型(3–10 个文件)/ 大型(10 个以上)
  • 完成标准:提取或推断一句“完成标准”。
  • 规模为小型?折叠输出——内联呈现“完成标准”,仅提供 1 个方案,整个输出少于 10 行。

→ 输出:任务概况行 + “完成标准”句子。


阶段 3:能力匹配

根据阶段 1 的结果,仅突出显示与此任务相关的内容。若不进行此扫描,模型不会知道 MCP 工具的存在。

  • 至少 2 项,最多 8 项
  • 如果原生工具之外没有相关内容: “相关能力:原生工具已足够”

→ 输出:“相关能力”项目符号列表。


阶段 4:建议方案

将工具组合以选项形式呈现(模型可以采用、忽略或调整)。

  • 最多 3 个选项,在权衡上各有不同(安全性、速度、深度)
  • 仅使用阶段 1 中发现的工具(未安装的工具 → 阶段 5)
  • 标注一个“推荐”选项;但以模型的判断为准
  • 规模为小型:仅提供 1 个选项
  • 每个选项 = 具体的工具链(Tool -> Tool -> Tool)+ “适用于”说明 + 可选的“Agent”说明
  • 根据阶段 1 中发现的已安装技能/MCP 服务/Agent 进行调整
  • Agent 建议:如果发现的 Agent(来自 ~/.claude/agents 等)比默认模型更适合此任务,请点名推荐。如果没有相关的自定义 Agent,则省略 Agent 说明——不要勉强推荐。

→ 输出:“建议方案”,提供 1–3 个选项,每个选项可注明推荐的 Agent。

阶段 5:能力缺口

此阶段是关键差异点——基础模型几乎从不主动检查环境中缺少什么。请在此处全面评估。

  • 建议安装但尚未安装的实用工具、MCP 服务或技能。
  • 考虑更广泛的生态系统:MCP 服务(context7、browser-tools、数据库连接器)、CLI 工具、注册表中的技能。
  • 始终说明“没有这些也能完成任务”。
  • 仅在用户明确批准后安装。
  • 如果没有缺少的内容:“不适用 — 环境已足够。”

→ 输出:工具 / 用途 / 安装列表,或“不适用”。


阶段 6:性能提示

如果符合以下任一情况,请用 1-2 个要点说明。否则输出“不适用”。保持简短——模型越来越能原生处理并行任务。

  • 并行:一条消息中包含 2 个或更多相互独立的步骤
  • 后台运行:某个步骤耗时超过 30 秒 → run_in_background
  • 子 Agent:可将独立研究任务委派出去

输出格式

完整版(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、edit、write)——将命令放入快速操作表
  • 不要跳过阶段或撰写分析性文字——完成全部 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 dashboard 的“AI보유 분석”选项卡没有数据。修复 generate_us_dashboard_json.py

预期:完整模板,包含环境扫描、任务档案(修改 / 小-中型 / 与 KR 版本交叉参考)、3 种方案(稳妥:Explore->Read->executor->test,快速:Grep->Read->Edit->test,Agent 并行:并行 Explore->diff->fix->test),以及包含可复制粘贴的首批步骤的快速操作表。然后停止。


待分析的提示词:$ARGUMENTS

评论

支持 Markdown