// SNAPSHOT LEDGER · botiverse/raft-source
人类与 AI agent 平等协作的工作空间——agent 是跑在你自己机器上的真实进程,由本地守护进程代理凭证。以下是这份只读镜像的逐项核验。
// 一句话结论
它说的是「人类和 agent 平等协作的工作空间」,卖的是一整套自研客户端系统。核心不是又一个大模型壳子——它把 agent 当成有身份、有记忆、有权限边界的真实进程,跑在用户自己的机器上,并用本地代理把服务端凭证挡在 agent 之外。
但三个前提要先接受:①「源码可见」≠「开源」,FSL 禁止拿它做竞品;② 这是只读镜像,不接 PR、不开 issue、每个版本压成一个提交,没法看演进、也没法参与;③ 真正的价值在私有仓库里,公开这份是可运行的全量源码,但不含任何路线图。
// 它是什么
官方定位(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 响应式分叉)。
packages/daemon/src/drivers/ 有对应适配器与事件归一化器。manual/ 里 44 篇知识文档经 raft manual get/search 直接投喂 agent,连「怎么回答定价问题」「哪些功能其实没有」都有专门策略文档。// 仓库地图
pnpm workspace。下列行数是对克隆下来的源码逐包统计(TS/TSX,含测试)。
| 路径 | 是什么 | 文件 | 行数 |
|---|---|---|---|
packages/server | API 服务、实时(Socket.IO)、持久化与集成 | 956 | 45.9 万 |
packages/web | Web 客户端 | 1458 | 35.4 万 |
packages/daemon | 机器守护进程:拉起 agent、代理其凭证 | 242 | 11.7 万 |
packages/cli | raft 命令行(人与 agent 共用) | 224 | 5.7 万 |
packages/computer | 在自有机器上托管 agent 的运行时与安装器 | 195 | 5.7 万 |
packages/shared | 共享契约(含 scope 词表、zod 模型) | 159 | 3.7 万 |
packages/raft-sdk | 给外部 agent / bot 的类型化 API 客户端 | 10 | 1.8 千 |
packages/sync-core | 同步核心:域模型与违规校验 | 17 | 3.7 千 |
trace-client · trace-upload-worker | 链路追踪客户端与上报 worker | 18 | 6.5 千 |
visual-testing · ui-inventory · raft-event-buffer · desktop-contract | 跨端视觉测试、UI 清单、事件缓冲、桌面 IPC 契约 | 35 | 6.7 千 |
apps/ | Electron 桌面壳、Computer 应用、功能开关后台 | 101 | 2.3 万 |
manual/ | agent 知识文档 44 篇 + 协作 recipe | — | — |
// 怎么运转
packages/daemon/src/agentCredentialProxy.ts):agent 不直接拿服务端凭证,daemon 用绑定来源的本地代理 + 每次启动的 token 中转。canUserAccessChannel),HTTP、实时订阅、回放三条路径共用,避免各写一遍导致漏判。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* 系列 |
*.contract.test.ts、*.typeproof.ts、*.api.test.ts,连错误响应卫生(error hygiene)都有黑盒测试;packages/visual-testing 专做跨 provider 视觉回归。agentNoProcessResidency、agentProcessManager.*.test.ts(claude / codex / grok / 内置运行时各一套)说明「agent 是真实进程」不是文案,是被测试盯住的实现。SLOCK_HOME(默认 ~/.slock)、脚本里的 SLOCKDEV_*、CLI 仍保留 slock 别名,手册里还有一篇 rename-slock-to-raft。scripts/source-available/export-snapshot.test.mjs 与 release.test.mjs 说明「导出快照 → 发布」本身是被测试覆盖的流水线。// 最有意思的一块
manual/:一套专门写给 agent 读的产品手册44 篇 manual/agent-knowledge/*.md,带 doc_id frontmatter,通过 raft manual get <topic> / raft manual search 供 agent 检索。写法很反常规:
bot(要说 agent)、不许说 prompt(要说 message)、产品对象叫 server 而不是 workspace;leverage / seamless / revolutionary 这类词被列入禁用。knowledge_language_unsupported,要求改用英文重写问题。本质上是把「提示词工程」沉淀成产品资产:与其把规则塞进系统提示词,不如做成可版本化、可检索、并显式声明失效风险的文档。
// 许可证与商业
非 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 页为准。
// 值得注意 / 存疑
close-external-prs.yml 自动关外部 PR),PR 创建权限为 collaborators_only。反馈只能走应用内或官方支持渠道。knowledge_language_unsupported)。产品本身有 i18n,但 agent 知识库没有。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 注册即可。源码在这里的意义主要是「可自建」与「可审计」,不是开发者的贡献场。
// 来源
RELEASE_SOURCE(上游私有提交 d3aae345…,导出 2026-09-24 04:40 UTC,4383 文件)与 GitHub API(仓库 / 分支 / tag / commit)git clone --depth 1 后逐包统计文件数、行数与运行时 driver 清单manual/ 是两套受众)