
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
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.
Installation
In SourceWeft
- Open Lenspr in the dashboard and add it to a workspace.
- 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
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+.
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:
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:
The AI warns you, changes its approach, or asks for confirmation. No more blind edits.
"How healthy is this codebase?"
Track whether the codebase is improving or degrading over time.
Cross-language visibility
LensPR connects frontend and backend into a single graph:
Also tracks: database tables, Docker services, env vars, CI/CD workflows, SQL migrations.
Works With
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
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
0Version history
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