searchLABSCO SUMMARY
The token arithmetic is the argument: near-parity recall at roughly a fortieth of the cost.
On semble's 1,251-query benchmark the default hybrid mode reaches 0.967 recall at 10 on natural-language queries and 0.995 on symbol queries, against grep's near-total recall — while using a median 4,120 tokens where grep plus reading the files takes 189,773. For an agent that has a context window rather than infinite patience, that is the whole trade. The maintainer is clear about where it does not apply: exhaustive enumeration, like a pre-rename audit, still belongs to grep. Make sure the model actually downloaded — without it you are on the BM25 path, which the benchmark puts about 14 points of recall lower.
What it is
A single static Go binary that indexes a repository and serves hybrid retrieval to an agent — BM25 lexical scoring fused with local semantic embeddings, then reranked with code awareness.
What you get
- search — natural language or code queries, in hybrid, semantic or bm25 mode, with top_k, path filters, a max_tokens response budget and an explain flag showing why each result matched
- Batch queries in one call, so a multi-part question costs one round trip
- find_related — more chunks like the one at a given file and line, seeded from a search result
- Seven structural tools alongside them: definition, references, callers, outline, symbols, recently_changed and status
- reindex_db, when a database is configured
- Language-aware chunking for Python, Go, TypeScript, Java and Rust, markdown chunked on heading boundaries, and a line chunker for everything else
- Database schemas indexed alongside the code
- Watch mode by default — the index re-builds on change, so an agent editing mid-session sees its own edits
- Ken doctor, which checks the model, cache warmth and configuration and prints what to fix
- The same tool schemas and output format as semble, so an existing agent works by swapping the command path
Requirements
Nothing to authorize — no API keys, no GPU, no vector database, and it runs air-gapped. Install through Homebrew, Scoop, a release binary, or go install with Go 1.26 or newer. The embedding model is a one-time download of about 60 MB, fetched automatically on first run by the MCP binary and pulled explicitly with ken download-model for the CLI; without it, search falls back to BM25 only.
Setup effort
One command — brew install --cask townsendmerino/tap/ken
USE CASES
Finding the code that answers a question you can only phrase in English
Semantic and lexical scoring together, so a query about behaviour finds the implementation without you guessing the identifier.
Keeping a research pass inside the context budget
Set a token budget on the response and get the ranked list truncated from the tail rather than a wall of files.
Following a thread out from one promising chunk
Ask for chunks similar to a specific file and line instead of running another query and hoping.
Answering the structural questions search cannot
Jump to a definition, list callers, or outline a file's symbols, rather than reading it top to bottom.
Working in a repository the agent is also editing
Watch mode re-indexes on change, so a search after an edit reflects the edit.
Checking why retrieval is worse than you expected
Run the doctor command — it tells you whether the model is missing and what else to fix, in priority order.
10 tools
Listed in project docs. Your client may show a different list.
find_relateddefinitionreferencescallersoutlinesymbolsrecently_changedstatusreindex_dbBEFORE YOU INSTALL
What to know first
Tools you get
10 tools named in the project's documentation.
Where it runs
All 4 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
brew install --cask townsendmerino/tap/kenMCP Clients
Claude Code
claude mcp add ken -s user -- <YOUR_PATH_TO_KEN_MCP>Cursor
{
"mcpServers": {
"ken": {
"command": "<YOUR_PATH_TO_KEN_MCP>"
}
}
}VS Code
{
"servers": {
"ken": {
"command": "<YOUR_PATH_TO_KEN_MCP>"
}
}
}OpenCode
{
"mcp": {
"ken": {
"type": "local",
"command": [
"<YOUR_PATH_TO_KEN_MCP>"
]
}
}
}