SSP
EN 中文

技能状态协议

状态负责路由,上下文负责沉淀。

一个基于文件的最小化契约,用于技能编排。SSP 让进度可预测,让阶段间的交接 更清晰、更可复现。

双文件运行时契约

v0.1 草案
state.json 路由、阶段、产物与时间戳
context.json 事实、配置、结果与资料
读取状态 执行阶段 写入上下文 更新状态

简介

SSP 定义了一个小而稳定的接口,服务于多阶段工作流。状态可预测,上下文可持续, 每个阶段都能读取上游事实而无需猜测。

设计意图

将路由状态与共享事实分离,让阶段逻辑可独立演进,同时保持整条管线稳定。

为什么是 SSP

当交接是隐式的,流程就会断。SSP 把路由显式化,并把共享事实放在一个可持久的位置。

可携带交接

任何调度器拿到同一份状态根目录即可接管。

可追溯产物

每个阶段都记录产物,便于审计与复现。

低成本

两个文件、JSON Schema,无需服务端。

生态价值

统一状态契约让工作流数据可互操作。规模化之后,这能促成更可靠的编排模式 与更快的迭代效率。

快速开始

  1. 创建状态根目录 .skill-state/
  2. 添加 state.jsoncontext.json
  3. 更新 phase 以驱动路由。
  4. 将阶段产物写入 context.json
  5. 使用 JSON Schema 校验文件。

核心文件

state.json

路由状态与阶段产物。

  • phase
  • current_skill
  • outputs.stage.status
  • timestamps

context.json

跨阶段共享的事实、配置与结果。

  • project brief
  • service configs
  • validation results
  • artifacts

生命周期

01

读取状态

调度器读取 phase 与 outputs 决定下一阶段。

02

执行阶段

阶段读取 context,完成工作并写入新事实。

03

更新状态

记录状态、产物与时间戳,便于审计与复现。

传播性

SSP 将状态根目录视为可携带的工作单元。复制 state.jsoncontext.json(以及被引用的产物) 即可让另一套调度器接管继续运行。

可接力规则

  • 不要依赖隐式运行时状态。
  • 必须在 outputs.*.files 中列出必需产物。
  • 保持交接可复现、可审计。

SSP vs MCP / Spec-driven

SSP vs MCP

  • MCP 定义工具能力与调用方式。
  • SSP 定义运行时状态与交接语义。
  • 两者在真实工作流里是互补的。

SSP vs spec-driven

  • spec-driven 关注任务契约与 API。
  • SSP 关注流程连续性与阶段产物。
  • SSP 依赖 profile 定义具体阶段。

协议要点

必需字段

state.json 必须包含:

  • phase
  • created_at
  • last_updated
  • current_skill
  • outputs

状态取值

阶段状态必须在以下集合内:

  • pending
  • in_progress
  • completed
  • blocked
  • failed
state.json 模板
{
  "protocol_version": "0.1",
  "phase": "idle",
  "created_at": null,
  "last_updated": null,
  "current_skill": null,
  "env": {
    "registry": ".skill-state/env.json",
    "local": ".skill-state/env.local.json"
  },
  "outputs": {
    "plan": {"status": "pending", "files": []},
    "build": {"status": "pending", "files": []},
    "verify": {"status": "pending", "last_check": null}
  }
}

Schema

使用 JSON Schema 校验 SSP 文件,避免结构漂移。

State Schema

schemas/state.schema.json

Context Schema

schemas/context.schema.json

Profiles

Profile 描述阶段名称与期望的上下文字段。协议本身保持不变, 只有 Profile 在变化。

示例 Profile(非规范)

具体映射请参考仓库中的 profiles/three-stage

  • trend2work:项目摘要与规划输出
  • tech-dev:集成与配置落地
  • iterate-check:验证与报告

示例

示例文件位于 examples/。

state.json

examples/state.json

context.json

examples/context.json

FAQ

SSP 只是两个 JSON 文件吗?

文件是接口,但协议定义了必需字段、产物记录与交接语义。 简洁是设计目标。

SSP 会替代 MCP 吗?

不会。MCP 解决工具集成,SSP 解决状态与连续性,两者互补。

phase 可以随意吗?

协议允许任意字符串,profile 或调度器可限制与校验。

为什么不用数据库?

可以使用数据库。SSP 关注契约而非存储方式,文件更便携、 可版本化、易于 diff。

一致性

  • 状态根目录包含 state.json 与 context.json。
  • state.json 保持必需字段与输出状态。
  • context.json 不写入敏感信息,仅存共享事实。
  • 以 schemas/ 作为结构真值源。

安全

不要写入密钥

敏感信息请使用 env registry 或外部密钥管理。

控制 PII

如包含用户数据,请记录留存与脱敏规则。

v0.2 扩展(草案)

以下是建立在核心协议之上的可选增强。

  • Phase policy 与允许的跳转规则。
  • 交接的传播元数据。
  • 产物的 provenance 与执行信息。
  • 验证钩子与阶段门禁。
  • Profile 注册表与发现机制。

路线图

  • 参考验证器与工具链
  • Profile 注册表
  • 一致性测试