3.2 KiB
3.2 KiB
Detection Script Implementation
The detection script identifies available CLI tools on the system.
Purpose
Before recommending specific tools, check what's actually installed. Prevents suggesting unavailable tools and enables graceful fallback.
Location
outfitter/skills/which-tool/scripts/index.ts
Expected Output Format
{
"available": {
"find_files": ["fd", "find"],
"search_content": ["rg", "grep"],
"ast_search": ["sg"],
"process_json": ["jq"],
"view_file": ["bat", "cat"],
"list_dir": ["eza", "ls"],
"git_diff": ["delta", "git"],
"navigate": ["zoxide", "cd"],
"fuzzy_select": ["fzf"],
"http": ["httpie", "curl"]
},
"missing": ["sg", "delta", "zoxide"],
"system": {
"os": "darwin",
"platform": "arm64",
"package_managers": ["brew"]
}
}
Implementation Details
The script should:
- Check tool availability using
whichorcommand -v - Categorize by task type (find_files, search_content, etc.)
- Detect package managers for installation suggestions
- Return structured JSON for easy parsing
Example detection check:
async function checkTool(name: string): Promise<boolean> {
try {
const proc = Bun.spawn(['which', name], {
stdout: 'pipe',
stderr: 'pipe',
});
const exitCode = await proc.exited;
return exitCode === 0;
} catch {
return false;
}
}
Usage in Skill
# Run detection
bun /Users/mg/Developer/outfitter/agents/outfitter/skills/which-tool/scripts/index.ts
# Parse results
DETECTION_RESULTS=$(bun /path/to/script)
Agent parses JSON to determine:
- Which preferred tools are available
- Which tasks need fallback
- What to suggest installing for significant improvements
Caching Strategy
Run once per session:
- First tool selection → run detection, cache results
- Subsequent selections → use cached results
- Detection refresh → only if tool installation occurs mid-session
Tools to Check
Core Tools (check these)
File operations:
- fd (preferred) / find (fallback)
- bat (preferred) / cat (fallback)
- eza (preferred) / ls (fallback)
Search:
- rg (preferred) / grep (fallback)
- sg (preferred for AST) / rg (fallback)
Data processing:
- jq (preferred) / node/python (fallback)
Version control:
- delta (preferred) / git diff (fallback)
Navigation:
- zoxide (preferred) / cd (fallback)
- fzf (no direct fallback)
Network:
- httpie (preferred) / curl (fallback)
Package Managers (detect for install suggestions)
macOS:
- brew (primary)
- port (alternative)
Linux:
- apt (Debian/Ubuntu)
- dnf (Fedora/RHEL)
- pacman (Arch)
- zypper (openSUSE)
Cross-platform:
- cargo (Rust tools: rg, fd, bat, etc.)
- npm (JavaScript tools)
- pipx (Python tools)
Error Handling
Script should:
- Never fail/throw — return partial results if some checks fail
- Log warnings for unexpected errors
- Provide empty arrays for unavailable categories
- Always return valid JSON
Future Enhancements
Potential additions:
- Version checking (some tools require minimum version)
- Performance profiling (measure actual tool speed)
- Configuration detection (is tool already configured?)
- Integration checking (shell aliases, git config)