The private doc layer your coding agents can search.

alcove serves your project knowledge over a local HTTP API with hybrid BM25 + vector search. Agents pull the two docs they need — not the twelve you’d stuff into context. One setup, every agent, every project.

The problem

Every session, your agent starts from zero.

It doesn’t know your architecture, ignores constraints from decisions you already made, and asks you to re-explain the same things every Monday. The usual fixes all fail the same way — and Anthropic’s own docs warn that bloated config files make agents ignore your actual instructions.

Agent config files — behavior

  • Commit style, coding conventions
  • Language preferences, safety rules
  • Recurring corrections
  • Architecture docs, ADRs, runbooks? — this is where context bloat starts

CLAUDE.md · AGENTS.md · .cursorrules

alcove — institutional knowledge

  • Architecture, data model, system design
  • Why X was chosen over Y
  • Known issues and workarounds
  • Runbooks, conventions, onboarding

~/.alcove/docs/my-app/ — private, searched on demand, never in the public repo

Measured scope

One binary. Local. Boring in the good way.

Rust, no Docker, no Node runtime, no Python env. Tantivy for BM25, fastembed (ONNX) for vectors — everything runs on your machine.

12
languages indexed by tree-sitter, from Rust to C#
40+
embedding models supported — default is 90 MB, fully local
8
coding agents share one setup — Claude Code, Codex, Cursor, Cline…
<60s
to run the built-in 25-query search benchmark in CI

Features

Built for how agents actually read.

Hybrid search, auto-picked

Ranked BM25 the moment an index exists, grep fallback when it doesn’t, vector similarity once you download a model. The agent never chooses a mode.

Code structure index

tree-sitter turns your source into a module-level CODE_INDEX.md — modules, functions, types across 12 languages, safe on monorepos.

Ranked, deduped results

Best match first, one result per file, relevant passages instead of whole files — ripgrep would have injected ~10K tokens where alcove returns the paragraph that matters.

Global search

One query across every project: “rate limiting patterns” finds the decision you wrote in a different repo last spring.

Docs that stay honest

policy.toml enforces required files and sections. validate and lint catch missing docs, broken links, orphans, and stale markers — CI-friendly JSON output.

Vaults for everything else

Link an Obsidian vault or research notes as an isolated knowledge base. vault link — no copying; agents search it separately from project docs.

Warm server, no cold start

A background server (macOS login item, opt-out) keeps the index and model warm; sessions proxy to it in milliseconds.

Private by placement

Docs live in DOCS_ROOT, not in your repos. Public README, private PRD. Bearer-token auth on the local API.

Promote from anywhere

A note in Obsidian becomes a project doc with one command; unmatched files land in an inbox for review.

Usage

Install, run setup once, forget it.

CLAUDE CODE / CODEX — PLUGIN

/plugin marketplace add epicsagas/plugins
/plugin install alcove@epicsagas
# codex: codex plugin marketplace add epicsagas/plugins

BINARY — HOMEBREW / CURL / CARGO

brew install epicsagas/tap/alcove
# or
curl --proto '=https' --tlsv1.2 -LsSf \
  https://github.com/epicsagas/alcove/releases/latest/download/alcove-installer.sh | sh
Required, once: alcove setup — where your docs live, which categories to track, embedding model, background server, which agents to wire. Re-run any time; it remembers. Then alcove doctor confirms the whole stack.
in the terminal

alcove search "auth flow" --scope project · --scope global across every project · --mode grep when you need exact matches

in any agent

/alcove how is auth implemented? — the agent resolves the local API, searches, reads the top doc, and answers from your actual architecture

every project

CWD auto-detection — switch directories, the doc layer follows. Override with MCP_PROJECT_NAME when a folder name doesn’t match

keep it healthy

alcove index after editing docs (incremental) · alcove bench --corpus in CI to catch search-quality regressions before they ship

Claude and Codex using alcove: search, project switch, global search, validate

Claude & Codex — search · switch projects · global search · validate. One setup.

Why alcove

Without a doc layer. With one.

WithoutWith alcove
Context per sessionDocs stuffed into config load every runHybrid search pulls only what this task needs, ranked
Code understandingAgent sees text files onlytree-sitter index of modules and types in 12 languages
Switching projectsRe-explain everything, per agentCWD auto-detects the project — zero reconfiguration
Switching agentsEach tool configured separatelyOne local API, eight agents share it
Sensitive docsSitting in project reposPrivate on your machine, never in the public repo
Doc qualityStale, inconsistent, unenforcedpolicy.toml + validate + lint, JSON for CI
“What did we decide about OAuth?”ImpossibleOne global query across every project and vault

Before you ask

The four questions everyone asks.

Why not just give the agent ripgrep?

Ripgrep returns entire files — five hits at 200 lines each is ~10K tokens, mostly irrelevant. alcove chunks documents, ranks chunks, and returns the passages that match. And a query like “how is the deployment pipeline structured” matches no keyword in DEPLOYMENT.md — vector search finds it anyway.

Does it replace CLAUDE.md / AGENTS.md?

No — they do different jobs. Config files define how the agent should act; alcove holds what the agent should know. Putting your docs in config is what bloats context and degrades instruction-following.

Bigger context windows should fix this, right?

They don’t fix relevance. A 200K window filled with the wrong docs still degrades output. The goal was never more context — it’s the right context at the right time.

What does it cost to run?

Nothing but disk and RAM: a single Rust binary, index built in the background. Steady state is tens of MB; the default 90 MB embedding model stays local and optional — BM25 works without it.

Stop being your agents’ documentation.

Write it once in your own vault. Let every agent find it — in every project, on every session.