Introduction
vexp is a local-first context engine for AI coding agents. It builds a live dependency graph of your codebase, then serves your agent only the code that matters for the task — plus session memory across days and an optional local AI layer for an extra +30 % token savings. Everything runs on your machine.
The VS Code extension is the primary distribution. A standalone CLI (npm install -g vexp-cli) is available for terminal-only workflows. Both bundle the same native engine and MCP server — no Node runtime, no external dependencies, no account required.
How it works
Index
vexp parses your source files and builds a graph stored at .vexp/index.db (local, gitignored). A small manifest.json with per-file content hashes is committed to git — teammates rebuild incrementally from the manifest in seconds.
Traverse
Given a natural-language task, vexp identifies the pivot nodes that matter via semantic search + graph traversal. Session memories from previous work are surfaced too.
Capsule
Pivot files are returned in full; supporting files as compact skeletons (signatures only). The result fits the configured token budget — typically 8 000 tokens.
Installation
Pick a distribution. The VS Code extension is the fastest path; the CLI is for terminal-only setups (Claude Code, Codex, scripts, remote machines).
Install from the Extensions panel
Open Extensions (Ctrl+Shift+X / ⌘⇧X), search for vexp, and click Install.
The extension bundles the native engine for your platform. There is no Node runtime to install, no separate compilation, and nothing to download afterwards. Open any project folder and indexing starts automatically.
vexp.binaryPath in Settings to point at a locally-built vexp-core.Platform support
| Platform | Minimum OS |
|---|---|
| Linux x64 | Ubuntu 20.04+, Debian 11+, RHEL/Rocky 8+, WSL2 |
| Linux arm64 | Same minimum as Linux x64 |
| macOS Intel | macOS 11 (Big Sur) or later |
| macOS Apple Silicon | macOS 11 (Big Sur) or later |
| Windows x64 | Windows 10 or later |
First Run
Pick your distribution below. Both paths end with the same result: a working index, a configured AI agent, and a daemon that auto-restarts when needed — usually within 30 seconds on a typical project.
- Indexing starts automatically. Open a project folder. The status bar shows
vexp: indexingwhile it works, thenvexp: 1,247 nodes · healthywhen ready. - Agents are configured. Accept the extension's setup prompt, or run
vexp: Setup Agentsfrom the Command Palette. vexp detects installed AI agents (Claude Code, Cursor, Copilot, Codex, and more) and writes the right config file for each. - Login autostart is installed. On the first setup, vexp installs a per-user login hook (no admin needed) so the daemon comes back at every reboot.
- Your AI agent just works. If the daemon was ever killed, it auto-restarts the next time an agent calls a tool — no manual management. Use the sidebar panel to monitor or stop it.
- NotePersonal mode: enable
vexp.personalModein Settings to skip writing shared-repo files (.claude/CLAUDE.md,.cursor/rules, git hooks). Useful when you want vexp on someone else's repo without changing their files.
VS Code Features
Beyond what your AI agent calls via MCP, vexp gives you visible feedback directly in VS Code (works the same in Cursor and Windsurf).
Sidebar panel
Click the vexp icon in the Activity Bar to open a sidebar with:
- Status header (running / indexing / error / stopped) and live index stats (nodes, edges, files, uptime).
- Token Savings dashboard with a period selector (today, 7 / 14 / 30 / 60 / 90 days) and an Export button that writes a markdown report to
.vexp/token-savings-report.md. - Local LLM section with Install / Start / Disable / Check-updates / Status buttons, plus a first-run modal that offers to enable it.
- Contextual actions: Force Re-index, Generate Context Capsule, Add Repository, Setup Agents, Settings, View Daemon Logs.
- Repository cards (status dot, file count, last-indexed time). A toggle shows or hides empty repos.
The panel auto-refreshes every 10 seconds.
CodeLens
Exported functions, classes, and types in TypeScript, JavaScript, Python, Go, and Rust get an inline annotation: ◆ N dependents across M files. Click it to open the impact graph for that symbol. Available on the Pro plan.
Hover
Hover any exported symbol in the same languages to see its dependents count, cross-repo usage, and top callers. Pro plan.
Status bar
The left-side status bar shows the current state. Click it to open your license status.
| State | Meaning |
|---|---|
vexp: indexing | Indexing in progress |
vexp: 1,247 nodes | Healthy, unlimited plan |
vexp: 1,800/2,000 | Starter — close to node limit (yellow) |
vexp: 12/20 today | Starter — close to daily limit (yellow) |
vexp: daily limit reached | Starter — paused until midnight UTC (red) |
vexp: 2,000/2,000 | Starter — node limit reached (red) |
vexp: starting… | Daemon booting |
vexp: stopped | Daemon not running |
vexp: error | Daemon failed — check logs |
Multi-root workspaces
.code-workspace files are supported. The active workspace's .vexp/workspace.json governs how repos are linked. See Multi-Repo Workspaces for the cross-repo features.
Commands
Everything you'll actually type, organized by where you type it.
Command Palette
Open the palette (Ctrl+Shift+P / ⌘⇧P), type vexp, and pick:
vexp: Setup ProjectAuto-detect installed AI agents, write config files, install git hooks.vexp: Setup AgentsMulti-select picker for AI agents (already-installed ones are pre-marked).vexp: Setup Multi-Repo WorkspacePick additional repos; vexp creates .vexp/workspace.json and enables cross-repo queries.vexp: Generate Context Capsule for Current TaskType a task description; vexp opens a panel with the pivot files and supporting skeletons.vexp: Show Impact Graph for Symbol at CursorOpen a panel showing what depends on the symbol you have selected.vexp: Show File SkeletonPick a detail level and see the file's structure without bodies.vexp: Show Index StatusOpen a panel with node / edge / file counts and uptime.vexp: Start IndexingStart the daemon if it's not running.vexp: Stop IndexingGracefully stop the daemon.vexp: Force Re-indexConfirm, then fully restart the daemon and re-index the project.vexp: Activate License KeyPaste a Pro / Team license key.vexp: Show License StatusSee plan, expiry, and links to manage your subscription.vexp: SettingsOpen VS Code Settings filtered to vexp options.MCP Tools
Your AI agent uses these tools through MCP. You won't call them directly — your agent does — but it helps to know what each one does.
| Tool | Purpose | When to use |
|---|---|---|
run_pipeline | Primary tool. Context search + impact analysis + memory recall in one call. Auto-detects intent. | Every task |
get_context_capsule | Lightweight context search with relevant memories. | Quick lookups |
get_impact_graph | What breaks if a symbol changes. Cross-repo supported. | Before refactoring |
search_logic_flow | Execution paths between two symbols. | Debugging |
get_skeleton | Token-efficient file structure (minimal / standard / detailed). | Exploring unfamiliar code |
get_session_context | Observations from current and previous sessions. | Recalling earlier work |
search_memory | Cross-session search with a "why this surfaced" rationale. | Finding past decisions |
save_observation | Persist an insight; optionally linked to a symbol for staleness tracking. | Recording context |
index_status | Indexing health, stats, available repo aliases. | Checking health |
get_token_savings | Period-bound savings stats with per-tool breakdown. | Tracking ROI |
submit_lsp_edges | High-confidence call edges from VS Code's language server. | Automatic (VS Code) |
workspace_setup | Generates agent configuration files. | First-time setup |
run_pipeline at a glance
run_pipeline replaces the older multi-step workflow with a single call that picks the right strategy for your task.
For multi-repo workspaces, scope a query with repos: ["backend", "shared"].
run_pipeline, get_context_capsule, and get_skeleton count against the Starter daily quota (20 / day, resets midnight UTC). All other tools — memory, impact, flow, savings, status — are unlimited on every plan.Session Memory
vexp remembers what your agent explored, decided, and learned — automatically, across sessions and days. Memories are linked to the code graph, so when the underlying code changes, related memories are flagged stale (your agent sees that the past decision may no longer apply).
How it works
- Auto-capture. Every MCP tool call your agent makes becomes a compact observation in the local database.
- Auto-surface.
run_pipelineandget_context_capsuleinclude relevant memories in the result — no extra tool calls needed. - Each result explains itself. A short rationale tells the agent why this memory surfaced (matching the task, recent activity, related code, etc.).
- Staleness tracking. When code linked to a memory changes, the memory is marked stale and demoted in ranking — but still shown with a warning so the agent can re-evaluate.
- Progressive disclosure. Memories are served at three detail levels depending on token budget — headline, standard, or full.
The three memory tools
All three are available on every plan, including Starter:
get_session_context— observations from the current and previous sessions.search_memory— cross-session search across everything vexp has captured.save_observation— manually record an insight. Optionally link it to a symbol so it gets flagged when that symbol changes.
Supported Agents
vexp auto-detects and auto-configures 12 AI coding agents. Running vexp setup writes the correct configuration file for each installed agent, including tool-usage instructions tailored to that agent.
| Agent | Files written | Transport |
|---|---|---|
| Claude Code | .claude/CLAUDE.md + ~/.claude.json | stdio |
| Cursor | .cursor/rules + .cursor/mcp.json | stdio |
| Windsurf | .windsurf/rules.md + .windsurf/mcp.json | stdio |
| GitHub Copilot | .github/copilot-instructions.md + .vscode/mcp.json | stdio |
| Zed | .zed/rules.md + .zed/mcp.json | stdio |
| Continue.dev | .continue/config.json | stdio |
| Codex | AGENTS.md + ~/.codex/config.toml | HTTP (port 7821) |
| Opencode | AGENTS.md | stdio |
| Kilo Code | .kilocode/rules.md + .kilocode/mcp.json | stdio |
| Kiro | .kiro/steering/vexp.md + .kiro/settings/mcp.json | stdio |
| Augment | auto-detected | HTTP |
| Antigravity | auto-detected | HTTP |
Multi-Repo Workspaces
vexp can index multiple repositories as a unified workspace and detect relationships between them — entirely on your machine. Useful for monorepos split across repos, frontend + backend pairs, and microservices.
Setup
Create .vexp/workspace.json in your primary repo, or click Add Repository in the sidebar.
Cross-repo edge detection
vexp automatically detects three kinds of relationship across repos:
| Type | How vexp detects it | Example |
|---|---|---|
| API contract | OpenAPI / Swagger spec matched to consumer HTTP calls | Backend exposes /api/users; frontend fetches it |
| Shared types | package.json dependency matching between repos | Both repos import @company/shared-types |
| Env contract | .env.example keys matched to process.env / os.environ usage | Backend defines DATABASE_URL; worker reads it |
Querying across repos
run_pipelineandget_context_capsulequery all indexed repos by default.- Scope with
repos: ["backend"]. - Use
cross_repo: trueonget_impact_graphandsearch_logic_flowto trace across repo boundaries. - Use
repo: "alias"onget_skeletonto target a specific repo. - Call
index_statusto see available repo aliases.
Switching workspaces from the CLI
If you have several configured workspaces and use Codex, vexp use <workspacePath> repoints Codex's global MCP config at a different one without re-running setup.
.vexp/parent_workspace.json auto-written during setup. VS Code multi-root workspaces (.code-workspace) are also supported.Local LLM (optional)
vexp ships with an optional on-device AI layer that adds smart preprocessing, intent detection, query expansion, session summarisation, re-ranking, and anti-pattern nudging. Everything runs on your machine — no cloud, no account, no code leaving your laptop. Typical extra savings: +30 % tokens on top of the baseline.
Multi-language intent detection covers 15 languages: English, Italian, French, German, Spanish, Portuguese, Russian, Chinese, Japanese, Korean, Arabic, Hindi, Turkish, Dutch, Polish.
Install & manage
One-time download (~3.5 GB). Files stay on disk after a disable, so re-enabling is instant.
The sidebar's Local LLM section shows the model status and these buttons:
- Install LLM (primary, blue) — when not yet installed. First-run modal also offers this.
- Start LLM (primary, blue) — when installed but disabled.
- Check LLM updates (secondary) — always available; compares your model with upstream without downloading.
- Disable LLM (red, destructive) — when active. Files stay on disk.
- LLM Status — diagnostic panel with hardware, files, backend count.
GPU acceleration
Works the same in both distributions. On Apple Silicon and Intel Macs, Metal is detected and used automatically. On Linux or Windows with an NVIDIA GPU, opt in by setting VEXP_GPU=1 in your environment (or, from the CLI, pass --gpu to vexp index).
Supported CUDA architectures
The CUDA plugin ships a PTX baseline plus pre-compiled SASS for specific GPU families. Any NVIDIA GPU from Volta (2017) onward is supported.
| GPU family | Compute cap | Coverage |
|---|---|---|
| Volta (V100) | 7.0 | PTX baseline — JIT at first inference (~10 s, then cached by the driver) |
| Turing (RTX 20xx, T4) | 7.5 | PTX JIT (~10 s, then cached) |
| Ampere (RTX 30xx, A100) | 8.0 / 8.6 | PTX JIT (~10 s, then cached) |
| Ada Lovelace (RTX 40xx) | 8.9 | PTX JIT (~10 s, then cached) |
| Hopper (H100) | 9.0 | PTX JIT (~10 s, then cached) |
| Blackwell (RTX 50xx) | 12.0 | Pre-compiled SASS — zero JIT lag |
JIT-compiled kernels are cached by the NVIDIA driver in ~/.nv/ComputeCache (Linux) or %LOCALAPPDATA%\NVIDIA\ComputeCache (Windows). After the initial ~10 s compilation, every subsequent inference starts instantly.
Configuration
vexp works out of the box. Tune it via VS Code settings, .vexp/vexp.toml, environment variables, or ignore files.
VS Code settings
All under the vexp. prefix in Settings or your settings.json:
| Setting | Type | Default | Description |
|---|---|---|---|
vexp.enabled | boolean | true | Master toggle for the extension |
vexp.maxContextTokens | number | 8000 | Default token budget for context capsules |
vexp.skeletonDetail | enum | "standard" | minimal / standard / detailed |
vexp.autoCommitIndex | boolean | true | Include the manifest in git commits |
vexp.gitHooksInstall | boolean | true | Install pre-commit / post-checkout / post-merge hooks |
vexp.multiRepo.enabled | boolean | true | Multi-repo workspace support |
vexp.multiRepo.workspaceConfig | string | ".vexp/workspace.json" | Path to the workspace config |
vexp.telemetry.enabled | boolean | false | Anonymous usage telemetry (opt-in; never code content) |
vexp.mcpPort | number | 7821 | MCP HTTP port |
vexp.binaryPath | string | "" | Override the vexp-core binary path (escape hatch) |
vexp.logLevel | enum | "warn" | error / warn / info / debug |
vexp.personalMode | boolean | false | Skip agent configs + git hooks for this workspace |
vexp.hideInternalFiles | boolean | true | Hide .vexp internal files from the explorer |
.vexp/vexp.toml
Optional file at the project root. Useful for ranking hints and indexing limits:
Environment variables
| Variable | When to set it |
|---|---|
VEXP_CORE_PATH | Bundled binary won't run — point at a locally-built vexp-core |
VEXP_GPU=1 | Enable GPU (CUDA) for the local LLM on Linux / Windows |
VEXP_HOME | Override the home directory used for ~/.vexp/ state (license, config, daemon registry). Set this when running inside a sandboxed environment (e.g. Codex, containers, CI) where the OS-resolved home directory differs from the real user profile. Must be an absolute path. |
VEXP_NO_AUTOSTART_INSTALL=1 | Don't install login autostart on first vexp setup |
VEXP_PORT=<port> | MCP HTTP port (default 7821) — set if 7821 is taken |
Manifest & git
.vexp/index.db is local-only (gitignored by default). .vexp/manifest.json contains a small list of content hashes and is committed to git — clones rebuild incrementally from it (typically < 5 s on a 5 000-file repo). A merge driver auto-resolves manifest conflicts. Git hooks (pre-commit, post-checkout, post-merge) keep the index in sync. Disable any of this with vexp.autoCommitIndex / vexp.gitHooksInstall. Existing hooks coexist via marker-delimited blocks.
Ignore files
vexp honours .gitignore, .vexpignore (and the legacy .vexp_ignore), and .ignore (ripgrep convention) — all using gitignore syntax. Common directories are excluded by default: node_modules, .git, target, dist, .next, __pycache__, build, vendor, Pods, DerivedData, .expo.
Supported Languages
vexp parses 30 programming languages plus Markdown. Each has a dedicated tree-sitter grammar with language-specific extraction.
| Language | Extensions |
|---|---|
| TypeScript | .ts, .tsx |
| JavaScript | .js, .jsx, .mjs, .cjs |
| Python | .py |
| Go | .go |
| Rust | .rs |
| Java | .java |
| C# | .cs |
| C | .c, .h |
| C++ | .cpp, .cc, .cxx, .hpp, .hh, .hxx |
| Ruby | .rb |
| Bash | .sh, .bash |
| Kotlin | .kt, .kts |
| Scala | .scala, .sc |
| Swift | .swift |
| Dart | .dart |
| PHP | .php |
| Elixir | .ex, .exs |
| Haskell | .hs |
| OCaml | .ml, .mli |
| Lua | .lua |
| R | .r, .R |
| Zig | .zig |
| HCL / Terraform | .tf, .hcl |
| Objective-C | .m, .mm |
| Clojure | .clj, .cljs, .cljc |
| F# | .fs, .fsx, .fsi |
| Dockerfile | Dockerfile |
| SQL | .sql |
| YAML | .yml, .yaml |
| JSON | .json, .jsonc |
Markdown indexing
Markdown files (.md, .mdx, .markdown) are first-class index nodes. Each file becomes a Document node (named after the file stem); each ATX heading (# through ######) becomes a nested Section node; each http:// or https:// URL becomes a Link node (URLs inside fenced code blocks are skipped).
Planning documents — spec.md, plan.md, tasks.md, README.md, ADRs under docs/adr/, RFCs under docs/rfcs/ — get a ranking boost when an agent searches for design or architecture context. Surfaced through run_pipeline and get_skeleton like code files.
Troubleshooting
Pick your distribution for the distro-specific issues, then check the cross-distro table below for the rest.
| Symptom | Diagnose | Fix |
|---|---|---|
| Extension does nothing | View → Output → dropdown "vexp" | Open a folder with a supported source file (or .vexp/manifest.json) |
| Index never updates | vexp: Show Index Status | vexp: Force Re-index |
| Bundled binary won't run | See the binary error in the Output panel | Set vexp.binaryPath in Settings |
| macOS "unidentified developer" | — | System Settings → Privacy & Security → Allow vexp (signed & notarised) |
| Sidebar empty / no repos | Check status header in the sidebar | Use vexp: Start Indexing or reload the window |
Cross-distro issues
These apply whether you use the VS Code extension or the CLI.
| Symptom | Diagnose | Fix |
|---|---|---|
| Agent can't reach vexp | vexp daemon-cmd status | Re-run vexp setup; check ~/.vexp/daemons.json |
| Port 7821 in use | vexp daemon-cmd status | Set vexp.mcpPort (VS Code) or VEXP_PORT (CLI) and re-run vexp setup |
| Daily limit reached (Starter) | Status bar shows "daily limit reached" | Wait until midnight UTC, or upgrade to Pro |
| LLM "no backends are loaded" | vexp setup-llm --status | Re-install with vexp setup-llm --install (refetches GPU shaders) |
| LLM out of disk | du -sh ~/.local/share/vexp/models | vexp setup-llm --disable, then delete the models folder |
CUDA crash on RTX 50xx: unspecified launch failure in launch_fattn | Confirm vexp-core --version is ≥ 2.0.19 | Upgrade to vexp 2.0.19+ which ships Blackwell SASS (sm_120). Versions ≤ 2.0.18 only have PTX compute_70 which fails to JIT-compile flash-attention kernels on Blackwell GPUs. |
| Pro license shows as FREE / 2000 nodes in sandboxed env (Codex, containers) | Run vexp index and check stderr for home_dir= — if it shows a sandbox path, the license files are not there | Set VEXP_HOME to the real user home in your MCP/agent config (e.g. VEXP_HOME=C:\Users\yourname) |
| Want logs | vexp daemon-cmd logs --follow | Or open .vexp/daemon.log directly |
.vexp/daemon.log and the index log .vexp/vexp.log are the next stop. Both are auto-truncated to 500 lines when they exceed 2 MB.Privacy & Security
vexp is designed for codebases you can't send to the cloud. Everything runs on your machine.
- Local-only by default. Zero network calls for parsing, indexing, or querying. The only outbound call is an optional, opportunistic license refresh — opt out by going offline (vexp keeps a 14-day grace period).
- No code execution. vexp parses your code with tree-sitter; it never runs it.
- Telemetry is opt-in. Off by default. When enabled (
vexp.telemetry.enabled = true), vexp sends anonymous usage counters only — never code content, filenames, paths, or identifiers. - Signed binaries. macOS builds are signed and notarised; Windows builds use Authenticode EV signing; all platforms ship with checksums verified at startup.
- Secret filtering (default on). Files named like credentials are dropped at index time:
.env,.env.production,.env.local,id_rsa,*.pem,*.key,secrets.yaml,secret.md,password.json,credentials.toml, and similar filename-boundary matches. - Template files allowlisted.
.env.example,.env.sample,.env.templateare not excluded — they document contracts, not secrets. - Filename boundary matching. Legitimate source files that just contain the word
secret,password, orcredentialin their name — e.g.src/secret-manager.ts— are not excluded. - Custom exclusions. Add patterns to
.vexpignore(gitignore syntax). To disable the secret filter entirely, setfilter_secrets = falseunder[index]in.vexp/vexp.toml.
Plans & Quotas
Quotas at a glance. For prices and the upgrade button, see the full pricing on the homepage.
| Plan | Nodes | Repos | Daily calls | Devices |
|---|---|---|---|---|
| Starter (Free) | 2,000 | 1 | 20 / day (resets midnight UTC) | 1 |
| Pro | 50,000 | 3 | unlimited | 3 |
| Team | unlimited | unlimited | unlimited | unlimited |
| Enterprise | unlimited | unlimited | unlimited | custom |
run_pipeline, get_context_capsule, and get_skeleton. Memory tools, impact graphs, flow analysis, savings reports, and index status are unlimited on every plan.What happens at the limits
- At 80 % of the node cap (Starter), you get a one-off warning.
- At 100 % of the node cap, new nodes stop being added. Your existing index keeps working — no data loss.
- At 20 daily calls, the status bar turns red and the three quota-affected tools pause until midnight UTC. Every other tool keeps working.
License activation
Run vexp: Activate License Key from the Command Palette and paste your key, or click the magic link in the activation email — vexp activates without any further input.
Offline use
vexp refreshes your license quietly in the background whenever you're online. If you stay offline, you keep working at your current plan for up to 14 days. After that vexp falls back to Starter — no data loss, and your previous plan returns automatically the next time you're online.
Account portal
Manage your subscription, devices, and team at vexp.dev/account (magic-link login). Team owners can add or remove members; each member logs in independently.