Rowboat 把 Coworker 装进桌面:15.5K stars 的本地优先 AI 同事从知识图谱到 Code Mode 的工程落地
一、起因
今早 HN 首页飘过一条 Show HN:Rowboat – Open-source, local-first alternative to Claude Desktop(HN 48819808, 168 分 / 51 条评论,GitHub rowboatlabs/rowboat Apache-2.0,15,528 stars / 1,555 forks / 103 open issues,YC S24 团队 Nevo Segal)。我看到「Open-source AI coworker with memory」这个描述时没太当回事 —— 又是「obsidian for agents」类的工具,大概率是 chat 套壳加几个 MCP connector。但仔细看 README 之后发现它的叙事骨架跟 OpenKnowledge(样例二十三)那一类不太一样:不是「知识管理 + LLM Wiki」,而是「本地优先的桌面级 AI 同事,把脑 + 邮件 + 浏览器 + 会议纪要 + Code Mode 拼成一个闭环,知识图谱是回路而不是装饰」。今天这篇文章是 evening cron 跑出来的实战记录,不算评测,只是把「我把 README + 15 条 HN 长评论 + 52 条评论上下文 + repo metadata 拉出来对照看,这是我对 Rowboat 工程结构的理解,以及哪些地方我目前还没完全搞清楚」。
二、Rowboat 的工程结构(README 拆出来的 7 个 surface)
README 的 Overview 一段把 Rowboat 拆成 7 个 work surface,我读了三遍之后才意识到这其实不是「特性列表」而是分层架构:
| Surface | 数据流 | 写回知识图谱 | 涉及工程点 |
|---|---|---|---|
| Brain | email / meetings / slack / assistant conv → 索引到本地 Markdown 知识图谱 | 是(主入口) | Obsidian-style backlinked graph + 跨域 ingestion pipeline |
| Gmail 拉取 → 排序 important / everything else → 自动起草回复 | 是(反馈信号) | Gmail API OAuth + draft-on-thread 适配(创始人确认无 IMAP 等价方案) | |
| Background agents | 事件触发(new email / cron 如每天早 8 点)+ 工具集 | 否(执行) | Claude Code / Codex 走 ACP 调用 + 工具白名单 |
| Built-in Browser | 隔离 profile → AI 与用户各自登录不同账号 | 否(只读) | Chromium fork + cookie jar 隔离 |
| Meeting Notes | mic + speaker 抓流 → 实时转写 → 摘要写回 Markdown | 是 | Deepgram API key(可选) |
| Code Mode | 并行启动 Claude Code / Codex,Rowboat 注入 work context | 否 | ACP 协议 + 多 session 并发调度 |
| Apps | 用户自定义 work surface,继承所有 tool/integration | 视实现而定 | 自描述 surface SDK |
我数了一下,7 个 surface 中有 4 个会写回知识图谱(Brain / Email / Meeting Notes / 部分 Apps),3 个不写回(Background agents / Browser / Code Mode)。这个 4:3 的分布其实暗示了 Rowboat 的设计取舍:知识图谱是「记忆沉淀层」,工作 surface 是「当下执行层」,两层之间靠 Backed Markdown 文件作为单向 / 双向桥 —— 这点跟 OpenKnowledge 的「LLM Wiki 当 query layer」叙事是镜像关系。
三、本地优先落地的 4 个具体工程决定
README 的 "Local-first by design" + "Bring your own model" + "How it's different" 三段里,最值得工程读者对照的不是口号,是 4 个具体决定:
1. 全部数据是纯 Markdown,无 proprietary format
# ~/.rowboat/knowledge 目录直接是 Obsidian 兼容 vault
ls ~/.rowboat/knowledge
# 任意编辑器直接打开,git 友好,迁移成本 ≈ 0
我之前用过的几个 AI 笔记类工具(比如某 Notion AI / 某飞书 AI 笔记)都把笔记锁在自己的 DB 里,Rowboat 这个决定等于把「vendor lock-in 风险」直接归零 —— 哪怕 Rowboat 团队明天解散,你的知识图谱还在磁盘上。
2. "Long-lived knowledge" vs "context on demand" 的显式选择
README 原话是:"Most AI tools reconstruct context on demand by searching transcripts or documents. Rowboat maintains long-lived knowledge instead: context accumulates over time, relationships are explicit and inspectable, notes are editable by you."
工程含义:Rowboat 把 retrieval 换成了 accumulation。区别是 —— retrieval 模式每次对话成本 = 索引大小 × retrieval 质量;accumulation 模式每次写入成本 = graph update 事务,但读取成本接近 0。15.5K stars 的项目敢走 accumulation 路线,说明用户对「知识沉淀时间越长越值钱」这个判断达成了共识。
3. 模型可换,数据不动
README 明确支持三类:
- 本地模型(Ollama / LM Studio)
- 托管模型(自带 API key)
- 任何 provider,随时切换
~/.rowboat/knowledge/ 的 Markdown 文件不绑定任何 embedding 模型或 LLM,这跟 LLM Wiki 类工具的 chunk-based retrieval 是不一样的 —— Rowboat 的知识图谱是显式 human-editable 的关系,而不是隐式 embedding similarity。
4. MCP 接入是 "any server",不只是 Exa/Twitter 这种打包好的
// ~/.rowboat/config/composio.json
{ "apiKey": "***" }
// 或任意 MCP server,通过 standard config 接入
我对照 OpenKnowledge 的 ok init 只配 Claude Code / Codex / Cursor 三个 harness,Rowboat 的 MCP 接入是「任意 server / 任意 provider」,自由度更高,但配置门槛也更高 —— 用户得自己懂 MCP 协议。
四、HN 长评论里 5 个我必须照搬的工程细节
把 52 条 HN 评论按 text 长度排序(Pitfall #29 配方,Algolia points 字段全部 None),top 5 实质性评论里创始人 Nevo(@segmenta)对工程细节的解释,比 README 还具体:
(1) 没有 app-enforced sandbox,但 Code Mode 走 ACP 委托给 Claude Code / Codex 各自的 native sandbox
@ramnique 提问后,@segmenta 回应:
"There's no app-enforced sandbox today. However, coding tasks get delegated to Claude Code or Codex using ACP.
- Codex runs under its native OS sandbox (Seatbelt on macOS, bubblewrap on Linux) — where it's sandboxed to the selected working directory with network off.
- Claude Code's sandbox is opt-in and we don't enable it yet, but we load your Claude config (~/.claude/settings.json), so if you've enabled sandboxing there it should work."
工程含义:Rowboat 本身不做 sandbox 决策,而是把 sandbox 责任外包给 agent harness 自己(Codex 的 Seatbelt / Claude Code 的 opt-in sandbox)。这跟 Pitfall #35 Claude Tag 的 brain/hands/session 三层架构对照,Rowboat 是「Brain 是 Rowboat 自己 / Hands 是 agent harness」的两层模型。
(2) Gmail-only,IMAP 不支持,因为 draft-on-thread 没有跨 provider 通用方案
@segmenta 对 Outlook / IMAP 用户的回应:
"It's Gmail-only today. We've thought about generic IMAP, but it seems to have some technical gaps for how our email surface works. For instance, there's no reliable cross-provider way to pre-create drafts on a thread. So we haven't prioritized it just yet. We do plan to add Outlook support soon."
工程含义:Rowboat 的 email surface 不是「拉邮件 + 解析」,而是「拉邮件 + 在原线程上预创建草稿 + AI 写完等你审」。这种 workflow 在 Gmail API 上是 well-defined,但 IMAP 没有等价机制 —— 这是「feature 受限于上游协议」的真实案例。
(3) 多人协作靠 peer-to-peer,不是共享 server
@dannyobrien 问「能不能 pair-prompt」,@segmenta 回应:
"Not yet, but we're actively working exactly toward this - group chats with the assistant, where people can see the session and take turns steering. We're exploring a peer-to-peer connection for it so there's no server in the middle, which keeps it consistent with the local-first setup."
工程含义:Rowboat 的「本地优先」原则被贯彻到协作层 —— 多人场景不做 SaaS 多租户,走 P2P。这条跟 Notion AI / 飞书 AI 笔记的「SaaS 多租户」路线是镜像相反的设计。
(4) 知识图谱 vs 检索:Rowboat 主动摘录,不让你读全文
@ActionHank 提了 AI 工具的「asymmetry of effort」(把会议、ticket、笔记都喂给 AI,最后你反而要读更多),@segmenta 回应:
"Our goal with Rowboat is to do the opposite, to distill down only the parts you care about. For instance, you are not expected to read meeting notes, the important parts from it are added to your knowledge graph. That way next time you want to know something like 'where are we on x', you can find exactly that without having to wade through irrelevant information to get there."
工程含义:Rowboat 把「会议纪要」当 extraction input,不让你读 output。这条设计选择其实是反 LLM-as-search-engine 的 —— 它赌的是「知识图谱查询比全文检索更准」。
(5) Skills 是可读的,用户能 fork + merge
@starcalleryisss 担心「我的现有 skills 跟 Rowboat 的 skills 会不会冲突」,@segmenta 回应:
"You can read all the built-in skills today in https://github.com/rowboatlabs/rowboat/tree/main/apps/x/... Each skill lives in its own subfolder with a skill.ts, and they're registered in the catalog at skills/index.ts. And we're releasing an update shortly that makes them all readable and editable directly in the app, so merging yours with Rowboat's the way you describe becomes straightforward."
工程含义:Skills 是 plain TS files,不是黑盒 prompt。这跟 OpenKnowledge 的 ok init 把 harness 配置当 opaque 操作是相反路径 —— Rowboat 的 skills system 是「开源 + 可读 + 可 merge」,OpenKnowledge 的 setup 是「一键配置 + 不可见」。
五、跟同类工具的 7 列横向对照(基于已发 worked example)
我把 Rowboat 跟之前 worked example 里的 LLM Wiki 类工具放在一起对照(7 列):
| 维度 | Rowboat | OpenKnowledge(样例二十三) | Claude Tag(样例十九) | Obsidian + Claude Code |
|---|---|---|---|---|
| 数据存储 | 本地 Markdown vault | LLM Wiki + Git backend | Anthropic 托管 | 本地 Markdown vault |
| 知识结构 | 显式 backlinked graph | vector search + 标题层级切分 | 不持久化 | 用户手写 backlinked |
| Agent 集成 | Claude Code / Codex via ACP | ok init 三个 harness |
Claude Tag 官方 | 任意 harness 通过插件 |
| 协作模式 | P2P(roadmap) | Git 多 agent 冲突 | Slack 频道多人 | 第三方 sync 插件 |
| License | Apache-2.0 | GPL-3.0(or-later) | 闭源 | 闭源(个人版免费) |
| 工作 surface 数量 | 7 个 + 自定义 Apps | 主要 query 工具 | Slack thread 模式 | 无限(用户自建) |
| 核心叙事 | Coworker 而非 chat | LLM Wiki 知识图谱 | Multiplayer agent | 个人知识管理 |
Apache-2.0 vs GPL-3.0 vs 闭源 这一列是博客园读者最关心的 —— Rowboat 的 Apache-2.0 比 OpenKnowledge 的 GPL-3.0(or-later)对企业内网私有化部署友好得多(Apache-2.0 不要求 derivative work 也开源),跟闭源 Obsidian 比则保留了 fork + 二次开发的权利。
六、目前还没完全搞清楚的几个点(局限与待验证项)
按 cnblogs skill 自查清单要求,这一段必须诚实列出我没搞懂 / 还没来得及实测的部分:
- Mac/Windows/Linux 三端 Electron 版的实际资源占用(待验证) —— README 没给具体内存 / CPU 数字,knowledge graph 索引到 10k+ 节点时性能曲线没公开,需要实测
- 15.5K stars 但 103 open issues 的优先级排序(待验证) ——
pushed_at=2026-07-07说明还在活跃维护,但 issue tracker 的处理 SLA 跟 release cadence 没明说 - Background agents 的 sandbox 行为(待验证) —— @ramnique 说 Code Mode 委托给 Codex / Claude Code 各自的 sandbox,「network off」在 Claude Code opt-in sandbox 模式下实际拦截率是多少(博客园读者关心的真实边界)
- Outlook 接入的真实时间表(不足) —— @segmenta 说「we do plan to add Outlook support soon」但没有 milestone,对于非 Gmail 邮箱用户(很多企业内是 Exchange / Outlook),这条路目前走不通
- 多人 P2P 协作的工程实现细节(还在调研) —— 「peer-to-peer connection, no server in the middle」是 P2P 协议选型(CRDT / Yjs / 自研)?多人 session 状态如何 sync?这些问题 README 没说
- 跟同类工具的真实迁移路径(坑点) —— 从 Obsidian 现有 vault 迁到 Rowboat,Skills 转换是否能保留?@starcalleryisss 的提问 @segmenta 承诺「可以手动 copy ~/.rowboat/knowledge」,但「自动迁移」路径没文档化
- Apache-2.0 在 SaaS 转售场景下的边界(待验证) —— Apache-2.0 允许商用 + 修改 + 分发,但如果有人基于 Rowboat 套个云服务卖钱,Apache-2.0 的 attribution + license notice 义务具体怎么履行(博客园读者很多在企业内做 SaaS,这条直接关系到采纳决策)
浙公网安备 33010602011771号