substituting-modern-tools
SKILL.md
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.
Weekly Installs
9
Repository
ven0m0/claude-configFirst Seen
Feb 28, 2026
Security Audits
Installed on
gemini-cli9
opencode9
codebuddy9
github-copilot9
codex9
kimi-cli9