Local code knowledge graph — SQLite + sqlite-vec, AST-driven, no RAG framework needed
Project description
LoomGraph
Local code knowledge graph for AI agents. SQLite + sqlite-vec, AST-driven, no RAG framework needed. Designed as a Claude Code plugin and a CLI for any agent that needs precise structural code queries.
v0.11.0 ships fully local by default.
pipx install loomgraphand go — no remote services, no API keys, no Docker. Semantic vector search is opt-in.
Why LoomGraph
LLM agents are good at fuzzy natural-language code Q&A. They are bad at deterministic
structural queries — "every caller of authenticate() across this 200k-LoC codebase,
including indirect callers two hops deep." LoomGraph fills exactly that gap.
- Deterministic graph queries —
find/graph/topology/impactwalk SQLite, not an LLM. Same input, same output, every time. - AST is the source of truth — call/inherit/import edges come from tree-sitter via codeindex, not LLM inference.
- Single-file storage —
~/.loomgraph/<workspace>.db. No Postgres, no Docker, no fork of someone else's RAG framework. - Vector KNN where it matters — sqlite-vec virtual tables, caller-provided embeddings, OpenAI-compatible provider config (Ollama default).
- AI-Agent-shaped CLI — every command emits JSON; designed to be called by Claude Code or any agent harness.
Install
pipx install loomgraph
That's it. codeindex is pulled in automatically as the parser engine — no separate install, no direct operation. No additional services required for the structural commands.
Quick start
# Index a repo (uses codeindex under the hood for parsing)
loomgraph index .
# Structural search — fuzzy match on entity names
loomgraph find "UserService"
# Walk the call graph
loomgraph graph "UserService.login" --depth 2
# Topology smells (orphans, hubs, god functions)
loomgraph topology
# Change-impact analysis from a git diff
loomgraph impact HEAD --depth 2
# Cross-module dependency map
loomgraph deps
Every command outputs JSON to stdout (logs go to stderr) — pipe-friendly for agents.
Configuration
LoomGraph reads .loomgraph.yaml from the current dir, then ~/.config/loomgraph/config.yaml.
Env vars (LOOMGRAPH_<SECTION>__<KEY>) override file values.
Minimal (fully local, no remote services)
storage:
backend: sqlite
db_path: "~/.loomgraph/{workspace}.db"
embedding:
enabled: false # turn on later for vec0 semantic search
Semantic search with local Ollama
# Install once: https://ollama.com
ollama pull nomic-embed-text
embedding:
enabled: true
provider: ollama
api_url: http://localhost:11434/v1
model: nomic-embed-text
dimension: 768
With OpenAI / Voyage / GLM (any OpenAI-compatible /v1/embeddings)
embedding:
enabled: true
provider: openai
api_url: https://api.openai.com/v1
api_key: sk-...
model: text-embedding-3-small
dimension: 1536
LLM provider (for overview summaries)
llm:
provider: glm # glm | openrouter | vllm
api_url: http://localhost:8000/v1
model: glm-4-flash
Most commands work without an LLM. Only loomgraph overview (module
summary mode) calls the LLM; --no-summary skips it entirely.
What's in the box
| Command | Purpose | Network calls |
|---|---|---|
loomgraph index <path> |
Index a repo | codeindex (local) + optional embedding |
loomgraph update |
Incremental from git diff | same |
loomgraph find "<query>" |
Fuzzy entity search | none |
loomgraph graph "<entity>" |
Walk callers/callees | none |
loomgraph topology |
Orphans / hubs / god functions | none |
loomgraph debt --with-git |
Tech debt scoring | none (reads git log) |
loomgraph deps |
Module dependency graph | none |
loomgraph impact <ref> |
Deterministic change-impact | none |
loomgraph trends --entity X |
Code-rot trend prediction | none |
loomgraph overview |
Module summaries | LLM (or --no-summary) |
loomgraph workspace ... |
Multi-workspace management | none |
loomgraph compare / similar |
Cross-workspace diff | none |
Claude Code integration
LoomGraph speaks MCP (Model Context Protocol) natively as of v0.12.0.
After pipx install loomgraph and one-time indexing (loomgraph index .):
loomgraph mcp install-config --path ~/.claude/mcp.json
Restart Claude Code. loomgraph_find / loomgraph_graph /
loomgraph_topology / loomgraph_impact / loomgraph_deps /
loomgraph_overview / loomgraph_workspace_* appear as native tools —
no subprocess overhead, no /skill-name invocation. Full reference:
docs/api/MCP_DESIGN.md.
Legacy skill commands (debt audit, sync advisor, evolution) still ship
via loomgraph install-skills for users who prefer the explicit-invoke
model.
Architecture (v0.11.0+)
codeindex (AST parse)
↓
loomgraph (map + persist)
↓
~/.loomgraph/<workspace>.db (SQLite + sqlite-vec, single file)
├── entities (functions / classes / modules)
├── relations (CALLS / INHERITS / IMPORTS / ...)
├── vec_node_descriptions (vec0, optional)
└── vec_code_snippets (vec0, optional)
↑
Claude Code / Codex / Cursor — read via CLI (JSON) or upcoming MCP
The full architecture rationale is in ADR-013.
Status
- v0.10.0 — LightRAG and PostgreSQL removed; local SQLite backend
- v0.11.0 — Embedding provider decoupled; OpenAI-compatible by default, off by default
495 unit tests passing, ruff clean. Dogfood-benchmarked on loomgraph
(10.9k LoC, indexed in 0.88s) and codeindex (22.0k LoC, indexed in
0.93s) with sub-0.4s wall on every query — see
docs/benchmarks/dogfood.md for the full
numbers, including round-trip preservation of codeindex graph-export
artifacts (81-85% relation coverage vs direct index). Larger fixture
benchmarks (Django/FastAPI-scale) are still pending and are an honest
gap in the README's earlier claims. See CHANGELOG.md.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file loomgraph-0.14.0.tar.gz.
File metadata
- Download URL: loomgraph-0.14.0.tar.gz
- Upload date:
- Size: 1.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
80a47647a8743740655358bd852c8e7cdb37458603c4bf91d45f74707826d080
|
|
| MD5 |
a367f03a15480a7a94c37ad28069b9cf
|
|
| BLAKE2b-256 |
c0319180183ae4a0bc97914de145f59d8d48de49eb0614d6886c096346a0bec5
|
Provenance
The following attestation bundles were made for loomgraph-0.14.0.tar.gz:
Publisher:
release.yml on dreamlx/LoomGraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
loomgraph-0.14.0.tar.gz -
Subject digest:
80a47647a8743740655358bd852c8e7cdb37458603c4bf91d45f74707826d080 - Sigstore transparency entry: 2084545031
- Sigstore integration time:
-
Permalink:
dreamlx/LoomGraph@d1fe6ca94b230bfcf36d1165ffa054e641a88d48 -
Branch / Tag:
refs/tags/v0.14.0 - Owner: https://github.com/dreamlx
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d1fe6ca94b230bfcf36d1165ffa054e641a88d48 -
Trigger Event:
push
-
Statement type:
File details
Details for the file loomgraph-0.14.0-py3-none-any.whl.
File metadata
- Download URL: loomgraph-0.14.0-py3-none-any.whl
- Upload date:
- Size: 160.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef56d5493d75a473313a86b778639c003ec7edccf0b6d129fc84613a9397c82b
|
|
| MD5 |
fa7f1842303401acbb8a29b371bc1deb
|
|
| BLAKE2b-256 |
a1690a56ff6ad56845e2dd97863c50d33366b3a8719d648f036cdcb91d325e76
|
Provenance
The following attestation bundles were made for loomgraph-0.14.0-py3-none-any.whl:
Publisher:
release.yml on dreamlx/LoomGraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
loomgraph-0.14.0-py3-none-any.whl -
Subject digest:
ef56d5493d75a473313a86b778639c003ec7edccf0b6d129fc84613a9397c82b - Sigstore transparency entry: 2084545398
- Sigstore integration time:
-
Permalink:
dreamlx/LoomGraph@d1fe6ca94b230bfcf36d1165ffa054e641a88d48 -
Branch / Tag:
refs/tags/v0.14.0 - Owner: https://github.com/dreamlx
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d1fe6ca94b230bfcf36d1165ffa054e641a88d48 -
Trigger Event:
push
-
Statement type: