Back to skills
SKILL.md
Skill Checker
ASecurityUse this skill when the user wants to check, test, or optimize a skill. Covers: testing whether a skill's description triggers correctly, optimizing description wording, scanning whether a skill works in a target environment, and adapting a skill to use environment-specific capabilities.
- 2 stars
- 0 votes
- 0 copies
- 2 views
- Added September 9, 2026
Works with
Security analysis
100/100Pro scans all 6 files and shows the line behind each finding
npx -y skills add GACLove/feishu-aily-skills --skill skill-checker --agent claude-codeAre you the author of Skill Checker?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/gaclove-skill-checker)---
name: skill-checker
description: "Use this skill when the user wants to check, test, or optimize a skill. Covers: testing whether a skill's description triggers correctly, optimizing description wording, scanning whether a skill works in a target environment, and adapting a skill to use environment-specific capabilities."
---
# Skill Checker
评估现有 skill 的两个面:
- **触发** — description 能不能让 agent 在该触发时触发、不该触发时不触发
- **环境** — skill 正文里的指令在当前 agent 环境中能不能正常执行
整体流程:
1. 定位 skill — 找到 SKILL.md,校验 YAML frontmatter,有问题则修复
2. 生成测试集 — 约 20 条平衡的 should-trigger / should-not-trigger query
3. 触发评测 — map 对每条 query 评估触发
4. 环境扫描 — 分析 skill 的环境依赖,回写 frontmatter dependencies
5. 汇总报告 — 两个维度的得分 → 写入 `{skill_name}.check.json`(唯一产出文件)
6. 优化(按需)— 改进 description 和/或适配环境
你的任务是判断用户在这个流程中的哪个位置,然后帮他往下推进。比如用户说"帮我检查一下这个 skill",你就从第 1 步开始完整走一遍;如果他说"触发率太低了帮我优化 description",你可以直接跳到第 6 步。灵活应对即可。
**重要**:整个流程只产出一个文件 `{skill_name}.check.json`。中间数据全部在内存中流转,不要写中间文件。
---
## 1. 定位 skill 并校验 frontmatter
找到用户指定的 skill,读取其 SKILL.md,然后跑一次 frontmatter 校验:
```bash
python scripts/validate.py <path-to-SKILL.md>
```
脚本输出 JSON 报告,含 error(必须修)和 warn(建议修)。典型问题是 description 含冒号或特殊字符却未加引号——用双引号包裹并转义内部 `\"` 即可,或改用 block scalar `|`。
有问题时由你直接编辑 frontmatter 修复,改完重跑 `validate.py` 确认通过。确认 `name` 和 `description` 都拿到后进入下一步。
---
## 2. 生成测试集
基于 skill 的 name、description 和完整内容,生成 ~20 条测试 query。数据保存在内存中,不写文件。
约 10 条 should_trigger=true + 约 10 条 should_trigger=false:
```json
[
{"query": "帮我检查一下这个 skill 的触发率", "should_trigger": true},
{"query": "帮我从零写一个新 skill", "should_trigger": false}
]
```
**should_trigger=true 的写法**:
- 真实用户消息,多样化表述(别只是改述 description)
- 含边界情况和间接表述
- 自然语言,不要堆砌关键词
**should_trigger=false 的写法**(最难写好的部分):
- 必须是**高质量近似干扰** — 关键词相似但意图不同
- 好的反例:相邻领域的请求、相似术语但不同场景
- 坏的反例:"今天天气怎么样" — 太明显无关,测不出东西
- 要让模型需要认真想一想才能判断
每条 1-3 句话,像真实用户会说的那样。
生成后给用户过目,确认没问题再继续。自动生成的测试集是起点不是终点。
---
## 3. 触发评测
对每条 query 判断:给定目标 skill 的 name + description,agent 会不会触发它?
读取 `references/prompts/trigger_eval_prompt.md`,填入 skill_name 和 skill_description,然后用 **map 工具**对所有 query 并行评估 — 每条 query 作为一个 map 输入项。map 返回每条 query 的 `{triggered: true/false}` 结果。
拿到 map 结果后,把每条 query 的 `{query, should_trigger, triggered}` 组装成数组,管道交给脚本算分:
```bash
echo '<merged_json_array>' | python scripts/scoring.py eval-summary \
--skill-name <name> --description "<tested_description>"
```
脚本输出 eval_results JSON(含 results + summary),留在内存中用于后续汇总。
---
## 4. 环境扫描
分析 skill 正文的环境依赖,判断在当前 agent 环境中的兼容性。此步由你自己执行 — 只有你自己能完整感知当前环境的工具和能力。
逐段读 SKILL.md,找出每一项环境依赖,按四类归类:
- **工具依赖**: Bash, Read, Write, map 等
- **能力依赖**: 多会话、网络访问、文件系统、子 agent
- **外部服务依赖**: API、SDK、数据库
- **隐含假设**: OS、目录结构、权限、已安装的包
每项记录:依赖名称、来源(引用 SKILL.md 原文)、兼容性分类和理由。兼容性分为:
- `compatible` — skill 原文的写法在当前环境中**原样可用**,不需要改
- `adaptable` — 能跑但环境有**更好的方式**。判断标准:如果你从零给这个环境写 skill,会不会用不同的写法?会 → adaptable
- `incompatible` — 无替代方案
- `unknown` — 信息不足
对 `adaptable` 项,adaptation 要**具体到可以直接替换进 SKILL.md**。`target_capability` 写清工具名称和调用方式(不要只写工具名),`changes` 写出替换后的实际文本片段(不是"把 X 改成 Y"这种描述)。
组装好依赖项列表后,管道计算汇总:
```bash
echo '<env_scan_json>' | python scripts/scoring.py env-summary
```
**回写 frontmatter dependencies**:把所有依赖项的 `name` 提取为列表,写入目标 skill 的 SKILL.md frontmatter:
```yaml
dependencies: [bash, file_system, map, user_choices]
```
这样环境变化时可以 `grep dependencies */SKILL.md` 快速定位受影响的 skill。
---
## 5. 汇总报告
把测试集 + 触发评测 + 环境扫描合并为 `{skill_name}.check.json` — **唯一的产出文件**:
```bash
echo '<combined_json>' | python scripts/scoring.py merge --skill-name <name>
```
输入格式:
```json
{
"skill_name": "my-skill",
"evals": [...],
"trigger": { "results": [...], "summary": {...}, "description": "..." },
"environment": { "dependencies": [...], "summary": {...} }
}
```
脚本输出完整的 check.json(含 overall_score、各维度详情、测试集)。将结果写入 `{skill_name}.check.json`。
每个维度 0-1 分,overall_score = 两个维度的均值。对低分维度给出具体改进建议。
如果用户只需要评估,到此结束。
---
## 6. 优化(按需)
基于报告结果,改进 SKILL.md。仅在用户要求优化时执行。
### 触发优化
如果触发准确率不够好:
**准备** — 分割测试集防止过拟合:
```bash
echo '<evals_json_array>' | python scripts/scoring.py split --holdout 0.4
```
输出 `{train, test}` 两个数组。60% train + 40% test,按 should_trigger 分层。train 指导改进,test 衡量泛化。不要对 test set 调优。
**每轮迭代**(最多 ~5 轮):
1. 用 map 工具在 train set 上评估当前 description(方法同第 3 步)
2. 用 `scoring.py eval-summary` 算分
3. train 全部通过 → 跳到选最优。否则分析失败项
4. 根据 `references/prompts/improve_desc_prompt.md` 的思路改写 description — 把失败项和历史尝试喂进去,避免重蹈覆辙
5. 用新 description 重复
每轮记录一条迭代记录:`{iteration, description, train_passed, train_total}`。
**选最优**:对 train 得分最高的 description(如有并列取最后一轮),在 test set 上跑一次 map + eval-summary 作为最终得分。把 description 和 test 得分给用户看,确认后更新 SKILL.md frontmatter。
优化完成后,把迭代记录追加到 check.json 的 `optimization` 字段中(重新 merge 或直接编辑)。
### 环境适配
如果环境扫描发现 `adaptable` 项,改写 SKILL.md 让 skill **原生使用环境能力**。
从扫描结果中找出所有 adaptable 和有替代方案的 incompatible 依赖项,逐项改写。
**改写原则**:
1. **Replace, don't patch** — 按名称引用环境原生能力,直接重写对应段落。不要在原文旁边加"也可以用 X",也不要写泛泛的"使用适当的工具"。改写后读起来应该像专门为这个环境写的
2. **保留意图** — skill 的核心目的和工作流不变,只改实现方式
3. **保留 frontmatter** — name 不变,description 只在适配改变了 skill 能力时才更新
**示例** — 一个文档生成 skill 从本地开发环境适配到无显示器的远程环境:
适配前(原 SKILL.md):
```
## 预览阶段
把生成的文档写入 docs/output/ 目录。运行
`python -m http.server 8080 --directory docs/output`
启动本地预览服务器。告诉用户打开 http://localhost:8080
查看效果,满意后按 Ctrl+C 停止服务器,然后告诉你继续。
```
适配后:
```
## 预览阶段
把生成的文档渲染为 Markdown,直接在对话中呈现关键章节的预览。
完整文档写入 docs/output/ 并告知路径。用澄清工具询问用户:
"满意当前效果" / "需要调整格式" / "需要调整内容"。
```
变的不只是工具,而是整个交互模式:本地 HTTP 预览 → 对话内呈现,浏览器查看 → 内联预览,Ctrl+C 流程 → 结构化选择。适配后的文本里没有"如果没有浏览器就..."这种补丁痕迹。
改写结果需要用户确认后再应用。对于 `incompatible` 项,报告为 blocking issues,按影响排序。
---
## 参考资料
| 文件 | 用途 |
|------|------|
| `scripts/validate.py` | YAML frontmatter 校验(含 dependencies 字段) |
| `scripts/scoring.py` | 评分计算:eval-summary, env-summary, merge, split(全部 stdin→stdout) |
| `references/prompts/trigger_eval_prompt.md` | 触发判定(map 用) |
| `references/prompts/improve_desc_prompt.md` | description 改写参考 |
| `references/schemas.md` | check.json 格式定义 |
Files in this skill
- SKILL.md
- references/prompts/improve_desc_prompt.md
- references/prompts/trigger_eval_prompt.md
- references/schemas.md
- scripts/scoring.py
- scripts/validate.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.