Contents


Get Started

1. Install the CLI

One command — binary, MCP wiring, and agent docs for your tool of choice:

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/FreePeak/LeanKG/main/scripts/install.sh | bash -s -- <target>
Target What you get
cursor Binary + MCP + skill + AGENTS.md + session hook
claude Binary + MCP + plugin + skill + CLAUDE.md + hooks
opencode Binary + MCP + plugin + skill + AGENTS.md
gemini / kilo / antigravity Binary + MCP + skill + agent docs
docker Hub image + index + embed + MCP HTTP (no Rust)
curl -fsSL https://raw.githubusercontent.com/FreePeak/LeanKG/main/scripts/install.sh | bash -s -- cursor
cargo install leankg
# or
git clone https://github.com/FreePeak/LeanKG.git && cd LeanKG && cargo build --release
curl -fsSL https://raw.githubusercontent.com/FreePeak/LeanKG/main/scripts/docker-up.sh | bash
curl http://localhost:9699/health

Point your MCP client at http://localhost:9699/mcp. Multi-project RocksDB mounts: AGENTS.md.

Published Hub tags currently target linux/arm64. On linux/amd64, build with docker compose -f docker-compose.rocksdb.yml up --build.

2. Wire up your agent(s)

Installing the binary alone does not connect your agent. Run setup (or use an install target above) so MCP is registered:

leankg setup

This configures Cursor, Claude Code, OpenCode, Gemini, and other supported clients with LeanKG’s MCP server, skills, and hooks where available.

3. Index each project

cd your-project
leankg init
leankg index ./src
leankg status

Optional: enable watch mode so the graph stays fresh while you and your agent edit code:

leankg mcp-stdio --watch

4. Ask better questions

leankg impact src/main.rs --depth 3
leankg path "Handler" "Repository"
leankg explain "APIRouter"
leankg graph-query "what connects auth to the database?"
leankg web    # UI at http://localhost:8080

Upgrade anytime:

leankg update

Why LeanKG?

When an AI agent needs to understand code, it usually discovers structure the slow way: grep, glob, and Read — one file at a time — rebuilding call paths and dependencies by hand. That is a pile of tool calls and round-trips before the real work starts.

LeanKG hands the agent the exact subgraph it needs. It indexes symbols, edges, tests, docs, and (optionally) embeddings into a local knowledge graph, then exposes them over MCP. Instead of crawling the tree, the agent asks one question and gets back callers, dependents, blast radius, and targeted source — surgical context, not a file-by-file search.

graph LR
    A[AI Agent] -->|intent| B[LeanKG MCP]
    B --> C[Graph + Embeddings]
    C -->|targeted context| A
Without LeanKG With LeanKG
Grep → open many files → large context Query the graph → minimal, relevant subgraph
No blast-radius awareness Impact radius with confidence + severity
Keyword-only search Keyword + semantic (HNSW) + ontology
Stale mental model of the repo Index + optional --watch incremental updates

On cost: LeanKG’s win on every codebase is precision and speed — fewer tool calls, faster answers. Token savings are real and scale-dependent: modest on small repos, material on large monorepos multiplied by team-wide agent usage.


Measured Results

Vector-engine A/B gate (100 tasks, synthetic agent workload vs grep/cat-style baseline) — see docs/benchmarks/vector_engine_gate_results.json:

Metric Result Floor
Token reduction −65.0% ≥ 60%
Tool-call reduction −84.6% ≥ 80%
Speedup 2.50× ≥ 2×
1M SQ8 ANN P95 ~0.055 ms < 50 ms

Unified agent A/B (19 cases vs grep baseline): ~30% input token savings, ~3× tokens/result efficiency.

Load test (~100K nodes):

Operation Throughput
Insert elements ~57k / sec
Insert relationships ~67k / sec
Retrieve elements ~419k / sec
Cache speedup (cold → warm) 345–461×
cargo build --release
target/release/leankg benchmark-unified --project .
cargo bench --bench vector_engine_ab

Full methodology: docs/benchmark.md


Key Features

  • MCP-native — 85+ tools for search, impact, call graphs, ontology, architecture, and team knowledge
  • Procedural ontology auto-update — edit ontology/workflows.yaml while serving; watcher re-syncs so kg_trace_workflow returns corrected steps without restart
  • Impact radius — blast radius before you change code, with confidence and severity
  • Dependency graphimports, calls, tested_by, http_calls, service_calls, tunnels, and more
  • Semantic search — CozoDB HNSW over dense embeddings (--features embeddings; included in Docker)
  • Community detection — Leiden clusters with per-cluster skill context
  • Local-first storage — SQLite by default; RocksDB for multi-project / team deploy
  • Token-aware payloads — targeted subgraphs + TOON responses (~40% smaller MCP payloads)
  • Team knowledge — incidents, env conflicts, service topology, Obsidian vault sync
  • Graph export — Mermaid, DOT, HTML, SVG, GraphML, Neo4j, portable snapshots
  • Web UI (v2) — explorer shell adapted from GitNexus gitnexus-web (Force / Tree / Circles, filters, search, code panel); data plane is LeanKG /api/* (ui-v2/ + leankg serve)

Architecture: docs/architecture.md · MCP catalog: docs/mcp-tools.md · UI v2: ui-v2/README.md


Screenshots

Full set: docs/reports/ui-v2-screenshots-2026-07-20.md · App notes: ui-v2/README.md · Live demo: https://leankg.onrender.com · Shell provenance: GitNexus

How It Works

  1. Extract — tree-sitter (and language-specific extractors) turn source into CodeElement nodes and typed relationships.
  2. Store — CozoDB over SQLite (local) or RocksDB (multi-project / Docker) holds the graph + optional HNSW vectors.
  3. Serve — MCP stdio (editor agents) or HTTP/SSE (Docker / remote) answers tools like get_impact_radius, search_code, semantic_search, get_architecture.
  4. Refresh--watch and incremental index keep code edges fresh; ontology YAML watch keeps procedural workflows aligned.
Repo ──► Indexer ──► Knowledge Graph ──► MCP Tools ──► AI Agent
              │              │
              └─ embeddings ─┘ (optional)

MCP & Agents

Agent Auto-setup Notes
Cursor Yes Per-project install; session hook; skill using-leankg
Claude Code Yes Plugin + full lifecycle hooks
OpenCode Yes Plugin + skill
Gemini CLI Yes MCP + skill / agent docs
Codex / Antigravity / Kilo Yes MCP + skill / agent docs
Docker MCP HTTP Yes Shared RocksDB; multi-repo mounts
leankg setup                 # configure MCP + hooks
leankg mcp-stdio --watch     # local AI tools
leankg mcp-http --port 9699  # HTTP/SSE for Docker / remote

Agent search prefer-order (when :9699 healthy): concept_searchsemantic_searchsearch_code, then exact tools (get_context, impact, deps). Docker MCP: pass container project= (/workspace); override with LEANKG_MCP_PROJECT.

Procedural ontology (auto-update)

While mcp-http / mcp-stdio / leankg serve runs, LeanKG watches ontology/concepts.yaml and ontology/workflows.yaml, debounces (≥1s), and replaces the ontology layer in the served DB so kg_trace_workflow stays fresh without a restart.

Typical agent loop:

  1. Wrong workflow steps in YAML → kg_trace_workflow returns them
  2. User corrects (rename / add / remove steps) and saves YAML
  3. Watcher auto-syncs (YAML is source of truth — old steps disappear, no GID duplicates)
  4. Next session query retrieves only the corrected ordered steps

Ontology also refreshes after index, and Docker boot re-syncs when .leankg/ontology_synced is older than either YAML file. Prefer kg_trace_workflow after edits; use ontology_control(action=sync|status) when you need an explicit refresh.

Knob Default Purpose
LEANKG_ONTOLOGY_DIR <project>/ontology Override ontology YAML directory
LEANKG_ONTOLOGY_WATCH_DEBOUNCE_MS 1500 (min 1000) Debounce for in-process YAML watch
LEANKG_ONTOLOGY_SYNC_ON_BOOT timeout Docker: skip / force / timeout
MCP ontology_control action=sync|status (Admin)

Details: docs/mcp-tools.md · Smoke: docs/reports/ontology-proc-auto-smoke-2026-07-21.md

Setup details: docs/agentic-instructions.md · Skill: instructions/using-leankg/SKILL.md · Tool catalog: docs/mcp-tools.md


Language Support

Structural extraction and cross-file edges into one graph (no per-language product setup):

Family Languages / formats
Systems Rust, Go, C / C++*
JVM Java, Kotlin
Web TypeScript, JavaScript
Scripting Python, Ruby*, PHP*
Mobile Dart, Android XML
Infra Terraform, CI YAML

*Depth varies by extractor maturity — see the PRD / roadmap for parity status.


CLI Quick Reference

leankg init
leankg index ./src
leankg status
leankg impact <file> --depth 3
leankg path <from> <to>
leankg explain <symbol>
leankg graph-query "<question>"
leankg detect-clusters
leankg embed --init && leankg embed   # needs --features embeddings
leankg web
leankg mcp-stdio --watch
leankg mcp-http --port 9699
leankg ontology sync                  # concepts + workflows → DB
leankg ontology trace <workflow>      # ordered procedural steps
leankg update

Full CLI: docs/cli-reference.md


Documentation

Doc Description
docs/cli-reference.md All CLI commands
docs/mcp-tools.md MCP tool reference
docs/agentic-instructions.md AI tool setup & auto-trigger
docs/architecture.md System design & data model
docs/web-ui.md Web UI
docs/benchmark.md Benchmark methodology
src/embeddings/EMBEDDINGS.md Embeddings / HNSW internals
INSTRUCTION.md Memory tuning & ops playbook
docs/roadmap.md Roadmap
AGENTS.md Agent / Docker deployment notes

Troubleshooting

Issue Fix
High RAM on macOS export LEANKG_MMAP_SIZE=134217728 and LEANKG_CACHE_MAX_TOKENS=100000 — see INSTRUCTION.md
database is locked leankg proc kill (stop web/MCP before re-index)
Embeddings / cold embed src/embeddings/EMBEDDINGS.md
MCP “not initialized” in Docker Pass container project= paths (e.g. /workspace), not the host Mac path — see AGENTS.md

Requirements

  • Rust 1.75+ (only when building from source)
  • macOS or Linux
  • Docker optional (recommended for teams / multi-repo)

Contributing

Issues and PRs are welcome. For larger changes, open an issue first so we can align on design.

  1. Fork and create a feature branch (prefer a git worktree for isolation)
  2. Update docs when behavior changes (docs/prd.md / task tracker as needed)
  3. cargo build --release && cargo test
  4. Open a PR with a clear summary and test plan

License

Apache License 2.0


Star History