架构
Previously 只有一颗内核,但它有两种跑法:部署到 Vercel 时,它是一个 Next.js 应用,记忆存进你自己的私有 GitHub 仓库(推荐形态);在本机,它是 npm 客户端拉起的本地服务。两种跑法跑同一份代码、读写同一种记忆格式——区别只在文件系统的落点。
一颗内核,两个落点
Vercel(推荐)。 同一套代码部署到 Vercel,记忆读写改走 GitHub API,后端是你自己的私有仓库。没有数据库:状态全部活在文件里,只是文件换了个地方躺着。部署步骤见部署到 Vercel;云端形态独有的执行机制(耐久运行、断线续跑)单独写在云端的一回合。
本机(npm)。 内核以 npm 包的形式随客户端精确锁版分发,读写本地文件系统上的记忆目录——那是一个由纯 JS(isomorphic-git)维护的 git 账本,不需要 git 二进制。详见本地优先。
冻结在切片上的提示词
系统提示词是分层组装的,层的排序是一个缓存决策:
L0 身份宪法 → L1 用户卡片 → L2 静态规则
→ 切片头快照 → 时间线简报 → strand 菜单
这条分层前缀在一个切片的生命周期内逐字节稳定——供应商的前缀缓存因此可以跨回合复用它,便宜而且快。这也是架构里一个反直觉决定的由来:精确时间不在提示词里,因为注入时间会打破字节稳定。agent 需要"现在几点"时,它调用 currentTime 工具——像一个不看墙上挂钟、只看手表的人。
切片关闭、新切片开启时,快照随之更新:提示词的"冻结"以切片为单位。
写路径:只追加,可自愈
记忆只增不改。两个写入者对同一回合提交了不同版本时,内核按 turnId 做只追加的回合合并,而不是互相覆盖——历史因此永远可以审计,永远没有"后写的赢了"。
同事与进化
主 Agent 身边是三个有独立判断的同事(recall、webSearch、thinkDeep)和一个达尔文式的自进化回路。它们各自值得单独一篇:同事制与进化回路。架构上只需记住一点:它们遵守同一条纪律——证据锚定,进化的写入收敛在唯一写入者手里——而这些纪律在哪里被强制执行,是下一节的事。
安全模型
安全在工具边界强制执行,两种跑法同一套:
- 路径白名单 —— agent 工具只能写记忆相关的目录;路径先规范化再校验,绝对路径、盘符路径、目录穿越一律拒绝。代码目录根本不在白名单里。
- 服务端校验 —— 所有写入在服务端重新验证,不信任客户端传来的形状。
部署到 Vercel 时另有一道可选的防线:非浏览器调用方需要携带 ACCESS_SECRET。它属于云端形态,见云端的一回合。
一句话:一颗内核、一份冻结的提示词、一条只追加的写路径——架构的每个决定都在为"记忆可靠且便宜"服务。