> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/VineeTagarwaL-code/claude-code/llms.txt
> Use this file to discover all available pages before exploring further.

# Search

> Find files by name pattern and search file contents with regular expressions.

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

<ParamField body="pattern" type="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).
</ParamField>

<ParamField body="path" type="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"`.
</ParamField>

### 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

| Pattern                      | Matches                                         |
| ---------------------------- | ----------------------------------------------- |
| `**/*.ts`                    | All TypeScript files anywhere in the tree       |
| `src/**/*.tsx`               | All TSX files under `src/`                      |
| `*.json`                     | JSON files in the current directory only        |
| `**/{package,tsconfig}.json` | `package.json` and `tsconfig.json` at any depth |
| `tools/*/prompt.ts`          | `prompt.ts` one level inside `tools/`           |

<Tip>
  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.
</Tip>

***

## Grep

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

### Parameters

<ParamField body="pattern" type="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.
</ParamField>

<ParamField body="path" type="string">
  File or directory to search in. Defaults to the current working directory. Can be a single file path to restrict the search.
</ParamField>

<ParamField body="glob" type="string">
  Glob pattern to filter which files are searched (e.g., `"*.js"`, `"*.{ts,tsx}"`). Maps to `rg --glob`.
</ParamField>

<ParamField body="type" 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`.
</ParamField>

<ParamField body="output_mode" type="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
</ParamField>

<ParamField body="-i" type="boolean">
  Case-insensitive search. Maps to `rg -i`.
</ParamField>

<ParamField body="-n" type="boolean">
  Show line numbers in output. Applies to `output_mode: "content"` only. Defaults to `true`.
</ParamField>

<ParamField body="-A" type="number">
  Lines of context to show after each match. Applies to `output_mode: "content"` only. Maps to `rg -A`.
</ParamField>

<ParamField body="-B" type="number">
  Lines of context to show before each match. Applies to `output_mode: "content"` only. Maps to `rg -B`.
</ParamField>

<ParamField body="context" type="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.
</ParamField>

<ParamField body="multiline" type="boolean">
  Enable multiline mode where `.` matches newlines and patterns can span multiple lines (`rg -U --multiline-dotall`). Default: `false`.
</ParamField>

<ParamField body="head_limit" type="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.
</ParamField>

<ParamField body="offset" type="number">
  Skip the first N entries before applying `head_limit` (equivalent to `| tail -n +N`). Useful for paginating large result sets. Defaults to `0`.
</ParamField>

### Output modes

<Tabs>
  <Tab title="files_with_matches (default)">
    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
    ```
  </Tab>

  <Tab title="content">
    Returns the matching lines themselves, with optional surrounding context.

    ```
    src/utils/permissions/bashClassifier.ts:42:export function classifyBashCommand(
    src/utils/permissions/bashClassifier.ts:43:  command: string,
    ```
  </Tab>

  <Tab title="count">
    Returns match counts per file.

    ```
    src/utils/permissions/bashClassifier.ts:7
    src/tools/BashTool/bashPermissions.ts:3

    Found 10 total occurrences across 2 files.
    ```
  </Tab>
</Tabs>

### Pattern syntax notes

<Accordion title="Escaping braces for Go / TypeScript">
  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]
  ```
</Accordion>

<Accordion title="Multiline patterns">
  By default, `.` does not match newlines. To search across line boundaries:

  ```json theme={null}
  {
    "pattern": "struct \\{[\\s\\S]*?field",
    "multiline": true
  }
  ```
</Accordion>

<Accordion title="Combining glob and type filters">
  `glob` and `type` can be used independently or together:

  ```json theme={null}
  { "pattern": "TODO", "type": "ts" }
  ```

  ```json theme={null}
  { "pattern": "TODO", "glob": "src/**/*.ts" }
  ```

  Use `type` for standard language types; use `glob` when the file set doesn't align with a named type.
</Accordion>

### Excluded directories

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