关于 audit-skilly-workflow
audit-skilly-workflow 是用于审计 Skilly 工作流指令的 Agent 技能,可识别不同指令文件之间的冲突、重复和例外,并生成 HTML 报告。适用于维护含有多来源规则的代码库;该技能只报告问题,不修改文件。
主要功能
- 01扫描指令文件与配置
- 02匹配并分类规则关系
- 03核实发现并指定修复方
- 04生成独立 HTML 报告
- 05审计过程不修改文件
适用场景
- 01检查仓库与全局指令冲突
- 02核对规则与提交门禁设置
- 03审查技能指令和验证阶段
- 04为规则审计生成可追溯报告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ timschoch/ skilly --skill audit-skilly-workflow安装后在 Claude Code 中输入/audit-skilly-workflow确认已加载。
附带文件scripts/audit.mjs
详细介绍
审计 skilly 工作流
执行环境会并列加载每个指令文件。默认情况下,没有文件优先级更高:遇到冲突时,Agent 会遵循其中任意一条。本审计会找出 skilly 安装的文件与其他所有文件之间的冲突,并报告这些冲突。不做任何编辑。
1. 运行脚本
node .agents/skills/audit-skilly-workflow/scripts/audit.mjs
consumer: false → 告知用户 reason,然后停止。
| 字段 | 内容 |
|---|---|
sources | 每个指令文件:owner(skilly、overlay、repo、global)、loaded(always、on-demand)、bytes |
skills | 每个已安装技能的名称和描述 |
tier | 仓库在 .skilly/config.json 中的层级;带有自身 tier 的 verify 步骤仅在该层级运行 |
gates | skilly 提交门禁值;包含相应步骤的 verify 阶段(commit、push、ci、nightly);以及配置中找到的其他提交门禁和命名检查工具 |
findings | 配置缺陷:kind、where、detail |
report | 要写入的 file;ignored 表示 git 是否忽略该文件 |
2. 确认发现的问题
在 where 指定的位置打开每项发现的问题。误报(例如,文本将某个路径标为可选)→ 将其剔除并计数。每项发现的问题都已保留并附有一行修复说明,或已剔除,即为完成。阅读时稍后发现配置缺陷 → 将其作为保留项添加。
3. 提取声明
完整阅读每个来源,先读 always。技能描述也是一项声明:触发条件满足时 → 使用该技能。只有来源提到某个技能时,才完整阅读 SKILL.md。门禁值和 gates.*.others 配置也属于声明,并附有各自的 file:line。
将每条指令写成一项声明:情境 → 必须执行的操作,并附上 file:line。跳过不包含操作的行。
- 不佳:“委派”(没有操作)
- 良好:“任务一轮即可完成 → 不启动子 Agent” (
.claude/rules/<bundle>-delegation.md:3)
overlay 会与其基础规则合并。判断其他来源时,应依据合并后的规则,而不是仅依据基础规则。
非 skilly 来源总计超过 150 KB → 将其拆分为几批,每批大小相近,每批分配一个子 Agent,并遵循仓库的模型规则设置模型和 effort。向每个子 Agent 提供 skilly 声明列表;它只返回匹配的声明对。
每个来源的声明都已提取,即为完成。
4. 匹配并判断
根据情境,将每条 skilly 声明与其他所有声明匹配,绝不能根据是否使用相同词语来匹配。“暂存工作并停止”和“准备就绪后推送并创建 PR”没有共同词语,但仍然冲突。
还要匹配:
- 文本中的数字或列表与
gates(文本允许 90 个字符,门禁允许 72 个字符) - 跳过门禁的指令(
-n、已禁用的钩子)与该门禁 - 说明何时运行检查的文本(“每次提交前运行测试”)与运行该检查的
gates.verify阶段 - 自行运行检查的钩子或 CI 作业与
verify阶段 gates.*.others中的每个条目:读取其配置,并将其值与 skilly 门禁进行比较
为每对声明指定一种类型:
| 类型 | 判断标准 | 报告方式 |
|---|---|---|
| 矛盾 | 无法同时遵循两者 | 标记 |
| 重述 | 用其他措辞表达相同操作;下次编辑时可能产生偏差 | 标记 |
| 覆盖 | overlay 更改了其自身的基础规则 | 展示,但不标记:这是仓库认可的覆盖 |
| 已声明优先级 | 一方说明了哪个来源优先 | 展示 |
| 互补 | 情境不同,或两者都成立 | 剔除并计数 |
值不同(限制、列表、模型名称)会使重述变为矛盾。
每条 skilly 声明都已匹配或标记为未匹配,即为完成。
5. 指定修复负责人
每次同步都会覆盖已同步的 skilly 文件。
| 内容位于 | 修复方式 |
|---|---|
owner: skilly | 切勿就地编辑。仓库有意偏离规则 → .claude/rules/<rule>.local.md。Skilly 有误 → 在 timschoch/skilly 中提交 issue |
owner: repo | 删除重复表述并链接到 skilly 规则,或改写使其一致,或将有意偏离的内容移到 .local.md |
| gate 配置(commitlint、lint、CI、hooks) | 每条规则只保留一个强制执行者;将值与 skilly gate 对齐 |
owner: global | 由用户编辑;提出措辞建议 |
| 脚本发现的问题 | where 指定的文件;给出一行修复建议 |
6. 编写报告并停止
将一个独立的 HTML 文件写入 report.file。创建其所在目录。钩子或沙盒阻止写入 → 告知用户路径和阻止原因,然后停止。切勿将报告写到其他位置。
内容:
- 标记项:矛盾、重复表述、保留的发现;每行都包含两处引用及其
file:line、类型、修复负责人 - 展示项:覆盖项,并注明优先级
- 计数:互补项和舍弃的发现
- 已读取的来源及其负责人
report.ignored 为 false → 告知用户 git 不会忽略该报告。不要编辑 .gitignore。
在聊天中:报告路径、各类型的计数,以及每个标记项对应的一行编号条目。然后停止。仅修复用户选定的条目。