home / skills / brettatoms / agent-skills / file-nav

file-nav skill

/file-nav

This skill helps you quickly locate and list project files using fd, improving file discovery and exploration.

npx playbooks add skill brettatoms/agent-skills --skill file-nav

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
5.5 KB
---
name: file-nav
description: Navigate and find files using fd. Use when finding files by name, listing directory contents, exploring project structure, or when the user asks to find/list/show files or directories.
allowed-tools: Bash, Read, Task
---

# File Navigation Skill

Use **fd** for finding files and navigating directory structures. fd is a fast, user-friendly alternative to `find`.

## Prerequisites

If `fd` is not installed, recommend the user install it:

```bash
# Arch Linux
sudo pacman -S fd

# Ubuntu/Debian (note: binary is 'fdfind', alias to 'fd')
sudo apt install fd-find
alias fd=fdfind

# macOS
brew install fd

# Cargo
cargo install fd-find
```

## Quick Reference

| Task | Command |
|------|---------|
| Find files by name | `fd "pattern"` |
| List all files | `fd` |
| List directory contents | `fd . directory/ --max-depth 1` |
| Find by extension | `fd -e clj` |

## Core fd Options

### Basic Search

```bash
fd "pattern"              # Find files/dirs matching pattern
fd                        # List all files (like recursive ls)
fd . path/                # List all files under path/
fd "pattern" path/        # Search within specific directory
```

### Filtering by Type

```bash
fd -t f "pattern"         # Files only
fd -t d "pattern"         # Directories only
fd -t l "pattern"         # Symlinks only
fd -t x "pattern"         # Executables only
```

### Filtering by Extension

```bash
fd -e clj                 # All .clj files
fd -e ts -e tsx           # All .ts and .tsx files
fd -e md "readme"         # Markdown files matching "readme"
```

### Depth Control

```bash
fd --max-depth 1          # Current directory only (like ls)
fd --max-depth 2          # Current + one level down
fd --min-depth 2          # Skip current directory level
```

### Case Sensitivity

```bash
fd "pattern"              # Smart case (default)
fd -s "Pattern"           # Case sensitive
fd -i "pattern"           # Case insensitive
```

### Including Hidden/Ignored Files

```bash
fd -H "pattern"           # Include hidden files
fd -I "pattern"           # Include gitignored files
fd -u "pattern"           # Unrestricted (hidden + ignored)
```

### Exclusion

```bash
fd -E node_modules        # Exclude directory
fd -E "*.test.*"          # Exclude pattern
fd -E vendor -E dist      # Multiple exclusions
```

## Common Tasks

### List Directory Contents (like ls)

```bash
# Current directory only
fd . --max-depth 1

# With file types visible
fd . --max-depth 1 -t f   # Files only
fd . --max-depth 1 -t d   # Directories only

# Specific directory
fd . src/ --max-depth 1
```

### Explore Project Structure

```bash
# Show top-level structure
fd . --max-depth 1

# Show two levels deep
fd . --max-depth 2

# Show only directories (project skeleton)
fd -t d --max-depth 3
```

### Find Files by Name

```bash
# Find config files
fd config
fd "config\.(json|yaml|edn)"

# Find test files
fd "_test\."
fd "test" -t d            # Find test directories

# Find specific file anywhere
fd "^package\.json$"
fd -g "package.json"      # Glob mode (exact match)
```

### Find Files by Extension

```bash
# Single extension
fd -e clj

# Multiple extensions
fd -e ts -e tsx -e js -e jsx

# Extension in specific directory
fd -e sql db/
```

### Find Recently Modified

```bash
fd --changed-within 1d    # Modified in last day
fd --changed-within 1h    # Modified in last hour
fd --changed-before 1w    # Modified more than a week ago
```

### Find by Size

```bash
fd --size +1m             # Files larger than 1MB
fd --size -10k            # Files smaller than 10KB
```

## Output Formats

```bash
fd "pattern"              # One path per line (default)
fd -0 "pattern"           # Null-separated (for xargs -0)
fd -l "pattern"           # Long format (like ls -l)
fd --color always         # Force color output
```

## Executing Commands on Results

```bash
fd -e log -x rm           # Delete all .log files
fd -e clj -x wc -l        # Count lines in each Clojure file
fd -t f -x chmod 644      # Set permissions on all files
```

## Combining with Other Tools

```bash
# Find and grep
fd -e clj -x rg "defn"

# Find and read (use Read tool after fd)
fd "interface.clj"        # Find the file
# Then use Read tool on the result

# Count files by extension
fd -e clj | wc -l
```

## Search Patterns

fd uses regex by default:

```bash
fd "^test"                # Starts with "test"
fd "test$"                # Ends with "test"
fd "test.*spec"           # "test" followed by "spec"
fd "\d{4}"                # Contains 4 digits
```

For glob patterns:

```bash
fd -g "*.config.js"       # Glob mode
fd -g "src/**/*.ts"       # Glob with directory
```

## When to Use fd vs rg

| Task | Tool |
|------|------|
| Find files by **name** | `fd` |
| Find files by **content** | `rg` |
| List directory structure | `fd` |
| Search inside files | `rg` |
| Find + search content | `fd -e ext -x rg "pattern"` |

## Performance Tips

1. **Specify directory** - `fd pattern path/` is faster than searching everywhere
2. **Use extension filter** - `fd -e clj` skips irrelevant files
3. **Limit depth** - `--max-depth N` for large trees
4. **Exclude heavy dirs** - `-E node_modules -E .git`

## Examples

### Find all interface files in a project

```bash
fd "interface" -e clj
```

### Show source directory structure

```bash
fd -t d src/ --max-depth 2
```

### Find configuration files

```bash
fd -g "*.{json,yaml,yml,edn,toml}" --max-depth 2
```

### Find test files excluding vendor

```bash
fd "_test\." -E vendor -E node_modules
```

### Find large files

```bash
fd -t f --size +1m -l
```

Overview

This skill helps you navigate and find files quickly using fd, a fast and user-friendly alternative to find. It provides practical commands and options to list directory contents, filter by type or extension, control search depth, and execute actions on matching files. Use it to explore project structure, locate configuration or test files, and perform batch operations on results.

How this skill works

The skill builds on fd’s regex-first search model and exposes common flags for targeted file discovery: type filters (-t), extension filters (-e), depth control (--max-depth/--min-depth), and inclusion/exclusion of hidden or gitignored files (-H, -I, -u, -E). It also shows output modes (null-separated, long format), ways to run commands on matches (-x), and patterns for glob vs regex searches (-g). Recommendations focus on combining fd with other CLI tools like rg, xargs, wc, and shell commands.

When to use it

  • Finding files or directories by name or pattern across a project
  • Listing directory contents with depth control, like a recursive ls
  • Exploring a project’s top-level or nested structure
  • Filtering files by extension, type, size, or modification time
  • Running commands on batches of matching files (delete, chmod, count)

Best practices

  • Specify a starting directory to narrow the search and improve speed
  • Use extension (-e) and type (-t) filters to avoid scanning irrelevant files
  • Limit search depth (--max-depth) in large repositories
  • Exclude heavy folders (e.g., -E node_modules -E .git) to speed up results
  • Combine fd -0 with xargs -0 or use -x for safe command execution on matches

Example use cases

  • Show top-level project structure: fd . --max-depth 1
  • Find all TypeScript sources: fd -e ts -e tsx -e js -e jsx
  • Locate config files: fd -g "*.{json,yaml,yml,edn,toml}" --max-depth 2
  • Find recently modified files: fd --changed-within 1d
  • Delete all .log files: fd -e log -x rm

FAQ

What if fd is not installed?

Install it via your package manager (brew on macOS, apt/pacman on Linux) or cargo; on Debian/Ubuntu the binary is named fdfind and you can alias fd=fdfind.

When should I use fd instead of ripgrep (rg)?

Use fd to find files and list directory structure. Use rg to search file contents. Combine them when you need to find files by name and then search inside them.