Use the Best Tool
Select optimal CLI tools → graceful fallback → research when needed.
<when_to_use>
- Choosing which tool for file search, content search, JSON processing
- Tool taking unexpectedly long for task size
- User expresses frustration with current tool
- Task could be done more elegantly
- Need to verify tool availability before recommending
NOT for: tasks where tool choice is predetermined, simple one-line commands
</when_to_use>
<detection>Run detection script before selecting tools:
bun /Users/mg/Developer/outfitter/agents/outfitter/skills/which-tool/scripts/index.ts
Parse output to determine:
- Available modern tools
- Missing tools that could enhance workflow
- System context (OS, package managers)
Cache results per session — no need to re-run unless tool availability changes.
</detection> <selection>Map task to best available tool:
| Task | Preferred | Fallback | Legacy | Notes |
|------|-----------|----------|--------|-------|
| Find files by name | fd | - | find | fd: faster, better defaults |
| Search file contents | rg | - | grep | rg: respects .gitignore, faster |
| AST-aware code search | sg | rg | grep | sg: structure-aware queries |
| Process JSON | jq | - | python/node | jq: domain-specific language |
| View file with syntax | bat | - | cat | bat: syntax highlighting, git diff |
| List directory | eza | - | ls | eza: modern output, icons |
| View git diff | delta | - | git diff | delta: side-by-side, syntax highlighting |
| Navigate directories | zoxide | - | cd | zoxide: frecency-based jumping |
| Fuzzy select | fzf | - | - | fzf: interactive filtering |
| HTTP requests | httpie | - | curl | httpie: human-friendly syntax |
Selection algorithm:
- Check detection results for preferred tool
- If available → use with optimal flags
- If unavailable → check fallback column
- If no fallback → use legacy with best-effort flags
- Note gap if preferred tool would significantly improve workflow
When preferred tool unavailable:
Minor improvement (preferred 10–30% better):
- Use next best option silently
- Don't interrupt workflow
Significant improvement (preferred 2x+ better):
- Use fallback
- Surface suggestion:
◇ Alternative: {TOOL} would be {BENEFIT} — install with {COMMAND} - Continue without blocking
Critical gap (task extremely tedious with fallback):
- Surface suggestion:
◆ Caution: {TOOL} recommended for this task — {FALLBACK} will be slow/limited - Offer choice: install now, proceed anyway, defer task
Never block on missing tools — graceful degradation always.
</fallback> <research>Trigger research when:
- Tool taking 3x+ longer than expected for task size
- User explicitly asks for better approach
- Task seems like it should have specialized tool
- Current tool missing critical feature
- New tool category needed (not in selection table)
Research workflow:
- Search for
{TASK} CLI tool 2025or{TASK} CLI tool 2024 - Check GitHub trending in relevant category
- Evaluate candidates:
- Speed: benchmarks vs existing tools
- Ergonomics: default behavior, output format
- Maintenance: last commit, issue response time
- Install: complexity, dependencies
- Compatibility: OS support, integration
Present findings:
- Tool name + one-line description
- Key advantages over current approach
- Installation command
- Usage example for current task
- Trade-offs or caveats
If research yields strong candidate → add to selection table for future reference.
</research> <workflow>Standard flow:
- Receive task → categorize task type (find files, search content, process data)
- Check detection → run script if not yet run this session
- Select tool → use selection table + detection results
- Execute → run command with optimal flags
- Evaluate → if slow/frustrating → trigger research
Research flow:
- Trigger identified → surface to user with
△ This seems slow — research alternatives? - User confirms → web search for modern tools
- Evaluate candidates → speed, ergonomics, maintenance
- Present findings → tool + advantages + install + example
- Update knowledge → add to selection table if strong fit
Scenario: Search for authentication code
Task: Find all files containing "authentication"
Detection: rg available
Selection: Use rg over grep
rg "authentication" --type ts --type js
Scenario: Find config files
Task: Find all YAML files in project
Detection: fd available
Selection: Use fd over find
fd -e yaml -e yml
Scenario: Process API response
Task: Extract specific fields from JSON
Detection: jq unavailable
Fallback: Use node/python
Suggestion: ◇ Alternative: jq would simplify this — install with brew install jq
node -e "console.log(JSON.parse(require('fs').readFileSync(0, 'utf-8')).field)"
</examples>
<rules>
ALWAYS:
- Run detection script before recommending specific tools
- Use selection table to map task to best available tool
- Provide fallback when suggesting tools that might not be installed
- Surface suggestions for significant improvements (2x+ better)
- Trigger research when tool underperforms expectations
NEVER:
- Assume a tool is installed without checking detection results
- Block workflow on missing non-essential tools
- Recommend abandonware or unmaintained tools
- Use legacy tools when modern alternatives are available
- Skip fallback strategy when preferred tool missing
- tool-catalog.md — comprehensive tool documentation
- alternatives.md — how to research new tools
- detection-script.md — detection script implementation