v2.0.0 — Free & Open Source

Live code intelligence.
Zero drift.

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.

49× under budget
<800ms blast radius
24ns cache hit
6µs round-trip
O(Δ+d) not O(N)
Works with Claude Code · Cursor · CKB · Any LSP editor
LIVE 1 file saved · blast radius propagating 340 ms
auth.rs #AuthService
SAVED
middleware.rs #AuthMiddleware
re-verified
router.rs #UserRouter
re-verified
api_gateway.rs #ApiGateway
re-verified
496,996 files untouched O(Δ + depth)
Tier 1 → Tier 2 upgrade 4 files
rust-analyzer · background score 52 → 90
lip — bash

$ 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

$

LSP talks to your editor.
SCIP audits your CI.
LIP keeps the graph alive.

Three protocols for three jobs. LIP fills the gap between per-session editor state and stale CI snapshots.

LSP Editor Protocol
  • Open files only
  • In-memory, per-session
  • No persistence
  • No blast radius
  • No cross-file graph
Best for: editing UX
LIP Live Intelligence Layer
  • Full repo + deps, live
  • WAL-persistent across restarts
  • Always current (<1 ms/save)
  • Blast radius O(Δ + depth)
  • MCP · LSP · Batch API
  • Semantic search · clustering
Best for: live intelligence
SCIP CI Audit Format
  • Full repo, compiler-precise
  • Read-only snapshot
  • Stale between CI runs
  • Full re-index O(N)
  • Data-flow / taint analysis
Best for: compliance snapshots

LIP imports SCIP artifacts with lip import --from-scip index.scip and maintains freshness incrementally from that point. Use both.

O(Δ + depth),
not O(N)

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.

Full re-index (SCIP)
~ 60 min
500,000 files re-indexed
One change. Every file re-parsed, type-checked, cross-referenced. Even if your edit touches two lines.
LIP blast radius
200 – 800 ms
~10–200 files re-verified
API surface unchanged → zero downstream work. Changed? Only files that actually import the modified symbols are re-verified.

Never blocks. Always upgrades.

Tree-sitter gives you answers instantly. The compiler upgrades them to precise results in the background. The IDE never waits.

T1
Score 1–50

Syntactic

Tree-sitter parse. Fires immediately on file open. Go-to-definition, symbol search, and workspace indexing in under a millisecond per file.

< 1 ms per file
Rust · TypeScript · Python · Dart
T2
Score 51–90

Compiler-Precise

Language server runs in the background on the blast radius only. Silently upgrades symbol confidence to compiler-level precision after each save.

200–500 ms background, blast-radius only
rust-analyzer · tsserver · pyright · dart
T3
Score 100

Registry Slices

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.

< 1 s cached, federated
Cargo · npm · pub · pip

Built for the AI era

Every query AI agents need — blast radius, references, annotations, batch ops — first-class in the protocol, not bolted on.

Blast-Radius Indexing

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.

Federated Dep Slices

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.

Progressive Confidence

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.

Persistent Annotations

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.

Batch API

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.

MCP + LSP Bridges

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.

Semantic Search

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.

ExplainMatch

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.

Model Provenance

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.

Numbers that matter

Measured on the Rust reference implementation,
optimised build, Apple Silicon.

49×
Under budget
205 µs actual vs 10 ms budget
Tier 1 Rust indexer
24ns
Cache hit latency
file_symbols, warm cache
Arc clone only
5.6µs
Blast radius query
50-file graph, warm cache
6µs
Round-trip
64 B payload
Unix socket
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

Nine languages, two tiers

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.

Rs
Rust
T1 T2
Functions · structs · enums · traits · impls · consts
rust-analyzer
TS
TypeScript
T1 T2
Functions · classes · interfaces · type aliases
typescript-language-server
Py
Python
T1 T2
Functions · classes · async functions
pyright-langserver · pylsp
Dt
Dart
T1 T2
Functions · classes · methods · constructors
dart language-server
Go
Go
T1 T2
Functions · structs · interfaces · methods
gopls
JS
JavaScript / JSX
T1
Functions · classes · arrow functions
Tier 1 only
Kt
Kotlin
T1 T2
Functions · classes · objects · data classes
kotlin-language-server
Sw
Swift
T1 T2
Functions · classes · structs · protocols
sourcekit-lsp
C
C / C++
T1 T2
Functions · structs · enums · classes
clangd

Made for agents that
think before they write.

The MCP server exposes every LIP query to Claude Code, Cursor, and CKB. Agents claim symbols, leave persistent notes, and coordinate safely across sessions.

1
Discover
lip_workspace_symbols
Find URIs for all symbols you plan to touch
2
Assess
lip_batch_query
Blast radius + references + lip:fragile in one round-trip
3
Claim
lip_annotation_set
Set lip:nyx-agent-lock on owned symbols
4
Ship
lip_annotation_set
Release lock, leave notes for the next agent

Up in under a minute

1
Install
cargo install lip-cli
2
Start the daemon
lip daemon --socket /tmp/lip.sock
3
Index your repo
lip index ./src
4
Query anything
lip query blast-radius "lip://local/src/main.rs#main"
5
Connect your editor
lip lsp --socket /tmp/lip.sock
Standard LSP — no plugin needed
6
Enable AI agents
lip mcp --socket /tmp/lip.sock
Claude Code · Cursor · CKB