Lenspr

io.github.kyryloprPublished by GitHub account kyryloprv0.1.1Updated Oct 24, 2026

Stop vibecoding blind. Code graph so your AI stops breaking things across your codebase.

Overview

AI-generated overview

Builds a local dependency graph of your codebase so an AI assistant can see callers, callees, tests, and change impact before editing code.

What you can do
LensPR parses a local codebase into a dependency graph and exposes 60+ lens_* tools in 12 groups. Navigation and search tools return source, callers, callees, and related tests in one call; analysis tools report blast radius and severity before a change; quality tools score health, coverage, dead code, and architecture rules. It also covers git blame and history per function, infrastructure maps for SQL, Docker, env vars, and CI/CD, plus session memory and annotations.
When to use it
Use it when an AI coding agent edits a Python or TypeScript/JavaScript project and needs structural awareness to avoid breaking distant dependents. It suits impact checks before refactors, dead-code and coverage reviews, architecture rule enforcement, and cross-language frontend-to-backend tracing.
Requirements
Local process installed from PyPI (pip install 'lenspr[all]'). Requires Python 3.11+ and macOS or Linux; Windows is not supported. TypeScript/JavaScript projects also need Node.js 18+. Setup runs lenspr init and lenspr setup, then the IDE is restarted. No accounts, API keys, or environment variables are declared.
Before you install
The Modification group includes tools that write, rename, patch, and delete code nodes (lens_update_node, lens_patch_node, lens_add_node, lens_delete_node, lens_rename, lens_batch), and lens_run_tests executes tests, so changes can be applied to your working tree. The graph is local and rebuilt from source; add .lens/ to .gitignore. Alpha software with rough edges.

Installation

In SourceWeft

  1. Open Lenspr in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[LensPR]

Code intelligence for AI coding agents. Your AI sees dependencies before making changes.

Alpha (0.1.x) — works on real projects, used daily by the author. Expect rough edges.

AI assistants edit your code one file at a time. They don't see dependencies. They grep, read, guess — and break things three files away.

LensPR builds a dependency graph of your codebase and gives your AI structural understanding before it changes anything.

Quick Start

Requires Python 3.11+, macOS or Linux. For TypeScript/JS projects, also Node.js 18+.

bash
pip install 'lenspr[all]'lenspr init .lenspr setup .

Restart your IDE. Done. Your AI now has lens_* tools.

Add .lens/ to your .gitignore — the graph is local and rebuilt from source.


What It Does

"What depends on this function?"

One call returns source code, who calls it, what it calls, and related tests:

> lens_context("auth.login_handler")
source: 42 linescallers: auth_routes.create_routes, test_auth.test_login_successcallees: db.get_user, crypto.verify_password, jwt.create_tokentests: test_login_success, test_login_wrong_password

Without LensPR your AI makes 5-7 grep/read calls and still misses things. With LensPR — one call, full picture.

"What breaks if I change this?"

Before any modification, the AI sees the blast radius:

> lens_check_impact("models.User")
severity: CRITICALdirect_dependents: 15indirect_dependents: 23affected_modules: auth, payments, notificationstests_covering: 3

The AI warns you, changes its approach, or asks for confirmation. No more blind edits.

"How healthy is this codebase?"

> lens_vibecheck()
score: 86/100 (B)  test_coverage:    17/25 — 67% functions tested  dead_code:        20/20 — 0% dead code  circular_imports: 15/15 — 0 cycles  architecture:     12/15 — 1 violation  documentation:     8/10 — 81% documented  graph_confidence: 14/15 — 94% edges resolved

Track whether the codebase is improving or degrading over time.

Cross-language visibility

LensPR connects frontend and backend into a single graph:

LoginModal.tsx → fetch("/api/auth/login")                        ↓ CALLS_APIBackend:  @router.post("/login") → login_handler()            → db.query(User)        [reads: users]            → verify_password()            → create_jwt_token()

Also tracks: database tables, Docker services, env vars, CI/CD workflows, SQL migrations.


Works With

IDESetup
Claude Codelenspr setup . — automatic
CursorCopy .mcp.json to .cursor/mcp.json
Any MCP clientlenspr serve <path>

Languages: Python (95%+ resolution via Jedi/Pyright) and TypeScript/JavaScript (85-95% via tree-sitter + TS Compiler API).

Infrastructure: .sql files, Dockerfiles, docker-compose.yml, GitHub Actions workflows, .env files — all parsed into the same graph.

Everything runs locally. Your code never leaves your machine.


Key Features

Impact AnalysisSeverity (LOW → CRITICAL) before any change
One-Call ContextSource + callers + callees + tests in one request
Cross-LanguageFrontend HTTP → backend routes, DB tables, Docker, env vars, CI/CD
Surgical EditsTargeted find/replace within a function — no full file rewrites
Dead CodeFind unreachable functions (Django, FastAPI, Celery entry points)
Architecture RulesEnforce layer boundaries — violations warn before changes apply
Git per FunctionBlame, history, commit scope at function level
Session MemoryAI picks up where it left off across context resets
Auto-SyncFile watcher updates graph on every save
Health Score0-100 score across 6 dimensions — track quality over time

60+ tools organized in 12 groups — enable only what you need with lenspr tools.

All tools by category

Navigation & Search (8): lens_context, lens_get_node, lens_search, lens_grep, lens_find_usages, lens_get_structure, lens_list_nodes, lens_get_connections

Modification (6): lens_update_node, lens_patch_node, lens_add_node, lens_delete_node, lens_rename, lens_batch

Analysis (6): lens_check_impact, lens_validate_change, lens_health, lens_dead_code, lens_dependencies, lens_diff

Quality (7): lens_vibecheck, lens_nfr_check, lens_test_coverage, lens_security_scan, lens_dep_audit, lens_fix_plan, lens_generate_test_skeleton

Architecture (9): lens_arch_rule_add, lens_arch_rule_list, lens_arch_rule_delete, lens_arch_check, lens_class_metrics, lens_project_metrics, lens_largest_classes, lens_compare_classes, lens_components

Git (4): lens_blame, lens_node_history, lens_commit_scope, lens_recent_changes

Infrastructure (5): lens_api_map, lens_db_map, lens_env_map, lens_ffi_map, lens_infra_map

Testing & Tracing (3): lens_run_tests, lens_trace, lens_trace_stats

Annotations (5): lens_annotate, lens_save_annotation, lens_batch_save_annotations, lens_annotate_batch, lens_annotation_stats

Session (4): lens_session_write, lens_session_read, lens_session_handoff, lens_resume

Temporal (2): lens_hotspots, lens_node_timeline

Explanation (1): lens_explain


Known Limitations

  • Windows — not supported. macOS and Linux only.
  • self.method() calls — static parser can't fully resolve instance method dispatch. Workaround: lens_trace (Python 3.12+) resolves these at runtime.
  • Go, Rust, Java — not yet supported. Parser interface is ready for contributors.
  • Dynamic code — getattr, eval, dynamic imports can't be tracked statically.

Contributing

Try it. If it breaks, tell me.

  • Bug reports — even "this doesn't work" is helpful
  • Language parsers — Go, Rust, Java (BaseParser interface is ready)
  • Ideas — open an issue

License

MIT


Built because AI kept breaking my code.

Source: README.md at commit 87bd1c9

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts