
Rowboat 技术解读开源 AI 桌面同事的本地优先记忆、知识图谱与 MCP 扩展实战指南【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboatRowboat 是一款开源的桌面端 AI 同事AI coworker它把邮箱、会议、Slack 与助手对话持续索引进一个活的知识图谱并借助内置的邮件客户端、笔记、浏览器、代码模式、会议记录与工作区等界面直接在这些知识上采取行动。本文以 docs/readme/README.fr.md 为骨架结合仓库源码与测试完整讲解 Rowboat 的安装配置、本地优先的记忆引擎、自带模型方案以及通过 MCP 扩展外部工具的方法帮助你在自己的机器上把它跑起来并理解其底层实现。核心设计理念从临时检索到持续记忆大多数 AI 工具是在每次请求时重建上下文——临时去搜索转录稿或文档。Rowboat 的做法截然不同它维护长期存在的知识而不是冷启动式检索。具体表现为上下文随时间累积每封邮件、每次会议、每段对话都在为记忆做加法关系显式且可检视实体人、组织、项目、主题之间的关联是显式记录的而不是藏在模型参数里笔记由你掌控记忆以普通 Markdown 文件形式存在你可以随时编辑而不是锁在模型内部一切都在本机没有专有格式没有托管服务的锁定。最终效果是复利式的记忆每次新信息都会沉淀进既有图谱而检索永远不是从零开始。这一点正是 Rowboat 区别于临时检索类工具的根基。内置工作台全景八个与 AI 协作的界面Rowboat 将知识图谱作为大脑围绕它提供了多块工作表面work surfaces。以下功能截图与功能说明来自仓库根目录的 README.md。大脑Obsidian 风格的活知识图谱Rowboat 把邮件、会议、Slack 与助手对话索引进一个带反向链接backlink的活知识图谱交互方式类似 Obsidian。图谱本身由knowledge子系统构建源码位于 apps/x/packages/core/src/knowledge入口编排器为build_graph.ts。邮件客户端内置邮件客户端将邮件分为重要与其他并基于全部工作上下文自动为重要邮件撰写回复草稿。邮件同步与知识抽取在源码层面对应sync_gmail.tsGmail 拉取与保存为 Markdown、classify_thread.ts收件箱分类以及knowledge/email/目录下的邮件处理逻辑。后台代理Background Agents你可以配置后台代理在事件如新邮件到达或日程如每天早上 8 点触发。它们能连接工具、联网搜索、使用内置浏览器并通过 Claude Code 或 Codex 编写代码。仓库中的 apps/x/packages/core/src/background-tasks 与 apps/x/packages/core/src/agent-schedule含repo.ts、runner.ts、state-repo.ts从源码层面支撑了这类事件/计划驱动的运行机制。内置浏览器Rowboat 自带一个与主浏览器隔离的浏览器你和助手可以在网页任务上协作因为隔离你只登录希望开放给助手的账号。底层实现对应application/browser-control/、application/browser-skills/等模块。会议笔记本地会议记录器接入麦克风与扬声器实时转写、在 Markdown 文件中总结会议并更新知识图谱。源码佐证可见knowledge/meeting-events.ts、knowledge/summarize_meeting.ts、knowledge/live-note/以及桌面端原生音频采集 apps/x/apps/main/native/mic-monitor.swift。代码模式代码模式允许你用 Claude Code 或 Codex 并行启动编码代理并让 Rowboat 在需要的地方用全部工作上下文驱动它们。仓库内 apps/x/packages/core/src/code-mode 承载相关实现配套设计文档见 CODE_MODE_ENGINES_PLAN.md。Apps 与集成你可以在 Rowboat 内创建自己的工作台 Apps它们拥有全部工具与集成能力并可分享给他人同时内置对主流产品的一键集成。安装与本地配置Rowboat 提供 Mac / Windows / Linux 桌面版本可通过官方下载渠道获取最新安装包也可在发行版页面查看全部 release 文件。安装完成后所有个性化配置都存放在本机用户目录的~/.rowboat/下其中 API Key 类配置文件统一放在~/.rowboat/config/中。连接 Google 服务Gmail、Calendar、Drive要连接 Google 服务需要先在 Google Cloud Console 生成 OAuth 凭据Client ID 与 Client Secret。完整分步说明见仓库根目录的 google-setup.md核心步骤如下创建项目打开 Google Cloud Console新建一个项目如命名为Rowboat Integration并在顶部项目下拉框中选中它启用所需 API依次启用 Gmail API、Google Calendar API 与 Google Drive API逐个点击Enable配置 OAuth 同意屏幕填写应用名称与支持邮箱受众选择External保持应用处于Testing模式即可无需发布应用添加测试用户Testing 模式下必须手动把你要连接的邮箱地址加入Test Users创建 OAuth Client ID选择Web application类型并在Authorized redirect URIs中准确添加http://localhost:8080/oauth/callback——注意端口必须是 8080 且无尾部斜杠Rowboat 的 OAuth 回调地址与之严格匹配复制凭据创建完成后复制Client ID与Client Secret粘贴到 Rowboat 弹出的配置框中。排障提示如果浏览器显示 Authorization Successful 但应用随即报错如 invalid response encountered 或 response parameter iss (issuer) missing请检查应用日志中的完整报错、核对 Console 中 Authorized redirect URIs 是否精确一致并确认应用类型确实是Web applicationDesktop、UWP 等其他类型可能不提供 Client Secret 或处理重定向方式不同。语音输入Deepgram语音输入与语音笔记为可选功能。在~/.rowboat/config/deepgram.json中添加 Deepgram API Key 即可启用。源码侧apps/x/packages/core/src/voice/voice.ts 通过readJsonConfig(deepgram.json)读取该配置当未配置时会提示创建~/.rowboat/config/deepgram.json并写入{ apiKey: your-key }。桌面端还提供了原生麦克风监听实现 apps/x/apps/main/native/mic-monitor.swift。语音输出ElevenLabs语音输出同样可选。在~/.rowboat/config/elevenlabs.json中添加 ElevenLabs API Key 即可启用读取逻辑同样位于voice.ts未配置时会明确报错并提示配置文件路径。网页搜索ExaExa 研究型搜索为可选功能。在~/.rowboat/config/exa-search.json中添加 Exa API Key 即可使用。源码中apps/x/packages/core/src/runtime/tools/domains/web.ts 会在 Web 工具执行时读取该文件路径。外部工具Composio 与 MCP外部工具为可选能力你可以添加任意 MCP 服务器或通过在~/.rowboat/config/composio.json中添加 API Key 来使用 Composio 工具。apps/x/packages/core/src/composio/client.ts 中定义了CONFIG_FILE path.join(WorkDir, config, composio.json)即对应上述路径。所有 API Key 文件的统一格式无论哪种外部服务配置文件格式完全一致{ apiKey: key }记忆引擎深入知识图谱如何构建与维护Rowboat 的记忆系统位于 apps/x/packages/core/src/knowledge其系统设计说明 README.md 详细记载了从同步、建图到策展的完整流水线。处理流程同步 → 建图 → 策展同步Syncsync_gmail.ts、sync_fireflies.ts等同步脚本从 Gmail、Fireflies 等源拉取数据保存为 Markdown 文件随后调用buildGraph(SYNC_DIR)触发建图建图buildGraph扫描源目录、过滤出新增或变更的文件交由note_creation代理逐个抽取实体人、组织、项目、主题在WorkDir/knowledge/中创建/更新笔记并把出现在多个文件中的同一实体信息合并。值得注意的实现细节是BATCH_SIZE 1——每次代理运行只处理一个源文件这是刻意为之用于防止跨文件实体污染策展Curatenote_creation只做追加笔记会随时间膨胀变质因此每天执行一次curateNotes()园丁代理见note_curation.ts把超过 60 天的旧活动折叠成月度摘要、将反复出现的模式提升为带日期的 Key facts / Assistant notes即反思步骤、把过时的开放事项移入 Dormant 列表、校正 frontmatter 与正文的漂移并在 frontmatter 打上curated_at时间戳。策展的准入条件是笔记活动条目 ≥ 8 条、自上次策展以来被修改过、且有 7 天冷却期每次运行最多处理 8 条笔记并作为 Knowledge curation 提交进版本历史。变更检测mtime hash 混合策略graph_state.ts使用混合的 mtime hash 策略判断文件是否变化先比较文件修改时间mtimemtime 未变 → 一定没变 → 跳过快速路径mtime 变了再计算内容哈希SHA-256复核哈希未变说明是 mtime 假阳性 → 跳过哈希变了才真正处理。这样既高效只哈希可能变化的文件又可靠确认真实内容变化。状态持久化在WorkDir/knowledge_graph_state.json结构形如{ processedFiles: { /path/to/file.md: { mtime: 2026-01-07T10:30:00.000Z, hash: a3f5e9d2c8b1..., lastProcessed: 2026-01-07T10:35:00.000Z } }, lastBuildTime: 2026-01-07T10:35:00.000Z }需要强制重建全部索引时可调用resetGraphState()或直接删除状态文件。如果想替换变更检测逻辑可以修改graph_state.ts保持接口不变、新建同接口的状态模块如graph_state_v2.ts或把策略抽象成ChangeDetectionStrategy对象注入buildGraph()。笔记创建的严格度分级笔记创建严格度由WorkDir/config/note_creation.json控制{ strictness: medium, configured: true }High会议建笔记邮件只做充实——邮件从不新建笔记仅更新已有联系人的笔记例外是熟人发来的暖介绍Medium两者都可建笔记但邮件需有个性化内容——过滤消费类服务、群发、通用推销任何人的暖介绍都可建笔记Low广泛捕获不错过任何潜在重要联系人——为任何可识别的人类发件人建笔记只跳过明显自动化邮件与新闻通讯。邮箱侧的过滤在更上游完成classify_thread.ts收件箱分类器会在邮件同步时把knowledge: extract | skip的判定盖进每封邮件的 frontmatterbuild_graph.ts只接收extract文件再叠加邮件回复门Email Reply Gate、直接互动、事务性、周度重要性等测试做多层过滤。首次运行时strictness_analyzer.ts会根据你的邮件量与模式自动推荐档位例如超过 100 个真实发件人 → 推荐 High少于 30 个 → 推荐 Low。自带模型BYOM本地或托管均可Rowboat 兼容你偏好的任何模型配置本地模型通过 Ollama 或 LM Studio 运行托管模型自带 API Key 或自选供应商随时换模型你的数据始终留在本地 Markdown 库vault中切换模型不迁移、不丢失数据。这意味着模型只是记忆的读写引擎知识本身始终归属并保存在你本机。通过 MCP 扩展 RowboatRowboat 通过Model Context ProtocolMCP连接外部工具与服务从而接入搜索、数据库、CRM、支持工具、自动化乃至你自己的内部工具。文档中给出的示例生态包括Exa网页搜索、Twitter/X、ElevenLabs语音、Slack、Linear/Jira、GitHub 等。MCP 客户端的真实实现在 apps/x/packages/core/src/mcp/mcp.ts值得关注的底层细节服务列表合并effectiveServers()把mcp.json中的条目与从 spaces 组织注册表spaces_orgs.json派生出的条目在读取时合并注册表是组织的唯一事实来源派生条目在名称冲突时优先避免陈旧文件条目遮蔽活跃注册表防止旧 token 静默地以错误成员身份生效三种传输方式配置含command时使用StdioClientTransport本地进程配置含url时优先尝试StreamableHTTPClientTransportStreamable HTTP失败则回退SSEClientTransport同时支持转发配置中的headers如Authorization因此可连接带鉴权的远程 MCP 服务器连接缓存与自动重连每个服务器按配置快照configKey缓存客户端配置一旦变化token 轮换、mcp.json 被编辑会主动关闭旧连接并重新建立工具调用入口listTools(serverName)与executeTool(serverName, toolName, input)分别对应 MCP 的tools/list与tools/call连接与工具调用受你的 MCP 工具权限策略约束。此外forceCloseAllMcpClients()可在强制中断时立即拒绝挂起的 MCP 工具调用客户端按需惰性重连。Local-first一切数据都归你Rowboat 的设计原则是本地优先所有数据以普通 Markdown 形式本地存储没有专有格式也没有托管服务的锁定你可以随时查看、编辑、备份或删除全部数据。这也与知识图谱的设计互为表里图谱状态、笔记、同步源文件都以 Markdown 或 JSON 形态落在WorkDir即~/.rowboat/下整套系统对用户完全透明、可审计、可迁移。小结Rowboat 的价值在于把有记忆的 AI真正落地到桌面以活知识图谱为大脑用邮件、会议笔记、浏览器、代码模式、后台代理和 Apps 作为行动界面同时以普通 Markdown 保证数据本地所有用 MCP 保持工具生态的开放性。想要深入了解实现可以从 apps/x/packages/core/src/knowledge/README.md记忆引擎设计、apps/x/packages/core/src/mcp/mcp.tsMCP 客户端以及 google-setup.mdGoogle 集成三处入手继续探索。【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考