Install any skill in seconds. Free to start, no credit card required.
Get Started Free →A fast and user-friendly alternative to 'find' - simple syntax, smart defaults, respects gitignore.
.claude/skills/penpot-fd-find/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-23 | ✓→✗ | ▼ Worse | 142% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 118% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 20% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 213% | 0% |
User-friendly alternative to find with smart defaults.
plain find: simpler syntax, smart defaults, respects .gitignore.
bash# Find files by name fd pattern # Find in specific directory fd pattern /path/to/dir # Case-insensitive fd -i pattern
bash# Find all Python files fd -e py # Find multiple extensions fd -e py -e js -e ts # Find directories only fd -t d pattern # Find files only fd -t f pattern # Find symlinks fd -t l
bash# Exclude patterns fd pattern -E "node_modules" -E "*.min.js" # Include hidden files fd -H pattern # Include ignored files (.gitignore) fd -I pattern # Search all (hidden + ignored) fd -H -I pattern # Maximum depth fd pattern -d 3
bash# Execute command on results fd -e jpg -x convert {} {.}.png # Parallel execution fd -e md -x wc -l # Use with xargs fd -e log -0 | xargs -0 rm
bash# Full regex search fd '^test.*\.js$' # Match full path fd --full-path 'src/.*/test' # Glob pattern fd -g "*.{js,ts}"
bash# Modified within last day fd --changed-within 1d # Modified before specific date fd --changed-before 2024-01-01 # Created recently fd --changed-within 1h
bash# Files larger than 10MB fd --size +10m # Files smaller than 1KB fd --size -1k # Specific size range fd --size +100k --size -10m
bash# Absolute paths fd --absolute-path # List format (like ls -l) fd --list-details # Null separator (for xargs) fd -0 pattern # Color always/never/auto fd --color always pattern
Find and delete old files:
bashfd --changed-before 30d -t f -x rm {}
Find large files:
bashfd --size +100m --list-details
Copy all PDFs to directory:
bashfd -e pdf -x cp {} /target/dir/
Count lines in all Python files:
bashfd -e py -x wc -l | awk '{sum+=$1} END {print sum}'
Find broken symlinks:
bashfd -t l -x test -e {} \; -print
Search in specific time window:
bashfd --changed-within 2d --changed-before 1d
With ripgrep:
bashfd -e js | xargs rg "pattern"
With fzf (fuzzy finder):
bashvim $(fd -t f | fzf)
With bat (cat alternative):
bashfd -e md | xargs bat
fd is typically much faster than find.gitignore by default (disable with -I)-t for type filtering (f=file, d=directory, l=symlink, x=executable)-e for extension is simpler than -g "*.ext"{} in -x commands represents the found path{.} strips the extension{/} gets basename, {//} gets directoryGitHub: https://github.com/sharkdp/fd Man page: man fd
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 9,267 | 11,404 | +23% | 1 | 1 | 0% | 747 | 1,627 | +118% | 0 | 0 | — |
case-02 | pass→pass | 18,935 | 5,831 | -69% | 1 | 1 | 0% | 1,422 | 1,711 | +20% | 0 | 0 | — |
case-03 | pass→pass | 2,972 | 3,908 | +31% | 1 | 1 | 0% | 387 | 1,210 | +213% | 0 | 0 | — |
case-04 | pass→pass | 9,390 | 6,921 | -26% | 1 | 1 | 0% | 1,306 | 1,957 | +50% | 0 | 0 | — |
case-05 | pass→pass | 7,361 | 9,077 | +23% | 1 | 1 | 0% | 1,083 | 1,668 | +54% | 0 | 0 | — |
case-06 | pass→pass | 7,771 | 19,843 | +155% | 1 | 1 | 0% | 1,217 | 1,664 | +37% | 0 | 0 | — |
case-07 | pass→pass | 12,421 | 5,916 | -52% | 1 | 1 | 0% | 980 | 1,597 | +63% | 0 | 0 | — |
case-08 | pass→pass | 7,671 | 4,665 | -39% | 1 | 1 | 0% | 1,177 | 1,667 | +42% | 0 | 0 | — |
case-09 | pass→pass | 6,997 | 4,929 | -30% | 1 | 1 | 0% | 1,212 | 1,706 | +41% | 0 | 0 | — |
case-10 | pass→pass | 7,296 | 11,666 | +60% | 1 | 1 | 0% | 1,124 | 1,745 | +55% | 0 | 0 | — |
case-11 | fail→fail | 6,801 | 3,317 | -51% | 1 | 1 | 0% | 875 | 1,298 | +48% | 0 | 0 | — |
case-12 | pass→pass | 5,116 | 9,249 | +81% | 1 | 1 | 0% | 871 | 1,364 | +57% | 0 | 0 | — |
case-13 | pass→pass | 6,815 | 3,576 | -48% | 1 | 1 | 0% | 962 | 1,472 | +53% | 0 | 0 | — |
case-14 | fail→pass | 8,869 | 4,143 | -53% | 1 | 1 | 0% | 1,352 | 1,509 | +12% | 0 | 0 | — |
case-15 | pass→pass | 19,326 | 4,505 | -77% | 1 | 1 | 0% | 1,093 | 1,561 | +43% | 0 | 0 | — |
case-16 | pass→pass | 7,255 | 3,442 | -53% | 1 | 1 | 0% | 1,018 | 1,361 | +34% | 0 | 0 | — |
case-17 | pass→pass | 4,347 | 3,520 | -19% | 1 | 1 | 0% | 628 | 1,480 | +136% | 0 | 0 | — |
case-18 | pass→pass | 5,089 | 4,584 | -10% | 1 | 1 | 0% | 778 | 1,447 | +86% | 0 | 0 | — |
case-19 | pass→pass | 14,341 | 11,359 | -21% | 1 | 1 | 0% | 2,117 | 2,693 | +27% | 0 | 0 | — |
case-20 | pass→pass | 8,604 | 4,940 | -43% | 1 | 1 | 0% | 979 | 1,697 | +73% | 0 | 0 | — |
case-21 | pass→pass | 3,258 | 3,369 | +3% | 1 | 1 | 0% | 465 | 1,408 | +203% | 0 | 0 | — |
case-22 | pass→pass | 3,770 | 3,232 | -14% | 1 | 1 | 0% | 477 | 1,250 | +162% | 0 | 0 | — |
case-23 | pass→fail | 12,681 | 14,239 | +12% | 1 | 1 | 0% | 851 | 2,060 | +142% | 0 | 0 | — |
case-24 | pass→pass | 5,430 | 6,947 | +28% | 1 | 1 | 0% | 694 | 1,445 | +108% | 0 | 0 | — |
case-25 | pass→pass | 5,142 | 4,844 | -6% | 1 | 1 | 0% | 648 | 1,626 | +151% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of 0 percentage points is the difference between those two pass rates over the 25 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.