Vinv records a real run of your Python backend and checks your coding agent's "done" — replayed start, live port, acceptance tests the agent never sees. vinv.ai · Feedback & issues · Python first · TS & Go next · first month free, then $10/mo Your agent has never watched your code run — it edits the wrong handler, invents return shapes, then grades its own homework: "Done — all tests pass" while the server won't even start. Vinv records the run, ties every request to the exact line that served it, hands that evidence to your agent — and when the agent claims a fix, Vinv checks it independently: replayed start, live port, acceptance tests the agent never sees. One click reverts everything an episode touched — untracked files included.
Seven real screens from a live install, in order: the Code Graph · graph → source · Ask Vinv · an answer with runtime citations · diff impact of a change · Vinv asking for your verdict on a dispatched fix · the guided walkthrough that gets you there.
|
| You searched for… | What Vinv does about it |
|---|---|
| "claude code says done but tests fail" | Replayed start, live port, tests the agent never sees — "done" becomes a verdict |
| "agent stuck in a doom loop" | Evidence-fed retries, a stall breaker, a watchdog, a loop guard — bounded, then ended |
| "agent forgets my codebase every session" | The index and context graph persist on disk; one MCP call re-hydrates a fresh session |
| "AI hallucinating functions" | vinv_query returns the real symbols with real signatures — retrieval, not memory |
| "almost right, but not quite" | rank_suspects + values_of + slice: what ran, what values flowed, where it broke |
| "agent broke something else while fixing" | Diff impact blast radius, regression tests pinning neighbors, one-click revert |
| "I live in the terminal, not the IDE" | Install once; the MCP servers answer claude/codex from any terminal in the repo — no editor window needed |
// FEATURES
In the editor
Code Graph Explorer — your codebase as a navigable map
- What it is: a force-layout map of the whole index — files (double-click to expand into symbols), node size = importance (PageRank), colors = architectural layer, with type-to-filter and semantic search.
- Open it: Vinv: Open Graph Explorer, the Project-view icon, or click the Vinv status-bar item.
- Modes: Explore (structure) · Runtime (what actually ran glows; errors glow red; never-executed dims) · Diff Impact (what changed this epoch in solid red, everything reachable from it dashed — the blast radius of your last change) · Tour (a dependency-ordered guided walk) · Dead Code toggle.
- Node actions: Open in Editor · Ask Vinv about this node · Fix with Coding Agent (starts an episode seeded on the node) · Trace & Flamegraph.
- Use it when: onboarding to a repo, judging what a change touches before shipping it, or finding where runtime pain concentrates.
Ask Vinv — grounded QnA over your code and its runs
- What it is: a chat panel whose answers are grounded in the index + captured runtime evidence. Every claim cites clickable
file:linechips tagged static / runtime / stale — stale means the code changed after the trace, so the fact is dated, not asserted. - Open it: Vinv: Ask Vinv; graph nodes and call-tree rows open it pre-scoped to what you clicked.
- Feedback that teaches: ▲ is logged as training signal for retrieval; ▼ asks one targeted follow-up ("wrong files cited" / "answer misread them"). Type
/for session commands (/goal,/budget,/session,/sessions,/new,/fix). - Use it when: "what does this do", "where is X enforced", "why is this failing" — before you grep, and before your agent guesses.
Services, Sessions & Call Trees — run, watch, inspect
- Services view: discovered services with Set Up Service (traced boot, verified serving, recorded start command), then Vinv: Start Service / Stop Service — or Vinv: Run Service (
Cmd/Ctrl+Alt+R) — as a debug session under the tracer. If bring-up fails, Vinv asks how you start it and retries with your hint. - Sessions view: your entry points with live per-endpoint trace counts, filterable by time range.
- Call Tree: per-endpoint call DAG with a live runtime overlay — counts, durations, errors — plus source jump and a one-click Smoke Report (self-contained HTML dashboard per endpoint; not on Windows). Open from a Sessions row or Vinv: Open Call Tree.
- Use it when: you want to see what a request actually did — before asking anyone, human or model, to fix it.
Trajectory & status bar — the audit trail
- Vinv: Show Trajectory (Episodes, Rewards, Goals) renders the cross-episode ledger: goal, every episode's attempts/reward/evidence, stall negotiations, disputes, and what the learner learned. Nothing re-derived — it is the ledger, made readable.
- The status-bar item shows index epoch, running services, in-flight episodes, and failing-symbol counts at a glance.
Engine terminals — drive the CLIs directly
- Vinv: Open Index Terminal — the
indexCLI on PATH:index <path>(build),query <text> --top-k 8,update <path>. - Vinv: Open Trace Terminal — the
tracelensCLI:tracelens run <cmd…>wraps any Python command under tracing (not just services), plusreportandanalyzesubcommands.TRACELENS_INVARIANTSpoints at your own always-on runtime assertions.
Through your agent
Closed-loop fix episodes — dispatch, verify, escalate, dispute
- What it is: one issue in, one verified fix out. Vinv composes a context pack (issue + graph slice + runtime evidence + explicit success criteria), dispatches it headlessly to your agent, then verifies on evidence: service replay (fresh process, port must serve) plus acceptance tests generated before the fix that the agent never sees — required to fail on the broken code, required to pass after. Failures are folded into the next attempt; a stall breaker stops circling; a watchdog kills hung runs; inconclusive evidence escalates to your judgment card. Closing a judgment card suspends, not aborts — Vinv: Resume Judgment (Waiting Episode) re-opens it.
- Start one: Vinv: Fix with Harness (Closed-Loop Episode) · Fix with Coding Agent on a graph node · Dispatch in Ask Vinv ·
vinv_session action="fix"from your agent's own chat (queued to.vinv/requests/; the editor must be open to dispatch). - Steer it: Vinv: Set Standing Goal for Episodes and Vinv: Set Episode Budget (1–20) — or let the agent steer with
vinv:directives in its output:vinv: episodes 8·vinv: goal <text>·vinv: dispute <reason>·vinv: proposal <idea>(proposals become tick-boxes on your judgment card; each ticked one becomes its own episode). - Overrule it: a verified fix you know is still wrong → Vinv: Dispute a Verified Fix (it's still wrong). Vinv authors a counterexample test from your report; if it reproduces (and you confirm its checks match what you meant), the verdict is retracted and the fix re-dispatched against the strengthened oracle. Disagreement is resolved by evidence — never averaged.
- Undo everything: before an episode's first attempt, the entire working state — including uncommitted and untracked files — is snapshotted to a hidden git ref. revert & abort on the judgment card restores it byte-for-byte.
Runtime sweeps — fixes for problems nobody filed
- Vinv: Optimize Latency Hotspots (Dispatch to Coding Agent) — the Pareto head of your traced time (no magic thresholds) becomes an optimization episode.
- Vinv: Analyze Memory Trends (Leak Suspects Across Sessions) — symbols retaining memory in every session (3+) with a rising Theil–Sen trend become leak-investigation episodes.
- Vinv: Analyze Cache Opportunities (Duplicate Recomputation) — deterministic symbols repeatedly called with identical arguments; the duplicated time is reclaimable by memoization. Symbols observed touching time, random, or uuid are excluded — caching them would change behavior.
- Auto-episodes: a failing traced service (or a smoke report's error clusters) offers — or, with auto-episodes on, dispatches — a fix, deduplicated by failure signature so each distinct failure dispatches exactly once.
In the background
Incrementally current index, licensing & privacy machinery
- Every save triggers a debounced incremental reindex; captures are stamped with the index epoch so runtime facts can be honestly marked stale.
- Vinv: Enhance Graph (Resolve Ambiguous References) resolves references the deterministic parser refused to guess (abstain-not-guess by design).
- License validates hourly with a 24 h offline grace; six engine binaries are provisioned per-platform on activation and removed on uninstall — your settings and device identity survive, so reinstall restores setup.
- Vinv: Export Diagnostics (for Support) writes a support bundle you review and send yourself — the extension transmits nothing.
// ONE INSTALL, ANY HARNESS
Vinv installs as an editor extension — but its capabilities are not trapped in the editor. The two MCP servers are plain stdio programs that your agent launches, reading the index and the captured runs straight off disk. Once Vinv has registered them, every MCP-speaking agent on your machine can use them — including from a bare terminal with no editor window open.
- Install once, wired everywhere. On startup (or via Vinv: Register Vinv MCP in Agent Tools) Vinv writes its launch spec into each agent tool it detects —
~/.claude.json(Claude Code, local scope),~/.codex/config.toml,.cursor/mcp.json, VS Code's native MCP provider,~/.codeium/windsurf/mcp_config.json. Idempotent, reversible, and no secrets in any of them: the servers read credentials from~/.vinv/config.jsonand gate on your license themselves. - The editor doesn't have to be running. Open a terminal in the same repo, run
claudeorcodex, andvinv_query,rank_suspects,values_of,slice,coverage_of,callers_of,blast_radius,why_did_this_runandvinv_sessionall answer. The evidence lives in.vinv/, not in the extension host. (The servers run on the editor's own bundled Node, so the editor must stay installed — it just doesn't have to be open.) - One memory, many agents. Index and traces are shared state on disk. Ask Claude Code in the terminal about a failure, switch to Cursor chat to write the fix, come back the next day to a fresh session — all three read the same graph and the same recorded run. Nothing to re-explain.
- Any other MCP client works too. Auto-registration covers the agents Vinv detects; anything else that speaks MCP can be pointed at the same two servers — copy the
command/argsblock out of a registered config (it is just the editor binary runningout/mcp/indexServer.js <workspaceRoot>). - What still wants the editor: capture and dispatch. Building the index (Discover Project) and recording runs (Start Service) are editor-driven, and
vinv_session action="fix"/action="run_sweep"queue durably to.vinv/requests/— Vinv dispatches and verifies them the next time the editor is open. Reading evidence never needs it.
// AGENT SETUP
Vinv registers its MCP servers into every agent tool it detects (idempotent, reversible, no secrets in config files) — on startup, or via Vinv: Register Vinv MCP in Agent Tools. Episodes can dispatch to any of the seven targets across the six agents below (Cursor's block covers both its CLI and chat panel); the picker remembers your last choice, shows what's installed, and offers Install it for me for missing CLIs.
Claude Code (CLI)
- MCP: registered in
~/.claude.json(local scope — deliberately not the repo-tracked.mcp.json). - Verify: in Claude Code, run
/mcp—vinv-indexandvinv-runtimeshould list as connected. - Episodes: dispatched headlessly via the
claudeCLI.
Codex CLI
- MCP: registered in
~/.codex/config.toml. - Verify:
codex→ ask "call vinv_query for " — the tool should resolve.
Cursor (CLI and chat panel)
- MCP: registered in
.cursor/mcp.json; both thecursor-agentCLI and the chat panel see the same store. - Episodes: CLI dispatch, or the in-window Cursor chat (auto-send is best-effort UI automation — you may need to press Enter).
Gemini CLI
- Episodes: dispatched headlessly via the
geminiCLI — the context pack carries the runtime evidence in the prompt, so no MCP is required. - MCP: Vinv does not currently register its servers for Gemini CLI.
GitHub Copilot Chat (this window)
- MCP: VS Code native (
≥1.101) or.vscode/mcp.json. - Episodes: in-window chat automation with clipboard fallback.
Windsurf Cascade (this window)
- MCP: registered in
~/.codeium/windsurf/mcp_config.json. - Episodes: in-window Cascade automation (best-effort auto-send).
[!TIP] In any of these MCP-connected chats your agent already knows the workflow: the MCP servers instruct it to call
vinv_querybefore grep andrank_suspectsbefore reading source when debugging.
// MCP TOOLS REFERENCE
vinv-index — the codebase and the session:
| Tool | Returns | Ask it when |
|---|---|---|
vinv_query |
Ranked symbols with paths + a decision id | Any by-meaning code search — before grep |
vinv_feedback |
ack | Once after acting on results (reward −1..1) — trains retrieval |
vinv_session |
trajectory · status · issues · hotspots · memory_trends · cache_candidates; actions fix · run_sweep (runtime_errors / hotspots / memory_trends / cache_candidates) · set_goal · set_budget |
Read Vinv's live state — or queue fixes/sweeps — from chat |
vinv-runtime — the captured runs (read-only, provenance-stamped):
| Tool | Returns | Ask it when |
|---|---|---|
rank_suspects |
Symbols ranked by fault-localization score over pass/fail requests, real error messages attached | First, on any failure — before reading source |
values_of |
Observed argument/return types, null-rates, ranges, top values | "What does this function actually receive?" |
slice |
The observed caller chain from request root to the symbol, values at each frame | "How did this bad value get here?" |
coverage_of |
What ran, how often, ok/error, timing | "Did my change even execute?" |
callers_of / blast_radius / why_did_this_run |
Observed callers · transitive impact · entry-point paths | "Who calls this / what breaks if it's wrong / why did it run?" |
// SETTINGS
Configuration reference (~/.vinv/config.json)
Everything lives in ~/.vinv/config.json (owner-only), managed by Vinv: Configure Project — deliberately not in VS Code settings:
| Key | Default | Meaning |
|---|---|---|
provider / apiKey / baseUrl |
openai |
Your AI provider (OpenAI, Anthropic, Groq, or any OpenAI-compatible endpoint) |
analysisModel / summaryModel / embeddingModel |
— | Models for analysis, cheap code summaries, and the search index |
llmMode |
cloud |
cloud (API) or harness (your coding agent CLI does the analysis work) |
harness |
claude-code |
Remembered dispatch target |
autoDiscover |
true |
Index workspaces automatically on open |
mcpEnabled |
true |
Auto-register MCP servers into detected agent tools |
autoEpisodes |
true |
Service failures auto-dispatch fix episodes (off = ask first) |
acceptanceTests |
true |
Episodes generate agent-invisible acceptance tests (config file only) |
qnaEscalation |
off |
QnA evidence-escalation channel: off / shadow / on (config file only) |
Power-user env: VINV_HOME, TRACELENS_INVARIANTS (your own always-on runtime assertions), TRACELENS_CAPTURE_VALUE_HEAD, VINV_AUX_FEEDBACK_MINUTES.
// DATA & PRIVACY
- Everything Vinv builds lives on your machine: per-repo state in
.vinv/(auto-gitignored), per-machine state in~/.vinv/. Learning ledgers are local and never uploaded. - Traces store bounded summaries, not raw values: strings become length + hash prefix; parameters with sensitive names (
password,token,api_key,secret,authorization,credential) are flagged redacted and never have contents captured; everything is capped at 256 bytes by default. - Product telemetry (PostHog, EU) follows your editor's own telemetry setting and carries event names, coarse counts, path-scrubbed error messages, and your account email (so your own installs group as one user) — no code, no prompts, no trace payloads. Engine logs leave your machine only inside the Vinv: Export Diagnostics (for Support) bundle you review yourself.
- License key lives in the OS keychain, plus an owner-only copy at
~/.vinv/license.jsonthat the bundled engine binaries read to self-gate; MCP configs never contain secrets.
// TROUBLESHOOTING
The marketplace install link doesn't work
VinvAI.VinvAI is awaiting marketplace publication. Sideload the VSIX from an authorized distribution (Extensions → ⋯ → Install from VSIX…). Deep links on vinv.ai stay disabled until the listing is live so you never receive an obsolete package.
No runtime evidence / Sessions view is empty
Runtime evidence requires a traced run: set up the service (Services view), then Vinv: Start Service and exercise it. Tracing is Python-only today — other stacks get the index, graph, and QnA, but no runtime overlay.
My agent doesn't see the Vinv tools
Run Vinv: Register Vinv MCP in Agent Tools, then restart the agent's session. Check the agent-specific config path above. MCP tool calls also require an active license (sign in first).
In a terminal agent, also check you're in the repo Vinv registered: the launch spec is written per-workspace (Claude Code keys it under projects.<workspace path> in ~/.claude.json), so a session started somewhere else won't see the tools. Open that workspace in the editor once to register it.
Discovery fails or loops
Check Vinv: Configure Project — discovery needs an embedding-capable provider key (or harness mode for the LLM stages). Vinv: Stop Discovery cancels a run in progress; then Vinv: Re-discover Project resumes, and Vinv: Re-discover Project (Force Rebuild) starts clean. Vinv: Export Diagnostics (for Support) captures the engine logs for support.
An episode "verified" something that's still wrong
That's what Vinv: Dispute a Verified Fix (it's still wrong) is for — describe the behavior that's still broken; Vinv turns it into a counterexample test and retracts the verdict if it reproduces (with your confirmation). The pre-episode snapshot means nothing an episode touched is unrecoverable.
// LINKS
- Website / install: vinv.ai
- Feedback & issues: github.com/VinvAI/feedback
- Contact: support@vinv.ai