vexor-cli — Claude Code skill: find files by intent
A skill that gets the agent to locate files by what they do rather than by exact text. Handy in a mid-sized or large repo where the layout is unclear.
npx skills add scarletkc/vexor --skill vexor-cli -a claude-codeWhat vexor-cli does
The skill wraps the vexor tool and tells the agent to reach for it first when tracking down where something is implemented or defined. It documents the vexor "<QUERY>" call and its flags: --path, --mode, --ext, --exclude-pattern, --top, --content, --format. Modes differ in cost. name looks at filenames only, code chunks .py/.js/.ts with code awareness, outline walks Markdown headings, full indexes whole file contents.
One flag earns its keep: --content prints the matched source under the results table, so you skip opening those files afterwards. The text sits between content_start_line and content_end_line, which can land past start_line when a long symbol was split across chunks. A stale_line_range marker means the file changed after indexing, and re-running vexor index fixes it.
Settings come from the nearest .vexor/config.json, and only rerank, auto_index, model, embedding_dimensions, batch_size, embed_concurrency and extract_concurrency are accepted there. Credentials and endpoints such as api_key, base_url and remote_rerank get rejected in a project config. .vexorignore rules hold even with --no-respect-gitignore. When vexor itself is absent, the skill points to references/install-vexor.md.
What it helps with
- pin down where config loading and validation happen
- find a CLI entrypoint from a description instead of a filename
- pull the auth section out of a docs tree
- drop tests and JavaScript from the results in one query
- get the matching source inline without a second file read
Example prompts for the agent
- Use vexor to find where JWT claims are validated,
codemode, with content - Search the docs for the authentication flow:
vexor search "user authentication flow" --path docs --mode outline --ext .md - Where does the config get loaded? Search the code and exclude
tests/**and.js
How to install vexor-cli
1Skills CLI (Vercel)
npx skills add scarletkc/vexor --skill vexor-cli -a claude-code2Manually: put the files in place
~/.claude/skills/vexor-cli/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/vexor-cli/
1Skills CLI (Vercel)
npx skills add scarletkc/vexor --skill vexor-cli -a codex2Manually: put the files in place
.agents/skills/vexor-cli/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add scarletkc/vexor --skill vexor-cli -a cursor2Manually: put the files in place
.cursor/skills/vexor-cli/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install scarletkc/vexor vexor-cli2Manually: put the files in place
.github/skills/vexor-cli/SKILL.md1Skills CLI (Vercel)
npx skills add scarletkc/vexor --skill vexor-cli -a gemini-cli2Platform CLI
gemini skills install https://github.com/scarletkc/vexor --path plugins/vexor/skills/vexor-cliManually: put the files in place
.devin/skills/vexor-cli/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add scarletkc/vexor --skill vexor-cli -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about vexor-cli
How do I install vexor-cli in Claude Code?
Run npx skills add scarletkc/vexor --skill vexor-cli -a claude-code. The skill lands at ~/.claude/skills/vexor-cli/SKILL.md.
What does vexor-cli do?
It steers the agent toward intent-based file discovery: what the code does, not which string appears in it. The agent calls vexor with a query and a mode instead of browsing directories by hand.
What does the skill need to work?
The vexor tool installed on the machine. Without it, the skill directs you to references/install-vexor.md.
Source text
SKILL.md · MIT
--- name: vexor-cli description: 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. Prefer this over manual browsing. --- # Vexor CLI Skill ## Goal Find files by intent (what they do), not exact text. ## Use It Like This - Use `vexor` first for intent-based file discovery. - If `vexor` is missing, follow [references/install-vexor.md](references/install-vexor.md). ## Command ```bash vexor "<QUERY>" [--path <ROOT>] [--mode <MODE>] [--ext .py,.md] [--exclude-pattern <PATTERN>] [--top 5] [--content] [--format rich|porcelain|porcelain-z|json] ``` ## Common Flags - `--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 cache - `vexor index --local`: create and use project-local `.vexor/` cache storage ## Project Config - The nearest `.vexor/config.json` applies automatically for the resolved search or index path. - It accepts only `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`. - Credentials and endpoints (`api_key`, `base_url`, `remote_rerank`) and all other fields are rejected. - Precedence is global config, project config, environment overrides, then explicit arguments. - `vexor config --show` labels each field's origin and `vexor doctor` lists active overrides; mutating `vexor config` commands remain global-only. ## Modes (pick the cheapest that works) - `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) ## Troubleshooting - Searching for an exact identifier (function/class/constant name) with weak results: suggest `vexor config --rerank hybrid` once — it fuses exact lexical matching with semantic search. - Need ignored or hidden files: add `--include-hidden` and/or `--no-respect-gitignore`. - Scriptable output: use `--format porcelain` (TSV) or `--format porcelain-z` (NUL-delimited). - Get detailed help: `vexor search --help`. - Config issues: `vexor doctor` or `vexor config --show` reports effective values and their origins. ## Examples ```bash # Find CLI entrypoints / commands vexor search "typer app commands" --top 5 ``` ```bash # Search docs by headings/sections vexor search "user authentication flow" --path docs --mode outline --ext .md --format porcelain ``` ```bash # Locate config loading/validation logic vexor search "config loader" --path . --mode code --ext .py ``` ```bash # Exclude tests and JavaScript files vexor search "config loader" --path . --exclude-pattern tests/** --exclude-pattern .js ``` ```bash # Read the matching code directly, without a follow-up file read vexor search "where JWT claims are validated" --path . --mode code --content ``` ## Tips - First time search will index files (may take a minute). Long-lived MCP or Python client sessions reuse mapped vectors, monitor source changes, and skip some snapshot scans. Watcher setup failures fall back to scanning. Separate CLI invocations still validate the filesystem. Use longer timeouts if needed. - Results return similarity ranking, exact file location, line numbers, and matching snippet preview. - Add `--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`. - Combine `--ext` with `--exclude-pattern` to focus on a subset (exclude rules apply on top).
© scarletkc · MIT · scarletkc/vexor