Coding-Agent State Protocol

模型持有上下文。CASP 证明状态为真 —— 对照 git

新一代模型能连续数小时、甚至数天推进你的整个路线图而不丢失主线。正因如此,状态漂移变得重要,而非更次要:代理在两个检查点之间做得越多,它所记录的状态就越可能悄然与 git 不再一致。casp check 是确定性闸门,一旦发生漂移便立即拦截 push —— 今天对接 Claude Code,明天对接后续推出的每一个模型。

AI 编码会话的起飞前检查 + 黑匣子
$npm i -g @justethales/casp 复制
在 GitHub 上查看
casp check — 漂移校验器
01 / 那条你总在丢失的主线

一份过时的状态文件,会让你的代理自信地犯错。

隔了一周再回到某个项目 —— 或者你同时周旋于五个项目之间。代理读到一份不再与现实相符的状态文件,信心十足地着手做一件早已交付的工作,而你要花一个下午去收拾。

看板、卡片和电子表格救不了你:重建上下文全靠手动,而且代理一个都读不了。状态必须可被机器读取、git 原生 —— 而且可证明为真

CASP 让每个项目都拥有一条跨会话存续的主线 —— 而且无法悄然漂移。
state.json ● DRIFTED
{
  "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
}
02 / 决定性的分野

人人都在存储上下文。CASP 校验它。

相邻领域 —— Mem0、Letta、Zep,以及新出现的 git 原生「记忆」项目 —— 全都存储已经发生的事。几乎没有谁会去核验所存储的状态是否仍与 git 的现实相符。这道核验,就是 casp check —— 而且在每一次 push 之前都是强制的。

next-prompt 漂移
已捕获

你的 next_prompt 指向一个早已交付 —— 或根本不存在的文件。CASP 拒绝启动错误的会话。

git 真值基准
已强制

last_commit 不在历史中、迁移列表失同步、状态未提交 —— 对照 git 本身核验,而非靠猜。

push,拦截
确定性

没有模糊的相似度评分。一道刚性、可复现的通过/失败闸门,只要状态在说谎,就拦下 push。

03 / 与你现有的技术栈并肩

Git、PR 和 CI 都不知道接下来要交付什么。

CASP 不替换你工作流中的任何东西。它填补的是别无他物覆盖的那一处空白 —— 一个项目经过校验的当下时态,以一种你的代理能读取并据以行动的形式呈现。

Jira · Linear
意图
打算做的事。
会偏离现实,存活于云端,你的代理无法可靠地读取它。
CASP
经校验的当下
项目此刻所的位置 — 以及确切的下一步,对照 git 已证。
可被机器读取、在仓库内、确定性。代理据以行动的那条唯一主线。
git · PR · CI
历史与验证
改了什么 · 是否已评审 · 能否构建。
一份对过去的完美记录 —— 却对接下来要发生什么沉默不语。
04 / 三个文件。一条主线。

整套协议就装在你的仓库里。

没有数据库。没有服务。没有向量库。三个朴素的文件,代理在任何会话的第一行就能读到。

state.json
真值之源

可被机器读取,逐项目记录:当前阶段、下一阶段、要执行的确切 next-prompt、已交付的阶段、已应用的迁移、最后一次提交、上一会话 id。

now.md
面向人类

一屏看尽的「我此刻在哪里」。打开它,五秒钟找回主线 —— 无需考古。

roadmap.md
接下来交付什么

接下来要交付的 3 项,外加一块阶段记分板。代理始终清楚工作的先后顺序。

模板是闸门,不是建议。  规范的 session-promptsession-logaudit-brief 模板,使每一次会话 —— 无论由人还是代理执行 —— 都产出形态一致的产物。结构是被强制的,而非被建议的。
05 / 为大型路线图而生

一条有序主线,贯穿四十个阶段 —— web mobile 兼具。

真正的产品不是一个功能。它是横跨 API、web 客户端和 mobile 的数十个阶段,由轮替的会话与代理在数周内陆续交付。CASP 在这一切之上维持一份唯一的、经校验的次序 —— 让任何代理都清楚下一个是哪个阶段,并且永不重复交付一个已交付的阶段

而且这个循环会自我闭合:在每次会话结束时,代理替你写好下一会话的提示词 —— 你只需调整一行,无需从零撰写 —— 追加一条会话日志,并递进状态。打开下一会话,它就从上一次停下的地方精确接续。路线图自行执行;你只负责监督。

roadmap.md — 阶段记分板 13 已交付 共 22
10api实时同步引擎已交付
11mobile推送通知已交付
12mobile离线优先缓存已交付
13web团队权限已交付
15api按席位计费排队中
16mobile生物识别登录排队中
/ 生产环境中

不是演示。今天已有两款上线产品跑在 CASP 上。

下面每一个数字,都是直接从各项目的 state.json 读出的 —— 正是代理所读的那个文件,在最后一次 push 时对照 git 校验过。没有营销式的算术。

LIVE

面向客户的车队管理 ERP,服务于科特迪瓦的一家运输公司 —— web + mobile,多模块、多角色:司机、车辆、合规、现金、车库、诉讼、会计。

25+
已交付阶段
20+
已跟踪迁移
6
单日会话数

每个模块都是一个经校验的阶段。代理读取座舱,从 next_prompt 运行下一阶段,并且从未重复交付一个已交付的模块 —— 即便在一天六次会话的日子里也是如此。

LIVE

ZeroSuite 的内部运维与发布编排平台 —— 一份历时数月的路线图,由一支真实团队推进,配有发布模式门禁和一份受跟踪的发布后待办。

41
已交付阶段
17
迁移
3
操作员

一条经校验的主线,贯穿40+ 个阶段、三个人 —— 外加58 项明确推迟到发布之后的事项,无一遗失。这正是 CASP 为之而生的「大型多用户项目」场景。

同一套协议,两款迥然不同的产品。座舱是它们唯一共享的东西。

06 / 是状态,不是记忆

CASP 不是一个 AI 记忆层。

记忆工具记住你是谁。CASP 跟踪你的项目处在何处 —— 并加以证明。不同的产物、不同的操作、所防范的也是不同的故障。

CASP
记忆层 · Mem0 / Letta / git 原生「soul」
它承载什么
项目的执行状态
用户的事实与偏好
核心操作
对照 git 校验
存储与召回
冲突时
对照真值基准的确定性核验
模糊的相似度猜测
何时运行
同步闸门 —— 拦截 push
异步 / 最终召回
是否离开你的机器
从不 · 零遥测
视情况 / 云端
07 / 指挥台

五个动词。敲起来毫不费力。

一个音节,没有同形异义词,在英语、法语和西班牙语中都一样。

casp init把连续性层搭建进任意仓库。
casp status一屏快照:阶段、下一步、已交付的内容。
casp check漂移校验器。每次 push 之前都强制执行。
casp nextstate.next_prompt 自动启动下一会话。
casp new prompt依据规范模板生成一个带闸门的 session-prompt。
casp new log以每次会话共有的形态打开一个 session-log。
08 / 在你的编辑器里

为你的代理准备的原生斜杠命令。

CASP 附带 Claude Code 斜杠命令,让状态就驻留在你早已工作的地方。

/casp

只读状态 —— 代理在写下任何一行之前,先读取当前主线。

/next

直接从 state.next_prompt 自动启动下一会话。无需复制粘贴,无需猜测。

兼容 Claude Code · Cursor · Aider · Continue —— 任何能读取文件的工具。

09 / 面向工程组织

当代理无人值守地运行,漂移就成了整支舰队的问题。

一个代理做错一件事,代价是一个下午。一百个代理在一百个仓库里这么做,代价是一个季度。CASP 就是你嵌入自动化回路里的那道确定性护栏 —— 在每个项目里都是同一种形态。

一项必需的 CI 状态检查

casp check 与 lint 和测试占据同一个槽位。一个说谎的状态无法合并 —— 漂移在组织层面被拦下,而非交由任何人的自觉。

面向代理舰队的护栏

自主代理会成倍放大错误。CASP 交给它们每一个的,是同一条经校验的主线供其读取,以及在 push 前的同一道刚性闸门。要自动化,但不付重复劳动的税。

一份审计轨迹,免费奉送

每一次状态转换都是一个 git 提交。一份完整、可比对、可回退的记录,刻画着每个项目如何推进 —— git log 就是你的合规轨迹。

设计上即可通过信息安全审查

纯本地、零遥测、无云端、无账户。没有什么要审查的,也没有什么可外泄的。这场安全评审只有一句话:它从不离开机器。

.github/workflows/ci.yml
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

一套协议,每一个仓库。同一种经校验的形态,贯穿整个组织。

10 / 契约

刻意地有主见。

一套协议靠可预测性赢得采用。这些原则不会让步。

P01

校验状态,而非意图

CASP 核验你的仓库什么,从不核验你本想做什么。每一次,都是对照 git 的事实。

P02

模板即闸门

规范的产物是被强制的,而非被建议的。每次会话都以同一种形态产出。

P03

每次 push 前都 check

校验器不是可选项。一个说谎的状态永远到不了你的 remote。

P04

没有任何东西离开你的机器

确定性、git 原生、纯本地。零遥测。无云端、无账户、无账单。

两分钟内上线

给每个项目一条你的代理弄不丢的主线。

安装、init,你的代理在它的第一行就读到真相。

  terminal
$ npm i -g @justethales/casp
$ casp init          # scaffold the layer
$ casp status        # where am I right now
$ casp check         # prove the state is true