
Vault Index
io.github.GitGudatCodeing由 GitHub 账号 GitGudatCodeing 发布v0.4.2更新于 Oct 29, 2026
Local hybrid keyword + vector search (SQLite FTS5 + sqlite-vec) over markdown vaults and code.
概览
面向 markdown 笔记库与代码的本地混合关键词加向量检索,让助手能索引文件夹并按语义找回笔记。
- 可以做什么
- 把 markdown 笔记和代码文件夹注册为可检索来源,支持增量同步与按目录忽略规则
- 用关键词与向量混合检索笔记,返回带文件路径和标题路径的片段
- 读取指定笔记,并列出或移除已注册的来源
- 除 MCP 外也可在终端直接执行索引与搜索
- 适用场景
- 适合让助手基于你自己的笔记、决策记录或代码回答问题,并且需要能命中改写表述而非仅匹配原词的检索。也适合希望资料保持为纯 markdown 文件、全部在本地运行的场景。
- 运行要求
- 以本地 stdio 进程运行,通常用 uvx 搭配 Python 3.12 启动。需要安装 uv,首次运行需联网下载软件包和两个小型嵌入模型。可选环境变量 VAULT_INDEX_DB、VAULT_MODEL_CACHE、VAULT_RERANK 分别调整索引路径、模型缓存和重排序。
安装
在 SourceWeft 中
- 打开 控制台中的 Vault Index,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
claude-second-brain
[CI] [Python] [PyPI] [License]
A local, private long-term memory for Claude Code. Your markdown notes stay the record. Claude searches them through a hybrid keyword + vector index, writes decisions and lessons back as plain files, and hooks keep the index, the knowledge graph and long sessions in check.
Everything runs on your machine: one SQLite file, two small CPU models, no cloud services.
Terminal replay of real output from a fresh clone of v0.1.0 with the sample vault (eval then had 32 questions); only the typing animation is added.
Why
Claude Code forgets everything between sessions. The usual fixes are a huge CLAUDE.md (expensive on every turn) or a vector store nobody can read or fix. This project takes a different line:
- Files are the truth. Notes, decision records and lessons are markdown you can read, edit and version. The index and the graph can be rebuilt from them at any time.
- Search before guessing. Claude is told to search the vault before answering about past work, and gets a tool that actually finds paraphrased answers.
- Measured, not vibes. Every search change is scored against a golden set and kept only if it beats the baseline. The experiments that failed are documented too.
- Self-checking. At session start, invariants verify that each pipeline still reaches its consumer, so silent breakage shows up the same day.
How it works
Search
- Markdown is chunked by heading (up to about 1,200 characters), so every hit carries a path like
Recipe box data model > Units. - Indexing is incremental: unchanged files are skipped by mtime and content hash; deleted files are dropped on the next sync.
- Keyword ranks count at a tenth of vector ranks: they break ties and lift exact terms (ids, tool names) without outvoting meaning.
- A small cross-encoder (
ms-marco-MiniLM-L-6-v2, 80 MB) then reorders the top 10 by reading query and chunk together. It adds about 200 ms per search on CPU;VAULT_RERANK=0turns it off. - A per-folder
.indexignorekeeps tooling code out of results.
MCP tools: index_paths, search_notes, get_note, list_sources, remove_source.
Commands
Installed as a plugin, the commands carry its name: /second-brain:recall, /second-brain:adr and so on.
Quickstart
Needs uv (it fetches Python 3.10 to 3.13), Node.js for the memory server, and Claude Code.
As a plugin
In the folder that holds your notes:
Start claude there, then ask it to index the folder ("index_paths .") and try /second-brain:recall <topic>. The plugin brings the five commands, the hooks (re-index on edit, context guard, pre-compact snapshot) and both MCP servers. Decision records go to docs/adr/, lessons to docs/lessons.md, handoffs to docs/handoffs/, and the knowledge graph to memory.jsonl, all inside that folder. The search index is shared at ~/.mcp-memory/vault-index.db.
--scope project keeps the plugin to that folder: the context guard would otherwise run in every project. The plugin leaves out the session-start invariants, which check this repo's layout. Change the handoff limit with a .claude/handoff.json like this repo's (default 250k tokens).
Use the plugin or the clone below in a folder, not both: each starts its own vault-index server.
From a clone
The full repo adds the sample vault, the eval and the invariants.
setup.py writes .mcp.json (memory graph at ~/.mcp-memory/memory.jsonl unless you pass --memory-file), indexes the folder and runs the invariants. Then start claude in the folder, approve the project MCP servers and hooks, and try /recall garden sensor battery life. Check the wiring any time with python scripts/invariants.py.
Your own notes go in notes/. Delete example-vault/ when you no longer need the eval, and update eval/golden.jsonl with questions about your own notes.
On Windows, Claude Code runs hooks through Git Bash; the hook commands already use forward slashes.
Just the search server
vault-index is on PyPI and in the MCP registry. To use the hybrid search on any folder of notes without the rest of this repo:
Then ask Claude to index a folder (for example "index_paths ~/notes") and search it with search_notes.
It also works from a terminal. Indexing a large vault there first shows progress and keeps Claude's first tool call short:
With no command it serves MCP over stdio. The index lives in ~/.mcp-memory/vault-index.db. To move it, set VAULT_INDEX_DB in your shell environment rather than only in the MCP config, so the server, the re-index hook and the invariants all use the same file. --python 3.12 keeps uvx off newer Pythons that the embedding runtime does not support yet.
Retrieval eval
example-vault/ is a fictional person's notes, decisions and lessons. eval/golden.jsonl has 44 questions about it and about this repo's own docs, worded differently from the notes on purpose, so keyword overlap alone does not find most answers. The last 12 are hard paraphrases that share almost no words with their answer. (Keep golden questions out of indexed files like this README, or they compete with the real answers.)
The grep row ranks chunks by how many query words they contain, roughly what searching with rg per word gives you.
Without the reranker, vector-only edged out fusion on the sample vault (the hard paraphrases give keywords nothing to match); the reranker puts hybrid back on top. On the author's private vault (41 questions) the order is the same: hybrid + rerank 0.550, fusion only 0.487, vector 0.473, keyword 0.433, grep 0.327.
Compared with basic-memory
basic-memory is a popular markdown memory MCP server with its own hybrid search. eval/compare_basic_memory.py runs it (v0.24.1, same bge-small model) on a copy of the same markdown files and scores both on the same 44 questions. basic-memory returns whole notes, so both are scored per file here (vault-index chunks collapsed to their file):
basic-memory does much more than search (it writes notes, builds a graph from them, offers cloud sync); this compares retrieval only. Its default search varied by about 0.005 between runs. It is not run in CI.
CI fails if any hybrid metric drops more than 0.03 below eval/baseline.json. Scores are identical on Ubuntu and Windows.
What worked and what did not
Each change tested alone against a saved baseline, mostly on the author's private vault:
With equal weights, vector-only beat hybrid on the sample vault while hybrid won on the private one (jargon needs keywords). A sweep of keyword weight by RRF k on both sets found one setting that wins on both; vector-only is still worse on the private vault, so keywords stay in at a low weight. Details in docs/adr/.
Repository layout
Development
The tests use a fake bag-of-words embedder, so they run in about a second. CI runs lint, tests, the retrieval eval and the invariants on Ubuntu and Windows for every push. See CONTRIBUTING.md.
Status
Early and opinionated: built for one person's daily use, then generalised. Tested day to day on Windows 11 with the Claude desktop app; CI covers Ubuntu and Windows. The portable hook commands ($CLAUDE_PROJECT_DIR) pass the invariants in CI but have not yet run in a live session on macOS or Linux.
License
来源:README.md,提交 3059975
工具
0版本历史
2- v0.4.2最新Oct 29, 2026
- v0.4.1Oct 24, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分