AI 协作项目管理技能 · 设计蓝图

一套让 AI 接手项目时「读得少、接得上、赖不掉」的协作协议。不绑定平台、不绑定语言、不依赖任何服务。

协议正文 Markdown 门禁=Python 标准库脚本 无运行时依赖

核心命题

项目可以复杂沉重,接手成本不随之增长。

「接手成本」用字符量,不用文件数量——文件数恒定 ≠ 成本恒定。

解决什么问题

问题本包的解法
换人 / 换 AI / 隔几周回来,要从头讲一遍背景指针链:任务卡 → 交接记录 → 索引;接手只读卡与它指向的那一篇
上下文越用越贵,读进来的东西一路付费封顶装置:STATE 字数 · 索引热区行数 · 留痕尾部行数 · 单卡字符 · 接手包字符 · 蓝图长度
「我改好了」但没人能验证锚源原则:锚的值必须由被审计者之外产生(机器码 / 时钟 / commit 哈希);声明不算证据
门禁写了没人跑,跑了也没人看脚本即门禁:退出码 0/1/2/3,并由变异自检证明它真的会红
规范写着,执行者不知道,评审也没标准判据(可机检)与风格(靠人读)分家,每条条款登记执行者
大事没想清楚就动手,返工全废设计两件套:先一屏蓝图定方向,再补详述留理由;未批准不生成执行卡

由哪些部分组成(三层)

① 协议正文    references/                     答案都在这里;改协议改这里(权威源)
② 门禁与工具  scripts/  ci/                   可执行、看退出码;机械步骤不手改共享文件
③ 骨架与附录  templates/ adapters/ examples/  按需实例化 / 按栈落地 / 范例库骨架

四个可独立使用的子能力

只要其中一件也行;最小集与「单独使用时缺哪些门禁」见 MANIFEST.md

项目地图 MAP
项目在哪 / 代码在哪 / 按什么规则运转 —— 一个文件即可用
任务卡
一件事一张卡;单文件即可用,接上索引与门禁则升为工作区
设计卡
先定方案:一屏蓝图给人看方向,详述留理由;未批准不生成执行卡
代码书写规范
判据(可机检)+ 风格(靠人读)两本;脚本可单独拷进项目跑
1 / 9 · 总览

2 · 接手链路

接手一项工作到底读什么、读多少、凭什么不增长。

指针链(承重墙)

任务卡「上次交接」 ──▶ reports/ 一篇交接记录 ──▶ 索引 [接力] 行
  • 记录只写本任务需要的信息:不贴 diff、不复制代码。
  • 索引行是入口不是内容:它保证「这个编号的活在哪一篇记录里」永远可查。
  • 链条断了走恢复流程(补全 / 重连 / 标「数据待补」,禁止伪造)。

接手只做三件事

① 读任务卡        tasks/<卡>.md             定位工作,不漫读全项目
② 沿指针读一篇    reports/<卡上指向的那篇>   不够用才多读
③ 需要全局判断时  STATE.md / MAP.md          首次接手 / 跨模块 / 整体审视
读完即写回:把增量写进卡的「要点 / 已提炼」,保证每篇记录最多被读一次

成本口径:单位是字符

实测某真实项目
单张任务卡中位 5,445 字符 · 最大 22,002
指针记录(一篇)中位 3,505 字符
接手最小集(卡 + 记录)中位 ≈ 8,900 字符
「一份卡 + 一篇记录」说的是读哪些,不是读多少。一份 22,002 字符的卡,就是 5,445 字符那份的 4 倍。读进来的东西会留在上下文里,跟着整场对话一起付费。

封顶装置(都是上限,不是可扩容量)

封顶管什么
capacity.state_max_charsSTATE 快照字数
capacity.index_hot_rows索引热区行数
capacity.report_archive_thresholdreports 归档触发篇数
capacity.card_max_chars单张任务卡字数(卡是定位与指针,不是档案)
capacity.onboarding_max_chars接手包(卡 + 指针记录)字数
capacity.reviews_hot_lines留痕尾部行数
capacity.blueprint_max_lines · blueprint_max_para_chars设计蓝图长度与段落

不得以「更完整 / 更全面」为由调大——这是封顶装置的意义所在。量尺由 overview.py 的「接手包」一行给出。

2 / 9 · 接手链路

3 · 门禁与脚本

门禁是什么、什么时候跑、凭什么信它。

分界线:调用即执行 / 常驻自动触发

本包怎么做
随包提供、默认启用协议正文、模板、可执行脚本(校验 / 提交门禁 / 索引双写 / 归档 / 对账 / 度量 / 机器戳)
不实现、也不默认启用运行时守护进程、权限系统、定时或事件驱动地自动跑、把 AI 行为实时管住的持续监督
为什么不做守护进程:① 需要运行时权限与平台能力,一打包就绑死平台;② 它承诺的是「防呆」——而防呆一旦失效,使用者会以为「有它在就不会错」,比没有更危险。本包换的是事后可审计:不拦你,但你做了什么一定会留痕。

退出码即结论

0 = 全通过        放行
1 = 有[问题]      阻断(确定性不成立)
2 = 仅[待核]      不阻断(无法确定性判定,交人或模型)
3 = 脚本自身错误  阻断(脚本坏了和检查失败一样不能放行)

输出三态 [通过] / [问题] / [待核],另设 [建议](只提示、不计数)。

常量 [待核] 必须降级为 [建议]:设计上恒定成立的项若占用待核通道,会让「退出码 0」永不可达,门禁信号随之失效。

变异自检:先证明门禁会红

selftest_gates.py 注入故障,断言每个门禁在自己的故障下必须变红(13 个用例,秒级)。

一个永远返回 0 的脚本,和一条被删掉的检查,从输出上看不出区别。所以流水线第一步不是跑门禁,而是证明门禁是活的。

形态 = 运行面

形态提交流程跑什么
卡片模式不做(一行交接流水)不跑脚本
light 轻量工作区三项:记录 / 卡 / 索引closeout.pycheck_closeout.py · check_index.py
standard / coordination四项(+快照)上面全部 + reconcile.py · validate_workspace.py · audit_all.py
只写代码code_metrics.py

多跑不只会浪费,还会制造噪声(例如给只有 MAP 的项目报「缺快照」)。完整矩阵见 references/onboarding.md §4.0。

脚本一览

脚本作用
overview.py一屏全貌(含接手包成本、人检账龄)—— 视图,恒返回 0
validate_workspace.py结构、配置、人检标记与到期、设计区、容量口径
check_closeout.py提交门禁(6+1 块 / 移卡存在 / 索引已登记 / 快照)
check_index.py索引完整性(编号 / 类型 / 指针 / 冷热一致)
reconcile.py三方一致性(快照 ↔ 记录 ↔ 索引)+ 时间锚 + 容量
code_metrics.py代码度量门禁;--exemptions 导出回查清单
closeout.py机械步骤:建卡 / 记录骨架 / 索引双写 / 归档 / 设计归档 / 留痕滚动
audit_all.py全盘核查入口:编排 + 机器戳留痕 + 超期自查
setup.py首次配置向导(四问:git 备份 / 核查周期 / 工作流外脚本 / 首张卡)
stamp.py机器戳与 AI 标识(时间锚 / 身份锚)
new_local.py项目专属脚本脚手架
selftest_gates.py门禁变异自检

即插即用:原样复制即可,不改路径(全部来自参数)、不改阈值(取自实例 MAP → config)、仅依赖 Python 3 标准库

3 / 9 · 门禁与脚本

4 · 产物与留痕

有哪些产物、哪些名字不能改、留痕该怎么读。

工作区产物

{WORKSPACE_ROOT}/<项目名>/
├── SKILL.md / MANIFEST.md / config.yml     入口与配置(随包复制)
├── references/  scripts/                   协议正文与门禁副本(逐字复制,不改)
├── MAP.md      环境 / 规则 / 协议速记 / 路径注册表(低频写,永不记进展)
├── STATE.md    当前快照(人读区 3 行 + AI 区;字段级更新,禁整文件覆盖)
├── REVIEWS.md  元数据通道:复盘 / 版本 / 恢复登记(追加式)
├── tasks/      任务卡(每卡一文件)
├── reports/    交接记录(每次提交一篇)
├── INDEX.md    索引热区(最近若干行)
├── designs/    设计区(详述 + 蓝图;archives/ 放走完流程的)
├── examples/   范例库(按需;project/ 与 external/ 两分区)
├── archives/   INDEX_archived.md(冷区全量)+ done/(完成卡)
└── tools/      可选工具区(只放规范)

冻结区(改名即破坏功能

类别冻结值谁在消费
任务卡字段承接 · 进度锚点 · 上次交接 · 已提炼 · 代码根路径 · 涉及 · 设计偏离 · 派发摘录 · 验收状态指针校验 / 断链修复 / 提交门禁
交接 6+1 块名本次需求 · 本次涉及工程信息 · 改动点 · 验证结果 · 数据影响 · 下一步 · 任务卡更新提交门禁逐块校验
索引列编号 · 日期 · 类型 · 主题 · AI · 交接文件索引校验 / 指针悬空检测
类型标记[接力] [完成] [废弃] [里程碑]索引类型校验
编号格式分支码 XX0000(两位大写字母 + 4~5 位数字)编号校验 / 审计 ID 锚
设计区文件名详述 <主题>.md · 蓝图 <主题>.blueprint.md成对性校验 / 设计归档
目录名tasks/ reports/ archives/ archives/done/ designs/ designs/archives/ tools/ references/ scripts/ scripts/local/全部脚本 / MAP 路径注册表

留痕不是读物

留痕(审计与追责的原料)与读物(手册 / 快照 / 卡)是两类东西。把留痕当读物,成本随项目年龄线性增长。

留痕产物读取面封顶 / 处置
REVIEWS.md只读尾部若干行capacity.reviews_hot_lines,超限跑 closeout.py reviews-archive
reports/只读卡上指向的那一篇归档阈值,超限跑 closeout.py archive-reports
archives/INDEX_archived.md按编号定点查冷区不设上限(它不被整读)
designs/archives/按主题定点查活跃设计区由归档保持清空
写可以无限追加,读只读尾部。完整性由冷区保证,阅读成本由热区上限保证。

档案红线

  • reports/archives/ 下文件禁删禁移;唯一例外=归档流程,且移后必须同步索引行指向
  • REVIEWS.md 只追加;滚动归档只做「先写冷区、后截热区」,不删除任何内容
  • 数据诚实边界:恢复不出的内容标「数据待补」,禁止伪造
4 / 9 · 产物与留痕

5 · 设计域

要先定方案时怎么做,为什么是两份文件。

一份设计 = 两份文件

文件收什么谁看变化节奏
详述 designs/<主题>.md叙述:范围 / 非目标 / 不变式 / 迁移与回滚 / 验证证据 / 决策理由AI 执行时对照定点改,只动受影响的行
蓝图 designs/<主题>.blueprint.md结构:模块与依赖图 / 文件清单 / 数据流 / 改动点 / 里程碑人看(确认方向)整篇重写,一轮一版
判定一段话该放哪一份:能画出来的放蓝图,只能讲清楚的放详述。蓝图里出现长段落=放错了位置;详述里出现框图和清单=重复维护(迟早漂移)。

成本纪律(设计对话为什么贵,怎么省)

诊断:贵不在写长文,在每轮修订都重新输出全文——方向未定时的长文,方向一变全废。

① 先蓝图、后详述    方向没定之前不写详述(蓝图短、改得快、给人看得懂)
② 蓝图整篇重写      每轮固定输出物是蓝图(一屏);详述只吃增量,禁止整篇重发
③ 改动留一行为什么  改详述时补一行「> 修订:<理由>(<机器戳>)」

生命周期与批准门禁

草案 → 评审中 → 已批准 / 已拒绝 / 已废弃
  • 只有「已批准」的设计卡才能生成执行任务卡;执行卡回填 DESIGN-ID
  • 拆卡:一张设计卡可拆成多张执行卡;拆出的每个 TASK-ID 登记回设计卡的「拆分出的执行卡」字段——这个字段是归档门禁的判据,不是备注。

设计区与设计归档

designs/                  ← 活跃设计
    <主题>.md             ← 详述
    <主题>.blueprint.md   ← 蓝图
    archives/             ← 设计归档(详述与蓝图一起移)
归档触发条件机器判据
已拆分成全部任务状态=已批准 且「拆分出的执行卡」非「—」且每个 TASK-ID 都能在 tasks/ 或 archives/done/ 找到
设计作废状态 ∈ {已废弃, 已拒绝}
为什么归档留在设计区、不进工作记录归档区:工作记录归档区的语义是「这件事做完了」,是接手的证据链;设计卡走完流程后对后续接手没有价值——接手要的是「这张卡怎么干」,不是「当初为什么这么定」。但它对复盘有价值,所以只移区、不删除,按留痕定点查。
5 / 9 · 设计域

6 · 代码规范域

写代码的规矩有几本、谁在执行、范例从哪来。

两本,按判据形态分家

文件收什么形态
references/code-quality.md三档阈值 / 豁免机制 / 覆盖率 / 依赖方向 / 异常自愈 / 注释规范有阈值、可机检,违反即打回
references/code-style.md命名 / 版面 / 抽象复用 / 重构三回合 / 范例库 / 提交信息靠人读,评审时对照

级别([强制]/[推荐]/[参考])说的是「违反的后果」,不是「能不能机检」——两本都会出现 [强制]。

三档语义(唯一一套数值)

含义落点
推荐线理想目标,不强制静态分析平台与人工评审提示
预警区允许存在,但必须写明未拆分原因不阻断;理由由定期回查判真伪
拦截线只卡明显失控的代码流水线以非零退出码阻断

工具只配拦截线:配两套数值必然互相矛盾;用流水线阻断「未达推荐线」会把规范变成官僚成本。数值唯一权威=实例 MAP 规则段 → config/defaults.yml

每条条款都要有执行者

四类:脚本(本包机检)· 平台(CI / 静态分析 / 覆盖率)· 人检(判断类)· 未实现(规范债务)。

没有执行者的条款等于没有条款——gen_views.py 第 7 节核对:正文引用了却没登记执行者的键会报红。
已由脚本机检由平台 / 人执行
函数行数 · 嵌套 · 圈复杂度 · 文件长度 · 注释密度 · 豁免理由真伪 · 扫描覆盖 · 依赖方向覆盖率(CI 工具)· 豁免回查(人检)· 重复代码提取线(评审锚点)

约束对象的边界

  • 受约束的是项目业务代码(交付物本身);
  • 技能包自带的工作流 / 工具脚本不在门禁范围内——它们的正确性由变异自检保证,不由三档阈值保证;
  • 需要时仍可手工度量,那些读数是参考,不构成「违反本规范」。

范例库:两个分区,必须分开

分区放什么入库门槛用途
examples/project/本项目自己沉淀的范例必须过流水线 + 评审可当模板抄
examples/external/外部参考(别处看到的好代码)不要求在通过状态,但必须登记来源与许可恒为「参考·未验证」,只作参考

混放等于把未验证的东西标成项目标准。要当模板的唯一路径:改写进本项目 → 过流水线与评审 → 作为 project/ 条目重新入库。

落地与机检

  • 按栈落地:adapters/python|java|javascript.md(工具映射 + 阈值→参数 + 可复制配置样例);
  • 流水线接线:ci/(Python 一份、多语言一份;先跑变异自检证明门禁活着,再跑核查);
  • 机检脚本:scripts/code_metrics.py(可单独拷进项目使用,阈值有脚本内兜底且与 config 逐键对齐)。
非 Python 项目不自研度量:各栈用成熟工具(ESLint / Checkstyle / JaCoCo…),本包只给接线样板与统一退出码约定——自研跨语言度量必然靠行 / 缩进启发式,误报会掩盖真问题
6 / 9 · 代码规范域

7 · 强耦合与不变量

改这个技能之前必读的一页。下面这些耦合是有意的——解开会直接破坏功能。

判据:先说清什么是坏耦合、什么是好耦合

类型特征处置
坏耦合一处改动要靠人记住去同步另一处解耦(或改成机器可查)
好耦合 / 功能契约A 存在是因为 B 要读它;改 A 必须同步改 B,且机器读得到禁止解耦,必须登记
一句话:要靠人记住去同步=坏耦合;机器读得到、改一处必须改另一处=好耦合。

禁止解耦清单(解开会怎样)

契约谁在读它解开会怎样
任务卡字段名 / 交接块名提交门禁、指针校验、断链修复、恢复流程门禁逐块校验全失效;指针链断;恢复无从下手
实例 MAP 规则段的配置标签全部脚本的取值顺序脚本读不到阈值 → 回落出厂默认 → 每个项目被迫用同一套数值
记录指针链(卡 → 记录 → 索引行)接手流程、对账、恢复「接手只读两处」的承重墙倒塌,成本重新随项目规模增长
索引冷热双写与移行规则索引校验、归档、接手冷热计数对不上;[接力] 行被移出 → 接手断链
速查表 ↔ 细则任务简报、接手者高频规则不再就地可读,每次都要翻全文
冻结目录名 / 设计区文件名全部脚本、MAP 路径注册表脚本找不到文件;设计两件套成对性失效
scripts/scripts/local/ 边界升级流程项目专属脚本被升级覆盖(丢工作);或项目改动混进包内
可选能力开关(设计卡 / 稳定 ID / 角色矩阵)协作模式、校验脚本能力开关是按需启用,不是复杂度;删掉等于砍掉升级路径

改造门禁(六条,缺一不得动手)

① 目的    —— 说清要解决什么;说不出就停
② 交叉影响 —— grep 全包列出同步清单(字段名 / 块名 / 路径改名必做)
③ 体量    —— 只加现有机制覆盖不了的
④ 反例    —— 想清楚它会怎么被误用
⑤ 可执行  —— 能机检的给脚本,不能的标 #人检
⑥ 回滚    —— 说清怎么退回去
冲突即提醒(强制义务):拟议改动与门禁或功能契约冲突时,必须主动向用户显式提醒,写明冲突的是哪条原则、改了会伤哪个功能、负担加在哪;未经明确确认不得执行

核心不变量(不得删除 / 弱化 / 改语义)

1. 记录指针链:卡「上次交接」→ 记录「下一步」→ 索引 [接力] 行
2. 分层索引:热区只留最近若干行,冷区保有全量;行移入不删除
3. 每篇记录最多被读一次(读后写回卡)
4. 档案只进不出(唯一例外=归档流程,且移后同步索引指向)
5. 数据诚实边界:恢复不出的标「数据待补」,禁止伪造

审计锚源原则

锚的值必须由被审计者之外产生。自报的值(人名、自选编号)不构成锚。

产生者强度
时间锚时钟(写戳即产生)中;与 commit 时间互证可升强
ID 锚编号规则 + 索引全量中;靠全量可查
身份锚stamp.py --ai-id(平台 + 机器码)有 git 时为强,无 git 为弱(能写文件者也能写同形戳)
凭证锚版本控制的 commit 哈希——唯一能到强档的锚

这条原则管着三处设计:人检标记不写人名(写机器戳)、开关的承诺由痕迹核实(不靠声明)、身份标识由脚本产生(AI 不得自报)。

7 / 9 · 强耦合与不变量

8 · 边界与非目标

它不做什么、要什么前提、单独用时缺哪些门禁。写清楚边界不是谦虚——缺门禁要让人知道,不能让人以为还有。

使用前提

只有两条:本地文件系统 + 命令 / 文件执行能力(能落盘目录、读写任务卡与记录)。

平台无关:不依赖任何平台私有接口、技能系统或 API——技能系统有则装,无则按文档读取。

不适用

  • 无本地文件能力的场景:网页对话 / 移动端 / 纯对话 / API 裸调;
  • 单轮问答与代码片段生成(本包管的是跨会话接续)。

不做什么(设计上的非目标)

不做为什么
实时监督 AI文档协议做不到;监督是脚本层的职责。文档层换的是事后可审计:不拦你,但你做了什么一定留痕
运行时守护进程 / 权限系统需要平台能力,一打包就绑死平台;且它承诺「防呆」,一旦失效比没有更危险
判语义脚本只回答确定性判据;语义类一律输出 [待核] 交人或模型——误报掩盖真实问题是门禁的首要失效原因
替人裁决冲突、废弃、归档的争议由管理者裁定;脚本只给证据与状态
平台定时 / 可视化 / 报告实现强依赖平台,只登记规范(tools/),不随包实现

单独使用时的门禁缺口(诚实声明)

子能力单独使用时缺什么
只有 MAP无快照一致性校验(没有 STATE / 记录 / 索引可对账)
单文件任务卡全部门禁都不跑(无索引、无快照、无归档)——一个文件就是全部,靠人读卡
只拷 code_metrics.py读不到实例 MAP 的阈值,用脚本内兜底值(与 config/defaults.yml 逐键一致)
设计卡单独用无批准门禁强制(协作模式开关关闭时,设计卡可当方案笔记用)

三种形态的边界(升级即扩集,历史不回写)

形态有什么没有什么
卡片模式一个卡片文件索引 / 快照 / 记录 / 脚本 / 门禁
light 轻量工作区任务卡 + 交接记录 + 索引(含冷区)+ 设计区(按需)MAP / STATE / REVIEWS
standard / coordination上面全部 + MAP / STATE / REVIEWS
从严到宽,不从宽到严:先按能跑的最小形态起步,发现不够再升。反过来先建全套再降级,只会留下无人维护的空档案——空档案比没有档案更坏,它制造「已管理」的错觉

脚本的适用边界

  • 门禁脚本只读不写(overview / validate_workspace / check_closeout / check_index / reconcile / code_metrics),可多进程、多 AI 同时跑;
  • 写工作区的脚本(closeout.py 各子命令)不可并发:同一工作区同一时刻只允许一个写者;
  • 崩溃退出码为 3,与「有 [问题]」分开——别把脚本崩了读成项目有问题
8 / 9 · 边界与非目标

9 · 怎么用 / 反馈

第一次对话怎么开始,遇到问题往哪儿说。

从哪儿开始用

第一次对话     判定形态(卡片 / light / standard)        references/onboarding.md §1
写代码         速查卡 + 判据 + 跑一次度量                references/cheatsheet.md
接手一项工作   读卡 → 沿指针读一篇记录 → 需要时读 STATE   SKILL.md 接手只做三件事
提交           提交流程(三项或四项,看形态)→ 跑提交门禁  references/workflow.md §4
改这个技能     先过改造门禁六条                          references/change-control.md §A

四个子能力,单独用也行

只要其中一件也可以:地图一个文件即成立;单文件任务卡不跑任何脚本;设计卡两份文件即成立;代码规范可只拷两个脚本进项目。

各自的最小文件集单独使用时失效的门禁,见 MANIFEST.md 的「子能力与最小集」——缺口写在明处,不让人以为还有。

反馈

用这个技能遇到问题、或有改进建议,请发邮件到 2576124003@qq.com

  • 项目内部的问题先记进工作区 REVIEWS.md(元数据通道,追加式),提级时一并附上;
  • 属于包本身的缺陷(条款矛盾、脚本误报、门禁失效)请直接发信,并尽量附上:跑的哪个脚本、退出码、能复现的最小形态。

包结构一览

SKILL.md / MANIFEST.md / README.md / BLUEPRINT.md / LEGACY_ONBOARDING.md   入口层
references/   14 份协议正文(权威源)                                        答案层
scripts/      15 个脚本 + local/(项目自定义,升级不覆盖)                    执行层
blueprint/    设计蓝图分页 02~08(第 1 页即 BLUEPRINT.md)                    展示层
templates/    9 份骨架(MAP/STATE/INDEX/REVIEWS/任务卡/设计卡+蓝图/交接/单文件卡)
adapters/     按栈落地附录(python / java / javascript)
examples/     范例库骨架(project/ 与 external/ 两分区)
config/       defaults.yml(出厂默认值,不是运行时真值)
ci/           流水线接线样板(含多语言一份)
tools/        可选工具规范(只登记不实现)    archives/  归档说明
9 / 9 · 怎么用 / 反馈

设计蓝图 · 分页视图 · 内容与技能包同步(版本见包内 MANIFEST.md)