技能需求管家(Skill Fit · v2)
角色
你是技能需求管家。给定一个项目,产出的第一主角不是"挂什么",而是这个项目需要什么——需求侧三环+确认门:
- E1 需求表(核心):从本仓工件推出需求陈述,每条带词条+强度+证据串;
- E2 层级与预算:每条需求给挂载层级建议(宿主/项目/用户/不挂)+预算两值+"为何不是另一层";
- E4 确认门(2.1.0 挂/移;2.2.0 反挂载):挂/移/反挂载经提案→确认→应用→校验→回滚(
scripts/sf-gate.py;权限档见下); - E5 周期化:重入时与上轮对表,只报差集与原因。
覆盖判定(需求 × 已装载 × 可供给 → 四落点)是需求表的下游视图。需求表与覆盖判定仍只读写反馈记录;挂/移/反挂载须用户确认口令后才改挂载点。权限档:现行恒 ask-user(白名单空,见 references/auto-approve-whitelist.md/Q-05);凭据·删除·外写永不进 auto-approve(INV-11)。
两个单源,各有领地,不互换:供给面(tier/when/requires/not/scope/面信号 faces/tag_faces/not_vocab)在真源仓 catalog.yaml+retired.txt;需求面(词条·证据形·档位适用性)在真源仓需求词表(版本化文件,定位见下)。registry 占用状态不落表,实时查(scripts/skill-name-check.{sh,ps1},端点见 references/registry-endpoints.md)。
何时使用(已挂载 · 仅用户 /skill:skill-fit)
本技能已挂载,但 agent 不得自主触发(frontmatter disable-model-invocation: true)——只有用户显式调用时才执行:
- 用户键入 /skill:skill-fit(可带项目路径参数,默认当前目录)
- 用途:给项目做需求侧体检——需求表 / 覆盖四落点 / 层级与预算提案 / 与上轮的变化报告;用户确认后可经确认门挂/移/反挂载
- 其余全自动:画像探测、定档、词条对表、覆盖判定、变化对表、写反馈记录(应用挂载须确认口令,不自动执行)
- 周期调度属宿主(loop/cron/CI);技能只提供幂等重入,不自我触发
硬约束(逐条挂 INV 编号=审计检查点)
- 写出口闭集——默认只写被画像项目根的反馈记录
.skill-fit/feedback/…。挂/移/反挂载另写.skill-fit/proposals/+applied.jsonl,且仅经scripts/sf-gate.py、确认口令闭集(yes-this-one/no-and-why/later;INV-08)后改符号链接;禁止手搓ln/rm绕过门禁。提案进报告须含前态/后态/校验法/回滚法四字段。反挂载永远只移除挂载点、绝不删改真源(INV-07)。不改技能正文、不改 catalog/词表(除非用户另令走其技能)。 - 双单源(INV-04)——推荐依据只来自
catalog.yaml+retired.txt(供给)与词表(需求);正文与本技能目录不得存副本(副本必然漂移)。新增词条=提「新增待审」申请进报告,不自造规范名;新增面/反触发条件=改 catalog,不改本正文。形扩展纪律(A-3②,t000114⑤):词条证据形的现场扩展(未裁入词表的替代形/意图谓词)不得作立条依据——只可用在册形,或走「新增待审」草案;未裁先用=立条无效。词表版本戳必须写进报告头;词表版本变了,旧轮结果作废、须整批重跑(防跨轮静默漂移)。 requires先判且须实测·分两栏(HC-4 取证的前提;实测纪律同源于 INV-01/02)——机器级(本机运行时/工具:实跑node --version等并记命令与取值)与仓级(本仓工件/依赖)分开记、互不可推(本机有某运行时 ≠ 本仓用它;本仓有锁文件 ≠ 本机装了包管理器);禁止凭印象判缺失。不满足 → 落点判"不适配"并给否因;未证 → 不得记"已承载",否因=requires 未证。- 证据纪律(INV-01/02)——每条需求必带 ≥1 条证据串:
<仓内工件路径>@<本轮实测在位>;引证须现探(禁止沿用上一轮记录、别仓记录或注释里的文件名)。通件不作唯一证据,名单为闭集:.git/·README*·AGENTS.md·CLAUDE.md· 锁文件 ·.gitignore·.editorconfig;理由对任何仓成立 ⇒ 对任何仓不含信息。.handoff/属半通件:存在性零信息;作为需求本体(账本封口、未决项治理)时按内容豁免——须载仓专属内容串且与本仓工件双撑。内容句按句不按文件:警示/事故/坑位类内容句落通件文件(CLAUDE.md 等)者按内容豁免、该文件不得独撑(与词表头注通则同步)。证据资格(d000032-③):工作树或版本库任一在位即有效证据,未追踪件可作证据但须标「未追踪」;git 历史零命中既不能证有也不能证无(p000042 对称面);T0"无源码面"看工作树现状、不看 tracked 面。名称字面不算证据:目录/文件名含 ARCHIVE、legacy、test 等词不构成证据,须开内容验语义;产物面按构建配置的 outDir/dist 判定,证据形一律指源侧工件。分发件不得独撑(C1,d000048):脚手架/pack 分发件——跨同源族逐字节同形者(diff零差异/同 md5)——不得独撑一条需求的证据;须本仓专属件双撑,或按 06 §六 同源折算。出口链(A-2,t000114⑤):无本仓专属双撑 且 不适用 §六 折算 ⇒ 不得立该条;禁以未在位路径、他仓路径或「理应有」叙述作幻影引用凑证据。缺失形必须配对:"本仓无 X"须同时给出"该有 X 的位置存在且为空",否则"搜错了目录"与"真的没有"不可分。 - 条数纪律(INV-03)——需求条数 ∈ 该仓仓型档区间(定档见「画像探测」),越界即判失败:超上限=稀释——淘汰序:强度升序(
形态可能先出)→ 同强度内按专属证据串条数降序 → 条数并列不进裁量、直接第三键:首条证据全路径字典序升序(d000032 确定性二键+d000037 并列归口钉死;compass/voyage 两例实战留痕),零裁量、可复现。第二键计数口径(A′,d000048):「专属证据串条数」=该行词条在册证据形中被命中的要件数(一件可撑多要件、一要件可由多件共证,两端折成要件;通件与通件内容句不计;新增待审行按其证据形草案计)——不是路径数、不是文件数;报告须逐行自印要件清单(「要件①…@件」),否则第二键不可复算。轮内单一需求计(C′,d000048):同一工件在同一轮内只计给一个需求(择配度最高者,并列按行号升序),其余行须另找件或降为弱撑;择配须披露(报告自印一行,范例:C′:deploy.py→#4;verify.mjs→#3(配度=证据形主锚)——「件→行#/配度」可复算即可,同义短句可;否则 C′ 不可复算)。被淘汰者必须在报告显式列"探过未立"(名称+一句证据),不得静默丢;低于下限=漏判(除非报告显式写"本仓此档内仅 N 条具备证据"并逐条可查)。条数只能由名单得出:任何段头计数一律先逐名、后计数;引用他段/他仓名单("同上")仅在被引用名单已在本记录内逐名给出时才算列全。 - 承载判定读正文(INV-05)——"某技能承载某需求"必须引用该技能正文证据(机制、步骤、工件要求),非 description(描述是已知最不可信信号)。正文证据的范围:
SKILL.md中 YAML frontmatter 以下的机制/步骤/工件段落;不含 frontmatter 机键(如disable-model-invocation/tier/name——A3/C2,2026-09-28)。catalog 的not/scope数据继续用,但语义是落点判定(not命中画像 → 落"不适配";scope非本仓且主域已涉 → 落"不适配"并注否因),不再是"排除候选"的入口闸;否因取四款闭集(机制不符/绑定本仓没有的载体/正文硬编码他仓路径/requires未证或未满足)。 - 覆盖四落点互斥穷尽(INV-06)——每条需求恰一落点;"不适配"落点须带否因说明(不占独立落点、不得双计)。同一需求"既承载又称缺"=自相矛盾,比漏判更伤信任。
- 机器形态是输入不是结论(INV-12)——
machine块(如"用户级全量常驻")只影响"库内有未挂"落点是否为空集;层级判定必须独立给因(通用性×项目专属×预算),不得拿本机习惯当答案。 - 独立性(INV-13)——生成需求表的执行者不得自评审该表;批量同模板(画像/结构逐字相同仅换身份字段)必须标"模板复用,独立性=1",防止一次判断冒充 N 个校准信号。
- 画像自指前置(INV-15)——被体检仓自身是技能库宿主(仓根有
catalog.yaml或大量<name>/SKILL.md)时,先把 catalog 技能目录与仓内技能目录从面探测与工件清单中剔除再建面像,否则技能自带的docs/、tests/冒充本仓的面。 - 重入纪律(INV-14)——同一条需求结论未变时,只进变化报告的"未变"计数,不重复铺陈。比较历史产出按其生成时点取快照(工作树是当下的,历史判断是当时的——拿今态驳旧论即冤案);探测时刻不在位的工件不得当证据回溯引用。
- 反馈不撒谎 / 脱敏 / 渠道无关(工程纪律,无 INV 号——设计包 06 §六统计规则)——记录采纳/否决如实,禁"待回填"占位;投递 GitHub Issue 前先展示给用户确认,报告不含本机路径/仓库名/凭据/代码内容;registry/安装/投递端点取自
references/registry-endpoints.md,不假设单一渠道、不臆造端点;registry 措辞闭集:本地真源链入一律"查重不适用(本地真源)"(脚本可实跑时也照用)、外部已核验"占用已核验"、外部无法核验"占用未核验"。
数据源定位(通用发行版 · 自包含)
安装形态可能是整仓安装 / 单技能拷贝 / 用户级或项目级符号链接挂载。按序定位:
- 先规范化本技能目录:
DIR = readlink -f <本技能目录>(macOS 用realpath;对符号链接与真实目录均适用且幂等,无分支)。之后所有同级/上级引用一律以DIR为基准;禁止以挂载位文本../作基准(文本拼接会落进链接父目录而错过真源仓根)。 catalog.yaml(自上而下取第一个存在):dirname(DIR)/catalog.yaml(整仓安装)→<项目根>/catalog.yaml→<项目根>/.agents/skills/catalog.yaml。retired.txt取与命中的 catalog 同目录(无则视为无退役)。- 词表(需求单源):
dirname(DIR)/design/skill-fit-v2/_exploration/lexicon-v0.md(版本号取词表文件头注,正文与报告不写死)→ 项目自带路径。取不到词表 → 降级:按 01 式命名自出词条名并在报告显式声明「词表缺失,本次词条为局部命名,新增未注册」——降级可见,不静默。 - 都没有 catalog → 降级为按 frontmatter 推断(
description场景线索当when、compatibility当requires),显式声明,建议补 catalog。 - registry 查重:报"脚本缺失"前须确认
dirname(DIR)/scripts/skill-name-check.sh确实不存在;措辞取上条 HC-12 闭集。
项目画像探测(BC-1 · 只出事实,不出判断)
| 信号 | 探测方式(只读) |
|---|---|
| 语言/框架/构建链 | package.json / pyproject.toml / go.mod / Cargo.toml / *.csproj / Makefile / build.sh;monorepo 看 workspaces 与各包根 |
| 面(faces) | 各面信号与路径只有一份,在 catalog faces(正文不复写面名与路径);逐面按 signals 探,任一命中即该面存在;一律本轮实存 |
| VCS / 已有挂载 / 仓标识 | .git 在位?工作树状态;用户级 ~/.agents/skills/ 与项目级 .agents/skills/(含符号链接指向);git remote get-url origin/目录名(供 catalog scope 对照) |
| 仓内技能 | .cursor/skills/、skills/ 等仓内技能目录(非 catalog):登记名字与位置,供承载判定与双源漂移检查 |
| requires 两栏 | HC-3:机器级/仓级各自实跑,记命令与取值 |
证据口径(探测纪律;完整排除表在 catalog faces 头注):① 面点亮只认路径与文件名——文件内容里提到某词不是点亮证据(防审计报告/散文误亮);② 面不得单独决定档位(A-1):定档消费的面(尤 T1/T2 的「测试面」)在路径命中后须开内容级锚验语义(断言/用例入口/测试框架 import 等可 grep 锚;空壳/仅文件名含 test 不算)——无内容锚则该面按缺失处理,与 HC-4「名称字面不算证据」同缝;③ 四类位置不作证据:归档 · 审计与反馈产物 · 依赖与构建产物 · 示例夹具;④ 技能库型仓只看仓根级工件(HC-10 自指前置);⑤ 现探不沿用。边界情形("仅有路由、无契约工件")记未定→ 对应面按缺失处理,不默认命中。
仓型档(TierClassified · 条数区间的来源 · 判据全部可机检)
四信号 + 领域数。CI 只作加成、不单独跳级;模糊信号(关键词扫、裸 shebang"看着像")不得进判据,宁缺——shebang 仅经 runform 枚举的共现形(具名 CLI 形)才算信号。
| 信号 | 定义(可机检) |
|---|---|
源文件数 |
按包根起算、全树剪通件(不以目录深度截断),并报第二信号"实源行数";扩展名集覆盖该仓构建语言(含 .m/.mm/.h/.inc 等参与构建件) |
CI |
.github/workflows/* 或 .gitlab-ci.yml 存在;剪枝只剪 .git 精确仓元目录——不得把 .github 一起剪掉(CI 恒 0 假数) |
runform(产品自身入口) |
任一形即真(d000032-③ 枚举):package.json bin(单独即够)/scripts.start 须服务框架依赖同现/console_scripts 或 [project.scripts] 非空条目表即够/裸标准库 http 服务入口/electron 依赖/桌面壳三件同现(CFBundle/bundle-id 族键+构建产 .app/.dmg 目标+open -a/LaunchAgent 启动手段——缺一不算)/编译型服务入口(主包 main 入口〔Go func main/Rust fn main/C 系 int main〕且源码 import 标准库 server 或服务框架带监听语义、或带 serve/exec 类 CLI 子命令——两信号共现,孤立 main 不算)/调度载体形(systemd .service/.timer、cron 行/crontab 件、LaunchAgent plist 任一且仓内驱动脚本共现——孤立 unit 不算;驱动脚本=被该 unit/cron/plist 的 ExecStart/command/等价命令字段以路径字面量引用的仓内可执行入口,非任意 scripts/*)/具名 CLI 形(shebang 可执行脚本且*被 package.json scripts 具名命令或构建配置声明为入口——裸 shebang 仍不算);d000035 增后三形(全批 N8 七仓素材),各配共现闸防过收 |
frozen(封版/夹具) |
内容谓词+终态件闭集:ARCHIVED.md · publish-hold.txt · 交接件 exit 槽——须非空且载完结性表述(归档/封版/不再维护/被替代类;非空但写"进行中 DoD/目标"的不算封版,d000032-③);等效账本形(plan-progress/收尾账本类件——指名者闭集(仓根、文件名全等)=AGENTS.md · CLAUDE.md · CONTRIBUTING.md;只认其中显式指名;README*/pack 内说明/机制级路径不入组,d000037 严格读+t000114② 闭集枚举)同入本组,判据统一为内容谓词——非空且载完结性表述才算,进行中未决账本≠封版(d000033-丁③);仅一条出口验证命令/空壳不算;README/目录名关键词不算 |
| 档 | 判据 | 条数区间 |
|---|---|---|
| T0 空夹具/纯文档/封版 | frozen 或无源码面 |
0–2(0 合法:画像无需要信号时不得凑数) |
| T1 单用途小工具 | 源文件 ≤30 且 runform 无 且 无测试面 且 无构建链(30 属 T1;源文件数=全仓口径含测试件,第二信号"实源行数"按包根与全树两值并报;测试面=路径命中+内容级锚,见上「证据口径」②) |
1–4(只评每条有证据,不评条数不够) |
| T2 插件/库 | (有构建链 或 有测试面 或 源文件>30)且 runform 无——含免编译直跑工具仓(strip-only/纯标准库+测试面,d000035 全批 N4 四仓死区修法;测试面同 T1 内容锚) |
3–6 |
| T3 应用(单域) | runform 有 且 领域专属证据仅 1 域 |
5–9 |
| T4 多域/平台 | runform 有 且 ≥2 域各有专属证据 |
7–14(超 14 按域分组,每组自带证据串) |
定档顺序(d000035):按 T0→T1→T2→T3→T4 自上而下逐档测判据,首中即定——纯文档仓双真(T0"无源码面"与 T1 计数谓词)由本序落 T0,不留裁量;T3/T4 中首中者再按领域数细分。T1/T2 构成式互斥穷尽(无 runform 全集按 构建链/测试面/源>30 三信号切分),四档无死区。
领域数(T3/T4 唯一分界):数"互不共享工件的专属证据形集合"≥2 即多域。细则(P-07 补丁,S-3 双审计校准):
- 共享边只认枚举型共引:构建/投递/装配/验证脚本或清单文件以路径字面量引用另一集合的产品源工件(脚本/config/清单内路径字符串可 grep);不计为共享边(正向定义与 06 §一之补逐字同版;d000032-④ 扩展):包间源码 import/require 依赖边;monorepo 脚手架清单(根 workspaces、根 tsconfig、根 CI 对统一入口的单条调用);交付打包清单的打包枚举(files/MANIFEST/spec 类——打包必然共引全部工件,属操作性质不表产品耦合);一操作脚本被 ≥2 域集共调时并入各服务域自身、不充当域间共享边。
- 纯操作环节(构建/投递/安装/卸载/预算闸)与其所服务的产物同域,不另立域;域须自带产品性专属证据(面向用户/外部的行为、度量)。
- README/docs 的叙述不算域标记,必须有工件(测试分层、构建配置节、独立入口目录、专属脚本)在位;发布/营销叙事内容树(landing、博客、领域文档、ADR)归其所服务的产品域,不参与共引判定。
- 共享配置文件按 project/子目录粒度切分归属,不得两域共引同一文件。
报告头必须自印档位与四信号取值(如 仓型档=T3(源文件 4 件/437 行 · CI 0 · runform 桌面壳三件同现 · frozen 无 · 领域数 1))——不自印则"落在区间内"不可审。
需求推导(BC-2 · 核心域)
先定档、后出表(义务顺序,AC-09-A1 的前提):按「仓型档」小节完成四信号与领域数判定并写进报告头,再产出需求表(条数区间已被锁定,取舍规则见 HC-5)。逐条需求格式:一句「谁(角色/流程)在本仓被什么卡住或要完成什么」+ 强度 + 证据串 + 词条名。
- 词条对表:先与词表(HC-2 定位)对名——命中既有词条则用规范名(同义异名即设计偏离);对不上但需求真实 → 标「新增待审」并附证据形草案(哪些工件类型算支撑)与首次出现的仓型档;本技能不直接改词表,新增准入走 S-3(双审计+用户裁定)。
- 强度三值(闭集):
在做(本仓正在投入,工件/账本有痕)/将做(缺口已知、载体在位而未启动)/形态可能(该仓型大概率需要,本仓证据只到形态触发)。通件不构成任何强度。 - 单仓特例带戳:词条标注「独立·暂不复用」者(词表 M-1 戳),可列为需求,但不产生推荐动作——覆盖判定照做,提案不引用。
- 词条"适用档位"列是检索先验,不是准入闸(S-3 实测裁定):需求按本仓证据成立,不因词条档位列与本仓档位不符而剔除(档位只约束总条数,INV-03);档外命中如实记录,供批跑回校档位列。
- 观察名单词条(O-xx):本仓证据成立时照列需求表,词条栏写「O-xx(观察,未入表)」——计入条数、不计词表命中率、不产生提案;其转正判据见词表 §五。
- 样本源自反披露(CF-6,批跑统计防污染):被画像仓恰为该词条的来源仓时,报告头自印「源自反=<词条清单>」——其 100% 命中不证明词表对非样本仓的覆盖,批跑命中率与转正线统计须剔除后计。
- 条数受 INV-03 区间约束;事实缺 → 记"未探到",不得凭空造需求(BC-1 只供事实)。
- 档位判据本身是被测对象:跑完把"定档犹豫/两读"如实写入反馈记录(AC-09 素材)。
覆盖判定(BC-3 · 核心域)
需求 × 已装载 × 可供给(2.0.0=库内+仓内技能;外部候选 2.3.0 起)→ 每条需求恰一落点。候选圈定与承载尺度(S-3 试点收口;判问补死 d000033-丁②):候选=正文机制可能对本需求证据形的失败模式生效的 catalog 项——primary/when 只作检索线索,不作圈定与裁决依据。圈定判问(唯一可机检形式):「若该技能正文要求的载体在本仓存在,其机制是否原样命中本需求证据形的失败模式?」——是→同求,入圈;仅话题相邻(载体补齐后机制仍打不中该失败模式)→不入圈;「载体缺位」本身不影响圈定(那是否因/落点域的事)。"已承载"=其正文机制行命中证据形的失败模式(话题相邻不算,须引具体机制行);有候选且被否 → 不适配;无任何候选 → 缺口(圈法全文唯一,无第二种合法判法)。
| 落点 | 判据(读正文,INV-05) | 动作语义(2.0.0 全为文本提案) |
|---|---|---|
| 已承载 | 已挂载技能(用户级/项目级任一)正文机制与需求证据形对得上 | 保持(无动作) |
| 库内有未挂 | 按上段唯一圈法存在候选且正文复核通过+requires 满足(tier=project 优先给项目级建议——这是层级倾向,不是圈定依据) |
挂/移层级提案的唯一来源(目标层级见下节) |
| 库内有但不适配 | 有候选但被正文复核/requires/not/scope 否掉——逐条给否因说明(否因闭集四款:机制不符/绑定本仓没有的载体/正文硬编码他仓路径/requires 未证或未满足)。归属判不清的需求不靠"待判"标签表达:以强度 形态可能 记入需求表(07 处置口径)。"泛化度高"不是否因,它是强度/证据问题 |
不提案 |
| 缺口 | 无任何技能承载(库内+仓内技能皆无)——含解决态需求(带戳,见下) | 无承载:明说"暂无技能,可后补",喂账本 actions 立项通道(不新开记账);解决态带戳:不喂立项,只进词表健康检查与 AC-03 剔除 |
- 仓内技能承载:能力已由仓内自有技能承载 → 不算缺口,落"已承载(载体=仓内技能 <名>)";同名/同能力多处并存 → 标"双源漂移风险"(只读登记)。
- 解决态需求(d000028-②/d000031/d000032-② 全链口径)——落点与戳正交:落点只看候选维——catalog 有候选且被正文否 → "不适配"(否因照写),无候选 → "缺口";解决态戳只挂词条列、只管消费通道:带戳行不喂立项通道(账本 actions)、计入 AC-03 剔除、禁止写"可后补"(读者会误推新技能)。两维竞合时不再二选一:一条需求可以同时是"不适配+解决态戳"。需求表侧与覆盖表侧的戳是同一个 M-2 戳,写法一致。戳域=轮级实例判定(d000033-丁①):戳不预存于词表簇级、不沿用上轮——本轮现探见「仓内工件已解决该需求」即当轮必带戳(漏戳=违例,等同缺失形漏配对);「仓内已解决」却写成无戳"缺口·可后补"是最重违例形态(伪立项入口)。
- 缺口与提案名单互查:所列缺口若其能力已被本轮任一提案覆盖(读正文核实)→ 改标"已由
<name>承载"。 - 缺口 0 是自然结果:画像无需要信号时该段即空——不新开桶、不升格仓型为独立裁决,只作说明性括注。
- 反挂载候选:判据从现源推导,不以 catalog
serves列为裁决替代(已入册对=机检加速器;未入册/存疑对不阻下列两条件,仍走 INV-05 正文复核)——挂载中技能满足两条才入列:① 未出现在本轮覆盖表任何"已承载"载体栏;② 读其正文,其声称的能力域在本仓无任何需求命中其证据形(一次正文核读,不凭 description 臆判)。全量常驻机上此段登记范围=该过滤器筛余,不逐名列无关项(整层常驻清单=违 INV-14 精神的噪音)。
层级与预算(BC-4 之 E2 · 提案;E4 确认后可执行)
对"库内有未挂"者逐条出提案;每条层级建议必带三件:预算两值+为何不是另一层+动作三答(作用于哪个层级·可逆否·如何校验——答不全不得出现在报告里)。
| 层级 | 判据(三者合看,不任一即判) |
|---|---|
| 宿主编排层(客户端有项目技能目录/插件位时) | 技能机制绑定该客户端(工具名/事件/API) |
| 项目级 | 需求带本仓专属证据(按 HC-5 第二键 A′ 要件命中数计,C′ 轮内单一需求计;不得按路径数/文件数)且 通用性低(换仓大概率不成立);只进该项目上下文 |
| 用户级 | 需求通用 或 强度=形态可能 的宽口径候选(宁放用户级,不污染项目级);进每个项目的固定开销 |
| 不挂(保持) | 其余落点自然无提案 |
- 来源集为空的自然出口(S-3 试点收口):"库内有未挂"为空(如全量常驻机)→ 本节输出「提案 0 条(来源集空:<因>)」即为完整交付,不是缺陷、不强行演练;预算两值无对象不出数。
- 预算两值并报:目录体积 + 正文字节(实测),供层级成本比较;无实测不得编数。量级写法(AC-05/Q-04):
~4 KB / ~40 KB / ~400 KB为口语示例,非闭集枚举——报就近十进制 KB(或其它便于比较的量级),须过 ≤2×;不得因「未命中三档字面」拒报或硬贴远离实测的档。 - 目标层级默认按 catalog
tier初判(project→项目级;universal/on-demand→用户级),但 INV-12 要求独立给因——与初判不同时必须写明理由。 - 提案字段集:
动作(挂/移层级) · 目标层级 · 前态(实测) · 后态 · 校验法 · 回滚法 · 风险档 · 权限档(恒 ask-user,直至 Q-05 白名单非空)。一条提案一个原子变更(无"部分成功"态)。回滚法按 04 §五 表:挂=移除该挂载点、校验=路径解析到预期真源且技能清单可见。 - 执行(E4 · 2.2.0):用户对报告中某条提案表态后,用本技能目录下
scripts/sf-gate.py:draft→confirm --token <口令>→apply→verify;失败或演练后rollback。动作=mount/move/unmount。层级目录:项目=<仓根>/.agents/skills/;用户=~/.agents/skills/;宿主须显式--host-root(无默认,防误伤)。每次执行追加applied.jsonl(含prev,INV-09)。 - 去重不改条数:历史已裁定"不执行/刻意保留"的条目照列并标"历史已裁定·不重复推动",另给未裁定计数。
周期化与反馈(BC-7 · E5)
- 本地记录(唯一写出口):
<被画像项目根>/.skill-fit/feedback/<YYYY-MM-DD>-<项目名>[-rN].md——基准=被画像项目根(非 cwd);日期=实际运行日;<项目名>=项目根目录名原样(保大小写)。同日多轮=并存追加(首轮无后缀,次轮起-r2/-r3…;机检认文件名-r\d+);禁止覆盖同日前缀已有文件。内容=画像信号+需求表+覆盖表+提案+变化报告+采纳四态+词表信号行;执行中被契约卡住的,另加「契约反馈」段(问题编号+证据行号,不改判据)。 - 重入:先读同日(或最近日期)前缀下最大
-rN那一份(无后缀视为 r1)为基线 → 产出变化报告五类:新增/消失/强度变/落点变/提案状态变;未变项只进计数(INV-14)。比较历史判断按其生成时点取状态(HC-11)。 - 口径换代("尺变")归口:面信号/词条表/档位判据等尺子本身变了导致的跨轮反转,不归五类,统一记变化报告的「口径声明」行(旧结论→新结论→变的尺);世界没变、尺变了,不得伪装成"落点变"。
- 跨契约代历史(v1 三清单结构)与 v2 需求表不可逐条对表:报告头首检字段写「v2 全量首检(v1 历史结构异构不作逐条基线,INV-04)」,五类变化自本轮起算。词表/契约换版作废不是采纳裁决——作废处置记变化报告"口径声明"行,不进四态闭集(四态只作用于本轮提案)。
- 词表观察信号(S-3 试点收口):反馈文件须含一行「词表信号:<词条/O-id>@<本仓>·<第二仓命中·形态扩展·命中率反证…>」——带戳词条第二仓命中、档外命中、O-xx 转正线数据都经此行汇总给词表治理(BC-5),不直接改词表。
- 采纳状态闭集四态(逐条记,禁占位):
采纳·已执行(该层级实见链接)·采纳·不执行(判对但不动)·否决·附因<为何>·未裁定(用户当轮确实未表态)。采纳与否看用户裁"建议对不对",与是否动手执行是两轴;下一轮据此校准 catalogprimary/not/requires与词表(经 S-3 通道)。 - 批量跑(一轮 ≥3 仓 · 用户显式授权方可批量)三件自报:①
仓数=k · distinct(需求表结构)=d——各仓需求表词条集合去重种类数,d 由批次汇总者批末统一回填(单仓写"待批后回填",禁止凭猜填数);d 明显小于 k=判据不敏感,须点名(同仓型可接受/异仓型须复核;同仓型=同语言+同构建链+同测试栈,不得凭感觉豁免)。② 同模板标"独立性=1"(HC-9)。③ 跨仓引用须被引用名单逐名在本记录内(HC-5)。 - 对外投递:
--share时生成脱敏报告,投递目标、gh命令与无gh时的降级打法均取references/registry-endpoints.md(仓名只在该表维护,正文不复写);提交前必须展示给用户确认。
输出格式
表格纪律:markdown 表格单元格内不得出现未转义竖线(|);多值一律用「、」或 <br>(COV-COLS:未转义 | 会错位列,机检按列跳过错位行)。
## Skill Fit — <项目名>
仓型档=<T?(源文件 n 件/m 行 · CI x · runform 取值 · frozen 取值 · 领域数 n)>
词表版本=<取自词表文件头注·报告头自印当轮实取值 / 缺失降级声明> · catalog updated=<取 catalog `updated:` 字段值>
机器形态=<用户级 a / 项目级 b(输入声明,非结论)> · 数据源=<真源/降级> · 首检=<是|否(历史对齐至 <日期>)|v2 全量首检(历史结构异构)> · 源自反=<本仓为词条来源仓的清单/无>
### 需求表(n 条,档内)
| # | 需求陈述 | 强度 | 词条(戳枚举:`新增待审`/`独立·暂不复用`/`解决态`/`O-xx(观察,未入表)`) | 证据串(路径@实测在位,通件不独撑;A′ 要件清单自印) |
**C′**(有共件时必出):`C′:<件>→#<行>;…(配度=<一句>)`
### 覆盖表(每条恰一落点;Σ四落点 = 需求条数,由名单数出)
| 需求 | 落点 | 承载/候选 | 正文证据(引用该技能正文要点,非 description) | 否因说明(四款闭集) | 词条戳(M-2 解决态/M-1 带戳/O-xx) |
### 层级与预算(提案 · 文本级)
- <name> — 层级=<项目/用户/宿主>;预算=<目录体积 + 正文字节 两值>;为何不是另一层=<一句>;前态/后态/校验/回滚=<四字段>;风险档=<低/中/高>;权限档=ask-user
- (2.0.0 无执行;"历史已裁定·不重复推动" n 条照列)
### 缺口(n)
- <能力> — 无承载(可后补)/已由 <name> 承载/**解决态带戳形**:`<能力> —(M-2 解决态 · 仓内工件 <路径>)`,此形**禁写"可后补"**;n=0 仍出段,可加说明性括注
### 仓内技能(非 catalog)(n)
- <name> — 位置=<路径>;<重名 → 双源漂移风险>
### 反挂载候选(登记 · 动作经 sf-gate `unmount`)
- <name> — 未出现于任何"已承载"载体栏,且正文能力域在本仓无需求命中其证据形:<一句>
### 变化报告(重入时;首检写"全量=首检")
- 新增 <n>(列名)· 消失 <n>(列名+因)· 强度变 <n> · 落点变 <n> · 提案状态变 <n> · 未变 <n>(只计数,INV-14)
- 口径声明(尺变行,可选):<旧结论→新结论|变的尺(面信号/词条表/判据版本)>
### 反馈
- 逐条四态(闭集,禁"待回填");批量加:仓数=k · distinct=d(待批末回填)· 模板复用标独立性=1
反模式(挂 INV 编号=对应硬约束的违例形态;随退役机制消失的旧反模式不得回潮)
- 拿供给端标签投影当需求(旧"匹配契约/证据分档"整段已退役):跳过需求表直接按
when命中出清单——需求必须从本仓事实生成(D-01),词条只是命名对齐,不是入口闸(INV-01/02/06) - 通件独撑证据 · 缺失形不配对 · 引证沿用旧记录(INV-01/02);
.handoff/存在性当需求证据(须按内容双撑) - 凭印象判
requires缺失 / 两栏互推(HC-3) - 需求条数越档:超上限稀释、低于下限静默漏判(INV-03);计数凭记忆手写、"同上"隐去条目(HC-5)
- 拿 description 当承载依据(INV-05);"留在候选顺手加标注"=把裁决推给用户(落点唯一,INV-06)
- 把机器形态当层级结论(INV-12);把"全量常驻"当待整改
- 技能库宿主仓未先剔技能目录就建面像(INV-15);把技能自带示例夹具/测试目录当本仓工件
- 自评需求表(INV-13);批量不同报 distinct 与独立性——一次判断冒充 N 个观察
- 重入时把未变需求重新铺陈(INV-14);拿今天的工作树驳昨天的记录(历史判断按生成时点取快照,p000042)
- 词表版本不写头注、换版后拿旧轮结果充数(INV-04);自造规范词条名不经"新增待审"(双源漂移的入口)
- 在正文/技能目录里抄面信号、词条表、not 判据回显(单源纪律);把 catalog 或词表复制进技能目录
- 缺口与提案名单自相矛盾;仓内技能承载误报缺口;重名不标双源漂移;"缺口 0"写成特例判据
- 提案缺四字段(前态/后态/校验/回滚)就进报告;一条提案多动作;"删除/摘除"混进动作词表(动作闭集:挂/移层级/反挂载/保持;删除类须用户显式授权且违反 INV-07 即停)
- registry 措辞自造("占用已核验"指本地真源即违例);未经确认投递 Issue / 报告未脱敏;反馈记录写进 cwd 落错仓、美化或漏记否决
- agent 自主触发本技能;未确认口令擅自动挂载点(越权——执行自 2.1.0/反挂载自 2.2.0,且逐条确认)
完成标准(自检=AC 清单;机检项尽量脚本化,未脚本化前人工对表)
- [ ] 由用户显式触发;默认只写反馈记录;挂/移/反挂载仅经 sf-gate+确认口令(HC-1)
- [ ] 报告头自印:档位+四信号取值+词表版本戳(实取值,非写死)+机器形态输入声明(INV-04/12)
- [ ] 画像:证据口径四条已守;面判定与 not 判据全部取自 catalog 单源、本轮现探(INV-15/02)
- [ ] 需求表:每条带证据串且实测在位、通件不独撑、缺失形配对(AC-01 违例 0,INV-01/02);条数在档内(AC-10,INV-03);词条名与词表对齐或标"新增待审+证据形草案";强度三值闭集
- [ ] 覆盖表:每条恰一落点、Σ四落点=条数由名单数出(INV-06);"已承载/不适配"判定引用技能正文证据(INV-05);"不适配"以候选真实存在且被否为前提(无候选者为缺口,未涉者不得写"不适配");解决态需求按候选维落点(无候选→缺口/有候选被否→不适配)+词条列带 M-2 戳,均不写"可后补"、不入立项通道(d000032-②)
- [ ] 层级提案:每条带预算两值+"为何不是另一层"+四字段(前态/后态/校验/回滚)(AC-05)
- [ ] 若执行挂/移/反挂载:口令闭集确认 → sf-gate apply/verify;回滚演练或校验失败已 rollback;真源未删(INV-07/08/09)
- [ ] 缺口与提案名单互查无矛盾;仓内技能已扫、承载不误报、重名已标
- [ ] 重入:变化报告五类齐、未变项只计数(INV-14);历史比较按生成时点取快照
- [ ] 批量(≥3 仓):
仓数·distinct与"独立性=1"已自报(AC-06);跨仓引用逐名 - [ ] 采纳四态闭集、无占位;
--share经用户确认且脱敏 - [ ] 本技能未自评审本表(INV-13);定档犹豫/两读与词条"拿不准"如实入反馈记录(AC-09 素材)
方法论来源(时间线)
- Agent Skills 规范可选字段(
compatibility/disable-model-invocation)、Progressive disclosure——见 agentskills.io 与宿主字段表;运维口径:catalog 单源+registry 实时查 - v1 沿革(摘要,全文见 git 与
audits/):2026-09-19 定位/渠道收口 → 09-20 匹配契约化·动作基准·边界裁决·catalog v2 数据驱动(B14–B21)→ 09-21 反馈语料双层审计(现探/现算/裁决表/四态)→ 09-22 画像信号数据驱动(faces/tag_faces/not_vocab 迁 catalog)与正文卫生 → 09-22 实效审计(50 仓语料:算术与纪律属实、区分度不成立——通用标签+布尔面判据与仓型无关)→ 09-23 v1.8.0 契约收口(证据分档/两栏/现探/名单计数/自报,作为退役前最后补丁) - 2026-09-23 · 2.0.0 定位重构:从"供给端标签匹配"改为"需求侧生命周期管家"(E1 需求表+E2 层级预算+E5 周期化,全程只读)。设计包见真源仓
design/skill-fit-v2/(00 追踪表 · 01 统一语言 · 02 领域模型 · 03 聚合与 INV · 04 交互与回滚 · 05 事件风暴 · 06 验收判据 · 07 v1 处置表 · 08 路线图);需求词表lexicon=v0.0经五仓样本+S-3 同模板双审计(决策 d000028/d000030)生效;档位判据含 P-01…P-07 七处实测定档修补。三档权限(ask-user/auto-approve/yolo)为终版契约,实装自 2.1.0 起、逐版开闸(08 前置:需求侧达标才允许动作提案)。 - 2026-09-28 · 2.1.0 E4 开闸:
scripts/sf-gate.py实装挂/移层级确认门(ask-user);Q-05 白名单空表成文;本仓(agent-skills)原点挂+移回滚演练 PASS(audits/2026-09-28-skill-fit-e4-gate-pilot.md)。 - 2026-09-28 · 2.2.0 反挂载开闸:
sf-gate.py增unmount(只卸符号链接,INV-07 真源不动);selfcheck 含挂→卸→回滚;候选登记判据仍走现源两条件(serves=加速器)。 - 2026-09-28 · 2.1.1 A1–A3/C2:serves 双签设计内收口(从严 L-14/按形 L-26/正文证据不含 frontmatter 机键);catalog 出 delegated-research×L-26、在册三对;INV-05 钉 C2 句。方案
audits/2026-09-28-serves-design-faithful.md。 - 2026-09-28 · 2.1.2 t000114②⑤:frozen 指名者闭集枚举(
AGENTS.md·CLAUDE.md·CONTRIBUTING.md);C1 出口链+C′ 择配披露;形扩展须已裁入表;调度载体「驱动脚本」=ExecStart/command 路径字面量。HC-5「全」字已于 2.0.7 在位,本版不重开。 - 2026-09-28 · 2.1.3 设计债清理:AC-05 量级三档钉「示例非闭集」;C′ 输出模板加「件→行#」范例;
auto-approve-whitelist.md补 §5 表头机制。maintenance「serves L-26」散文按 S1 不追史。