Semantic file discovery via vexor. Use whenever locating where something is implemented/loaded/defined in a medium or large repo, or when the file location is unclear...
Find files by intent (what they do), not exact text.
vexor first for intent-based file discovery.vexor is missing, follow references/install-vexor.md.vexor "<QUERY>" [--path <ROOT>] [--mode <MODE>] [--ext .py,.md] [--exclude-pattern <PATTERN>] [--top 5] [--content] [--format rich|porcelain|porcelain-z|json]
--path/-p: root directory (default: current dir)--mode/-m: indexing/search strategy--ext/-e: limit file extensions (e.g., .py,.md)--exclude-pattern: exclude paths by gitignore-style pattern (repeatable; .js → **/*.js)--top/-k: number of results--include-hidden: include dotfiles--no-respect-gitignore: include ignored files.vexorignore project rules always apply, even with --no-respect-gitignore.--no-recursive: only the top directory--format: rich (default), porcelain/porcelain-z for scripts, json for full output with chunk content--content: print each match's source text below the table — usually removes the need to read the files afterwards--no-cache: in-memory only, do not read/write index cachevexor index --local: create and use project-local .vexor/ cache storage.vexor/config.json applies automatically for the resolved
search or index path.rerank, auto_index, model, embedding_dimensions,
batch_size, embed_concurrency, and extract_concurrency.batch_size must be at least 0; both concurrency values must be at least
1.api_key, base_url, remote_rerank) and all
other fields are rejected.vexor config --show labels each field's origin and vexor doctor lists
active overrides; mutating vexor config commands remain global-only.auto: routes by file type (default)name: filename-only (fastest)head: first lines only (fast)brief: keyword summary (good for PRDs)code: code-aware chunking for .py/.js/.ts (best default for codebases)outline: Markdown headings/sections (best for docs)full: chunk full file contents (slowest, highest recall)vexor config --rerank hybrid once — it fuses exact lexical matching with semantic search.--include-hidden and/or --no-respect-gitignore.--format porcelain (TSV) or --format porcelain-z (NUL-delimited).vexor search --help.vexor doctor or vexor config --show reports effective values and their origins.# Find CLI entrypoints / commands
vexor search "typer app commands" --top 5
# Search docs by headings/sections
vexor search "user authentication flow" --path docs --mode outline --ext .md --format porcelain
# Locate config loading/validation logic
vexor search "config loader" --path . --mode code --ext .py
# Exclude tests and JavaScript files
vexor search "config loader" --path . --exclude-pattern tests/** --exclude-pattern .js
# Read the matching code directly, without a follow-up file read
vexor search "where JWT claims are validated" --path . --mode code --content
--content (or --format json) to get the matching source text in the same call, and skip reading those files separately. The text sits at content_start_line..content_end_line, which can begin later than the result's start_line when a long symbol was indexed as several chunks. If a result shows stale_line_range, the file changed since indexing — re-run vexor index. Content is capped per response, so lower-ranked results may report budget_exhausted.--ext with --exclude-pattern to focus on a subset (exclude rules apply on top).