关于 reef
reef 是面向个人、家庭和项目的共享记忆服务,让 AI 助手在不同会话中读取和保存信息。它以私有及共享 coves 组织 Markdown 页面,内容需经确认才会记录或共享。
主要功能
- 01私有与邀请制共享记忆空间
- 02按索引读取所需页面
- 03搜索页面内容
- 04经审核暂存记忆内容
- 05页面及文件版本化管理
- 06导出 Markdown、JSON 和历史
适用场景
- 01让助手在不同会话记住个人信息
- 02与家庭或项目成员共享选定笔记
- 03查找并读取相关记忆页面
- 04备份或迁移记忆及修订记录
MCP 相关
远程 MCP 服务向客户端提供记忆读取、搜索和写入工具。通过索引、页面读取和搜索访问内容,并按空间权限限制可见范围。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://reefwith.me/mcpclaude mcp add --transport http me-reefwith-reef https://reefwith.me/mcp{"mcpServers":{"me-reefwith-reef":{"type":"http","url":"https://reefwith.me/mcp"}}}在 Cursor 中打开{"servers":{"me-reefwith-reef":{"type":"http","url":"https://reefwith.me/mcp"}}}在 VS Code 中打开{"mcpServers":{"me-reefwith-reef":{"type":"http","url":"https://reefwith.me/mcp"}}}{"mcpServers":{"me-reefwith-reef":{"serverUrl":"https://reefwith.me/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
reef
为你和与你分享生活的人,以及你们已经在使用的 AI 助手,提供共同的、不断更新的记忆。
你的助手会在对话结束后忘记你。reef 为它提供持久的记忆——你的伴侣、家庭或项目也可以共享这份记忆。
- 只需说一次。 告诉助手,锅炉是 Vaillant 的。下个月,在另一次对话中,它依然记得。
- 按需共享。 你的私人笔记仍是私密的。共享海湾只会存放你有意放进去的内容。
- 使用自己的助手。 Claude、ChatGPT 桌面版或 Codex。reef 是一个远程 MCP 连接器,不是另一个聊天应用。
试试看
你需要邀请才能使用——reef 仅限受邀用户。收到邀请后:
uv tool install reef-cli # or: npm install -g @haai/reef-cli
reef login
reef load-index
如果要改用助手访问,请将 https://reefwith.me/mcp 添加为远程 MCP 连接器,并使用收到邀请的邮箱地址登录。
在 Claude Code 中,插件会一并提供该连接器和三个命令:
claude plugin marketplace add diepzee/reef
claude plugin install reef@haai
/reef:recall 根据记忆作答,而不是凭空猜测;/reef:remember 将内容存档;/reef:whats-new 则汇报其他人的助手写入了哪些新内容。
此外还有一个浏览器应用:reefwith.me/app。你可以用它在没有助手的情况下阅读和编辑页面。
记忆的组织方式
记忆存放在海湾中。首次登录时,你会获得一个私人海湾。你可以创建任意数量的共享海湾,例如供家庭、学校圈子、会计师或小型项目使用。
| 私人海湾 | 共享海湾 | |
|---|---|---|
| 谁可以阅读 | 只有你 | 所有受邀者 |
| 创建时间 | 首次登录时 | 有需要的人创建 |
| 命名方式 | 始终为 personal | 由你自行命名 |
| 如何加入 | 不可加入 | 由所有者通过邮件邀请 |
共享海湾的名称由你自己决定。 你给海湾取的名称只属于你。两个家庭可以各自拥有一个名为 family 的海湾,彼此都不知道对方的存在;也没有人能从别人那里抢走名称。
共享须有意为之,且不可撤销。 将内容移出私人海湾需要两步。首先,助手会向你展示确切文本,并列出所有有权阅读该内容的人。只有在这之后,内容才会被移出。
以其他方式将私人内容写入共享海湾会被拒绝——不是劝阻,而是直接拒绝。而且共享后无法取消共享。
助手如何读取记忆
reef 会先加载索引,再加载页面——这是 LLM Wiki 模式, 针对共享且具备权限控制的记忆进行了调整。
- 助手调用
load_index,获取所有可见页面的地图:路径、标题、标签和一行描述,不包含页面正文。 - 助手读取地图,判断当前对话需要哪些内容,然后仅使用
read_pages获取这些内容。 - 随着话题推进,助手会再次获取内容。如果仅凭地图无法确定要读取什么,
search_pages会在页面正文中匹配词语;由于搜索与所有读取操作一样受行级安全策略约束,因此搜索绝不会显示调用者无权打开的页面。
每次调用时,系统都会根据数据库重新构建索引,因此索引不会过时。
助手如何记录信息
不会有任何内容在你不知情的情况下被记录。对话过程中,值得保留的信息会通过 remember 处理,作为带日期的一行内容暂存到对应海湾的收件箱中;对话结束前,助手会说明要保留哪些内容,让你先删除不想留下的部分。
收件箱条目还不算记忆。整理操作——你随时可以提出整理——会将收件箱内容汇编到正式页面上,标记过时的页面,并指出你的页面与共享页面之间的矛盾,而不是悄悄选定一个说法。经过你审核后再有意记录,这就是设计原则:reef 不会背着你转录对话。
如何保护你的隐私
隐私由数据库强制保障,而非应用代码。
每个页面、文件和成员关系都受 PostgreSQL 行级安全策略保护。 如果查询忘记添加筛选条件,返回的会是空结果,而不是别人的数据。出错时,系统会默认拒绝访问。
这只有在应用以普通数据库角色连接时才能实现。超级用户会忽略所有策略,因此 reef 使用 rif_app 运行——它可以读取和写入行,但无法更改架构。迁移和备份使用单独的、更高权限的凭据。请参阅
scripts/provision_app_role.py。
数据始终属于你
从你写下页面的那一刻起,它们就是 Markdown。Web 应用支持导出:
- 当前内容,可导出为 Markdown 归档或 JSON;以及
- 所有内容,可下载为一个文件,其中包含完整的修订历史和已存储的文件字节。
它们都是能独立于此部署长期保存的普通文件。导出只会将数据从 reef 导出——这里不会把你的记忆锁住。
使用命令行工具
有两个软件包,安装后都会提供 reef 命令:
| 安装 | 可用功能 | |
|---|---|---|
| Python | uv tool install reef-cli | 每个 MCP 工具都可作为具名命令使用 |
| npm | npm install -g @haai/reef-cli | login、tools 和 call |
具名命令使用连字符:load_index 会变成 load-index。每个结果都是
JSON,遇到 not_found 之类的错误时也会以非零状态码退出。
reef read-pages personal profile.md preferences.md
reef write-page personal plans.md --body-file ./plans.md \
--message "Add the summer plan" --title Plans
reef add-file personal ./lease.pdf --description "Signed rental agreement"
reef call read_pages '{"cove":"personal","paths":["plans.md"]}'
reef call 接受任意 MCP 工具名称和 JSON 对象,因此可以调用具名命令所能调用的所有功能。较大的输入可以来自文件或标准输入;上传内容会自动编码。
两个软件包都通过相同的浏览器流程登录。每个软件包都会缓存自己的令牌,因此使用一个登录不会让另一个也自动登录。令牌保存在用户私有的配置文件中。
设置 REEF_MCP_URL 可指向其他服务;设置 REEF_ACCESS_TOKEN 可用于无头运行。
运行 reef tools 查看实时架构,运行 reef <command> --help 查看参数。
Agent 技能:skills/reef/SKILL.md 会教助手检索协议、默认私有的写入方式、乐观锁,以及哪些情况下必须先征求你的同意。
状态
自 2026 年 8 月 6 日起已上线,网址为 reefwith.me,部署在 Railway 上,由 WorkOS AuthKit 提供保护,并已投入日常使用。
已完成并审核:架构与访问控制、索引和页面读取、版本化写入,以及章节级共享。还包括支持多用户的海湾和由所有者管理的邀请、文件存储、浏览器应用、导入、备份和导出。
测试针对真实的 PostgreSQL 运行,而非模拟环境。
坦诚说明已知不足:
- 使用人数不多。 按设计,增长依靠逐个发送邀请。
- 尚未在手机上测量上下文上限。
现在有一个独立的定时任务会将每日 pg_dump 写入 R2。2026 年 8 月 24 日至 9 月 10 日期间观察到的每次运行均成功上传,并通过了脚本的字节数检查。另外,8 月 7 日的生产转储通过了恢复演练。Railway 托管备份的状态和 R2 保留控制仍未验证。
所有未完成事项都记录在 docs/runbook.md 顶部的“待办事项”列表中。
开发
你需要 Docker 和 uv。 just 是可选的,但可以帮你完成设置。
just setup # dependencies, database, and the roles the tests need
just test # lint, Python suite, frontend suite
just dev # serve the app locally
单独运行 just 会列出所有任务。不使用它时:
docker compose up -d # PostgreSQL on port 5433
uv sync && (cd frontend && bun install)
uv run pytest # builds its own schema in rif_test
在测试角色创建之前创建的集群缺少这些角色,测试套件会明确报告这一点,而不是测试较弱的配置。运行 just db-roles 即可修复。
本地数据库有两项刻意为之的设计,并非偶然:
- 应用不会以超级用户身份运行。 超级用户会忽略行级安全策略(Row-Level Security),因此安全测试即使没有证明任何东西也会通过。请参阅
docker-compose.yml中的注释。 - 测试使用单独的非所有者角色。 表的所有者不受列授权限制。没有这个角色时,断言“成员无法重命名一个海湾”的测试会因为错误的原因通过。
迁移会创建一个用户及其海湾。我们有意不创建其他用户。首次登录时,会根据电子邮件地址进行绑定;迁移不会重新运行来纠正错误的猜测。其他人都通过邀请加入。
请将 PR 标题写成 Conventional Commit 格式(PR 会通过 squash 合并,因此标题决定了发布版本),并在 changes/ 下添加一句话的变更说明,只要使用 reef 的人能注意到这项变化即可——请参阅
docs/releasing.md。
文档
| 文档 | 内容 |
|---|---|
docs/spec.md | 设计及其背后的原因 |
docs/runbook.md | 部署,以及仍待解决的问题 |
docs/restore.md | 备份与恢复 |
docs/competitor-research.md | 相关市场 |
许可证
服务端——仓库根目录中的所有内容——采用 AGPL-3.0-or-later 许可证。阅读它、自己运行它,也可以分叉它。唯一需要特别注意的条件与网络服务有关:如果你将修改后的 reef 作为服务提供给他人使用,就必须向他们提供你的修改。这与 reef 对自身的要求一致。如果有人保管着你的记忆,你就应该能看到保管它的代码。
你安装而非托管的部分采用 MIT 许可证,因为许可证不应成为你犹豫是否使用客户端的理由:
| 部分 | 许可证 |
|---|---|
服务端(src/,本仓库) | AGPL-3.0-or-later |
clients/python — PyPI 上的 reef-cli | MIT |
clients/ts — npm 上的 @haai/reef-cli | MIT |
plugins/reef — Claude Code 插件 | MIT |
版权归 Haai BV 所有。
关于名称
产品名是 reef,Python 模块也叫这个名字。rif 是开发期间使用的名称,而且沿用的时间远超预期。
仍然叫 rif 的都是运行中的系统会记住的内容,因为这些名称并非供人阅读,而是系统已经记录下来的键:
仍为 rif 的名称 | 含义 | 保留原因 |
|---|---|---|
app_name="rif" | Piccolo 在 migration 表中的键 | 重命名后,Piccolo 会找不到已应用的迁移,并对已有数据的数据库重放整个迁移链 |
rif_roster、rif_admit_member、… | SQL 辅助函数 | 它们是行级安全策略的边界;重命名它们意味着对系统中绝不能出错的部分执行实时 DDL |
rif、rif_authz、rif_probe | 数据库角色 | 只有针对正确的角色才会强制执行 RLS,且测试套件会以 rif_probe 身份断言权限 |
RIF_* | 环境变量 | Railway 上设置了 12 个,包括签名密钥和开放入口;如果重命名变量但没有人设置新名称,读取到的值就会是缺失的 |
diepzee/reef | 仓库 | 一个正在审核中的插件提交指向这个 URL |
如果你要添加新内容,请遵循这条规则:如果数据库或部署会记住这个名称,就用 rif。如果名称是给人看的,就用 reef。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。