mcpField
M
Marrow

Marrow

本地服务
marrow.works记忆与知识311 周前更新

关于 Marrow

Marrow 是面向编码 Agent 的共享记忆系统,支持跨项目检索、多人协作和文件占用声明。它通过 MCP 供多种 Agent 工具读写记忆,并提供本地存储、语义搜索、可视化以及可选的设备间同步。

主要功能

  1. 01按相关性检索并关联记忆
  2. 02跨项目共享记忆
  3. 03Agent 房间消息与任务交接
  4. 04声明文件占用以减少冲突
  5. 05追加式哈希链操作记录
  6. 06仪表板浏览和编辑记忆

适用场景

  1. 01让多个编码 Agent 共用项目知识
  2. 02查找其他项目中已有的设计决策
  3. 03并行编辑时协调任务并避免文件冲突
  4. 04在不同设备间同步指定项目记忆

MCP 相关

MCP 服务向 Claude Code、Cursor、Codex 等客户端提供共享记忆工具,用于读取和写入项目记忆。跨设备共享项目时,相关 MCP 记忆操作会路由到远程存储。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbmarrow-mcp.mcpb0.8.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Marrow 与 Spinal Cloud

marrow

Claude 的记忆用完后仍能持续工作的记忆——可在你的项目、设备和工具之间共享。

Release License Website Built with Rust Stars

MCP Claude Code Cursor Codex

Claude 的记忆止步于 25KB,这份记忆不会。

Claude Code 内置记忆会在每次会话中加载一个文件的前 200 行。对于刚起步的项目,这样足够了。但一个已有两年历史的代码库,知道的事情远不止 200 行能容纳的内容,而超出部分就会被直接丢弃。

Marrow 采用检索,而非加载。提出问题,它就会从你拥有的几千条记忆中,找出能回答问题的 20 条,以及与它们相关联的记忆。

当项目事实达到 1,000 条时,每轮使用的上下文会减少 2.1 倍(p = 0.002),每项任务的费用也会从 $0.90 降至 $0.50。 下文提供数据和方法。

它还具备内置记忆不支持的三项功能:

  • 项目之间共享一个大脑。 内置记忆按代码库分别保存。借助 Marrow 的 hive,api 中的 Agent 可以回忆起 webapp 知道的内容。
  • 设备和团队成员之间共享一个大脑。 内置记忆明确限定在本地设备。Marrow 可通过你运行的中继同步;如果你不想自行运行,也可以使用 Spinal Cloud。
  • 工具之间共享一个大脑。 Claude Code、Cursor 和 Codex 通过 MCP 读取和写入同一份记忆。

由于多个 Agent 共享这份记忆,它也能防止它们相互冲突:正在被另一个活动会话编辑的文件会被标记为占用;每个 Agent 的操作都会写入同一份只追加、采用哈希链的记录,供你查看。

永久免费,采用 AGPL-3.0,在你的设备上运行。每条记忆都是 Markdown 文件,可以打开和删除。

它真的有帮助吗?我们进行了测量

对于 Marrow,每轮上下文量在 10 到 1,000 条项目信息之间保持平稳;而 CLAUDE.md 则从每轮 20,962 个 token 上升到 51,141 个 token

通常,告诉 Agent 项目如何运作的方式,是把所有内容都写进 CLAUDE.md,然后它会在每一轮都读取这个文件。对于十条信息来说,这没问题。但一个有几年历史的代码库,可能有上千条信息。

我们让编码 Agent 用三种方式完成相同任务、处理同一个仓库:不提供任何信息、把所有信息写进 CLAUDE.md,以及把相同的信息放入 Marrow。共进行了 75 次运行。

  • 项目掌握的信息越多,CLAUDE.md 的成本就越高。 10 条信息时,每轮需要 21k 个 token;1,000 条时,每轮需要 51k 个 token。Marrow 则保持平稳:24.1k、23.7k、24.3k。拥有 1,000 条信息时,Marrow 节省 2.1 倍上下文(p = 0.002),而且每项任务花费 $0.50,而不是 $0.90。
  • 少于约 100 条信息时,直接写入文件就好。 Marrow 在这一点上表现较差,只有 0.87 倍,而且需要更多轮次。我们宁愿如实说明,也不愿假装它在所有情况下都更胜一筹。
  • 没有项目记忆的 Agent 会把事情搞砸。 它凭空编造了一个数据库表,在 ID 应当可排序的地方使用了 uuid4,还写了一个简单粗糙的时间戳。两个拥有这些知识的测试组都正确处理了这些问题。

方法:每次使用相同的测试仓库和提示词,通过运行代码而不是阅读代码来评分;每个单元运行 6 次,并使用自助法计算区间和置换检验。更多数据见 marrow.works。

那 Claude Code 内置的记忆功能呢?

这个问题问得好,坦诚地说,对于小型项目,你可能并不需要 Marrow。

Claude Code 自带自动记忆功能:Claude 会将笔记写入 ~/.claude/projects/<project>/memory/,并在每个会话中加载 MEMORY.md 索引。它默认开启,而且免费。可以先用着,直到下面某一点开始成为问题:

内置自动记忆Marrow
记忆如何传递给模型每个会话加载一个索引文件的前 200 行 / 25KB排序检索:匹配项及其关联内容
超出容量后会怎样Claude 会收到删除条目的指示不会;检索只需搜索更多内容
范围一个代码仓库这台机器上的所有项目
跨设备使用不行——“文件不会在不同设备间共享”可以,通过你运行的中继或 Spinal Cloud
跨工具使用仅限 Claude CodeClaude Code、Cursor、Codex,以及任何 MCP 客户端
与团队成员共享不行可以
记录 Agent 的操作不行仅追加、哈希链式、可审计
标记代码已超出记忆适用范围不行可以,适用于锚定的 Rust 符号

经验法则:少于 100 条信息、一个仓库、一台机器、一个工具——使用内置功能。 超过这个规模后,Marrow 就能发挥价值,我们自己的基准测试也直言不讳地显示了这一点 (10 条信息时我们表现较差)。

两者并不冲突。自动记忆是 Claude 的私人草稿本;Marrow 则是共享记录。

开始使用

Claude Code,只需一条命令:

/plugin marketplace add aryawidjaja/marrow
/plugin install marrow@marrow

然后安装它调用的二进制文件(brew install aryawidjaja/marrow/marrow,或在 Windows 上运行 irm marrow.works/install.ps1 | iex),并重新启动。

其他所有情况——Cursor、Codex、Claude Desktop,或者如果你不想使用插件:

brew install aryawidjaja/marrow/marrow    # macOS/Linux; Windows: irm marrow.works/install.ps1 | iex
marrow setup                              # add --global to wire every repo at once

marrow setup 会根据它对仓库的了解,为你的知识库创建初始内容,让第一个会话不再空白,并报告仍然缺少的内容。之后重启你的 Agent。钩子需要 jq;Marrow 不可用时,钩子绝不会阻塞你的工作。已经开始会话了?运行 /marrow-save,保存值得保留的内容。

改变主意了?marrow uninstall 会还原所有内容,并保留你的记忆。更多安装方式,包括无需终端的 Claude Desktop 安装包,见下文。

记忆存储在项目中的 .marrow/ 目录里。

查看你的大脑

Marrow 不是一个黑箱,而是一张可以探索的图谱,就像第二大脑。

marrow-serve          # opens the dashboard at http://localhost:8088

每条记忆都是一个神经元,并按所属区域分组,因此图谱结构清晰,而不是一团乱麻。链接会连接共享主题、标签或相关含义(来自嵌入)的记忆。你可以浏览树状图、拖动、缩放、点击阅读、筛选,还可以直接在其中添加、编辑或删除记忆。Hive 标签页会同时显示所有项目。

你的记忆井然有序,而非杂乱堆积

每条记忆都属于项目中的一个区域:auth、billing、infra。Agent 会在写入时为记忆归档,因此大脑有清晰的结构可供导航,而不是一堆扁平的内容。

project  →  area  →  topic  →  versions
marrow areas          # the map: auth 11 · billing 10 · infra 23 · monitoring 10

会话一开始,Agent 就能看到同一张地图,因此在回答之前便知道项目已掌握哪些信息。它也可以优先从某个区域回忆信息,而不隐藏其他内容:

marrow add --kind decision --topic jwt-expiry --area auth "We use 15-minute JWTs."

不会强行归档。如果一条记忆不属于任何区域,它就会保持未归档状态,仍然可以被完整搜索到。归错区域比不归档更糟。

项目之间共享一个大脑

默认情况下,每个项目都有自己的大脑。只需一条命令,即可将任意项目加入机器级的蜂巢,让你的 Agent 能够跨项目回忆信息:

cd ~/code/webapp && marrow hub register --name webapp
cd ~/code/api    && marrow hub register --name api

marrow hub recall "how do we do auth"   # searches every project, tagged by project

这样,在 api 中工作的 Agent 就能询问 webapp 已知的信息。在仪表板中,Hive 标签页会显示一个中央的 核心 神经元(你),所有项目围绕它排列,并在共享想法的地方互相连接。

给你的 Agent 一个交流空间

项目加入蜂巢后,其中的 Agent 就可以创建带名称的房间、互相提问和回复,以及移交工作,无需依赖一个庞大的聊天。Claude Code、Codex、Cursor 以及同一台机器上的其他 MCP Agent 都可以使用同一个频道。

Agent 会在启动时以及开始处理其他会话可能正在负责的工作之前检查收件箱。你可以在仪表板的 Channel 标签页中查看所有房间,让协作过程清晰可见,而不是在你不知情的情况下进行。

设备之间共享一个大脑(测试版)

每个项目默认都是本地且私有的。只需共享你想要同步的一个项目,其余项目仍保留在你的机器上。这就像共享一个代码仓库,而不是共享整个磁盘。

# once, on a server (Docker, Fly.io, any host; see deploy/)
MARROW_TOKEN=$(openssl rand -hex 16) marrow-server

# then in the project you want shared, on each machine
MARROW_TOKEN=<the-token> marrow share --gateway https://your-gateway --space team-app

两台机器使用相同的网关、空间和令牌,即可将它们的 MCP 记忆工具路由到同一个远程项目存储。通过笔记本电脑上的 Agent 保存的决策,桌面电脑上的 Agent 也能获取。其他项目不会受到影响。目前,底层架构使用一个 bearer 令牌;请在你控制的基础设施上通过 HTTPS 运行,并备份其数据卷。

marrow status     # shows whether this project is shared or local
marrow unshare    # back to local, nothing is deleted

Agent 会获知自己正在使用哪种模式。你可以在仪表板的 Manage Projects 面板中配置共享。本地仪表板仍会显示本地项目存储;共享记忆的读取和写入则通过 Agent 的 MCP 工具进行。完整的范围与部署指南请参阅 deploy/README.md。代码锚点和新鲜度检查需要源代码树,因此仍仅限本地使用。

更多安装选项

预构建二进制文件,无需 Rust:

curl -fsSL marrow.works/install.sh | sh

从源代码构建:

cargo install --git https://github.com/aryawidjaja/marrow marrow-cli marrow-mcp marrow-web marrow-server

这会将 marrow、marrow-mcp、marrow-serve 和跨设备的 marrow-server 添加到你的 PATH。

Windows
irm marrow.works/install.ps1 | iex

也可以使用 Scoop:

scoop install https://github.com/aryawidjaja/marrow/releases/latest/download/marrow.json

无论哪种方式,你都会获得 marrow、marrow-mcp、marrow-serve 和 marrow-server,无需管理员权限,无需 Rust,并且已内置语义搜索。

只想在 Claude Desktop 中使用? 从 Releases 下载 marrow-mcp.mcpb 并双击即可。完全无需终端:它会询问要记住哪个项目,这就是全部设置。

用于预热启动会话并防止两个 Agent 同时编辑同一文件的钩子是 shell 脚本,因此需要 Git for Windows 和 jq。如果缺少其中任何一项,安装程序会提示:

winget install Git.Git jqlang.jq

即使没有它们,记忆功能仍然可用;自动协作功能则会关闭。更喜欢 WSL2?在其中按 Linux 方式安装,所有功能的表现都与 Linux 完全一致。

引入现有项目

新建的大脑一开始是空的。若要用现有文档为它填充内容,首次预热时会提示你的 Agent 运行 marrow ingest,该命令会列出 README 和 docs/,并将其提炼为记忆。之后的会话便可直接使用这些记忆。随时运行 /marrow-save,保存值得延续的决策和发现。

使用 Cursor、Codex 或其他 MCP Agent

自动钩子仅适用于 Claude Code,但任何 MCP Agent 都能使用完整的记忆工具集。为每个 Claude Code 项目注册服务:

claude mcp add marrow -s user -- marrow-mcp --root .

对于单个项目,将同一服务添加到 .mcp.json(Claude Code)、.cursor/mcp.json(Cursor)或 Codex TOML 文件中。

语义搜索

附带本地嵌入模型的构建版本(marrow-semantic formula,以及 Windows 和 install.sh 构建版本)默认使用基于含义的回忆,因此搜索“登录安全”时也能找到关于“JWT”的笔记。普通的 marrow formula 仅支持关键词搜索,且体积更小:

brew install aryawidjaja/marrow/marrow-semantic   # multilingual, downloads a small model on first use

marrow status 会显示当前模式;marrow embed none 可切回,marrow embed fastembed 可启用。语义搜索还支持仪表板图谱中的“相关含义”链接。

CLI

你的 Agent 会替你使用 Marrow,但你也可以自行操作:

marrow add --kind decision --topic auth "We use short-lived JWTs."   # save
marrow search "token expiry" --weight 1                              # find (0=keyword, 1=semantic)
marrow hub recall "rate limiting"                                    # search the whole hive
marrow list-stale --repo .                                           # notes whose code drifted
marrow consolidate --repo . --apply                                  # merge duplicates
marrow audit                                                         # prove the ledger untampered

marrow add 会在 .marrow/memory/ 下写入一个普通 Markdown 文件,YAML frontmatter 是元数据,下方文本则是记忆。SQLite 索引是基于这些文件、可重新构建的缓存。

它不会忘记旧内容

对于只增不减的记忆,最明显的担忧是:四个月前的好点子会不会就此沉底?有两点可以避免这种情况。

回忆会沿着链接展开。 提出问题时,Marrow 不会只返回与你用词匹配的内容。它会从匹配项出发,在图谱中逐步向外扩展,每次沿着几条链接前进,并逐步降低权重。因此,即使某条笔记与你使用的词汇完全不同,只要它位于某条匹配笔记的后续链接中,也会浮现出来。旧决策仍可通过相邻笔记找到,这正是链接的作用。

大脑也会强化常用内容。 每次回忆都会被记录。Agent 越常调用的记忆,就越容易再次找到;从未被触及的记忆则保持原样。回忆一件事的次数足够多,它自然就会浮现。

决策发生变化时,Agent 会用新记忆取代旧记忆,而不是再追加一个仍然生效的版本。Marrow 会保留沿革,让当前答案保持清晰,同时不丢失历史记录。

底层机制

  • Rust 过时检测:记忆可以引用 Rust 符号;Marrow 会为其生成指纹,并在该符号发生变化时标记对应笔记,同时容忍格式变化和受支持的迁移。
  • 整合:查找真正的重复内容(几乎完全相同的重述,或互为最相似匹配的一对),并合并,同时保留沿袭关系。对于仅仅相似的笔记,不会进行合并。
  • 关联回忆:提问时,除了返回匹配项,还会返回与其相关的记忆;系统会从命中项出发,沿着链接、共享主题和相关含义向外查找。
  • 集体记忆:会话加入后即可使用,发布尽力而为的文件占用声明,并读取实时活动记录。Claude Code 钩子可以拦截检测到的本地冲突;但如果前置条件不可用,它会刻意选择放行,而不是冒险阻碍工作。
  • 审计与溯源:每次写入、编辑和回忆都会记录在仅追加的哈希链账本中;每个答案都可以追溯到来源。开启签名并运行 marrow audit,还能检测到有人绕过 Marrow 直接编辑磁盘上的记忆文件。
  • 类型化与验证:每条记忆都是 fact 或 decision(也可以是 entity),归档在某个区域和简短主题下;无效写入会被拒绝并说明原因,防止知识库塞满垃圾内容。
  • 过期与置信度:记忆可以注明置信度,也可以设置过期日期,适用于仅在当前有效的内容。过期后,Marrow 会将其归档。
  • 随处运行:离线单文件二进制;Markdown 是事实来源,SQLite 只是可丢弃的缓存。

名称由来

Marrow 是免疫系统记忆的起点:当身体其他部分不断变化时,这一安静的层仍默默记忆。你的 Agent 也共享一个这样的记忆,但它始终归你所有,由你掌控,运行在你的设备上。

许可证

引擎(crates/)采用 AGPL-3.0-only 许可证;可嵌入的 Python 后端(python/marrow-anthropic)采用 Apache-2.0 许可证。通过 MCP 或 CLI 在 Agent 中使用 Marrow 属于独立进程,不构成衍生作品。可获取商业许可证,详见 COMMERCIAL.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。