Without Satori
- A keyword search returns dozens of matches.
- Whole files fill the agent’s context.
- It edits after reading half a function.
- It misses code that depends on the old behavior.
Local-first semantic code search for coding agents
Ask in plain English. Your agent gets the function that owns the behavior, who calls it, and what to read next. Free, open source, and local.
npx -y @satori-code/cli@latest install
src/auth/refresh.tssemantic + lexicalsrc/session/store.tssemanticsrc/http/middleware.tslexicalconfig/security.tsconfig keysrc/auth/refresh.ts:84-146
In a large project, an agent greps, opens whole files, and edits before it reaches the part that matters. Satori is the map it checks first.
Satori is the colleague who has read the whole project: “That lives here. These places use it. Read this first.”
Every answer comes from one Publication, a single indexed snapshot of the repository. Search, owners, calls, and source always agree.
Meaning, BM25, exact paths, identifiers, and configuration keys.
find intent without losing literals
Parser-derived functions, classes, file outlines, and exact spans.
rank evidence around real owners
Callers, callees, imports, and exports, only when the parser can prove them.
advisory, conservative, fail-closed
Source checkpoints, runtime compatibility, and atomic swaps to the next snapshot.
know which repo state answered
No exact identifier needed. Satori narrows the search in stages, and each stage points at real source.
envconfig.KeepAlive(), its caller, and the source. A grep-driven edit landed in the wrong place.
Indexing is sped up.
A few simple tools, backed by the code-intelligence stack your MCP host would otherwise rebuild.
14-65ms p50
Exact symbol lookup on five pinned repositories, fully offline.
Embeddings, search, storage, and reranking run on your machine. No model API key.
LateOn puts the owning code first, locally. It doubled first-hit accuracy in our 36-task test. See how ranking works.
Symbols, exact spans, and call navigation in nine production languages, plus Kotlin and PHP.
Exact spans instead of whole files, so context goes to the code that matters.
Search, symbols, structure, and calls go live together. Ambiguous relationships fail closed.
If the right file comes back at rank seven, your agent reads six wrong files first. Satori ranks for the code that owns the behavior.
alt_terms from the agent, each searched and fused with the question.
0.19 to 0.39
Owner ranked first with LateOn. 36 tasks, 6 repositories.
16 to 34
Owners in the top 10 with agent alt_terms. 46 questions. Median 2.7 s to 2.9 s.
4 to 13
Named symbols at rank 1 with definition fusion and LateOn, against no reranker. 19 questions, 4 repositories.
1.86 s to 1.22 s
LateOn on 64 candidates, adaptive session pool, 8-core Ryzen 7 3800X. Identical scores.
Runs on your CPU. Code stays local. 13 of 28 owners first, median search 2.40 s.
satori reranker use lateon
Voyage AI by MongoDB
18 of 28 owners first with rerank-3-lite, median search 1.04 s. 200 million free tokens per model, about 8,000 searches, with no credit card. Queries and code excerpts go to Voyage.
The command asks for your VOYAGEAI_API_KEY (hidden), saves it to ~/.satori/.env, and tests it before it switches.
satori reranker use voyage
satori reranker status
Retrieval order only. About 200 ms per search on React (36,233 chunks).
satori reranker use none
28 questions on React, Polars, and FlatBuffers, same index for every reranker. Restart your agent after a switch. If Voyage fails, Satori returns retrieval order and reports RERANKER_FAILED. No global CLI? Use npx -y @satori-code/cli@latest in place of satori.
Ask where a behavior lives. Get the owner and its file outline, then read the code.
“What owns billing retries?”
Start from an error. Follow owners and callers to the exact code.
See the owner, its structure, and its call paths before you touch a subsystem.
Flash and local models are cheap but read less. Satori does the discovery: hybrid search, the model’s own alt_terms, and reranking put the owner on top, so the model reads one exact span. With LateOn, a fully local setup stays local.
“Where is the cleanup of useEffect?” → commitHookEffectListUnmount
Local agent sessions share one runtime and index, and each keeps its own MCP session.
What to ask before you install anything that reads your code.
AGENTS.md or hooks, and never overwrites files it did not write.~/.satori/. Nothing downloads again on startup.satori uninstall removes client config and the shared skill. Add --purge to also delete the runtime, models, and indexes.Two commands, then one sentence to your agent. Beta on Linux x64 and WSL2.
npx -y @satori-code/cli@latest install
npx -y @satori-code/cli@latest doctor
Index /absolute/path/to/repo with Satori, then find where auth refresh is handled.
npx -y @satori-code/cli@latest reranker use voyage
Index the repository and wait until status is ready.
Ask what owns a behavior, in plain English.
Open the exact span, outline, or call path that Satori returns.
No model API key needed after install. Voyage and Milvus/Zilliz are optional.
If Satori helps, fails, or confuses you in a real repository, I want the case.
ahmed@hamza.my.id