Skip to main content
Claude Code has two dedicated search tools: Glob for finding files by name and Grep for searching file contents. Both are preferred over running find or grep as Bash commands — they have correct permission integration, return results sorted by modification time, and produce structured output Claude can act on directly.

Glob

Finds files whose paths match a glob pattern. Results are sorted by modification time (most recently modified first).

Parameters

pattern
string
required
A glob pattern to match file paths against. Supports * (any characters within a path segment), ** (any number of path segments), and ? (single character).
path
string
The directory to search in. Defaults to the current working directory. Must be an existing directory path — omit the parameter entirely to use the default; do not pass null or "undefined".

Output

Returns a list of matching file paths, relative to the working directory, sorted by modification time. Results are capped at 100 files. If the result is truncated, consider narrowing the pattern or specifying a more specific path.

Pattern examples

PatternMatches
**/*.tsAll TypeScript files anywhere in the tree
src/**/*.tsxAll TSX files under src/
*.jsonJSON files in the current directory only
**/{package,tsconfig}.jsonpackage.json and tsconfig.json at any depth
tools/*/prompt.tsprompt.ts one level inside tools/
Use Glob when you know the filename or extension you’re looking for. For open-ended exploration that requires multiple rounds of searching, use the Task (Agent) tool instead.

Grep

Searches file contents using regular expressions, powered by ripgrep. Returns matching file paths, line numbers, and (optionally) matching lines.

Parameters

pattern
string
required
A regular expression to search for in file contents. Supports full regex syntax: character classes, quantifiers, lookaheads, alternation, etc.Ripgrep syntax differs from POSIX grep in one notable way: literal braces must be escaped. Use interface\{\} to find interface{} in Go code.
path
string
File or directory to search in. Defaults to the current working directory. Can be a single file path to restrict the search.
glob
string
Glob pattern to filter which files are searched (e.g., "*.js", "*.{ts,tsx}"). Maps to rg --glob.
type
string
Ripgrep file type to restrict the search (e.g., "js", "py", "rust", "go", "java"). More efficient than glob for standard file type filtering. Maps to rg --type.
output_mode
string
Controls what is returned. Options:
  • "files_with_matches" (default) — returns file paths only
  • "content" — returns matching lines with context support
  • "count" — returns match counts per file
-i
boolean
Case-insensitive search. Maps to rg -i.
-n
boolean
Show line numbers in output. Applies to output_mode: "content" only. Defaults to true.
-A
number
Lines of context to show after each match. Applies to output_mode: "content" only. Maps to rg -A.
-B
number
Lines of context to show before each match. Applies to output_mode: "content" only. Maps to rg -B.
context
number
Lines of context to show before and after each match (equivalent to rg -C). Takes precedence over -A and -B. Applies to output_mode: "content" only.
multiline
boolean
Enable multiline mode where . matches newlines and patterns can span multiple lines (rg -U --multiline-dotall). Default: false.
head_limit
number
Limit output to the first N lines or entries (equivalent to | head -N). Applies across all output modes. Defaults to 250. Pass 0 for unlimited results.
offset
number
Skip the first N entries before applying head_limit (equivalent to | tail -n +N). Useful for paginating large result sets. Defaults to 0.

Output modes

Returns a list of file paths that contain at least one match, sorted by modification time.
Found 3 files
src/utils/permissions/bashClassifier.ts
src/tools/BashTool/BashTool.tsx
src/tools/BashTool/bashPermissions.ts

Pattern syntax notes

Ripgrep treats { and } as literal characters by default, unlike some regex engines that use them for quantifiers. To search for literal braces, escape them:
interface\{\}    →  finds  interface{}
map\[string\]    →  finds  map[string]
By default, . does not match newlines. To search across line boundaries:
{
  "pattern": "struct \\{[\\s\\S]*?field",
  "multiline": true
}
glob and type can be used independently or together:
{ "pattern": "TODO", "type": "ts" }
{ "pattern": "TODO", "glob": "src/**/*.ts" }
Use type for standard language types; use glob when the file set doesn’t align with a named type.

Excluded directories

Grep automatically excludes version-control metadata directories: .git, .svn, .hg, .bzr, .jj, .sl.