Grep is a good wrench, not a map.
Exact search wins when you know the identifier, error text, or literal. It struggles when you remember the behavior but not the spelling. Pensieve 0.6.3 combines exact matching with local embeddings across code, documents, and past coding-agent sessions. It exposes search and read tools through MCP.[1]
The implementation names the parts. The project uses a SQLite trigram full-text index for exact matches and Turbovec indexes for vector search. Its default embedding model is Qwen3-Embedding-0.6B. Those facts describe the retrieval path. They do not prove that the top result answers your question.
Use ranking to choose what to read. Use the file and the running program to decide what is true.
The published benchmark is useful and narrow.
The project reports 131 correct file finds in 144 agent runs with Pensieve, compared with 123 using grep, glob, and read. It also reports 1.97 tool calls per lookup instead of 3.44, and a lower average API cost in the measured batch.[2]
This is the maker's benchmark, not an independent evaluation. It uses Claude Sonnet in Claude Code, 72 held-out tasks run twice, and four repositories ranging from 504 to 34,847 files. The benchmark script disables write, edit, shell, task, and web tools. It asks the agent to name the file that implements a described behavior. That is a code-finding test, not a software-quality test.
Scope is part of the query.
Pensieve says its default MCP scope follows the repository where the agent started. A named scope can combine selected repositories and document folders. The same README also says that an HTTP connection without a scope sees everything, and that an agent started outside an indexed repository can search everything. That makes connection setup a review item, not a footnote.
The MCP specification gives clients a roots mechanism for telling servers which filesystem locations are relevant. Its security guidance says clients should expose only roots with suitable permissions, validate paths, and respect root boundaries.[3] A product's own scope filter still needs testing. A root name or scope label is not evidence that every read path enforces it.
Freshness needs a witness.
Pensieve says it watches files, worktrees, repositories, and agent transcripts. It also says a search processes queued changes before returning results and compares code or document hits with the current file. Those checks are useful. The final read should still include a path, line, revision or worktree, and the current file contents.
Filename filters skip common secret-shaped files, including .env*, private-key formats, credential files, and password exports. The source shows these are case-insensitive filename patterns.[4] That reduces obvious exposure. It cannot classify every secret stored under an ordinary name.
Install a retrieval policy before another index.
- Use exact search first for known names, literals, and error messages.
- Use meaning search when you know the behavior but not the spelling.
- Bind the connection to the smallest repository or named scope that can answer.
- Read the current source after ranking. Record the path, line, and revision or worktree.
- Fall back to grep when you need every use of a known name.
- Run the project's benchmark on your repositories before repeating its cost claim.
The route rack below drafts this policy as a copyable card. It does not query Pensieve, inspect your repository, or measure savings.