Skip to content
Back to skills

Skill Fit

ASecurity

Skill fit (v2): derives a project's skill needs — tier T0–T4, evidence-backed requirement table against a versioned lexicon (count bounded by tier), coverage four-ways (served / in-catalog-unmounted / poor-fit / gap), and mount-tier advice with a two-value budget. Confirm gate (ask-user; scripts/sf-gate.py apply/verify/rollback): mount/move from 2.1.0, unmount from 2.2.0. Judges fit from skill bodies, not descriptions; catalog.yaml=supply, lexicon=demand. Writes feedback (and applied log when...

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 25, 2026
ai-agentsrustgonodegitapi

Works with

  • cursor
  • cli
  • api

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned October 25, 2026

npx -y skills add NinjaSln-labs/agent-skills --skill skill-fit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Skill Fit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Skill Fit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ninjasln-labs-skill-fit/badge)](https://www.skillsdirectory.com/skills/ninjasln-labs-skill-fit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: skill-fit
description: >-
  Skill fit (v2): derives a project's skill needs — tier T0–T4, evidence-backed requirement table
  against a versioned lexicon (count bounded by tier), coverage four-ways (served /
  in-catalog-unmounted / poor-fit / gap), and mount-tier advice with a two-value budget. Confirm gate
  (ask-user; scripts/sf-gate.py apply/verify/rollback): mount/move from 2.1.0, unmount from 2.2.0.
  Judges fit from skill bodies, not descriptions; catalog.yaml=supply, lexicon=demand. Writes
  feedback (and applied log when executing); optional privacy-stripped upstream issue. USER-INVOKED
  ONLY (/skill:skill-fit; no auto-invoke). Use to audit skill needs and, on confirm, apply reversible
  mount/move/unmount. NOT for: authoring skills; deleting skill source files.
slug: skill-fit
version: 2.2.0
displayName: skill-fit
disable-model-invocation: true
---
# 技能需求管家(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 编号=审计检查点)

1. **写出口闭集**——默认只写被画像项目根的反馈记录 `.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/词表(除非用户另令走其技能)。
2. **双单源**(INV-04)——推荐依据只来自 `catalog.yaml`+`retired.txt`(供给)与**词表**(需求);正文与本技能目录**不得存副本**(副本必然漂移)。**新增词条=提「新增待审」申请进报告,不自造规范名**;新增面/反触发条件=改 catalog,不改本正文。**形扩展纪律(A-3②,t000114⑤)**:词条证据形的现场扩展(未裁入词表的替代形/意图谓词)**不得**作立条依据——只可用在册形,或走「新增待审」草案;未裁先用=立条无效。词表版本戳必须写进报告头;**词表版本变了,旧轮结果作废、须整批重跑**(防跨轮静默漂移)。
3. **`requires` 先判且须实测·分两栏**(HC-4 取证的前提;实测纪律同源于 INV-01/02)——**机器级**(本机运行时/工具:实跑 `node --version` 等并记命令与取值)与**仓级**(本仓工件/依赖)**分开记、互不可推**(本机有某运行时 ≠ 本仓用它;本仓有锁文件 ≠ 本机装了包管理器);**禁止凭印象判缺失**。不满足 → 落点判"不适配"并给否因;未证 → **不得记"已承载"**,否因=requires 未证。
4. **证据纪律**(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 的位置存在且为空",否则"搜错了目录"与"真的没有"不可分。
5. **条数纪律**(INV-03)——需求条数 ∈ 该仓**仓型档区间**(定档见「画像探测」),越界即判失败:超上限=稀释——**淘汰序:强度升序(`形态可能` 先出)→ 同强度内按专属证据串条数降序 → 条数并列不进裁量、直接第三键:首条证据全路径字典序升序(d000032 确定性二键+d000037 并列归口钉死;compass/voyage 两例实战留痕),零裁量、可复现**。**第二键计数口径(A′,d000048)**:「专属证据串条数」=该行词条**在册证据形**中被命中的**要件数**(一件可撑多要件、一要件可由多件共证,两端折成要件;**通件与通件内容句不计**;`新增待审` 行按其证据形草案计)——**不是路径数、不是文件数**;报告须逐行自印要件清单(「要件①…@件」),否则第二键不可复算。**轮内单一需求计(C′,d000048)**:同一工件在同一轮内只计给一个需求(择配度最高者,并列按行号升序),其余行须另找件或降为弱撑;**择配须披露**(报告自印一行,范例:`C′:deploy.py→#4;verify.mjs→#3(配度=证据形主锚)`——「件→行#/配度」可复算即可,同义短句可;否则 C′ 不可复算)。被淘汰者必须在报告显式列"探过未立"(名称+一句证据),不得静默丢;低于下限=漏判(除非报告显式写"本仓此档内仅 N 条具备证据"并逐条可查)。**条数只能由名单得出**:任何段头计数一律先逐名、后计数;引用他段/他仓名单("同上")仅在被引用名单已在本记录内逐名给出时才算列全。
6. **承载判定读正文**(INV-05)——"某技能承载某需求"必须引用该技能**正文**证据(机制、步骤、工件要求),**非 description**(描述是已知最不可信信号)。**正文证据的范围**:`SKILL.md` 中 YAML frontmatter **以下**的机制/步骤/工件段落;**不含** frontmatter 机键(如 `disable-model-invocation`/`tier`/`name`——A3/C2,2026-09-28)。catalog 的 `not`/`scope` 数据继续用,但语义是**落点判定**(`not` 命中画像 → 落"不适配";`scope` 非本仓且主域已涉 → 落"不适配"并注否因),不再是"排除候选"的入口闸;否因取**四款闭集**(机制不符/绑定本仓没有的载体/正文硬编码他仓路径/`requires` 未证或未满足)。
7. **覆盖四落点互斥穷尽**(INV-06)——每条需求恰一落点;"不适配"落点须带**否因说明**(不占独立落点、不得双计)。同一需求"既承载又称缺"=自相矛盾,比漏判更伤信任。
8. **机器形态是输入不是结论**(INV-12)——`machine` 块(如"用户级全量常驻")只影响"库内有未挂"落点是否为空集;层级判定必须独立给因(通用性×项目专属×预算),**不得拿本机习惯当答案**。
9. **独立性**(INV-13)——生成需求表的执行者不得自评审该表;批量同模板(画像/结构逐字相同仅换身份字段)必须标"**模板复用,独立性=1**",防止一次判断冒充 N 个校准信号。
10. **画像自指前置**(INV-15)——被体检仓自身是技能库宿主(仓根有 `catalog.yaml` 或大量 `<name>/SKILL.md`)时,**先把 catalog 技能目录与仓内技能目录从面探测与工件清单中剔除**再建面像,否则技能自带的 `docs/`、`tests/` 冒充本仓的面。
11. **重入纪律**(INV-14)——同一条需求结论未变时,**只进变化报告的"未变"计数**,不重复铺陈。**比较历史产出按其生成时点取快照**(工作树是当下的,历史判断是当时的——拿今态驳旧论即冤案);探测时刻不在位的工件不得当证据回溯引用。
12. **反馈不撒谎 / 脱敏 / 渠道无关**(工程纪律,无 INV 号——设计包 06 §六统计规则)——记录采纳/否决如实,禁"待回填"占位;投递 GitHub Issue 前先展示给用户确认,报告不含本机路径/仓库名/凭据/代码内容;registry/安装/投递端点取自 `references/registry-endpoints.md`,不假设单一渠道、不臆造端点;**registry 措辞闭集**:本地真源链入一律"查重不适用(本地真源)"(脚本可实跑时也照用)、外部已核验"占用已核验"、外部无法核验"占用未核验"。

## 数据源定位(通用发行版 · 自包含)

安装形态可能是整仓安装 / 单技能拷贝 / 用户级或项目级**符号链接挂载**。按序定位:

1. **先规范化本技能目录**:`DIR = readlink -f <本技能目录>`(macOS 用 `realpath`;对符号链接与真实目录**均适用且幂等**,无分支)。之后所有同级/上级引用一律以 `DIR` 为基准;**禁止**以挂载位文本 `../` 作基准(文本拼接会落进链接父目录而错过真源仓根)。
2. **`catalog.yaml`**(自上而下取第一个存在):`dirname(DIR)/catalog.yaml`(整仓安装)→ `<项目根>/catalog.yaml` → `<项目根>/.agents/skills/catalog.yaml`。`retired.txt` 取**与命中的 catalog 同目录**(无则视为无退役)。
3. **词表(需求单源)**:`dirname(DIR)/design/skill-fit-v2/_exploration/lexicon-v0.md`(**版本号取词表文件头注,正文与报告不写死**)→ 项目自带路径。**取不到词表 → 降级**:按 01 式命名自出词条名并在报告显式声明「词表缺失,本次词条为局部命名,新增未注册」——**降级可见,不静默**。
4. **都没有 catalog → 降级为按 frontmatter 推断**(`description` 场景线索当 `when`、`compatibility` 当 `requires`),显式声明,建议补 catalog。
5. **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),**不直接改词表**。
- **采纳状态闭集四态**(逐条记,禁占位):`采纳·已执行`(该层级实见链接)·`采纳·不执行`(判对但不动)·`否决·附因<为何>`·`未裁定`(用户当轮确实未表态)。采纳与否看用户裁"建议对不对",与是否动手执行是两轴;下一轮据此校准 catalog `primary/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 不追史。

Files in this skill

  • SKILL.md41.6 KB
  • references/auto-approve-whitelist.md1.4 KB
  • references/registry-endpoints.md2.5 KB
  • scripts/sf-check.py42 KB
  • scripts/sf-gate.py18.7 KB
  • scripts/tests/fixtures/neg/record-r2.md2 KB
  • scripts/tests/fixtures/neg/repo/src/keep.py153 B
  • scripts/tests/fixtures/pos/record.md1.3 KB
  • scripts/tests/fixtures/pos/repo/src/app.py48 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.