Search and lookup
Finding things by name and reading exactly the part you need. This is the group your assistant reaches for most, and the one that decides whether it opens six files or one.
Finding code
Symbol search — finds functions, components, hooks, helpers, services, classes and types by name. This is the "does this already exist" check, and it's the reason your assistant can avoid writing a second version of something you already have.
The important limit: it matches symbol names, not file contents. A concept that lives in your code but isn't spelled in any symbol name won't match — for those, list files by name and read their outlines instead.
Text search — searches file contents for a literal string. The complement to symbol search, and the right tool for string literals, interface text, SQL fragments, error messages and config keys — none of which are symbol names.
File listing — finds files by type, path prefix, glob, fuzzy substring, or workspace in a monorepo. The route into a concept-shaped question: locate the likely files, then read their outlines.
Reading code
Symbol source — the full source of one named function, class or component. Reading one symbol instead of a 2,000-line file is most of why an indexed assistant stays coherent deeper into a session.
File outline — every symbol in a file with its signature and line numbers. The cheapest way to understand a file's shape before deciding what to actually read, and it can skim several files at once.
Line ranges — a specific span of a file, for the parts no symbol covers: configuration blocks, comments between functions, plain data.
Uncommitted work
Stale read — reads the version of a file in your working tree, with the explicit intent of seeing uncommitted changes rather than the last indexed state.
Note — the index tracks committed code. When you're mid-change, that's a real gap: your assistant can be looking at the previous version of the function you're editing. Understanding index state explains when this matters and how to close it.
Why "search by name first"
Text search across a large repository returns every comment, string and unrelated identifier that happens to share a word. Symbol search returns definitions. Starting from the definition and walking outward is faster and produces fewer confidently wrong answers than reading whatever a text match surfaced first.
Next: Tracing and impact.