CASP 为你的每个项目持续保有一幅始终为真的画面 —— 在任意时刻,对照 git 校验。一周后、数月后回来,在任意技术栈上,跨越任意数量的代理、会话或同事:打开它,状态即为真 —— 否则 casp check 会一直拦截 push,直到它为真。
隔了一周再回到某个项目 —— 或者你同时周旋于五个项目之间。代理读到一份不再与现实相符的状态文件,信心十足地着手做一件早已交付的工作,而你要花一个下午去收拾。
看板、卡片和电子表格救不了你:重建上下文全靠手动,而且代理一个都读不了。状态必须可被机器读取、git 原生 —— 而且可证明为真。
CASP 让每个项目都拥有一条跨会话存续的主线 —— 而且无法悄然漂移。{
"phase": "13 — camera streaming",
"next_prompt": "phases/14-camera.md",
// shipped in v13.4
"last_commit": "a1f3c9",
// not in git history
"migrations": ["0001"…"0007"],
// git stops at 0006
}
CASP 是自我校验循环的确定性基座 —— 「检查你的工作」之中,唯一不是模型自我审查的那道检查:在循环内部校验无法触及的 push 边界上,把状态对照 git。相邻领域 —— Mem0、Letta、Zep,以及新出现的 git 原生「记忆」项目 —— 全都存储已经发生的事;几乎没有谁会去核验所存储的状态是否仍与 git 相符。这道核验,就是 casp check —— 而且在每一次 push 之前都是强制的。
你的 next_prompt 指向一个早已交付 —— 或根本不存在的文件。CASP 拒绝启动错误的会话。
last_commit 不在历史中、迁移列表失同步、状态未提交 —— 对照 git 本身核验,而非靠猜。
没有模糊的相似度评分。一道刚性、可复现的通过/失败闸门,只要状态在说谎,就拦下 push。
CASP 不替换你工作流中的任何东西。它填补的是别无他物覆盖的那一处空白 —— 一个项目经过校验的当下时态,以一种你的代理能读取并据以行动的形式呈现。
没有数据库。没有服务。没有向量库。三个朴素的文件,代理在任何会话的第一行就能读到。
可被机器读取,逐项目记录:当前阶段、下一阶段、要执行的确切 next-prompt、已交付的阶段、已应用的迁移、最后一次提交、上一会话 id。
一屏看尽的「我此刻在哪里」。打开它,五秒钟找回主线 —— 无需考古。
接下来要交付的 3 项,外加一块阶段记分板。代理始终清楚工作的先后顺序。
session-prompt、session-log 和 audit-brief 模板,使每一次会话 —— 无论由人还是代理执行 —— 都产出形态一致的产物。结构是被强制的,而非被建议的。把你的规格说明变成一列会话提示词队列 —— 每一条都是仓库里的一个文件,声明自己之前是什么。casp next 把队首交给你的代理,并拒绝交出一个已经交付的切片。
casp next 只打印提示词。它从不执行 —— 执行的是你的代理。CASP 是让这次交接值得信任的那一环,而不是编排器。
每次会话结束时,你的代理追加日志、递进状态,并写好队列中的下一条提示词 —— 你只需调整一行,无需从零撰写。而阶段总览仍留在 roadmap.md 里,让任何代理都清楚工作的次序。
下面每一个数字,都是直接从各项目的 state.json 读出的 —— 正是代理所读的那个文件,在最后一次 push 时对照 git 校验过。没有营销式的算术。
面向客户的车队管理 ERP,服务于科特迪瓦的一家运输公司 —— web + mobile,多模块、多角色:司机、车辆、合规、现金、车库、诉讼、会计。
每个模块都是一个经校验的阶段。代理读取座舱,从 next_prompt 运行下一阶段,并且从未重复交付一个已交付的模块 —— 即便在一天六次会话的日子里也是如此。
ZeroSuite 的内部运维与发布编排平台 —— 一份历时数月的路线图,由一支真实团队推进,配有发布模式门禁和一份受跟踪的发布后待办。
一条经校验的主线,贯穿40+ 个阶段、三个人 —— 外加58 项明确推迟到发布之后的事项,无一遗失。这正是 CASP 为之而生的「大型多用户项目」场景。
同一套协议,两款迥然不同的产品。座舱是它们唯一共享的东西。
记忆工具记住你是谁。CASP 跟踪你的项目处在何处 —— 并加以证明。不同的产物、不同的操作、所防范的也是不同的故障。
一个音节,没有同形异义词,在英语、法语和西班牙语中都一样。
state.next_prompt 自动启动下一会话。CASP 附带 Claude Code 斜杠命令,让状态就驻留在你早已工作的地方。
只读状态 —— 代理在写下任何一行之前,先读取当前主线。
直接从 state.next_prompt 自动启动下一会话。无需复制粘贴,无需猜测。
兼容 Claude Code · Cursor · Aider · Continue —— 任何能读取文件的工具。
一个代理做错一件事,代价是一个下午。一百个代理在一百个仓库里这么做,代价是一个季度。CASP 就是你嵌入自动化回路里的那道确定性护栏 —— 在每个项目里都是同一种形态。
casp check 与 lint 和测试占据同一个槽位。一个说谎的状态无法合并 —— 漂移在组织层面被拦下,而非交由任何人的自觉。
自主代理会成倍放大错误。CASP 交给它们每一个的,是同一条经校验的主线供其读取,以及在 push 前的同一道刚性闸门。要自动化,但不付重复劳动的税。
每一次状态转换都是一个 git 提交。一份完整、可比对、可回退的记录,刻画着每个项目如何推进 —— git log 就是你的合规轨迹。
纯本地、零遥测、无云端、无账户。没有什么要审查的,也没有什么可外泄的。这场安全评审只有一句话:它从不离开机器。
jobs: state-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } # casp checks against full git history - run: npx @justethales/casp check # ✗ fails the build the moment state drifts
一套协议,每一个仓库。同一种经校验的形态,贯穿整个组织。
一套协议靠可预测性赢得采用。这些原则不会让步。
CASP 核验你的仓库是什么,从不核验你本想做什么。每一次,都是对照 git 的事实。
规范的产物是被强制的,而非被建议的。每次会话都以同一种形态产出。
校验器不是可选项。一个说谎的状态永远到不了你的 remote。
确定性、git 原生、纯本地。零遥测。无云端、无账户、无账单。
安装、init,你的代理在它的第一行就读到真相。
$ npm i -g @justethales/casp $ casp init # scaffold the layer $ casp status # where am I right now $ casp check # prove the state is true