LIP is a free, open-source protocol for the code intelligence layer — a persistent, incremental graph of your entire repository that updates only the blast radius of each change, in milliseconds.
$ lip daemon --socket /tmp/lip.sock
LIP daemon v2.0.0 — listening on /tmp/lip.sock
Watching ./src 3,847 files · Tier 1 warm
$ lip query blast-radius \
"lip://local/src/auth.rs#AuthService"
"risk": "high",
"direct": 12,
"transitive": 847,
"depth": 4,
"confidence": 90
$ █
Three protocols for three jobs. LIP fills the gap between per-session editor state and stale CI snapshots.
LIP imports SCIP artifacts with lip import --from-scip index.scip
and maintains freshness incrementally from that point.
Use both.
When a file is saved, LIP checks if the exported API surface changed. If not — true for the vast majority of edits — zero downstream recomputation happens. If yes, only files that actually import the changed symbols are re-verified. A single-file edit in a 500k-file repo costs 200–800 ms. A full O(N) re-index in SCIP: ~60 min.
Tree-sitter gives you answers instantly. The compiler upgrades them to precise results in the background. The IDE never waits.
Tree-sitter parse. Fires immediately on file open. Go-to-definition, symbol search, and workspace indexing in under a millisecond per file.
Language server runs in the background on the blast radius only. Silently upgrades symbol confidence to compiler-level precision after each save.
External packages are content-addressed blobs. react@18.2.0
is indexed once by anyone, published to the registry, and downloaded
in under a second by every machine on the team.
Every query AI agents need — blast radius, references, annotations, batch ops — first-class in the protocol, not bolted on.
Reverse dependency graph per symbol. API surface diff on every save. Propagate only as far as the change actually reaches. Risk level, depth, and confidence on every result.
External packages are content-addressed blobs shared via registry.
Index once, share across your whole team.
node_modules, target/, .pub-cache
— never re-indexed locally again.
Tier 1 answers immediately on file open. Tier 2 upgrades to compiler precision in the background. The IDE never blocks. Degrade gracefully if a language server is absent.
Key/value tags on any symbol —
lip:fragile, team:owner,
lip:nyx-agent-lock.
Survive file changes, daemon restarts, and CI runs.
Agents coordinate work across sessions.
BatchQuery runs N queries under a single db lock —
one Unix socket round-trip instead of N.
Planning a 10-symbol refactor costs one connection, not thirty.
lip mcp exposes all queries to Claude Code, Cursor,
and CKB. lip lsp bridges to any editor as a standard
language server — no plugin required.
Dense embeddings via any OpenAI-compatible endpoint. Nearest-neighbour by file, text, or symbol. Query expansion, pairwise similarity, and cluster grouping — all against the live graph.
Turn "this file is relevant" into "these specific lines are relevant."
ExplainMatch chunks a result file, embeds each window,
and returns the top-scoring spans with line ranges and scores. New in v2.0.
Every embedding records the model that produced it.
QueryIndexStatus reports mixed_models
and models_in_index so clients can warn when a model
upgrade leaves cosine scores unreliable across the boundary.
Measured on the Rust reference implementation,
optimised build, Apple Silicon.
| Operation | Measured | Notes |
|---|---|---|
upsert_file | 92–104 ns | O(1) HashMap insert + cache invalidation |
file_symbols cache hit | 24 ns | Arc clone only |
file_symbols cache miss | 26 µs | Full tree-sitter re-parse |
blast_radius | 5.6 µs | 50-file graph, warm cache |
workspace_symbols | 14.6 µs | 100-file corpus, warm cache |
| Round-trip 64 B | 6 µs | Unix socket |
| Burst 1,000 × 256 B | 1.47 ms | Total |
Tier 1 tree-sitter fires immediately on file open, under 1 ms per file. Tier 2 language servers upgrade confidence to compiler-level in the background. Graceful degradation if a server is absent.
The MCP server exposes every LIP query to Claude Code, Cursor, and CKB. Agents claim symbols, leave persistent notes, and coordinate safely across sessions.
lip_workspace_symbols lip_batch_query lip:fragile in one round-triplip_annotation_set lip:nyx-agent-lock on owned symbolslip_annotation_set cargo install lip-cli lip daemon --socket /tmp/lip.sock lip index ./src lip query blast-radius "lip://local/src/main.rs#main" lip lsp --socket /tmp/lip.sock lip mcp --socket /tmp/lip.sock