📦 deps(thirdparty): update snapshots

This commit is contained in:
ci[bot]
2026-05-29 08:33:53 +00:00
parent fdb52f1e96
commit 06e0d13d57
1615 changed files with 232858 additions and 0 deletions
@@ -0,0 +1,673 @@
# Researching Tool Alternatives
Guide for discovering and evaluating modern CLI tools when current tools underperform.
## When to Research
### Performance Triggers
Research alternatives when you observe:
- **Slow execution**: Command takes >5 seconds on typical workload
- **Resource spikes**: High CPU/memory usage for simple operations
- **Blocking behavior**: Tool blocks the terminal for extended periods
- **Scale issues**: Performance degrades significantly with file count or size
- **3x+ slower than expected**: Tool taking much longer than task size suggests
### Ergonomic Triggers
Consider alternatives when:
- **Complex syntax**: Requiring frequent man page lookups for basic operations
- **Poor defaults**: Always passing the same flags to get desired behavior
- **Missing features**: Workarounds needed for common tasks
- **Error messages**: Cryptic or unhelpful output on failure
- **Repeated complex command chains**: Same multi-tool pipeline used frequently
### Maintenance Triggers
Look for replacements when:
- **Unmaintained**: No updates in 2+ years, open issues piling up
- **Deprecated**: Tool documentation marks it as legacy
- **Security issues**: Known vulnerabilities without patches
- **Compatibility**: Broken on modern OS/architecture
### User Signal Triggers
Always research when:
- Explicit request: "Is there a better way to do this?"
- Frustration indicators: "This is taking forever", "Why is this so slow?"
- Performance complaints about specific tool
- User asks about alternatives or modern equivalents
### Context Triggers
Consider research for:
- **New categories**: Task type not in current tool catalog
- **Building automation**: Tool will run frequently, performance matters
- **New environment setup**: Opportunity to establish good defaults
- **Cross-tool integration**: Multiple tools could be replaced by one
## Where to Look
### Primary Sources
#### 1. GitHub Search
**Search patterns**:
```
site:github.com {category} rust OR go language:Rust OR language:Go stars:>1000
site:github.com {category} CLI tool stars:>500
site:github.com modern {legacy-tool} alternative
```
**Examples**:
```
site:github.com file search rust language:Rust stars:>1000
site:github.com grep alternative rust language:Rust stars:>1000
site:github.com modern ls replacement stars:>500
```
**Why GitHub:**
- Active development visible (commit history)
- Star count indicates adoption and community validation
- Issues/PRs show maintenance quality
- README usually has benchmarks and comparisons
#### 2. Curated Lists
**awesome-cli-apps**: <https://github.com/agarrharr/awesome-cli-apps>
- Categorized by function
- Curated for quality
- Regularly updated
**modern-unix**: <https://github.com/ibraheemdev/modern-unix>
- Specifically Unix tool replacements
- Focus on performance and ergonomics
- Comparison with legacy tools
**awesome-tuis**: <https://github.com/rothgar/awesome-tuis>
- Terminal UI applications
- Interactive tools
- Well-maintained list
**Why curated lists:**
- Pre-filtered for quality
- Organized by category
- Community-vetted
#### 3. Language-Specific Ecosystems
**Rust CLI Working Group**:
- <https://rust-cli.github.io/book/>
- <https://lib.rs/command-line-utilities>
**Go CLI Tools**:
- <https://github.com/avelino/awesome-go#command-line>
**Why language ecosystems:**
- Rust tools often fastest (native performance, zero-cost abstractions)
- Go tools good balance (fast, easy distribution, single binary)
- Language communities maintain tool lists
### Secondary Sources
#### Hacker News
**Search patterns**:
```
site:news.ycombinator.com {tool} alternative
site:news.ycombinator.com modern {category} tools
site:news.ycombinator.com CLI productivity
```
**Why HN:**
- Real-world usage discussions
- Trade-off analysis from practitioners
- Early visibility into trending tools
- Critical perspectives, not just hype
#### Reddit Communities
**r/commandline** - Dedicated CLI tool discussions
**r/rust** - Rust-based CLI tools (often performance-focused)
**r/golang** - Go-based tools
**r/programming** - General tool discussions
**Why Reddit:**
- User reviews and experiences
- Comparison threads
- Common pain points surfaced
#### Tool Comparison Sites
**AlternativeTo**: <https://alternativeto.net>
- User ratings
- Feature comparison matrices
- Platform availability
**Why comparison sites:**
- Side-by-side feature lists
- Community ratings
- Discover tools you didn't know existed
### Research Workflow
**Query progression**:
1. `{TASK} CLI tool 2025` or `{TASK} CLI tool 2024`
2. `best {TASK} command line tool`
3. `modern alternative to {LEGACY_TOOL}`
4. `{LANGUAGE} {TASK} CLI` (try rust first, then go)
**Initial filtering**:
- Published/updated within last 2 years
- Active development (commits within 6 months)
- Community traction (GitHub stars >500 for niche, >1000 for common tools)
- Clear documentation and examples
- Available in package managers
## Evaluation Criteria
Evaluate candidates across these dimensions:
### 1. Speed (Weight: High - 40%)
**Measure:**
- Benchmarks on representative workload
- Compare with legacy tool on same task
- Check scaling behavior (10 files vs 10,000 files)
- Startup time (matters for frequently-run commands)
**Thresholds:**
- **2× faster**: Consider if other benefits exist
- **5× faster**: Strong candidate, likely worth adoption
- **10× faster**: High priority upgrade, significant productivity gain
**How to benchmark:**
```bash
# Quick comparison with time
time {old-tool} args
time {new-tool} args
# Statistical benchmark with hyperfine
hyperfine '{old-tool} args' '{new-tool} args'
# Test scaling
hyperfine --parameter-scan num 10 10000 '{tool} args'
```
### 2. Ergonomics (Weight: Medium-High - 30%)
**Evaluate:**
- **Syntax simplicity**: Can you remember it without docs?
- **Defaults**: Do common operations require flags?
- **Output quality**: Readable, informative, well-formatted?
- **Error messages**: Clear, actionable, helpful suggestions?
- **Composability**: Works well in pipes and scripts?
**Good indicators:**
- Colored output by default
- Smart defaults (respects .gitignore, etc.)
- Short, memorable command names
- Built-in help that's actually helpful (`--help` is clear)
- Intuitive flag names
**Red flags:**
- Complex syntax requiring constant reference
- Poor error messages ("error" with no context)
- Unexpected default behavior
- Verbose flags only (no short forms)
### 3. Maintenance (Weight: High - 20%)
**Check repository health:**
- **Last commit**: <6 months is active, <3 months is excellent
- **Issue response time**: Maintainer engagement (check recent issues)
- **Release cadence**: Regular releases, not constant churn
- **Contributor count**: Not single-maintainer ghost projects
- **Organization backing**: Company/org-backed often more stable
**Red flags:**
- Archived repository
- 100+ open issues with no maintainer responses
- Last release >2 years ago
- Single maintainer who's gone MIA
- Major bugs unaddressed
**Green flags:**
- Active CI/CD
- Regular security updates
- Responsive to community
- Clear governance or roadmap
### 4. Installation Complexity (Weight: Medium - 10%)
**Assess ease of installation:**
- Available in major package managers (brew, apt, cargo, dnf)
- Binary releases for major platforms (Linux, macOS, Windows)
- Dependency count (fewer is better)
- Binary size (under 50MB is reasonable for most tools)
**Scoring:**
- **Excellent**: `brew install`, `apt install`, or `cargo install`
- **Good**: Binary releases on GitHub, one-liner install script
- **Acceptable**: Build from source with standard toolchain
- **Poor**: Complex build requirements, many dependencies
- **Deal-breaker**: Requires specific versions of rare dependencies
### 5. Adoption (Weight: Medium - Points to maturity)
**Indicators of healthy adoption:**
- GitHub stars (>1k is good, >5k is excellent, >10k is widely adopted)
- Used by major projects (check GitHub dependents)
- Mentioned in blog posts, tool lists, conference talks
- Active community (Discord, discussions, Stack Overflow questions)
- Production usage stories
**Why adoption matters:**
- More usage → more bugs found and fixed
- Better documentation and examples
- Higher probability of long-term maintenance
- Easier to find help when stuck
### 6. Compatibility (Weight: Medium-Low - Important for drop-in replacements)
**Check replacement viability:**
- **Drop-in replacement**: Can alias old command to new? (`alias cat=bat`)
- **POSIX compliance**: Matters for portable scripts
- **Output format**: Parseable by downstream tools?
- **Configuration**: Reads old tool's config files?
- **Flags**: Similar enough for muscle memory transfer?
**Examples:**
```bash
# Safe drop-in replacements
alias cat=bat # Generally yes (bat mimics cat behavior)
alias ls=eza # Yes (eza designed as ls replacement)
alias grep=rg # Mostly (different flags, but core usage similar)
# Risky drop-ins
alias sed=sd # No (sd is simpler, not full sed replacement)
alias awk=... # No good modern replacement (awk is unique)
```
## Testing Workflow
### Stage 1: Quick Evaluation (5 minutes)
**Install in isolated way:**
```bash
# Prefer cargo for isolated testing (doesn't require sudo)
cargo install {tool}
# Or homebrew
brew install {tool}
```
**Basic functionality check:**
```bash
# Check help output
{tool} --help
# Test basic operation
{tool} {simple-task}
# Quick benchmark
hyperfine '{old-tool} args' '{new-tool} args'
```
**Decision point:** If not obviously better (2×+ speed or significantly better UX), stop here.
### Stage 2: Real-World Testing (15 minutes)
**Test on actual project workloads:**
```bash
# Test on current project
cd ~/Developer/current-project
{new-tool} {typical-task}
# Test on large directory
cd ~/Developer # or another large directory tree
{new-tool} {typical-task}
# Test common variations
{new-tool} {variant-1}
{new-tool} {variant-2}
{new-tool} {variant-3}
# Test error handling
{new-tool} nonexistent-file
{new-tool} --invalid-flag
{new-tool} {edge-case}
```
**Evaluate results:**
- Does output format work for your needs?
- Are error messages helpful?
- Any surprising behavior?
- Performance consistent across different inputs?
**Decision point:** If issues found, check GitHub issues. If widespread problems or dealbreaker bugs, stop.
### Stage 3: Integration Testing (10 minutes)
**Check fit with existing workflow:**
```bash
# Pipe compatibility
{new-tool} args | other-command
other-command | {new-tool} args
# Script compatibility
# - Create small test script using new tool
# - Verify behavior matches expectations
# Shell integration
# - Tab completion working?
# - Any shell-specific issues? (zsh vs bash)
# - Works from different directories?
# Alias trial
alias {old}={new}
# Use normally for a few minutes
# Pay attention to muscle memory friction
```
**Decision point:** Integration issues are often deal-breakers for drop-in replacements. If tool doesn't fit workflow smoothly, consider fallback strategy or skip.
### Testing Checklist
- [ ] Installs cleanly
- [ ] Help text is clear
- [ ] Basic operation works as expected
- [ ] Performance is measurably better (if speed is goal)
- [ ] Output format is acceptable
- [ ] Error messages are helpful
- [ ] Works in pipes/scripts
- [ ] No showstopper bugs on current project
- [ ] Integrates smoothly with existing workflow
- [ ] Documentation is adequate
## Recommendation Format
When presenting tool findings to user:
### Template
```
Found: {TOOL_NAME} — {one-line description}
Performance:
- {benchmark result, e.g., "8× faster than find on this codebase"}
- {specific improvement, e.g., "searched 10k files in 0.2s vs 2.1s"}
Benefits:
- {key advantage 1}
- {key advantage 2}
- {key advantage 3}
Installation:
```bash
{install command}
```
Trade-offs:
- {any downsides, or "None identified"}
Confidence: {HIGH/MEDIUM/LOW}
- HIGH: Widely adopted, clear win, drop-in replacement
- MEDIUM: Good but niche, or requires workflow changes
- LOW: Bleeding edge, or significant compatibility concerns
Recommend: {INSTALL/TRY/SKIP}
```
### Example
```
Found: ripgrep (rg) — Fast line-oriented search tool
Performance:
- 15× faster than grep on this codebase
- Searched 50k files in 0.3s vs 4.5s with grep -r
Benefits:
- Respects .gitignore by default (no node_modules noise)
- Colored output with line numbers
- Better regex support (PCRE2)
- Automatic binary file detection
Installation:
```bash
brew install ripgrep
```
Trade-offs:
- Different flags than grep (muscle memory adjustment)
- Recursive by default (explicit -r not needed)
Confidence: HIGH
- 40k+ GitHub stars
- Used by major projects (VS Code search backend)
- Drop-in for most grep use cases
Recommend: INSTALL
```
## When to Recommend Installation
### Recommend: INSTALL
User should install when ALL of these are true:
- **Clear performance win** (5×+ faster) OR **significantly better ergonomics**
- **No significant downsides** (compatible, well-maintained)
- **Easy installation** (brew/apt/cargo available)
- **High confidence** in quality (mature, adopted, maintained)
**Action:**
- Include install command in response
- Offer to add shell alias if appropriate
- Provide example usage for current task
### Recommend: TRY
User might try when:
- **Moderate improvement** (2-5× faster or notable UX improvement)
- **Specialized use case** (benefits specific workflows)
- **Learning curve exists** (different paradigm or syntax)
- **Medium confidence** (newer tool, smaller community, or niche)
**Action:**
- Explain benefits clearly
- Provide test command to evaluate
- Let user decide based on their priorities
- Offer to help with adoption if they choose to try
### Recommend: SKIP
Don't recommend when ANY of these are true:
- **Marginal improvement** (<2× faster, minimal UX gain)
- **Installation complexity** (build from source, many dependencies)
- **Maintenance concerns** (abandoned, single maintainer MIA, security issues)
- **Low confidence** (alpha quality, breaking changes, major bugs)
- **User constraints** (no install access, strict portability requirements)
**Action:**
- Use fallback tool without mentioning limitation
- Or briefly note why skipping: "Evaluated {TOOL} but marginal improvement doesn't justify installation"
- Document finding for future reference if tool matures
## Fallback Strategy
Always maintain fallback support in scripts and automation:
### Pattern 1: Check-then-run
```bash
if command -v rg &> /dev/null; then
rg pattern
else
grep -r pattern .
fi
```
### Pattern 2: Function Wrapper
```bash
search() {
if command -v rg &> /dev/null; then
rg "$@"
else
grep -r "$@" .
fi
}
```
### Pattern 3: Conditional Alias
```bash
# In shell config (.zshrc, .bashrc)
if command -v bat &> /dev/null; then
alias cat='bat --style=plain --paging=never'
fi
if command -v eza &> /dev/null; then
alias ls='eza'
alias l='eza -l'
alias la='eza -la'
fi
```
**Why fallback matters:**
- Scripts work on systems without modern tools installed
- Shared code doesn't break for other developers
- Graceful degradation in CI/CD environments
- Portable across different environments
## Example Research Session
**Trigger**: User searching large codebase, `grep` taking 30+ seconds
**Search query**: "fast code search CLI tool 2024"
**Candidates found**:
1. ripgrep (rg) — Rust-based, 10-100x faster than grep
2. The Silver Searcher (ag) — C-based, 3-5x faster than grep
3. ugrep — C++ with advanced regex, similar speed to rg
**Initial evaluation**:
| Tool | Speed | Ergonomics | Maintenance | Install |
|------|-------|------------|-------------|---------|
| rg | ★★★ | ★★★ | ★★★ | ★★★ |
| ag | ★★ | ★★ | ★ | ★★★ |
| ugrep | ★★★ | ★★ | ★★ | ★★ |
**Hands-on test**:
```bash
brew install ripgrep
# Current: grep -r "pattern" . (30s)
time grep -r "authentication" .
# Result: 28.4s
# New: rg "pattern" (default recursive)
time rg "authentication"
# Result: 0.8s
# Edge case: large binary files
rg "pattern" # Automatically skips binaries
grep -r "pattern" . # Hangs on binaries unless -I flag
```
**Findings**:
```
Found: ripgrep (rg) — Recursive line-oriented search tool
Advantages:
- 35x faster than grep on this codebase (0.8s vs 28s)
- Respects .gitignore automatically (fewer false matches)
- Colorized output with line numbers by default
- Automatically skips binary files
Install:
brew install ripgrep
Example (current task):
rg "authentication" --type ts
Trade-offs:
- Different flag syntax than grep (learning curve)
- Regex flavor differs slightly (PCRE2 vs POSIX)
Recommendation: ★ ADOPT — 35x speedup justifies one-time learning cost
```
## Tool Discovery Resources
### Curated Lists
- [awesome-cli-apps](https://github.com/agarrharr/awesome-cli-apps)
- [modern-unix](https://github.com/ibraheemdev/modern-unix)
- [Rust CLI tools](https://lib.rs/command-line-utilities)
- [Go CLI tools](https://github.com/avelino/awesome-go#command-line)
### Communities
- r/commandline — CLI tool discussions
- r/rust — Rust-based tools (often fastest)
- r/golang — Go-based tools (good balance)
- Lobsters CLI tag — <https://lobste.rs/t/cli>
### Benchmarking Tools
When comparing performance:
```bash
# hyperfine - statistical benchmarking
brew install hyperfine
hyperfine '{COMMAND_1}' '{COMMAND_2}'
# time - quick comparison
time {COMMAND}
# perf - detailed profiling (Linux)
perf stat {COMMAND}
```
## Updating Tool Catalog
When research yields strong candidate:
1. Add to main selection table in SKILL.md
2. Document in tool-catalog.md with:
- Purpose
- Key features
- Installation
- Common usage
- Performance notes
3. Update detection script to check for new tool
4. Add to any relevant workflow examples
Keep tool catalog current — revisit every 6 months to prune abandoned tools and add emerging ones.
@@ -0,0 +1,146 @@
# 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
```json
{
"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:
1. **Check tool availability** using `which` or `command -v`
2. **Categorize by task type** (find_files, search_content, etc.)
3. **Detect package managers** for installation suggestions
4. **Return structured JSON** for easy parsing
Example detection check:
```typescript
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
```bash
# 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)
@@ -0,0 +1,610 @@
# Tool Catalog
Recommended modern CLI tools organized by category. Each entry includes usage, installation, and rationale.
## Search Tools
### fd
**Category:** search
**Replaces:** find
**Description:** Fast, user-friendly file finder with smart defaults
#### Why upgrade?
- 8× faster than find on large directories
- Ignores `.gitignore` and hidden files by default
- Colored output with syntax highlighting
- Simpler, more intuitive syntax
- Parallel directory traversal
#### Typical usage
```bash
fd pattern # Find files matching pattern
fd -e ts # Find all .ts files
fd -e ts -x wc -l # Count lines in each .ts file
fd -H config # Include hidden files
fd -I node_modules # Include ignored files
fd pattern src/ # Search in specific directory
fd '^test.*\.ts$' # Regex pattern
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install fd` |
| Cargo | `cargo install fd-find` |
| apt | `apt install fd-find` |
| dnf | `dnf install fd-find` |
[GitHub](https://github.com/sharkdp/fd)
---
### ripgrep (rg)
**Category:** search
**Replaces:** grep, ack, ag (the silver searcher)
**Description:** Line-oriented search tool that recursively searches the current directory
#### Why upgrade?
- 10100× faster than grep/ack/ag
- Respects `.gitignore` by default
- Automatic binary file detection
- Better defaults (recursive, colored, line numbers)
- Supports .ignore files for custom exclusions
- Fast PCRE2 regex engine
#### Typical usage
```bash
rg pattern # Search current directory
rg -i pattern # Case-insensitive search
rg -t ts pattern # Search only TypeScript files
rg -T tests pattern # Exclude tests directory
rg 'fn \w+' -r 'function $0' # Search and replace preview
rg pattern --files-with-matches # Show only filenames
rg -C 3 pattern # Show 3 lines of context
rg --hidden pattern # Include hidden files
rg --no-ignore pattern # Include ignored files
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install ripgrep` |
| Cargo | `cargo install ripgrep` |
| apt | `apt install ripgrep` |
| dnf | `dnf install ripgrep` |
[GitHub](https://github.com/BurntSushi/ripgrep)
---
### ast-grep (sg)
**Category:** search
**Replaces:** (no direct legacy equivalent)
**Description:** Code structural search and rewrite tool using AST patterns
#### Why use it?
- Language-aware pattern matching (not just text)
- Understands code structure and semantics
- Prevents false positives from string matches
- Supports 20+ languages
- Fast native performance (Rust)
- Pattern-based refactoring capabilities
#### Typical usage
```bash
sg -p 'console.log($$$)' # Find all console.log calls
sg -p 'if ($A) { $B }' --lang ts # Find if statements
sg scan # Run configured rules
sg --pattern '$A == null' --rewrite '$A === null' # Refactor
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install ast-grep` |
| Cargo | `cargo install ast-grep` |
| npm | `npm install -g @ast-grep/cli` |
[GitHub](https://github.com/ast-grep/ast-grep) | [Docs](https://ast-grep.github.io/)
---
## JSON Tools
### jq
**Category:** json
**Replaces:** (no direct legacy equivalent)
**Description:** Command-line JSON processor with query language
#### Why use it?
- Parse, filter, and transform JSON from CLI
- Powerful query syntax
- Handles streaming JSON
- Colored output
- Widely adopted standard
#### Typical usage
```bash
cat data.json | jq '.' # Pretty-print JSON
jq '.items[] | .name' # Extract all names from items array
jq 'select(.status == "active")' # Filter objects
jq '.[] | {name, email}' # Transform shape
jq -r '.token' # Raw output (no quotes)
curl api.com/data | jq '.results[0]' # Parse API response
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install jq` |
| apt | `apt install jq` |
| dnf | `dnf install jq` |
[GitHub](https://github.com/jqlang/jq) | [Docs](https://jqlang.github.io/jq/)
---
## File Viewers
### bat
**Category:** viewers
**Replaces:** cat
**Description:** Cat clone with syntax highlighting and git integration
#### Why upgrade?
- Syntax highlighting for 200+ languages
- Git gutter showing changes
- Automatic paging for long files
- Line numbers by default
- Non-printable character visualization
- Integrates with other tools (fzf, rg)
#### Typical usage
```bash
bat README.md # View file with syntax highlighting
bat -n file.ts # Show line numbers
bat --style=plain file.txt # Disable decorations
bat -A file.sh # Show non-printable characters
bat -d file.js # Show git diff
bat file1.ts file2.ts # View multiple files
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install bat` |
| Cargo | `cargo install bat` |
| apt | `apt install bat` |
| dnf | `dnf install bat` |
[GitHub](https://github.com/sharkdp/bat)
---
### eza
**Category:** viewers
**Replaces:** ls, exa
**Description:** Modern ls replacement with better defaults and git awareness
#### Why upgrade?
- Colored output by default
- Git status integration
- Tree view built-in
- Icons support (with nerdfont)
- Better permission display
- Maintained fork of unmaintained exa
#### Typical usage
```bash
eza # List files (colored)
eza -l # Long format
eza -la # Include hidden files
eza -T # Tree view
eza -lh --git # Show git status
eza --sort=modified # Sort by modification time
eza --icons # Show file icons
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install eza` |
| Cargo | `cargo install eza` |
| apt | `apt install eza` |
| dnf | `dnf install eza` |
[GitHub](https://github.com/eza-community/eza)
---
### git-delta
**Category:** viewers
**Replaces:** git diff
**Description:** Syntax-highlighting pager for git, diff, and grep output
#### Why upgrade?
- Side-by-side diff view
- Syntax highlighting in diffs
- Line numbers
- Better moved code detection
- Integrates with bat themes
- Works with git, diff output, and grep
#### Typical usage
```bash
# Configure git to use delta
git config --global core.pager delta
git config --global interactive.diffFilter "delta --color-only"
# Then use git normally
git diff # Now uses delta
git show # Syntax-highlighted commits
git log -p # Beautiful patch logs
git blame # Enhanced blame view
# Direct usage
diff -u file1 file2 | delta
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install git-delta` |
| Cargo | `cargo install git-delta` |
| apt | `apt install git-delta` |
| dnf | `dnf install git-delta` |
[GitHub](https://github.com/dandavison/delta)
---
## Navigation Tools
### zoxide
**Category:** navigation
**Replaces:** cd with manual path typing
**Description:** Smarter cd command that learns your habits
#### Why upgrade?
- Jump to frequently used directories with partial names
- Frecency algorithm (frequency + recency)
- Works across all shells
- Interactive selection with fzf integration
- No manual bookmarking needed
#### Typical usage
```bash
# After installation, use 'z' instead of 'cd'
z proj # Jump to ~/Developer/projects
z doc agents # Jump to ~/Documents/agents
zi # Interactive directory selection
z - # Go to previous directory
zoxide query proj # Query without jumping
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install zoxide` |
| Cargo | `cargo install zoxide` |
| apt | `apt install zoxide` |
**Post-install:** Add to shell config:
```bash
# ~/.zshrc or ~/.bashrc
eval "$(zoxide init zsh)" # for zsh
eval "$(zoxide init bash)" # for bash
```
[GitHub](https://github.com/ajeetdsouza/zoxide)
---
### fzf
**Category:** navigation
**Replaces:** manual history search, manual file selection
**Description:** General-purpose fuzzy finder for command-line
#### Why use it?
- Interactive fuzzy search for any list
- Fast C implementation
- Integrates with shell history, files, git
- Pipe any command output to fzf
- Preview window support
- Used by many other tools
#### Typical usage
```bash
# Basic fuzzy finding
fzf # Search files in current dir
history | fzf # Search command history
# With preview
fzf --preview 'bat {}' # Preview files with bat
# Shell integration (after install)
Ctrl-R # Search command history
Ctrl-T # Search files
Alt-C # Change directory
# Pipe integration
git branch | fzf | xargs git checkout # Interactive branch checkout
ps aux | fzf | awk '{print $2}' | xargs kill # Interactive process kill
# With other tools
rg pattern | fzf # Fuzzy search through grep results
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install fzf` |
| apt | `apt install fzf` |
| dnf | `dnf install fzf` |
**Post-install:** Enable key bindings:
```bash
# macOS with Homebrew
$(brew --prefix)/opt/fzf/install
```
[GitHub](https://github.com/junegunn/fzf)
---
## HTTP Tools
### httpie
**Category:** http
**Replaces:** curl (for API testing)
**Description:** Human-friendly HTTP client for testing APIs
#### Why upgrade?
- Simpler syntax than curl
- JSON support by default
- Syntax highlighting
- Formatted output
- Session support
- File upload support
- Better error messages
#### Typical usage
```bash
# GET request
http GET api.example.com/users
# POST JSON (automatic content-type)
http POST api.example.com/users name=John email=john@example.com
# Headers
http GET api.example.com/users Authorization:"Bearer token"
# Download file
http --download example.com/file.zip
# Upload file
http POST api.example.com/upload < file.json
# Form data
http --form POST api.example.com/form name=John file@photo.jpg
# Sessions (save auth)
http --session=user1 POST api.example.com/login username=user1
http --session=user1 GET api.example.com/profile # Reuses auth
```
#### Installation
| Method | Command |
|--------|---------|
| Homebrew | `brew install httpie` |
| pip | `pip install httpie` |
| apt | `apt install httpie` |
| dnf | `dnf install httpie` |
[GitHub](https://github.com/httpie/cli) | [Docs](https://httpie.io/docs/cli)
---
## Tool Comparison Matrix
Quick reference for choosing between tools:
| Task | Legacy | Modern | Speed Gain |
|------|--------|--------|------------|
| Find files | find | fd | 8× |
| Search text | grep | ripgrep | 10100× |
| Search code structure | - | ast-grep | N/A |
| Parse JSON | - | jq | N/A |
| View files | cat | bat | Similar |
| List files | ls | eza | Similar |
| Git diffs | git diff | git-delta | Similar |
| Navigate dirs | cd | zoxide | 10× fewer keystrokes |
| Fuzzy search | - | fzf | N/A |
| HTTP requests | curl | httpie | Similar |
**Speed Gain:** Approximate performance improvement or ergonomic benefit
---
## Installation Bundles
Install all recommended tools at once:
### Homebrew (macOS/Linux)
```bash
brew install \
fd \
ripgrep \
ast-grep \
jq \
bat \
eza \
git-delta \
zoxide \
fzf \
httpie
# Post-install configuration
eval "$(zoxide init zsh)"
$(brew --prefix)/opt/fzf/install
git config --global core.pager delta
```
### Cargo (Cross-platform)
```bash
cargo install \
fd-find \
ripgrep \
bat \
eza \
git-delta \
zoxide \
ast-grep
# jq, fzf, httpie still need system package manager
```
### apt (Debian/Ubuntu)
```bash
sudo apt install \
fd-find \
ripgrep \
bat \
eza \
git-delta \
zoxide \
fzf \
jq \
httpie
# ast-grep may need cargo or npm
```
---
## Shell Aliases
Recommended aliases to maintain muscle memory:
```bash
# ~/.zshrc or ~/.bashrc
# Optional: alias old commands to new ones
alias cat='bat'
alias ls='eza'
alias find='fd'
alias grep='rg'
# Or: keep old names, add shortcuts for new tools
alias l='eza -l'
alias la='eza -la'
alias lt='eza -T'
alias rg='rg --hidden'
```
**Recommendation:** Start with shortcuts, not full aliases. Keeps old commands working on systems without these tools.
---
## Integration Examples
### fzf + ripgrep + bat
Interactive search with preview:
```bash
rg --files | fzf --preview 'bat --color=always {}'
```
### fd + fzf
Find and preview files:
```bash
fd -t f | fzf --preview 'bat --color=always {}'
```
### httpie + jq
API testing with formatted output:
```bash
http GET api.example.com/users | jq '.[] | {name, email}'
```
### zoxide + eza
Quick navigation with listing:
```bash
z() {
cd "$(zoxide query "$@")" && eza -la
}
```
---
## When to Fall Back
Use legacy tools when:
- Working on systems where installation requires admin access
- Scripting for maximum portability (POSIX compliance)
- Tool-specific features not available in modern equivalent
- Embedded/minimal environments without package manager
In automation/scripts:
```bash
# Check if modern tool exists, fall back gracefully
if command -v fd &> /dev/null; then
fd pattern
else
find . -name "*pattern*"
fi
```