关于 ce-proof
ce-proof 是用于操作 Proof 的技能;Proof 是面向人和 Agent 的协作文档编辑器。它可通过托管 API 或可用的类型化 MCP 工具发布本地 Markdown、读写文档并处理审阅活动。
主要功能
- 01将本地 Markdown 发布为共享链接
- 02读取和编辑 Proof 文档
- 03管理评论与建议
- 04将文档拉取到本地文件
- 05可用时使用类型化 MCP 工具
适用场景
- 01分享本地 Markdown 文档
- 02审阅并更新共享文档
- 03将 Proof 文档拉取到本地文件
MCP 相关
存在类型化的 Proof MCP 工具时,技能优先用其处理文档读写、状态、标题、删除和错误报告;否则使用 Proof HTTP API。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ everyinc/ compound-engineering-plugin --skill ce-proof安装后在 Claude Code 中输入/ce-proof确认已加载。
附带文件references/api.mdreferences/workflows.md
详细介绍
Proof——协作式 Markdown 编辑器
Proof 是一款供人类和 Agent 使用的协作文档编辑器。可通过托管的 Web API https://www.proofeditor.ai,从 Bash 使用 HTTP 访问。
结果: 用户获得一个可正常使用的 Proof 链接(含令牌),或者文档中包含用户要求的读取内容、评论、建议或编辑。
完成: 操作已在相应层级得到确认,用户也已收到结果和简短摘要。创建操作通过其返回的 tokenUrl 确认。修改操作通过 ok: true 确认;对于 202 或 partial: true 响应,请重新读取 v3/document 进行确认。拉取操作通过其写入的本地文件确认,读取操作则通过其返回的内容确认。
首次通过 HTTP 或 MCP 读取或修改 Proof 前,请先阅读 references/api.md。 其中定义了各个端点:share/markdown、v3 文档和编辑端点、presence、标题,以及 DELETE /api/documents/<slug>。其中还包含操作表、错误和重试类别,以及适用于 Claude Code 的 curl 权限提示。
在审阅共享文档、创建并分享文档,以及将文档拉取到本地文件之前,请阅读 references/workflows.md。 其中提供了这些流程的精确操作步骤。
如果运行环境中已提供类型化的 proof_* MCP 工具(proof_share_markdown、proof_v3_document、proof_v3_edit、proof_presence、proof_document_title、proof_document_delete、proof_report_bug),请优先使用。否则请使用 HTTP 操作步骤。在 MCP 模式下,服务端会注入 by、X-Agent-Id 和 presence 身份。对于已登录用户不拥有的文档,编辑和 presence 操作请将 Proof URL 中的 ?token= 值作为 shareToken 传入。
在 MCP 模式下,删除权限规则不变。未认领的文档仍需要其 ownerSecret,已认领的文档则需要其所有者的会话。作为 shareToken 传入的编辑者 accessToken 不能用于删除。
身份
每次写入都会同时带上这两个字段,且二者保持不变。机器 ID 为 ai:compound-engineering,每次操作都作为 by 发送,并作为 X-Agent-Id 请求头发送。显示名称为 Compound Engineering,在 POST /presence 中作为 name 发送;每个文档会话只设置一次,以便 Proof 将其绑定到该 Agent ID。调用方可以传入不同的 identity 键值对,让不同的子 Agent 成为文档所有者。切勿擅自改用类似 ai:compound 的变体。
凭据与边界
accessToken是用于日常读取、编辑、在线状态和事件操作的 Bearer 凭据。ownerSecret仅携带所有者权限——用于删除和其他所有者级操作,绝不能作为日常 Bearer 凭据。创建时同时获取两者,并将ownerSecret与accessToken分开保存,以 shell 变量或同等方式保存到会话中;文档尚未被认领时,删除操作需要它。两者都不得出现在由仓库跟踪的文件、提交或持久化日志中,且ownerSecret绝不能出现在面向用户的文案中。- 将带令牌的链接(
tokenUrl)交给用户,绝不要提供裸的/d/<slug>——该链接中的令牌也能让已登录用户认领无人所有的文档。 - 公开创建的文档在已登录的 Every 用户通过浏览器认领之前都无人所有。认领会永久撤销
ownerSecret,而accessToken仍然有效,因此之后删除文档需要所有者的 Every 会话——请联系所有者,或使用其会话令牌。以下两种响应表示密钥已被撤销:403,且code: "DOCUMENT_DELETE_FORBIDDEN"、reason: "CREDENTIAL_NOT_OWNER";或者提供创建时的ownerSecret后收到401。停止使用该密钥,不要重试。reason: "DOCUMENT_HAS_NO_OWNER"则表示相反情况:文档仍未被认领,因此只有原始ownerSecret能删除它,Every 会话无法删除。 - 除非用户明确同意,否则绝不要在 Proof 文档中放入密钥、凭据、API 密钥、私有令牌或敏感个人数据;也绝不要在不告知用户的情况下,将由仓库跟踪的项目文档替换为 Proof 链接。
- 清空 Markdown 内容不会清除评论标记。任何持有共享凭据的人仍可读取引文和评论,因此清空内容并不等于完成隐私清理。删除文档才可以——文档尚未被认领时使用
ownerSecret,被认领后则以所有者身份删除。 - 发布交接后不要自动删除文档。评审文档必须保留。只有在用户要求删除,或完成明确标记为临时的草稿文档时,才删除文档。
发布模式
主要用途是单向发布。完整读取现有的本地 Markdown 文件,将其内容作为新文档正文发布,然后将可分享的 URL 交给用户。本地文件仍是规范版本——发布不会将任何内容同步回磁盘。
有两种入口使用相同的操作流程。一种是用户直接提出请求并指出本地 Markdown 文件(“把这个分享给 proof”“给我这个文档的 proof 链接”);只有在文件不明确时才询问是哪一个,并且预期没有上游调用方。另一种是来自 ce-brainstorm、ce-ideate 或 ce-plan 的交接,其中会传入文件路径和标题。
只发布 Markdown。如果源文件是 HTML 格式的统一计划,则返回本地浏览器/打开路径,而不要上传。如果发布统一计划,且已知其就绪状态,应在标题中注明,例如 Plan: <title> (requirements-only) 或 Plan: <title> (implementation-ready)。
发布源文件的原始字节,绝不要使用手写内容或占位内容。references/workflows.md 提供了 jq --rawfile 用法,可正确转义换行符、引号和反引号。发布交接后,向用户展示 URL 并交还控制权。
编辑
GET /api/agent/<slug>/v3/document 和 POST /api/agent/<slug>/v3/edit 是 Agent 读取和写入内容的唯二端点。评论、回复、解决状态、建议和内容更改都是 v3 编辑请求正文中的 operations,因此,如果某个路径未在 references/api.md 中出现,那就是你臆造的。
编辑前,先将 v3/document 作为事实来源读取。然后选择能够表达更改的最精简操作:对于正文,使用限定范围的 replace、insert 或 delete;如果更改应显示为修订痕迹,则使用 suggest;仅当用户要求替换整个文档,或无法通过更精简的方式表达更改时,才使用 set_document。目标是 markdown 中可见的文本,而不是原始 Markdown 语法或块引用。
该读取结果中的 comments[] 和 suggestions[] 是审核状态。按 id 回复、解决、取消解决、接受或拒绝。v3 没有删除评论的操作。标记为 orphaned: true 的评论仍可读取和回复,但其旧引用已不再是有效锚点。
遇到以下表示应停止并检查的错误时,不要立即重试:
TARGET_AMBIGUOUS— 锚点匹配到多个位置,且没有任何更改。使用error.candidates中的occurrence/before/after消除歧义;切勿假设系统会静默采用第一个匹配项,也不要盲目重试评论。retryable: false— 修正请求。若为retryable: true且包含error.current,则根据current重新解析目标,然后重试一次。202/PENDING,或ok: false且partial: true— 写入可能已提交。继续执行后续操作或报告成功前,重新读取v3/document,并且只重试失败的操作(重复使用Idempotency-Key可安全重放)。- 重新读取并安全重试一次后仍失败 — 按照
references/api.md报告此错误,不要反复重试。
将文档拉取到本地文件会覆盖该文件。如果拉取文档只是其他操作的副作用,而不是用户要求的操作,请先确认路径。