Documentation

vexp Documentation

Install vexp, set up your AI agent, and find your way around. Everyday commands, every setting, and a troubleshooting playbook — for both VS Code and the standalone CLI.

v2.0.18VS Code 1.85+30 languages · 12 agents
Overview

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

01

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.

02

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.

03

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.

Getting Started

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.

NoteBundled binary won't run on your system? Set vexp.binaryPath in Settings to point at a locally-built vexp-core.

Platform support

PlatformMinimum OS
Linux x64Ubuntu 20.04+, Debian 11+, RHEL/Rocky 8+, WSL2
Linux arm64Same minimum as Linux x64
macOS IntelmacOS 11 (Big Sur) or later
macOS Apple SiliconmacOS 11 (Big Sur) or later
Windows x64Windows 10 or later
NoteThe platform table applies to both distributions — the same native engine is bundled in the VS Code extension and the npm CLI.
Getting Started

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.

  1. Indexing starts automatically. Open a project folder. The status bar shows vexp: indexing while it works, then vexp: 1,247 nodes · healthy when ready.
  2. Agents are configured. Accept the extension's setup prompt, or run vexp: Setup Agents from the Command Palette. vexp detects installed AI agents (Claude Code, Cursor, Copilot, Codex, and more) and writes the right config file for each.
  3. 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.
  4. 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.
  5. NotePersonal mode: enable vexp.personalMode in 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

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.

StateMeaning
vexp: indexingIndexing in progress
vexp: 1,247 nodesHealthy, unlimited plan
vexp: 1,800/2,000Starter — close to node limit (yellow)
vexp: 12/20 todayStarter — close to daily limit (yellow)
vexp: daily limit reachedStarter — paused until midnight UTC (red)
vexp: 2,000/2,000Starter — node limit reached (red)
vexp: starting…Daemon booting
vexp: stoppedDaemon not running
vexp: errorDaemon 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.

Reference

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.
Reference

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.

ToolPurposeWhen to use
run_pipelinePrimary tool. Context search + impact analysis + memory recall in one call. Auto-detects intent.Every task
get_context_capsuleLightweight context search with relevant memories.Quick lookups
get_impact_graphWhat breaks if a symbol changes. Cross-repo supported.Before refactoring
search_logic_flowExecution paths between two symbols.Debugging
get_skeletonToken-efficient file structure (minimal / standard / detailed).Exploring unfamiliar code
get_session_contextObservations from current and previous sessions.Recalling earlier work
search_memoryCross-session search with a "why this surfaced" rationale.Finding past decisions
save_observationPersist an insight; optionally linked to a symbol for staleness tracking.Recording context
index_statusIndexing health, stats, available repo aliases.Checking health
get_token_savingsPeriod-bound savings stats with per-tool breakdown.Tracking ROI
submit_lsp_edgesHigh-confidence call edges from VS Code's language server.Automatic (VS Code)
workspace_setupGenerates 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.

Terminal
run_pipeline({ task: "fix login bug", // describe the task in your own words preset: "auto", // auto | explore | debug | modify | refactor max_tokens: 10000, // token budget include_tests: false, // include test files (auto-on for debug) observation: "uses cookies" // optional: save an insight in the same call })

For multi-repo workspaces, scope a query with repos: ["backend", "shared"].

NoteOnly 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.
Core Feature

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_pipeline and get_context_capsule include 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.
Integrations

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.

AgentFiles writtenTransport
Claude Code.claude/CLAUDE.md + ~/.claude.jsonstdio
Cursor.cursor/rules + .cursor/mcp.jsonstdio
Windsurf.windsurf/rules.md + .windsurf/mcp.jsonstdio
GitHub Copilot.github/copilot-instructions.md + .vscode/mcp.jsonstdio
Zed.zed/rules.md + .zed/mcp.jsonstdio
Continue.dev.continue/config.jsonstdio
CodexAGENTS.md + ~/.codex/config.tomlHTTP (port 7821)
OpencodeAGENTS.mdstdio
Kilo Code.kilocode/rules.md + .kilocode/mcp.jsonstdio
Kiro.kiro/steering/vexp.md + .kiro/settings/mcp.jsonstdio
Augmentauto-detectedHTTP
Antigravityauto-detectedHTTP
Advanced

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.

Terminal
{ "workspace_id": "my-project", "repos": [ { "alias": "backend", "path": "." }, { "alias": "frontend", "path": "../frontend" }, { "alias": "shared", "path": "../shared-lib" } ] }

Cross-repo edge detection

vexp automatically detects three kinds of relationship across repos:

TypeHow vexp detects itExample
API contractOpenAPI / Swagger spec matched to consumer HTTP callsBackend exposes /api/users; frontend fetches it
Shared typespackage.json dependency matching between reposBoth repos import @company/shared-types
Env contract.env.example keys matched to process.env / os.environ usageBackend defines DATABASE_URL; worker reads it

Querying across repos

  • run_pipeline and get_context_capsule query all indexed repos by default.
  • Scope with repos: ["backend"].
  • Use cross_repo: true on get_impact_graph and search_logic_flow to trace across repo boundaries.
  • Use repo: "alias" on get_skeleton to target a specific repo.
  • Call index_status to 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.

NoteOpening a secondary repo on its own still loads the whole workspace, thanks to a small .vexp/parent_workspace.json auto-written during setup. VS Code multi-root workspaces (.code-workspace) are also supported.
Optional

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 familyCompute capCoverage
Volta (V100)7.0PTX baseline — JIT at first inference (~10 s, then cached by the driver)
Turing (RTX 20xx, T4)7.5PTX JIT (~10 s, then cached)
Ampere (RTX 30xx, A100)8.0 / 8.6PTX JIT (~10 s, then cached)
Ada Lovelace (RTX 40xx)8.9PTX JIT (~10 s, then cached)
Hopper (H100)9.0PTX JIT (~10 s, then cached)
Blackwell (RTX 50xx)12.0Pre-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.

NoteThe local LLM is entirely optional. vexp's baseline 65–70 % token savings work without it.
Reference

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:

SettingTypeDefaultDescription
vexp.enabledbooleantrueMaster toggle for the extension
vexp.maxContextTokensnumber8000Default token budget for context capsules
vexp.skeletonDetailenum"standard"minimal / standard / detailed
vexp.autoCommitIndexbooleantrueInclude the manifest in git commits
vexp.gitHooksInstallbooleantrueInstall pre-commit / post-checkout / post-merge hooks
vexp.multiRepo.enabledbooleantrueMulti-repo workspace support
vexp.multiRepo.workspaceConfigstring".vexp/workspace.json"Path to the workspace config
vexp.telemetry.enabledbooleanfalseAnonymous usage telemetry (opt-in; never code content)
vexp.mcpPortnumber7821MCP HTTP port
vexp.binaryPathstring""Override the vexp-core binary path (escape hatch)
vexp.logLevelenum"warn"error / warn / info / debug
vexp.personalModebooleanfalseSkip agent configs + git hooks for this workspace
vexp.hideInternalFilesbooleantrueHide .vexp internal files from the explorer

.vexp/vexp.toml

Optional file at the project root. Useful for ranking hints and indexing limits:

Terminal
max_file_size_kb = 512 # skip files larger than this max_context_tokens = 8000 # default context capsule budget log_level = "warn" priority_paths = ["src/core", "src/api"] # rank these higher depriority_paths = ["generated", "vendor"] # rank these lower [index] filter_secrets = true # default; set false to disable secret filtering

Environment variables

VariableWhen to set it
VEXP_CORE_PATHBundled binary won't run — point at a locally-built vexp-core
VEXP_GPU=1Enable GPU (CUDA) for the local LLM on Linux / Windows
VEXP_HOMEOverride 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=1Don'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.

Reference

Supported Languages

vexp parses 30 programming languages plus Markdown. Each has a dedicated tree-sitter grammar with language-specific extraction.

LanguageExtensions
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
DockerfileDockerfile
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.

Support

Troubleshooting

Pick your distribution for the distro-specific issues, then check the cross-distro table below for the rest.

SymptomDiagnoseFix
Extension does nothingView → Output → dropdown "vexp"Open a folder with a supported source file (or .vexp/manifest.json)
Index never updatesvexp: Show Index Statusvexp: Force Re-index
Bundled binary won't runSee the binary error in the Output panelSet vexp.binaryPath in Settings
macOS "unidentified developer"System Settings → Privacy & Security → Allow vexp (signed & notarised)
Sidebar empty / no reposCheck status header in the sidebarUse vexp: Start Indexing or reload the window

Cross-distro issues

These apply whether you use the VS Code extension or the CLI.

SymptomDiagnoseFix
Agent can't reach vexpvexp daemon-cmd statusRe-run vexp setup; check ~/.vexp/daemons.json
Port 7821 in usevexp daemon-cmd statusSet 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 --statusRe-install with vexp setup-llm --install (refetches GPU shaders)
LLM out of diskdu -sh ~/.local/share/vexp/modelsvexp setup-llm --disable, then delete the models folder
CUDA crash on RTX 50xx: unspecified launch failure in launch_fattnConfirm vexp-core --version is ≥ 2.0.19Upgrade 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 thereSet VEXP_HOME to the real user home in your MCP/agent config (e.g. VEXP_HOME=C:\Users\yourname)
Want logsvexp daemon-cmd logs --followOr open .vexp/daemon.log directly
NoteIf none of the above match, the daemon log .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.
Trust

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.template are not excluded — they document contracts, not secrets.
  • Filename boundary matching. Legitimate source files that just contain the word secret, password, or credential in 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, set filter_secrets = false under [index] in .vexp/vexp.toml.
NoteThe license system itself doesn't need the network: signature verification is offline, and the 14-day grace period covers planes, ferries, and locked-down build machines.
Reference

Plans & Quotas

Quotas at a glance. For prices and the upgrade button, see the full pricing on the homepage.

PlanNodesReposDaily callsDevices
Starter (Free)2,000120 / day (resets midnight UTC)1
Pro50,0003unlimited3
Teamunlimitedunlimitedunlimitedunlimited
Enterpriseunlimitedunlimitedunlimitedcustom
NoteDaily calls count only against 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.