使用说明
第二大脑
基于Rust构建的个人知识操作系统。它将你的普通markdown笔记索引到一个可搜索的、语义连接的知识库中——由PostgreSQL+pgvector支持,并通过以下方式公开 主控程序 因此,任何人工智能助手都可以阅读、搜索和写你的笔记。
为什么
你已经记笔记了。它们存在于分散的目录中,跨项目,处于不同的完整性阶段。问题不在于写作,而在于 发现 你六个月前写的东西,看到了跨领域想法之间的联系,并为你的人工智能工具提供了实际帮助所需的背景。
Second Brain通过将您的markdown文件视为真实来源并构建一个支持全文搜索、语义(向量)搜索、链接图遍历和可组合AI工作流的派生索引来解决这个问题——所有这些都可以从Claude Code、Claude Desktop、Neovim或任何兼容MCP的客户端访问。
您的文件保留在磁盘上,无论您使用何种结构。无需锁定,无需特殊语法,无需迁移。
运作原理
You write markdown --> Watcher detects change --> Parser extracts structure
|
You ask a question <-- MCP returns results <-- DB stores notes + vectors
- 你写 普通的markdown文件。无需前置或命名约定。
- 文件监视器 检测300ms内的变化,解析文件,并将其上传到PostgreSQL。友情链接(
[[wikilinks]]和[markdown](links))被提取到可遍历图中。 - 预埋管线 组块按标题节注释,将组块发送到Ollama,并将向量存储在带有HNSW索引的pgvector中。
- 17个MCP工具 将所有内容暴露给您的AI助手——搜索、阅读、创建、更新、链接遍历、语义相似性、项目上下文、编辑跟踪、多用户会话和可组合技能。
数据库是一个派生索引,而不是事实的来源。如果它消失了,重新摄入,你就回来了。
快速开始
整个堆栈——应用程序、PostgreSQL和Ollama——都在Docker中运行。除了Docker之外,主机上不需要安装任何东西。
1.部署
./deploy.sh # Interactive setup
./deploy.sh --defaults # Deploy with sensible defaults (no prompts)
这将构建应用程序容器,启动PostgreSQL+Ollama,提取嵌入模型,摄入你的笔记,并运行初始嵌入。MCP服务器暴露在 http://localhost:8080/mcp.
2.用克劳德代码注册
claude mcp add second-brain --type http --url http://localhost:8080/mcp -s user
就是这样。Claude Code与HTTP端点进行通信;服务器在内部处理数据库和嵌入调用。
3.使用它
启动Claude Code会话并尝试:
- “在我的笔记中搜索信号处理”
- “哪些笔记与我当前的项目有关?”
- “创建一个总结今天工作的笔记”
- “总结一下我本周的工作”
管理堆栈
./deploy.sh status # Show running services
./deploy.sh logs [svc] # Tail logs
./deploy.sh ingest # Re-ingest notes
./deploy.sh embed # Re-run embeddings
./deploy.sh down # Stop all services (data volumes preserved)
./deploy.sh down -v # Stop and delete all data
MCP工具
搜索并阅读
| 工具 | 说明 |
|---|---|
note_search |
使用生命周期/项目筛选器进行全文搜索 |
semantic_search |
向量相似性搜索——查找概念上相关的内容 |
find_related |
给定一个注释,找到语义相似的注释 |
note_read |
读取笔记的内容和元数据 |
note_list |
列出带有分页和过滤器的笔记 |
note_graph |
显示笔记的出站链接和反向链接 |
file_search |
通过ripgrep/fd搜索磁盘上的文件(不需要数据库) |
书写并摄取
| 工具 | 说明 |
|---|---|
note_create |
创建一个新的markdown文件并自动摄取它 |
note_update |
更新现有注释并重新索引 |
note_ingest |
通过自动嵌入摄取文件/目录 |
embed_notes |
批量嵌入缺失向量的笔记 |
元数据和会话
| 工具 | 说明 |
|---|---|
note_classify |
设置笔记生命周期(活动/易失性/持久/存档) |
note_stamp |
在frontmatter中标记编辑元数据(编辑器名称+时间戳) |
session_init |
为多用户编辑初始化一个隔离的git工作树 |
技能和项目
| 工具 | 说明 |
|---|---|
run_skill |
运行一个可组合的工作流(见下面的技能) |
project_list |
列出带有注释计数的项目 |
project_context |
获取项目的全面背景 |
何时使用哪个搜索
note_search--你知道这些词。“查找我关于git CLI的笔记。”semantic_search--你知道这个概念。“我写过什么关于射频干扰的文章?”将与关于信号处理、盲信号检测和射频分析的笔记相匹配,即使他们没有使用这个确切的短语。find_related--你有一个笔记,想要上下文。“与此架构文档还有什么联系?”note_graph--你想要结构。“与此笔记有何联系?”file_search--DB搜索失败?文件还没有被摄入?搜索原始文件系统。
技能
技能是可组合的工作流程,在您的知识库上运行:
| 技能 | 权限 | 它的作用 |
|---|---|---|
summarize |
只读 | 活动摘要--创建/修改的笔记、任务、按项目分组 |
continue-work |
只读 | 特定项目的简历上下文——最近的更改、打开的任务、相关笔记 |
reflect |
只读 | 比较计划与完成的工作、表面图案和差距 |
connect-ideas |
只读 | 查找跨项目和域的语义连接 |
contextualize |
破坏性 | 自动标记、自动链接和分类笔记生命周期(首先预览更改) |
技能通过MCP客户端交互工作(不需要API密钥)或通过 ANTHROPIC_API_KEY.
配置
嵌入模型
所有嵌入模型都通过Docker堆栈中的Ollama在本地运行。选择模型 ./deploy.sh 设置或设置 EMBEDDING_PRESET 在 .env.prod:
| 预设 | 型号 | 尺寸 | 大小 | 备注 |
|---|---|---|---|---|
nomic |
nomic嵌入文本 | 768 | 137 MB | 违约。 速度快,质量好。 |
all-minilm |
全部最小 | 384 | 46 MB | 最快,最小。 |
snowflake |
雪花-实际嵌入2 | 768 | 305 MB | 平衡良好。 |
mxbai |
mxbai嵌入大 | 1024 | 335 MB | 高质量、更大的矢量。 |
qwen3 |
qwen3嵌入 | 1024 | 4.7 GB | 最佳质量。CPU速度慢。 |
环境变量(.env.prod)
| 变量 | 默认值 | 描述 |
|---|---|---|
POSTGRES_PASSWORD |
secondbrain |
数据库密码 |
EMBEDDING_PRESET |
nomic |
Ollama型号预设(见上表) |
OLLAMA_MODEL |
nomic-embed-text |
Ollama模型(匹配预设) |
MCP_PORT |
8080 |
MCP HTTP端点的主机端口 |
NOTES_PATH |
./notes-data |
notes目录的主机路径(绑定挂载到容器中) |
RUST_LOG |
info |
日志级别(调试/信息/警告/错误) |
GIT_USER_NAME |
secondbrain |
笔记提交的Git标识(人类) |
AI_GIT_NAME |
claude-ai |
AI编写的提交的Git标识 |
AI_GIT_EMAIL |
ai@second-brain.local |
人工智能提交的Git电子邮件 |
ANTHROPIC_API_KEY |
(无) | 启用自主技能执行(可选) |
PostgreSQL和Ollama仅在Docker内部网络上运行,它们不向主机公开。唯一暴露的主机端口是MCP服务器。
Notes目录
您的笔记被装订在容器中 /data/notes.Point NOTES_PATH 在任何markdown文件目录中。 deploy.sh 还支持将git存储库克隆为notes源。
如果你使用git支持的notes,容器会自动初始化repo并跟踪配置的分支。推/拉通 ./deploy.sh push 和 ./deploy.sh pull.
配置文件(second-brain.toml)
Docker入口点会根据环境变量自动生成此内容。对于本地开发,您可以手动编写一个:
[database]
url = "postgresql://secondbrain:secondbrain@localhost:5432/secondbrain"
[notes]
paths = ["~/notes"]
[embedding]
preset = "nomic"
# Individual fields override the preset:
# url = "http://localhost:11434"
# model = "nomic-embed-text"
# dimensions = 768
# batch_size = 32
# max_chunk_chars = 2400
多用户会话
当通过HTTP访问时,服务器支持通过git工作树进行并发编辑。每个用户会话都会得到一个独立的工作副本。
分支命名
违约: <username>/<YYYY-MM-DD>/working (例如。, alice/2026-03-18/working)
自定义:通过a branch 参数到 session_init (例如。, alice/2026-03-18/notes_on_bees)
运作原理
session_init在带有日期戳的分支上创建git工作树note_create/note_update使用AI作者身份写入工作树并自动提交- 注释可以在数据库中立即搜索(写入时摄入)
- 会话结束后,工作台会被清理干净,但 分支持续存在
- 合并到
main是一个深思熟虑的步骤(PR或手动合并)
受保护的分支(main, master, staging, dev)从不直接写信给。AI承诺使用 --author 所以它们与人类的行为不同 git log.
只读工具(搜索、列表、阅读)不需要会话。
建筑
second-brain (Cargo workspace)
|
|-- sb-core Shared foundation: models, DB queries, markdown parser,
| ingestion pipeline, file search. Everything depends on this.
|
|-- sb-embed Embedding pipeline: pluggable providers, markdown chunker,
| batch processor.
|
|-- sb-sync File watcher (notify v7) + sync processor. Detects file
| changes, ingests, embeds. Runs as a background tokio task.
|
|-- sb-skills Skill engine: composable workflows for summarize, reflect,
| continue-work, connect-ideas, contextualize.
|
|-- sb-server MCP server binary. 17 tools via rmcp. Supports stdio
| (local) and HTTP (network) transports.
|
|-- sb-cli CLI for manual ingestion, search, embedding, and skills.
有关更深入的架构细节(数据流、嵌入策略、链接解析、数据库模式),请参阅 docs/architecture.md.
发展
对于没有Docker的本地开发(从源代码构建):
# Start just the database
docker compose up -d db
# Start Ollama on the host (or use docker compose up -d ollama from the dev compose)
ollama serve &
ollama pull nomic-embed-text
# Build
cargo build --release
# Run the MCP server (stdio mode for Claude Code)
./target/release/second-brain
# Or HTTP mode
./target/release/second-brain --transport http --port 8080
通过justfile执行开发命令:
just db-up # start postgres
just db-down # stop services
just db-reset # wipe and recreate the database
just test # run all tests
just ci # fmt + clippy + test
just server # run MCP server in dev mode
互动 setup.sh 脚本也可以遍历本地设置,但Docker部署通过 deploy.sh 是主要支持的路径。
命令行界面
这 sb CLI可通过以下方式在容器内使用 ./deploy.sh cli,或在当地建造 cargo build --release -p sb-cli:
# Via deploy.sh (runs inside container)
./deploy.sh cli search "signal processing"
./deploy.sh cli semantic "radio frequency"
./deploy.sh cli skill summarize --period this-week
# Or locally
sb search "signal processing"
sb semantic "radio frequency interference"
sb ingest ~/notes
sb embed
sb skill summarize --period this-week
sb projects
sb classify ~/notes/TODO.md volatile
测试
cargo test --workspace # 95 unit + integration tests
cargo clippy --workspace # lint checks
python3 test-mcp-http.py # 51 HTTP integration tests (requires running server)
板条箱测试覆盖率
| 板条箱 | 测试 | 覆盖范围 |
|---|---|---|
| sb core | 62 | 配置、摄取、生命周期、标记、路径映射、项目检测、项目同步、工作树 |
| sb embed | 10 | 分块器,TEI提供商 |
| sb技能 | 16 | git_ops(分支验证、提交、快照)、时间周期 |
| sb sync | 2 | 监视器(文件更改检测) |
| sb core(集成) | 5 | DB连接、CRUD、全文搜索、pgvector |
集成测试套件涵盖了依赖数据库的模块(DB/*)(test-mcp-http.py)以及 tests/db_integration.rs 测验。
延伸阅读
- docs/architecture.md --数据库模式、数据流、嵌入策略、链接解析
- ROADMAP.md --未来计划和参考项目
许可证
麻省理工学院
