The daemon your agents query before they reach for grep, embeddings, or RAG. locusd returns precise structural pointers — never file content — so your context window stays clean and your tools stay fast.
Most retrieval systems throw every query at an embedding model and pray. Locus runs a roaring-bitmap intersection first — microseconds, no GPU — then sends a small ranked set through a local reranker. The agent gets pointers; the file system stays the source of truth.
filesystem watcher debounces edits across your vault + repos
tree-sitter for code (Rust / TS / Python), markdown for prose — pure functions, no I/O
builtin + YAML-defined taggers infer topic · type · complexity · conventions
DuckDB registry · LMDB + Roaring bitmaps · usearch HNSW embeddings
bitmap intersect → semantic rerank → return doc_ids + byte ranges
locusd exposes MCP for agents and an HTTP API for everything else
locus mcp install ~/your-repo writes the MCP config and your agent's tool palette gains the full engine — typed schemas, structured pointers, zero glue code. Works with Claude Code and any MCP-aware client.
Filter by topic, type, folder, convention — get labeled pointers back.
Neighbours, n-hop expansion, shortest path, PageRank centrality over links and imports.
Every bitmap a doc is in. Why did it match? What's it tagged?
The live filter vocabulary — what's queryable in this index right now.
Document, chunk and bitmap counts; tombstones pending compaction.
Pull Confluence, Jira and Slack into the same index, on demand.
Real output. The daemon never sends file bodies — only the structural pointers your agent needs to read precisely.
$ locus search "topic:error-handling" 6 matches (33µs) crates/locus-registry/src/graph.rs (doc_id=28) chunk 394 (Function) bytes 525..691 now chunk 396 (Method) bytes 1050..1241 add_edge crates/locus-query/src/engine.rs (doc_id=41) chunk 512 (Function) bytes 1840..2210 resolve_filter … $ locus mcp install ~/code/myrepo ✓ Registered Locus MCP server in ~/code/myrepo/.mcp.json
Every response is MatchPointer{ doc_id, path, chunks, reason }. Your agent reads only the ranges it picks. No truncation surprises, no leaked context.
Embeddings run via FastEmbed ONNX on-device. State lives in ~/.locus/. No telemetry, no managed plane, no leaking your client's repo to a vendor.
locusd speaks Model Context Protocol out of the box, plus an HTTP API. Drop it in your agent config and it shows up as tools.
Every tag, folder, topic and convention is a namespaced bitmap of u32 doc IDs. AND / OR / NOT compose at memory bandwidth. Tombstones subtract lazily.
Functions, classes, imports — indexed at the AST node, not the line. Query type:test_file or async:true and get exactly the spans.
Drop taggers/*.yaml in your vault to teach Locus your team's vocabulary. Re-indexed in milliseconds, cached.
Eight "where is X?" questions over a Rust codebase: tokens entering the agent's context, per strategy. Run it yourself — scripts/token-bench.py, methodology in the repo.
| Strategy | Tokens into context |
|---|---|
| grep + read matching files (agent default) | 568,502 |
| grep -C20 (disciplined agent) | 587,629 |
| locus pointer digest | 79,587 — 7.1× fewer |
* Bitmap intersections measured in tens of microseconds on the dogfood corpus; full report. Queries like complexity:high or visibility:public have no grep equivalent at all.
No VC, no plan to charge solo developers. The roadmap stays public, the binary stays free, the source stays MIT. If locusd saves you a context window, consider buying back a few of the tokens it cost to build.
For teams running multi-agent systems on private codebases: a shared daemon, remote-source connectors, and a human you can actually email.
Tell me about your stack — agents, repo size, sources. I read everything.
Start the conversation →