A structural code intelligence layer that transforms source code into a queryable knowledge graph for search, impact analysis, and AI-powered development.
Parse once. Query forever. Know exactly what breaks before it does.
"Text diffs are the source of all code review anxiety. A developer modifies a core utility, and the reviewer has to spend an hour mentally tracing downstream services to guess if it's safe to merge. N3MO replaces human guesswork with hard math."
N3MO is a symbol-centric code intelligence layer. Instead of scanning raw text, it parses your source code's ASTs, maps call graphs, and models dependencies in a queryable relational database β deterministically, with zero LLM calls at index time.
For engineering leaders and teams, N3MO acts as a structural insurance policy for your codebases.
π‘ Why N3MO?
π‘οΈ Eliminate Regression Risks β Utility functions are rarely refactored because developers fear unknown side effects. N3MO maps the transitive blast radius of any symbol to arbitrary depth, showing you exactly what will break before you make the edit. Automate this in your CI/CD β
ποΈ Rapid Developer Onboarding β Instead of senior engineers spending hours explaining codebase flow to new hires, developers run one command to visualize complex call chains and parent-child dependencies interactively.
π€ AI-Agent Ready Infrastructure β Modern LLM agents (Cursor, Claude Desktop) are limited by context windows and text search. N3MO's native MCP server lets agents query the actual code graph, enabling fast, hallucination-free refactoring.
β‘ No Embeddings, No Drift β N3MO is pure static analysis: Tree-sitter AST parsing into PostgreSQL. There's no vector index to keep in sync, no embedding cost per repo, and no semantic-similarity guesswork β every edge in the graph is an exact, verifiable relationship.
π How N3MO Compares
Capability
Grep / Text Search
IDE "Find References"
N3MO Code Graph
Analysis Basis
Substring matching
AST-based, direct refs only
Relational knowledge graph
Transitive Traversal
β None
β Manual, one level at a time
β‘ Instant to arbitrary depth
Blast Radius Mapping
β None
β Flat search-result list
π¨ Interactive visual orbit map
CI/CD Integration
β None
β Bound to IDE runtime
βοΈ Dockerized CLI + CTE queries
AI Agent Integration
β Injected file chunks
β οΈ Manual context copy
π€ Native MCP server
Language Coverage
β Any text file
β οΈ Language-specific plugins
β 27 Tree-sitter grammars
Indexing Method
N/A
N/A
β Deterministic AST parse β no embeddings, no LLM calls
π οΈ The Core Problem N3MO Solves
β Without N3MO
code
Developer: "Where does 'login' appear?"
Tool: grep -r "login" .
Result: 647 matches across 89 files
...now what?
β With N3MO
code
Developer: "What breaks if I change login?"
Tool: n3mo impact "login"
Result: 3 direct callers β 5 ripple effects
Full blast radius in < 50ms
N3MO doesn't find text β it understands structure. It traces the actual call graph, not string matches.
Questions N3MO answers instantly:
Question
How
π
What functions and classes exist in this repo?
Full symbol index across 27 languages
π―
Where is this symbol used β directly and transitively?
Recursive CTE traversal to arbitrary depth
π₯
What is the blast radius of changing this function?
Interactive orbit map with depth slider
πΈοΈ
How do these components actually connect?
Call graph + parent-child hierarchy
π€
Can my AI agent understand this codebase structurally?
Native MCP server for Cursor / Claude
π₯ Who it's for
Start here
Individual Developers
pip install n3mo β index locally, query instantly. Bring N3MO to Cursor/Claude via our native MCP server. Open source and free under PolyForm Noncommercial.
Code Reviewers & Team Leads
Stop merging blindly. Install the N3MO Webhook via n3mo.shop to get deterministic blast-radius comments on every PR automatically.
Engineering Leaders
Offload pipeline infrastructure entirely. Zero-config, cloud-managed graph engine. No local PostgreSQL to maintain, zero data retention, and strict privacy.
β¨ Core Capabilities
Ingestion & Parsing
Multi-language support β 27 Tree-sitter grammars supported (dynamically loaded); actively benchmarked on 10 major languages including Python, JS/TS, Go, Java, and C/C++
Parallel AST ingestion β ProcessPoolExecutor distributes CPU-bound parsing across all available cores
graph LR
A[main.py] --> B[auth.py::login]
A --> C[db.py::connect]
B --> D[utils.py::hash_password]
B --> E[models.py::User]
C --> F[config.py::DB_URI]
style A fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
style B fill:#4ecdc4,stroke:#0ca89e,stroke-width:2px,color:#000
style C fill:#45b7d1,stroke:#1098ad,stroke-width:2px,color:#000
style D fill:#96ceb4,stroke:#63b598,stroke-width:2px,color:#000
style E fill:#ffd93d,stroke:#f5c200,stroke-width:2px,color:#000
style F fill:#e0e0e0,stroke:#a0a0a0,stroke-width:2px,color:#000
Index a repository, trace blast radius, and visualize the dependency graph β all in under 30 seconds.
What the tutorial covers:
Step
What You'll See
1. Install & Setup
pip install n3mo β n3mo setup spins up Docker + PostgreSQL in one command
2. Index a Codebase
n3mo index parses ASTs across 27 languages and builds the call graph
3. Query Impact
n3mo impact "symbol_name" traces direct callers and transitive ripple effects
4. Visualize
--graph flag launches the interactive orbit map in your browser
5. PR Webhook
A live GitHub PR triggers N3MO's automated blast-radius comment
π‘ Prefer hands-on? Follow the Quick Start to run N3MO locally in under 60 seconds.
π€ Model Context Protocol (MCP)
N3MO includes a native MCP server that exposes repository analysis and graph traversal tools to LLM agents (like Claude, Cursor, or Windsurf).
Automatic Claude Desktop Setup
bash
# Navigate to the workspace you want Claude to analyze, then run:
n3mo mcp install
This registers N3MO and sets up the paths automatically. Restart Claude Desktop and you're ready!
π§ Claude Skill (System Instructions)
To configure Claude to run N3MO impact queries proactively before changing code in the editor, import or copy-paste the custom instructions from the SKILL.md profile.
Cursor Setup
Go to Settings β Models β MCP.
Click + Add New MCP Server.
Set the configuration details:
Name: n3mo
Type: command
Command: n3mo mcp start (or uvx n3mo mcp start to run directly)
Click Save, and Cursor will instantly be able to index and query your workspace blast radius.
π’ Scale to Team Callout
Bringing AI agents to your team workspace? Stop forcing every developer to run heavy indexing pipelines and PostgreSQL instances on their local laptops.
Connect Cursor directly to the global cloud graph at n3mo.shop to bypass local machine database overhead entirely. Your agents query the cloud graph instantly.
π§° Available MCP Tools
Tool
Description
n3mo_index
Ingests and indexes the codebase
n3mo_search_symbol
Locates the definition of a symbol across the workspace (file path, line number)
n3mo_get_dependencies
Finds all external symbols that a given symbol calls (forward-dependency graph)
n3mo_get_file_symbols
Lists all classes and functions defined inside a specific file
n3mo_get_blast_radius
Traces the transitive impact/call graph of a code symbol
βοΈ Enterprise CI/CD Automation (The SaaS Pivot)
Running deterministic AST parsing in a local loop is great, but manually building multi-step YAML actions, maintaining CI database infrastructure, and orchestrating PR timeline events is a massive friction point for engineering teams.
n3mo.shop is our definitive, zero-maintenance infrastructure layer that abstracts all of this away.
Zero-Config Webhooks: 2-click GitHub App sync. No YAML boilerplate to maintain.
Automated Inline PR Comments: N3MO hooks into your repository and posts the exact blast radius directly into your GitHub review timeline:
Strict "Zero-Trust" Privacy: We only parse structural AST metadata (symbol relationships). Your raw source code is never stored on our servers. The ephemeral parsing container is instantly destroyed the millisecond the PR comment is posted.
All benchmarks measured on Intel i5-13450HX, 24 GB RAM, NVMe SSD.
Django β Optimization History
Django is the primary benchmark target: 3,021 files, ~43K symbols, ~181K calls.
code
Django Index Time (minutes)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
v0.3 Baseline ββββββββββββββββββββββββββββββββββββββββββββββ 23 min 1Γ
SPLIT_PART Fix ββββββββββββββββββββββ 11 min 2Γ
Batch Inserts βββββββββ 5 min 4.6Γ
+ Multiprocessing ββββ 2.5 min 9Γ π
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Optimization
Index Time
Speedup
What Changed
v0.3 baseline
23 min
1Γ
Per-symbol DB inserts, naive call resolution
+ SPLIT_PART query fix
11 min
2Γ
Eliminated redundant string splitting in call resolution
+ Batch inserts
5 min
4.6Γ
Symbols, imports, and calls batched per file (1 transaction)
+ Multiprocessing
~2.5 min
~9Γ
ProcessPoolExecutor distributes AST parsing across cores
β All results are real measurements on the Django repository. Multiprocessing gains scale with core count.
TensorFlow β Enterprise-Scale Monorepo
Tested on TensorFlow β a 36,000-file, multi-language (C++/Python) monorepo.
Metric
Result
Repo size (total files)
~36,000
Files processed & indexed
14,611(after filtering tests, configs, and non-source files)
Total symbols extracted
79,523
Total call edges extracted
480,851
Full index time (cold start)
14.06 minutes
Peak memory (Docker container)
185 MB RAM
CPU utilization
~5%
N3MO scales from a 3K-file pure-Python repo (Django) to a 36K-file multi-language enterprise monorepo (TensorFlow) β roughly a 5Γ larger indexing job at near-linear throughput, without significant resource overhead. Symbol/edge-per-file and incremental (warm) re-index numbers for TensorFlow are being finalized in the full benchmark report.
N3MO uses SHA-256 file hashing to skip unchanged files on subsequent runs.
Scenario
Time
Notes
Full index (first run)
Baseline
All files parsed and inserted
No changes (re-run)
< 1 second
Hash comparison only, zero DB writes
1 file modified
< 2 seconds
Only the changed file is re-parsed and upserted
These results are from the built-in benchmark script on a 20-file synthetic repository. Real-world incremental performance is proportional to the number of changed files, not the total repository size.
Query Performance
Impact analysis uses PostgreSQL recursive CTEs with cycle guards. Query times are independent of repository size β they depend only on the size of the result subgraph.
Query Type
Typical Latency
Direct callers of a symbol
< 10 ms
Full blast radius (depth β€ 5)
< 50 ms
Complete graph traversal
< 200 ms
Running the Benchmark
bash
python benchmarks/benchmark_indexing.py
π Project Status
N3MO's core architecture and distribution phases (Foundations, Performance, Correctness & Scaling, and Distribution) have been successfully completed.
The project is currently stable, actively maintained, and ready for production use.
π Design Principles
1. Structure before semantics
Map the code skeleton (AST) before adding AI analysis. A correct graph is worth more than a smart but wrong one.
2. Database as source of truth
All state lives in PostgreSQL, eliminating in-memory complexity and enabling graph queries that application-level traversal cannot match.
3. Correctness over speed
The parser must handle syntax errors gracefully without corrupting the graph. A fast indexer that silently drops symbols is worse than a slow one that gets everything right.
Contributions are welcome! Please read the CONTRIBUTING.md guide to get started with setting up the project, coding standards, and running checks locally.
Development Setup
bash
# Install with dev dependencies
pip install -e ".[dev]"# Lint
ruff check n3mo/
# Type check
mypy n3mo/
# Tests
pytest tests/
π License & Pricing
Pricing & Licensing
N3MO is free under the PolyForm Noncommercial 1.0.0 License for local usage and single-developer MCP integrations.
100% Free & Local β CLI queries, local MCP integrations, and the visualizer with zero limits.
Commercial SaaS & Webhooks β To use N3MO in team environments, CI/CD pipelines, and private GitHub webhooks, purchase a commercial license at n3mo.shop.
Enterprise Licensing β for large-scale organization deployments, custom SLAs, or zero-trust air-gapped environments, reach out for Enterprise options.
Licensed under the PolyForm Noncommercial 1.0.0 License.
β Free for personal projects, academic research, and hobby tools
β Source available β view, modify, and distribute for noncommercial purposes
β οΈ Noncommercial β you may not use it for commercial purposes
β οΈ Restrictions apply on offering it as a service
For commercial deployments or proprietary modifications, contact for licensing options.
If N3MO saves you time during code reviews or helps your AI agents understand your codebase, consider sponsoring the project to support continued development.
β Star this repo if you find it useful β thanks for visiting!
Building tools for understanding code at scale.
VisitorsAlt
code
ββββ βββ βββββββ ββββ ββββ βββββββ
βββββ βββ ββββββββ βββββ βββββ βββββββββ
ββββββ βββ βββββββ βββββββββββ βββ βββ
ββββββββββ βββββββ βββββββββββ βββ βββ
βββ ββββββ ββββββββ βββ βββ βββ βββββββββ
βββ βββββ βββββββ βββ βββ βββββββ
C O D E I N T E L L I G E N C E L A Y E R