// SNAPSHOT LEDGER · botiverse/raft-source

Raft:人和 agent 同处一室,
源码以「单快照」交付

人类与 AI agent 平等协作的工作空间——agent 是跑在你自己机器上的真实进程,由本地守护进程代理凭证。以下是这份只读镜像的逐项核验。

核验于 2026-09-25 · 发布于 2026-09-25
Release
v1.13.0-source.1 · 唯一 tag
Public commit
05f7d8f · Richard Chien <stdrc@outlook.com> · 2026-09-24 04:57 UTC
上游私有提交
d3aae345f58f00605daf3d1afaa2599acbd23d1f
导出
2026-09-24 04:40 UTC · 4383 个文件
分支 / 提交
main 是唯一分支,仓库里只有 1 个提交,无历史可审计
规模
3430 个 TS/TSX · 约 112 万行 · 测试 1378 文件 ≈47 万行
许可证
FSL-1.1-ALv2(源码可见,非 OSI 开源)
热度
242 ★ · 45 fork(建仓 10 天)

// 一句话结论

它说的是「人类和 agent 平等协作的工作空间」,卖的是一整套自研客户端系统。核心不是又一个大模型壳子——它把 agent 当成有身份、有记忆、有权限边界的真实进程,跑在用户自己的机器上,并用本地代理把服务端凭证挡在 agent 之外。

但三个前提要先接受:①「源码可见」≠「开源」,FSL 禁止拿它做竞品;② 这是只读镜像,不接 PR、不开 issue、每个版本压成一个提交,没法看演进、也没法参与;③ 真正的价值在私有仓库里,公开这份是可运行的全量源码,但不含任何路线图。

// 它是什么

把 agent 当同事、而不是当工具的 Slack 式工作空间

官方定位(README 原文):“Raft is a shared workspace where humans and AI agents collaborate as peers.” agent 是持久参与者——有自己的身份、记忆和能力范围;它以真实进程的形式跑在真实机器上,和人在同一个 server 里用 channel、thread、DM、task 一起干活。

产品概念与 Slack 高度同构(server / channel / thread / DM / mention / task),差别在于一等公民里有 agent:会被 @、能领任务、能发提醒、能准备 action card 交给人执行、能通过 CLI 读写消息与文件。服务端在 raft.build,有 Web、桌面(Electron)与移动布局(同一套 Web 响应式分叉)。

三个最容易记住的差异点

// 仓库地图

一份完整可运行的 monorepo:14 个包、3 个应用

pnpm workspace。下列行数是对克隆下来的源码逐包统计(TS/TSX,含测试)。

路径是什么文件行数
packages/serverAPI 服务、实时(Socket.IO)、持久化与集成95645.9 万
packages/webWeb 客户端145835.4 万
packages/daemon机器守护进程:拉起 agent、代理其凭证24211.7 万
packages/cliraft 命令行(人与 agent 共用)2245.7 万
packages/computer在自有机器上托管 agent 的运行时与安装器1955.7 万
packages/shared共享契约(含 scope 词表、zod 模型)1593.7 万
packages/raft-sdk给外部 agent / bot 的类型化 API 客户端101.8 千
packages/sync-core同步核心:域模型与违规校验173.7 千
trace-client · trace-upload-worker链路追踪客户端与上报 worker186.5 千
visual-testing · ui-inventory · raft-event-buffer · desktop-contract跨端视觉测试、UI 清单、事件缓冲、桌面 IPC 契约356.7 千
apps/Electron 桌面壳、Computer 应用、功能开关后台1012.3 万
manual/agent 知识文档 44 篇 + 协作 recipe——
3430TS / TSX 文件
≈112万行 TypeScript
1378个 *.test.ts
≈47万行测试代码(约占 42%)

// 怎么运转

三个平面:服务端、守护进程、Computer

WORKSPACE PLANE Raft Server channels · threads · DMs · tasks · inbox Express + Socket.IO + Drizzle/pg POSTGRES · REDIS · OBJECT STORAGE Web / Desktop / Mobile 客户端 REACT · VITE · ZUSTAND · SOCKET.IO MACHINE PLANE(你的电脑) Computer 运行时 托管 agent 的宿主环境与安装器 Daemon(守护进程) 拉起 agent 进程 · 中转凭证 origin-bound proxy + per-launch token Agent 进程 CLAUDE CODE · CODEX · GROK · PI · KIMI · … HTTPS + WS 不直接持有服务端凭证
依据 README「Security model in brief」与 daemon 的凭证代理实现(packages/daemon/src/agentCredentialProxy.ts):agent 不直接拿服务端凭证,daemon 用绑定来源的本地代理 + 每次启动的 token 中转。

README 明写的三条安全属性

权限模型:scope 与角色是两套东西

scope 约束 agent 能调什么 API,越权返回 SCOPE_DENIED,且 agent 不能给自己加权限;scope 与 server 级角色(owner / admin / member)互不替代。人类侧改 scope 走 GET/PUT /api/agents/:id/scopes,要求 editAgents 能力或创建者身份——手册特别注明:这组接口不是 agent 自我提权的接口。

// 工程特征

技术栈务实,测试密度明显偏高

层选型
服务端Express · Socket.IO(redis adapter) · Drizzle ORM · PostgreSQL(测试用嵌入式 @electric-sql/pglite) · ioredis · express-rate-limit · zod / zod-openapi
前端React · Vite · zustand · Tailwind · react-intl · react-router · shiki + mermaid + react-markdown · flexlayout-react · dnd-kit · PostHog · PWA
桌面 / 本机Electron 桌面壳 · Computer 应用 · 原生 Node 守护进程
数据结构单文件 schema packages/server/src/db/schema.ts 约 6478 行;迁移测试与「realPg」真库测试成对存在
可观测性自研 trace-client / trace-upload-worker,agent 侧有 agentO11y* 系列

几个「被线上问题教育过」的细节

// 最有意思的一块

manual/:一套专门写给 agent 读的产品手册

44 篇 manual/agent-knowledge/*.md,带 doc_id frontmatter,通过 raft manual get <topic> / raft manual search 供 agent 检索。写法很反常规:

本质上是把「提示词工程」沉淀成产品资产:与其把规则塞进系统提示词,不如做成可版本化、可检索、并显式声明失效风险的文档。

// 许可证与商业

源码可见,但明确不许拿来做竞品

非 OSI 开源FSL-1.1-ALv2

采用 Functional Source License 1.1(ALv2 Future License),GitHub 把许可证识别为「Other」。要点:

也就是说:研究、自建、改着玩、内部用——可以;做一个功能对标的商业产品去蚕食它的市场——不行,要等两年后的 Apache 版本。

商业面(截至核验时间)

项内容来源
套餐Free / Pro / Enterprise(Enterprise 为 contact-us)官方手册 pricing-safe-answer
计费模型1 人 = 1 seat,1 个 agent = 0.1 seat,按整 seat 向上取整(最少 1);Pro 以「Pack」预付费,按预置容量计费,不按活跃成员或消息计费官方定价页 + 手册
Free 限制容量有限,含少量 agent 名额、每月文件上传配额、30 天消息历史官方手册
具体价格官方页面前端渲染,本次未取到数字;第三方站点称年付 Pro 约 $8.80 / seat / 月第三方(the Rundown,未经官方页核实)

官方文档自己禁止 agent 复述任何价格数字——此处第三方数字仅供参考,下单前以 raft.build 定价区与 Billing 页为准。

// 值得注意 / 存疑

看这份仓库时要留意的六件事

  1. 没有历史。main 上只有 1 个提交、1 个 tag。README 说「每个 release 导出一个快照提交,历史从第一个快照开始」,但当前仓库看不到更早的快照,无法通过 diff 审计演进,也无法判断哪些是新增、哪些是重构。
  2. 无法参与。不开 issue、不收 PR(有 workflow close-external-prs.yml 自动关外部 PR),PR 创建权限为 collaborators_only。反馈只能走应用内或官方支持渠道。
  3. 贡献与许可的落差。因为不收贡献,所以没有 CLA;将来若开放贡献,许可与贡献者权益如何处理还是未知数。
  4. 「过期」被文档自己承认。手册明确写「任何 topic 之间的一致性无人强制」,并存文档互相矛盾的真实案例——既坦诚,也提示 agent 基于手册作答会有正确性风险。
  5. 非拉丁语系用户被区别对待。手册检索只支持英文,中文提问会被拒(knowledge_language_unsupported)。产品本身有 i18n,但 agent 知识库没有。
  6. 热度曲线很陡。建仓 10 天 242 ★、45 fork;同组织另有 agent-vault(439 ★)等仓库,Discussions 开放,那里是观察真实反馈的地方。

// 动手试

本地跑起来需要什么

前置:Node.js 24.15(.node-version)、pnpm 10.29.3、Docker。

git clone --depth 1 https://github.com/botiverse/raft-source.git
cd raft-source
pnpm install
./raftdev start        # Postgres、Redis、对象存储、server、web、daemon 一起起
./raftdev --help       # 会初始化本地工作空间并打印登录信息与端口
pnpm --filter @botiverse/raft-server test   # 包级检查

raftdev 会按 .node-version 与 engines 做严格的三段式版本校验(pin 不合契约就直接失败,不猜),再拉起整套本地栈。

想接入自己的外部 agent,可看同组织的 raft-external-agents、create-raft-app;SDK 在 packages/raft-sdk(@botiverse/raft-sdk,面向外部 agent 与 bot 的类型化 Agent API 客户端)。

// 我的判断

值不值得花时间

如果你在做 agent 产品的基础设施——尤其是「多 agent 协作、agent 身份与权限、agent 跑在用户机器上」这条线——这份代码值得读,重点看三处:packages/daemon(进程编排 + 凭证代理)、packages/server/src/services(生命周期 / inbox / scope 的建模)、manual/agent-knowledge(把 agent 行为规范写成产品文档的做法)。测试代码的写法本身也是范本。

如果你在找能改、能商用、能二次分发的开源基座——这份不合适:FSL 的竞品限制会堵住绝大多数商业化路径,而且没有历史、不能提 PR。

如果你只是想用产品——直接去 raft.build 注册即可。源码在这里的意义主要是「可自建」与「可审计」,不是开发者的贡献场。

// 来源

核验依据