File filtering

The Files pane, opened by Adjust what's included, is the surface for narrowing your output to the files you want to share with an assistant. Everything you type here applies live: the file tree updates as you type, with no Apply button.

Include and Ignore textareas

Two textareas drive pattern filtering:

  • Include is empty by default. When you put glob patterns in it, only files matching at least one of them survive.
  • Ignore carries a default list (the same list the CLI uses) of common build outputs, lockfiles, binary directories and, since 2026-09-09, test files by the naming convention of each ecosystem (*.test.ts, *_test.go, test_*.py, *Test.java and their siblings). Patterns you add here exclude their matches; delete a default pattern to let its files through.

Both textareas accept a comma-separated list of globs. Newlines between commas are fine for readability. The two interact in one surprising way described in Filter precedence: if Include has any content, Ignore is skipped entirely. Treat Include as an exclusive whitelist when you use it.

Hidden files

A file whose own name starts with a dot (.gitignore, .editorconfig, .env) is held back before any pattern runs. It shows dimmed in the tree with the reason "Hidden file"; tick it to include it. A directory that starts with a dot is not held back here: .github/workflows/ci.yml comes through unless a pattern names it. The CLI walks differently and skips everything under a dot directory as well. See CLI usage for the config key that turns that off.

Pattern semantics

Patterns are matched against each file's path using the pathMatches helper in packages/core/src/path-utils/glob-match.ts. Two rules cover every case:

  • A bare directory or filename pattern matches anywhere in the path. Typing node_modules matches apps/web/node_modules/react/index.js, not only a top-level node_modules directory. The same goes for *.log, which matches every .log file at any depth.
  • A slashed pattern matches the full path or any suffix obtained by stripping leading directories. Typing src/**/*.ts matches both src/app.ts and myrepo/src/app.ts. This lets patterns work whether you dropped a folder by its repo name or by its inner src/.

A few examples that catch what most projects need:

node_modules, dist, build, .git, *.lock, *.log
src/**/*.ts, src/**/*.tsx, README.md

Filter box and By type chips

The filter box at the top of the pane narrows the list as you type. Plain text matches anywhere in the path, ignoring case. Text with * or ? is read as a glob, with the same rules as the textareas. Typing only changes what is shown. Take out N moves every match out of the bundle, Keep only these N moves everything else out, and Undo puts the previous state back.

The By type chips list each readable extension with its file count and its share of the text, heaviest first. A click takes the whole type out, or puts it back. Reset to defaults clears the manual choices and restores the default patterns, with an Undo too.

The pattern textareas sit in a closed Patterns section at the bottom of the pane.

Manual file toggles

Each file in the tree has a checkbox that overrides the pattern decision for that one file. Manual toggles are sticky: if you tick a checkbox to include a file, then later edit your Ignore textarea, the file stays included.

The pane's file list is headed with a live count of how many files are going into the output and their share of the readable text. Each row shows its own share. Rows sort largest first or A to Z. Auto-skipped noise (binaries and anything your patterns exclude) stays visible but dimmed, so you can see what was left out and re-check it by hand.

See also

  • Filter precedence for the full ordering of pruning, validation, patterns, and overrides.
  • Configuration for the output format choice, the Files pane, and the settings that persist across reloads.