戈尔迪🐕
用Go编写的多代理内存MCP服务器,在您的机器上本地运行。戈尔迪商店打字,命名 回忆 在共享的SQLite向量索引中,这样多个代理(Claude、Codex等)就可以 remember, recall, update_memory,以及 forget 从一个池中--替换每个项目 MEMORY.md 所有文件都可以共享后端。
特性
- 打字记忆:每个内存都有一个类型(
user,feedback,project,reference,opinion,idea,todo,reminder),唯一名称、可选描述、正文、代理和源 - 共享池:Scope是一个SQLite文件——将任意数量的代理指向同一数据库,它们共享内存
- 语义回忆:在块嵌入上过滤KNN;recall返回父内存加上匹配的摘录
- 多个嵌入后端:MiniLM(通过ONNX运行时本地)或Ollama(任何嵌入模型)
- 文件摄取:
index_file/index_directory将文件导入为reference按绝对路径命名的内存(校验和门控追加) - 异步作业队列:长期运行的索引操作在后台运行,并具有进度跟踪功能
需求
MiniLM后端(需要ONNX运行时)
# macOS
brew install onnxruntime
# Ubuntu/Debian
sudo apt install libonnxruntime-dev
# Fedora/RHEL
sudo dnf install onnxruntime-devel
# Arch Linux
sudo pacman -S onnxruntimeOllama后端
如果你想使用Ollama而不是MiniLM,你只需要安装Ollama:
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.com/install.sh | sh
# Pull an embedding model
ollama pull nomic-embed-text如果您只打算使用Ollama,请跳过下面的ONNX Runtime安装。
安装
发布(推荐)
从下载预构建的二进制文件 发布页面:
| 平台 | 二进制 |
|---|---|
| macOS(苹果硅) | goldie-mcp-darwin-arm64 |
| macOS(英特尔) | goldie-mcp-darwin-amd64 |
| Linux(x86_64) | goldie-mcp-linux-amd64 |
| Linux(ARM64) | goldie-mcp-linux-arm64 |
# Example for macOS Apple Silicon
curl -LO https://github.com/srfrog/goldie-mcp/releases/latest/download/goldie-mcp-darwin-arm64
chmod +x goldie-mcp-darwin-arm64
mv goldie-mcp-darwin-arm64 ~/bin/goldie-mcp发布的二进制文件是专门为macOS编写的,并包含MiniLM模型,因此不需要额外下载。
从源代码构建
需要Go 1.22+、启用CGO和Git LFS(模型文件与LFS一起存储):
git lfs install # if not already configured
git clone https://github.com/srfrog/goldie-mcp
cd goldie-mcp
make build配置
命令行标志
| 标志 | 描述 | 默认值 |
|---|---|---|
-b | 嵌入后端: minilm 或 ollama | minilm |
-l | 日志文件路径 | stderr |
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
GOLDIE_DB_PATH | SQLite数据库的路径 | ~/.local/share/goldie/index.db |
GOLDIE_JOURNAL_MODE | SQLite日志模式PRAGMA。默认情况下,云同步存储是安全的。集 WAL 仅用于本地数据库,以在写入并发期间启用读取 | DELETE |
ONNXRUNTIME_LIB_PATH | libonnxruntime共享库的路径(仅限MiniLM) | 自动检测到 |
OLLAMA_HOST | Ollama API基本URL(仅限Ollama) | http://localhost:11434 |
OLLAMA_EMBED_MODEL | Ollama嵌入模型名称(仅限Ollama) | nomic-embed-text |
OLLAMA_EMBED_DIMENSIONS | 自定义型号尺寸(仅限Ollama) | 自动检测已知型号 |
支持的Olama嵌入模型
| 型号 | 尺寸 | 备注 |
|---|---|---|
nomic-embed-text | 768 | 默认值,通用性良好 |
mxbai-embed-large | 1024 | 质量更高,速度更慢 |
all-minilm | 384 | 与MiniLM后端相同 |
对于其他型号,设置 OLLAMA_EMBED_DIMENSIONS 模型的输出维度。
使用Claude代码
使用MiniLM(默认)
claude mcp add -s user -e GOLDIE_DB_PATH=~/.local/share/goldie/index.db goldie /path/to/goldie-mcp注: ONNXRUNTIME_LIB_PATH 如果库位于标准位置,则是可选的。
与Ollama
claude mcp add -s user -e GOLDIE_DB_PATH=~/.local/share/goldie/index.db goldie /path/to/goldie-mcp -- -b ollama注意:确保Ollama正在跑步(ollama serve)在启动Claude Code之前。
使用Claude Desktop
添加到您的Claude Desktop配置(claude_desktop_config.json):
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
使用MiniLM(默认)
{
"mcpServers": {
"goldie": {
"type": "stdio",
"command": "/path/to/goldie-mcp",
"env": {
"GOLDIE_DB_PATH": "/home/user/.local/share/goldie/index.db"
}
}
}
}与Ollama
{
"mcpServers": {
"goldie": {
"type": "stdio",
"command": "/path/to/goldie-mcp",
"args": ["-b", "ollama"],
"env": {
"GOLDIE_DB_PATH": "/home/user/.local/share/goldie/index.db",
"OLLAMA_EMBED_MODEL": "nomic-embed-text"
}
}
}
}使用OpenAI Codex
添加到您的Codex配置(~/.codex/config.toml):
使用MiniLM(默认)
[mcp_servers.goldie]
command = "/path/to/goldie-mcp"
[mcp_servers.goldie.env]
GOLDIE_DB_PATH = "/home/user/.local/share/goldie/index.db"
ONNXRUNTIME_LIB_PATH = "/path/to/libonnxruntime.so"注: ONNXRUNTIME_LIB_PATH 如果库位于标准位置,则是可选的。Homebrew将把它安装到 /opt/homebrew/lib/libonnxruntime.dylib 在macOS上。在Linux中,使用 ldconfig -p | grep onnxruntime.
与Ollama
[mcp_servers.goldie]
command = "/path/to/goldie-mcp"
args = ["-b", "ollama"]
[mcp_servers.goldie.env]
GOLDIE_DB_PATH = "/home/user/.local/share/goldie/index.db"
OLLAMA_EMBED_MODEL = "nomic-embed-text"内存模型
戈尔迪指数是一个持平的指数池 回忆每个存储器都有这些字段:
| 字段 | 必填 | 备注 |
|---|---|---|
name | yes | 数据库中唯一。名称冲突→ remember 失败(见下文) |
type | 是 | 以下之一: user, feedback, project, reference, opinion, idea, todo, reminder |
body | 是的 | 全部内容。隐藏在引擎盖下,用于嵌入级别回忆 |
description | 否 | 单行摘要;参与语义回忆 |
agent | no | 创建内存的代理(例如。 claude-opus-4-7, codex) |
source | no | 内存来源(文件路径、编辑器、URL) |
分享。 “Scope”只是SQLite文件。多个代理指向同一个 GOLDIE_DB_PATH 共享相同的内存池——没有每个代理的隔离。使用 agent 和 source 在读取/删除时进行筛选。
命名和冲突。 名称必须是唯一的。 remember 是严格的,没有扰乱。如果两个代理试图创建相同的名称,则第二个代理会出错,预计会 recall 现有的内存和调用 update_memory (或选择其他名称)。
更新语义。 名称是不可变的。 update_memory 接受类型/描述/主体/源/代理的补丁;更改为 description 或 body 重新嵌入块。
文件摄取。 index_file / index_directory 是 *一* 不扰乱销售规则的例外。它们将文件作为记忆导入 type=reference,与 name = source = 。当SHA-256校验和匹配时,对同一路径重新索引会跳过,当不匹配时,会替换正文。
可用工具
记住
创造新的记忆。如果失败 name 已在使用中——请回忆并使用 update_memory 相反。
参数:
name(必填):唯一标识符(例如。,feedback_testing)type(必填):其中之一user,feedback,project,reference,opinion,idea,todo,reminderbody(必填):完整内容description(可选):单行摘要agent(可选):创建内存的代理source(可选):内存生成的位置
召回
语义回忆胜过记忆。返回最相关的记忆以及匹配的块摘录。按类型、代理或来源筛选以缩小范围。
参数:
query(必填):主题或问题limit(可选):最大结果(默认5,最大20)type,agent,source(可选):过滤器
update_memory
按id或名称更新现有内存。正文/描述更改重新嵌入。
参数:
id_or_name(必填)type,description,body,source,agent(可选补丁)
忘记
删除记忆。需要至少一个过滤器或查询——拒绝擦除所有内容。通过查询,(可选)筛选器中的顶级匹配项将被删除。
参数:
name,type,agent,source(可选过滤器)query(可选):语义匹配limit(可选):给定查询时的最大匹配数(默认值5)
list_memories
列出与筛选器匹配的内存,最新的优先。仅返回元数据(无正文)。
参数:
type,agent,source(可选过滤器)limit(可选)
count_memories
统计与过滤器匹配的内存。
索引文件
将文件导入为 reference 记忆。记忆的 name 是绝对路径;当校验和更改时,重新索引更新。
参数:
path(必填)
索引目录
将目录中的每个匹配文件导入为 reference 回忆。
参数:
directory(必填)pattern(可选,默认*)recursive(可选,默认false)
job_status、list_jobs、clear_queue
管理异步索引队列。 index_file 和 index_directory 将后台完成的作业排队;使用 job_status 检查进度。
跳过模式
在索引目录时,Goldie会自动跳过某些文件和目录,以避免索引无关的内容。
默认跳过模式
如果没有 .goldieskip 文件存在于被索引的目录中,Goldie使用以下默认值:
| 图案 | 描述 |
|---|---|
.[!.]* | 所有点文件和点目录(.git/, .env, .vscode/等等) |
node_modules/ | Node.js依赖关系 |
vendor/ | Go/PHP供应商目录 |
__pycache__/ | Python字节码缓存 |
AGENTS.md | AI代理配置 |
CLAUDE.md | 克劳德配置 |
自定义跳过模式
创建一个 .goldieskip 目录中的文件以定义自定义模式。这 替换 完全违约。格式与 .gitignore,具有相同的模式语法。
# .goldieskip example
# Lines starting with # are comments
# Skip all dotfiles/dotdirs
.[!.]*
# Skip dependencies
node_modules/
vendor/
.venv/
# Skip build outputs
dist/
build/
target/
# Skip specific files
*.log
*.tmp
secrets.json模式语法:
*匹配任何字符序列?匹配任何单个字符[abc]匹配集合中的任何字符[!abc]匹配不在集合中的任何字符- 以结尾的模式
/匹配目录
示例提示
您可以使用Claude Code、Claude Desktop或Codex的示例提示:
记住
Remember as a feedback memory named "feedback_testing": don't mock the database in integration tests — we got burned last quarter by mock/prod divergence.Remember this user fact named "user_role": senior Go engineer, ten years of experience, currently learning React.Save an opinion named "ui_dark_mode": dark mode is easier on the eyes for long sessions.召回
Recall what you know about database testingRecall feedback memories about pull request sizeWhat memories do I have about the API design?update_memory
Update memory "feedback_testing": new body is "use a real Postgres in CI; the staging DB is reset nightly".忘记
Forget all opinion memories from agent "claude-opus-4-7"Forget memories matching "old API design notes"list_memories/count_memories
List my feedback memoriesHow many memories has agent "codex" written?index_file/index_directory
Index the file ~/project/README.mdIndex all *.md files in ~/docs recursively代理配置
代理商默认情况下不会去找goldie——Claude Code有自己的 /memory,Codex有自己的上下文处理。回购提供了两个固执己见的模板,将它们推向共享池。两者都很短,可以按原样安全地进入。
克劳德代码
复制 templates/CLAUDE.md 到 ~/.claude/CLAUDE.md (它被加载到每个Claude Code会话中):
cp templates/CLAUDE.md ~/.claude/CLAUDE.md对于项目范围的行为,请将其复制到 /CLAUDE.md.
Codex(命令行界面/应用程序)
复制 templates/AGENTS.md 到 ~/.codex/AGENTS.md (食品法典载荷 AGENTS.override.md 和 AGENTS.md 从 $CODEX_HOME,默认值 ~/.codex):
cp templates/AGENTS.md ~/.codex/AGENTS.md作为安全带和吊带的措施,请在 ~/.codex/config.toml 因此,即使Codex未加载AGENTS.md,该规则也会在会话开始时触发:
developer_instructions = """
At session start, read and obey ~/.codex/AGENTS.md when it exists.
For persistent memory operations, prefer Goldie over local memory when the Goldie MCP server is connected.
"""定制
这两个模板都是起点。将它们编辑为:
- 限制内存
type代理应该创建什么 - 为添加特定于项目的命名约定
name(例如。_) - 覆盖默认值
agent价值 - 收紧或放松“何时不使用黄金”规则
跨机器共享一个数据库
Goldie的“作用域”是SQLite文件,因此跨机器(iCloud、Dropbox、Syncthing)同步数据库文件可以在不运行服务器的情况下为您提供跟我走内存。默认日记模式(DELETE)在云同步下已经可以安全使用了——只有一个 .db 文件存在,没有WAL/SHM sidecar出现故障。一个警告:
不要同时从两台机器上写字。 云同步不是协调层。如果两台机器在断开连接时写入,同步客户端会选择一个赢家,另一方的写入将丢失(或创建冲突副本)。工作流程:在切换机器之前退出任何goldie会话,让同步解决,启动新机器。
对于真正的多写入器多机设置,请在服务器上运行goldie并通过Tailscale连接,或使用 文学流 将WAL更改流式传输到S3/B2。
选择仅适用于本地DB的WAL
如果您的数据库位于本地磁盘上(没有云同步),并且您希望在多代理负载繁重的情况下在写并发期间进行读取,请设置 GOLDIE_JOURNAL_MODE=WAL。对于典型的内存存储工作负载,性能差异可以忽略不计,但选项是存在的。
替换每个项目的内存.md
Goldie旨在取代每个项目 MEMORY.md Claude Code等代理在磁盘上创建的文件。让每个代理都指向同一个目标 GOLDIE_DB_PATH,指示他们使用 remember / recall / update_memory / forget 而不是基于文件的内存,你会得到:
- Claude(任何会话、任何项目)、Codex和任何其他MCP感知代理共享一个池
- 语义召回而不是文件全局搜索
- 通过
agent字段,可通过以下方式查询recall/forget过滤器 - 过滤清理(例如“忘记所有
feedback来自代理X的记忆”)
对现有成绩单进行索引
您还可以将旧的Claude Code对话记录批量导入为 reference 记忆使他们参与回忆:
Index all *.md files in ~/.claude/projects recursively然后问:
Recall what I know about authentication bugsWhat memories do I have about Docker?故障排除
macOS:二进制立即终止(信号9)
在macOS上复制二进制文件时,Gatekeeper可能会添加隔离属性(com.apple.provenance)这会导致双星在发射时被杀死。使用 make install DEST= 它直接构建到目标并对二进制文件进行代码签名以避免此问题。
食品法典委员会不召回
- Codex中的MCP支持是实验性的,需要更多的引导才能正常工作。索引内容后,尝试
recall并检查它是否使用goldie.recall()函数,表示它正在使用MCP后端。 - Codex有时不信任回忆中的内容,也不会将其添加到上下文中,需要重复调用
goldie.search_index()你可以试试recall and consolidate推送更新。
建筑
goldie-mcp/
├── main.go # MCP server setup and tool handlers
├── internal/
│ ├── embedder/ # Embedding interface and backends
│ │ ├── minilm/ # MiniLM backend (ONNX Runtime)
│ │ └── ollama/ # Ollama backend (API client)
│ ├── goldie/ # Memory operations (Remember/Recall/Update/Forget)
│ │ ├── goldie.go # Core, file ingestion, chunking
│ │ └── memory.go # Type whitelist + memory CRUD
│ ├── store/ # SQLite memory + chunk + vec storage
│ │ ├── store.go # Connection, jobs
│ │ └── memory.go # Memory schema and queries
│ └── queue/ # Async job processing
├── go.mod
└── Makefile模式
三个SQLite表组成了内存索引:
memories--每个内存一行:id, name UNIQUE, type, description, body, agent, source, checksum, created_at, updated_atmemory_chunks--为了嵌入粒度,主体被分割成重叠的块:id, memory_id, chunk_index, contentmemories_vec—vec0基于块嵌入的虚拟表,在回忆时连接回记忆
Recall对块进行KNN,然后对不同的记忆进行重复数据删除,为每个记忆返回最匹配的摘录。
嵌入后端
MiniLM后端(-b minilm)
用途 全迷你LM-L6-v2 通过ONNX运行时:
- 384维嵌入
- 针对语义相似性进行了优化
- 在本地运行,模型嵌入二进制文件中
Ollama后端(-b ollama)
使用Ollama的嵌入API与您选择的模型:
nomic-embed-text(768维)-默认,质量和速度的良好平衡mxbai-embed-large(1024维)-更高质量的嵌入all-minilm(384维度)-与MiniLM后端型号相同- 任何其他Olama嵌入模型(集
OLLAMA_EMBED_DIMENSIONS)
注: 不同的嵌入模型产生不同的维度向量。用一个后端/模型索引的内存不能用另一个具有不同维度的后端/模型调用。切换时使用单独的数据库或重新索引。
许可证
麻省理工学院
