Skip to main content
V.I.S.O.R. logo

V.I.S.O.R.

Local-first context retrieval for Codex, Claude Code, and terminal coding agents.

CI PyPI Open VSX License: MIT Python

V.I.S.O.R. is a local-first context engine for Codex, Claude Code, and other coding agents. It builds an AST-backed repository index and dependency graph, then returns focused code context with the files, symbols, and reasons behind each selection.

It works from the terminal, through the Agent Skill, or over MCP. Lexical retrieval is the default and runs offline. Semantic retrieval is optional. A VS Code / Open VSX HUD is optional and is not required for the CLI or MCP server.

Terminal demo

From a checkout of this repository:

uv run visor doctor
uv run visor index
uv run visor context "resolve local workspace project root"

Terminal demo: doctor, index, and context on this repository

Recorded from demo/terminal_demo.tape. The same take is also at docs/assets/terminal-demo.mp4.

Quick Start

Prerequisite: uv. uvx installs visor-mcp into a temporary environment.

# Check local/headless compatibility
uvx --from visor-mcp visor doctor

# Index the current repository
uvx --from visor-mcp visor index

# Retrieve focused context
uvx --from visor-mcp visor context \
  "where is workspace detection handled?"

visor init prints an MCP configuration entry for review. It does not edit IDE files.

Register the stdio server with Codex or Claude Code:

codex mcp add visor -- uvx visor-mcp
claude mcp add visor -- uvx visor-mcp
Manual Cursor, VS Code, and Claude Desktop configuration

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "visor": {
      "command": "uvx",
      "args": ["visor-mcp"]
    }
  }
}

VS Code (.vscode/mcp.json). The same file is the setup documented here for Antigravity:

{
  "servers": {
    "visor": {
      "command": "uvx",
      "args": ["visor-mcp"]
    }
  }
}

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "visor": {
      "command": "uvx",
      "args": ["visor-mcp"]
    }
  }
}

Agent Skill

The Skill tells an agent to request V.I.S.O.R. context, treat the files, symbols, and reasons as leads, and verify those leads in the repository. Installing it does not guarantee that every client will select it automatically.

Supported integrations

Client How it connects
Codex CLI codex mcp add visor -- uvx visor-mcp
Claude Code claude mcp add visor -- uvx visor-mcp
Cursor ~/.cursor/mcp.json
Claude Desktop claude_desktop_config.json
VS Code .vscode/mcp.json, plus the optional HUD
Antigravity The VS Code MCP file above, plus the optional HUD
Terminal visor doctor, visor index, visor context

Any other MCP client can launch the same stdio command: uvx visor-mcp.

Measured pilot results

Two published pilots are in this repository. Neither is a universal token-reduction claim. Both depend on the task, agent, model, cache behavior, and context. Provider token fields are not comparable across Codex and Claude Code. V.I.S.O.R. context was supplied as leads and had to be checked against the repository.

Patch correctness, 31 October 2026

Three seeded fixes, three repeats, Codex and Claude Code, native and V.I.S.O.R., 36 paired cells. Every cell had its own detached worktree. A check command scored the patch after the agent. Deltas are V.I.S.O.R. minus native. Full figures: benchmarks/results/v1.2.1-patch-pilot-summary.json.

Agent Condition Patches passed Median input-token delta Median output-token delta Median runtime delta
Codex Native 9/9 baseline baseline baseline
Codex V.I.S.O.R. 9/9 −6,352 (95% CI −55,316 to 36,583) +78 (95% CI −324 to 192) −0.2 s (95% CI −10.2 s to 6.6 s)
Claude Code Native 9/9 baseline baseline baseline
Claude Code V.I.S.O.R. 9/9 −2 (95% CI −2 to 0) +50 (95% CI −219 to 303) +0.4 s (95% CI −2.0 s to 1.3 s)

All 36 patches passed. The token and runtime intervals are wide and, except for Claude's two-token uncached input difference, include both directions. Claude's input_tokens value is the uncached remainder; cache-read tokens are a separate field and that paired interval also crosses zero. Codex does not report monetary cost. This does not show that V.I.S.O.R. saves a fixed share of tokens.

Diagnostic navigation, v1.2.0

The v1.2.0 diagnostic pilot compared native repository navigation with the same tasks plus V.I.S.O.R. context. Figures are from benchmarks/results/v1.2.0-diagnostic-pilot-summary.json. Paired intervals were recomputed from the preserved scored records.

Fact Value
Successful records 144
Failed records 0
Tasks 12 diagnostic navigation tasks
Repeats 3
Native/V.I.S.O.R. pairs per agent 36
Codex median paired duration delta −4.17 s (95% CI −8.22 s to −2.21 s)
Claude Code median paired duration delta −3.63 s (95% CI −6.68 s to −0.91 s)
Median evidence recall 100% in both native and V.I.S.O.R. conditions

Limitations:

  • The navigation pilot does not measure patch correctness, refactoring quality, or task success.
  • The patch pilot is three small fixtures, not a general coding benchmark.
  • Timing and token counts are machine-, model-, provider-, plan-, and cache-dependent.
  • Evidence recall is a heuristic, not human correctness review.
  • These results are not proof that V.I.S.O.R. makes coding agents universally faster, cheaper, or better.

Protocol: benchmarks/README.md. Published-result notes: benchmarks/results/README.md.

Why V.I.S.O.R.

V.I.S.O.R. complements normal repository inspection, including an agent's own search. It adds a persistent local index the agent can query.

Property What the implementation provides
Persistent local index Project graph stored under ~/.visor/
AST symbol extraction Tree-sitter classes, functions, and imports
Dependency graph Import edges used by trace, impact, and context scoring
Terminal interface visor doctor, index, status, context, fix, explain, trace, drift
MCP integration 17 stdio tools, including build_context and health_check
Agent Skill skills/visor-context/SKILL.md directs verification of leads
Drift detection Hash comparison and recent file-changelog warnings
Optional visual HUD VS Code / Open VSX extension; CLI and MCP work without it
Offline lexical retrieval Default mode. No model download on the lexical path

build_context classifies a query into an intent profile, can apply a built-in skill (bug-fixer, architecture-explainer, refactor-assistant, performance-optimizer), and returns a reason string for each selected node. Those reasons explain the score. They do not establish that the selection is sufficient for a code change.

Each context response also includes an internal size estimate: tokens for the full text of candidate files compared with tokens for the returned snippets. That estimate is not a measured change in agent token use.

Optional visual HUD

The HUD is a VS Code extension that draws the indexed graph and shows local telemetry. The MCP server and CLI do not need it.

Install V.I.S.O.R. HUD from the editor's extension view or Open VSX. Extension notes: src/visor/extension/README.md.

Optional V.I.S.O.R. HUD showing a dependency graph and telemetry panels

Current 1280×720 capture generated from this repository's real get_architecture_map, get_telemetry, and build_context outputs. The token panel is V.I.S.O.R.'s local byte-based estimate, not measured agent usage. Reproduce it with node demo/capture_hud.mjs.

Local-first and privacy

  • The index and dependency graph are stored locally, under ~/.visor/.
  • Lexical retrieval works offline and does not download a model.
  • Semantic mode is optional (visor --retrieval-mode semantic or VISOR_RETRIEVAL_MODE=semantic) and uses all-MiniLM-L6-v2, which may be downloaded on first use.
  • V.I.S.O.R. itself does not require uploading the whole repository to a hosted V.I.S.O.R. service. The MCP server speaks stdio.
  • Retrieved snippets are still passed to whichever coding agent the user has configured, subject to that provider's policies.

store_memory embeds the stored text with the semantic model. Lexical indexing does not.

Languages

Tree-sitter parsing covers nine languages. TSX uses the TypeScript grammar's TSX variant. It is not a tenth language.

Language Extensions
Python .py
TypeScript .ts, .tsx
JavaScript .js, .jsx
Go .go
Rust .rs
Java .java
C .c, .h
C++ .cpp, .cc, .cxx, .hpp
C# .cs

Adding a language is a small parser change. See CONTRIBUTING.md.

CLI

visor doctor
visor index
visor status
visor init
visor context "how is auth handled"
visor fix "login crash on null user"
visor explain "database client"
visor trace src/visor/server.py src/visor/workspace.py
visor drift
visor feedback useful src/app.py --query "how is auth handled"
visor feedback list --json

visor feedback stores an explicit useful, irrelevant, or missing verdict for a file and query. V.I.S.O.R. can apply that feedback to similar future queries in the same workspace. It is not automatic learning, it does not change import or call edges, and visor feedback delete or visor feedback clear --yes removes it.

fix and explain call build_context with bug-fixer and architecture-explainer. Terminal details: docs/TERMINAL.md.

MCP tools

The server registers 21 tools in src/visor/tools/core.py and src/visor/server.py. get_visor_skill is an MCP prompt, not one of those tools. Clients do not have to call any of them automatically.

Category Tools
Intelligence build_context
Search search_codebase, get_symbol_context, get_file_context
Graph get_dependency_chain, impact_analysis, trace_route, dead_code_detection
Drift get_drift_report
Memory and skills store_memory, list_custom_skills, add_custom_skill, delete_custom_skill
Feedback record_context_feedback, list_context_feedback, delete_context_feedback, clear_context_feedback
HUD get_architecture_map, get_telemetry, set_hud_focus
Server health_check

Reference: docs/MCP_TOOLS.md.

Documentation

Document Contents
docs/TERMINAL.md Offline lexical workflow and semantic opt-in
docs/AGENT_SKILL.md Skill installation notes
docs/MCP_TOOLS.md Tool reference
docs/ARCHITECTURE.md Local index, graph, and retrieval design
docs/FAQ.md Common questions
docs/TROUBLESHOOTING.md Setup failures
CONTRIBUTING.md Development setup and new languages
SECURITY.md Supported versions and private vulnerability reports
CHANGELOG.md Release notes

Community

A code of conduct is not in the tree. Adding one needs an owner-designated enforcement contact. No contact is designated for that purpose today.

git clone https://github.com/dibun75/visor.git
cd visor && uv sync --dev
uv run pytest tests/ -v

License

MIT © Arunav Mandal

Metadata

Release files for visor-mcp 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for visor-mcp 1.4.0
File Size Uploaded Provenance Actions
visor_mcp-1.4.0.tar.gz 825.3 kB With provenance Details for visor_mcp-1.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for visor-mcp 1.4.0
File Interpreter ABI Platform Actions
visor_mcp-1.4.0-py3-none-any.whl Python 3 none any Details for visor_mcp-1.4.0-py3-none-any.whl

Total release size: 1.7 MB

Release files / visor_mcp-1.4.0.tar.gz

Download URL visor_mcp-1.4.0.tar.gz
Size 825.3 kB
Tags Source
SHA-256 checksum
How to use checksums
aeeb176e20b326a390a19d96e854eb4222c42f939f9c19518a9495fb78207008
BLAKE2b-256 checksum
How to use checksums
5c060ade4ffb979673909c30019a4a71da4d3434c9f979e231ed363dcfeeaf40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Release files / visor_mcp-1.4.0-py3-none-any.whl

Download URL visor_mcp-1.4.0-py3-none-any.whl
Size 831.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8710bf29b29af9f404f10f4e4add14785d4ab6b25d388d4dc1657404f9d1d8aa
BLAKE2b-256 checksum
How to use checksums
6297a000331c59dca0216efa3a01c3a6872d2ad7a060f976817457008b4e8f57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Security for visor-mcp 1.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for visor_mcp-1.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page