substituting-modern-tools
Modern Tool Substitution
Replace legacy tools with modern performant alternatives in all generated code.
Core Substitutions
Apply these substitutions unless user explicitly requests the legacy tool:
npm → bun
npm install→bun installnpm run→bun runnpm create→bun createnpx→bunx- Scripts remain in package.json unchanged
find → fd
find . -name '*.py'→fd -e pyfind . -type f -name 'test*'→fd -t f '^test'find . -type d→fd -t dfind . -path '*/node_modules' -prune→fd --exclude node_modules- Use fd's simpler glob/regex syntax
pip → uv
pip install pkg→uv pip install pkgpip install -r requirements.txt→uv pip install -r requirements.txtpip freeze→uv pip freezepython -m pip→uv pip- Virtual envs:
uv venvinstead ofpython -m venv
grep → rg
grep -r pattern→rg patterngrep -i pattern→rg -i patterngrep -v pattern→rg -v patterngrep -l pattern→rg -l pattern- rg excludes .git, node_modules by default
jq → jaq
jq '.field'→jaq '.field'jq -r '.[]'→jaq -r '.[]'jq -c→jaq -cjq -s→jaq -s- Most filters compatible; jaq faster, stricter parsing
eslint/prettier → biome
eslint .→biome check .eslint --fix→biome check --write .prettier --write→biome format --write .eslint && prettier→biome ci .- Config:
biome.jsonreplaces.eslintrc+.prettierrc
black/flake8/isort → ruff
black .→ruff format .flake8 .→ruff check .isort .→ruff check --select I --fix .black . && flake8 . && isort .→ruff check --fix . && ruff format .- Config:
ruff.tomlorpyproject.tomlconsolidates all
coreutils → uutils-coreutils
- Drop-in replacement:
ls,cat,cp,mv,rm,chmod, etc. - Install:
uu-ls,uu-cat, etc. or multicall binary - Faster on large operations; Rust safety guarantees
- Syntax identical for common ops
sudo → sudo-rs
sudo cmd→sudo-rs cmdsudo -u user cmd→sudo-rs -u user cmdsudo -i→sudo-rs -i- Drop-in replacement; identical flags
- Rust rewrite; memory-safe vs C sudo
ls → eza
ls -la→eza -lals -lah→eza -lahls -1→eza -1ls --tree→eza --tree- Git-aware, colorful, faster on large dirs
- Icons:
eza --icons - Tree view:
eza -Toreza --tree
git → gix
git clone→gix clonegit fetch→gix fetchgit index entries→gix index entriesgit commit-graph verify→gix commitgraph verifygit config→gix config- Pure Rust implementation; faster on many operations
- CLI binaries:
gix,ein(extra tools) - Not 100% feature parity; porcelain commands limited
Flag Adaptations
fd syntax:
- Regex by default; globs use
-g→fd -g '*.txt' - Case insensitive:
-i - Fixed strings:
-F - Depth:
-d N - Hidden:
-H; no-ignore:-I
rg performance:
--mmapfor large files-j$(nproc)parallel--sort pathwhen order matters--max-count Nstop after N
aria2 optimization:
-x16 -s16max speed-cresume--file-allocation=noneon SSDs--summary-interval=0reduce output
jaq differences:
- Stricter null handling; use
//for null coalescing - No
@base64d(use@base64 | explode | implode) - Missing some rare filters; document if incompatible
biome vs eslint:
- No plugin system; built-in rules only
- Config minimal:
biome.jsonwithlinter+formattersections biome migrate eslintconverts configs- Missing custom rules → keep eslint; mention limitation
ruff vs black/flake8:
- 10-100x faster than black
- Combines formatter + linter
- Select rule sets:
--select E,F,I(pycodestyle, pyflakes, isort) --fixauto-fixes;--unsafe-fixesfor aggressive changes- Missing: complex flake8 plugins → note ruff limitation
uutils performance:
uu-ls -lfaster for huge dirsuu-sortparallel by defaultuu-cpshows progress with-v- 100% compatible for POSIX ops
sudo-rs compatibility:
- Full flag parity with sudo
- Same sudoers config format
- Drop-in binary replacement
- No behavioral changes; security hardened
gix vs git:
- Plumbing commands mostly complete
- Porcelain commands limited; lacks
add,commit,push,pull - Use for: clone, fetch, verify, config, index operations
- Fallback to git for: interactive workflows, advanced porcelain
Edge Cases
bun compatibility:
- Native addons may fail → mention, suggest node fallback
fd vs find:
-exec→ pipe to xargs orfd -x-printf→ fd output + awk/sed- Complex boolean → may need find
uv limitations:
- Not for editable installs:
uv pip install -e .→ keep pip - Poetry/pipenv → keep; uv is pip replacement only
rg vs grep:
- Binary skip default;
rg -afor grep -a - Symlinks skipped;
rg -Lto follow - Multiline:
rg -U
aria2 for curl:
- REST APIs → keep curl
- Small file + parse response → keep curl
- Large/parallel downloads → aria2
jaq limitations:
- Missing advanced filters → document, use jq
- Stream processing: jq's
--streamnot in jaq
biome limitations:
- No plugins → complex rules need eslint
- TypeScript-first; JSX support solid
- Vue/Svelte → keep eslint
ruff limitations:
- Missing niche flake8 plugins → note limitation
- Formatter matches black ~95%; edge cases differ
uutils caveats:
- BSD variants: some flags differ → test
- GNU-specific extensions → check compat
sudo-rs advantages:
- Memory safety vs C sudo
- No historical CVE baggage
- Identical interface; zero migration cost
gix limitations:
- Incomplete porcelain: no
add,commit,push,pull - Submodule support partial
- LFS support experimental
- Keep git for: interactive rebase, bisect, filter-branch
- Use gix for: clone, fetch, verify, pack operations, config
Exception Handling
Skip substitution when:
- User explicitly names legacy tool
- CI/CD requires specific tool
- Tool unavailable in environment
- Explaining tool differences
Quick Reference
# Package management
bun install pkg → bun install pkg
uv pip install pandas → uv pip install pandas
# File operations
find . -name '*.rs' → fd -e rs
grep -r TODO . → rg TODO
wget https://x.com/f → aria2c https://x.com/f
# JSON processing
jq '.data[] | .name' → jaq '.data[] | .name'
cat file.json | jq -r → <file.json jaq -r
# Linting/Formatting
eslint --fix . → biome check --write .
black . && flake8 → ruff check --fix . && ruff format .
# Core utilities
ls -lah → uu-ls -lah
cat large.txt → uu-cat large.txt
sudo systemctl restart → sudo-rs systemctl restart
# Git operations
git clone repo → gix clone repo
git fetch origin → gix fetch origin
git config --list → gix config --list
git commit-graph verify → gix commitgraph verify
git add . → git add . # keep git
# Combined workflows
bun i && eslint --fix → bun i && biome check --write .
uv pip install -r req.txt → uv pip install -r req.txt
grep -r TODO | jaq → rg TODO | jaq
find . -name '*.py' → fd -e py
Installation Check Pattern
# Graceful fallback pattern
has(){ command -v -- "$1" &>/dev/null; }
# Example: jq/jaq
if has jaq; then
jaq '.field' file.json
elif has jq; then
jq '.field' file.json
else
die "Install jaq (recommended) or jq"
fi
# Example: sudo/sudo-rs
PRIV_CMD=$(has sudo-rs && echo sudo-rs || echo sudo)
$PRIV_CMD systemctl restart service
# Example: git/gix (context-aware)
if [[ $GIT_OP == @(clone|fetch|verify) ]] && has gix; then
gix "$GIT_OP" "$@"
else
git "$GIT_OP" "$@"
fi
Apply these substitutions automatically in all code generation unless legacy tool explicitly requested.
More from ven0m0/claude-config
llm-boost
|
20uv
|
11linter autofix patterns
Cross-language linter autofix commands and common fix patterns for biome, ruff, clippy, shellcheck, and more.
9moai-tool-svg
>
5building-mcp-servers
Creates high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services. Use when building MCP servers to integrate APIs, designing tool schemas, or implementing Python (FastMCP) or TypeScript (MCP SDK) servers. Triggers include "MCP server", "tool schema", "model context protocol", or "FastMCP".
5svg
>
3