Skill Evaluator
Evaluate skills across 25 criteria using a hybrid automated + manual approach.
Critical Rules
One Skill Per PR: When invoked in CI, only review the ONE skill that was changed in this PR. Do not attempt to review all skills in the repository.
Dual Output Required: Every review MUST produce TWO outputs:
skills/<skill-name>/EVAL.md — Human-readable evaluation report body
artifacts/skill-review.json — Machine-readable structured review data
The CI workflow will sync the structured JSON into the YAML front matter of EVAL.md after your run. Do not manually add or maintain front matter inside EVAL.md; write the Markdown body only.
Hard Blocking: If a skill is rejected, the CI job MUST fail (exit code 1). This is a hard gate — rejected skills must never be merged.
Output Specification
1. EVAL.md (Human-Readable Body)
Write to skills/<skill-name>/EVAL.md. Use the template at assets/EVAL-TEMPLATE.md.
Important:
- Write the Markdown report body only
- Do not add YAML front matter yourself
- The workflow will inject structured front matter based on
artifacts/skill-review.json
Must include:
- Skill name, version, review date, evaluator identity
- Automated check results summary
- All 25 criteria scores with notes
- Total score out of 100
- Priority fixes (P0/P1/P2)
- Final verdict (approved / rejected / needs_manual_review)
2. skill-review.json (Machine-Readable)
Write to artifacts/skill-review.json. Must conform to this structure:
{
"skillName": "string",
"skillVersion": "string",
"reviewStatus": "approved | rejected | needs_manual_review",
"needsManualReview": false,
"totalScore": 0,
"categoryScores": {
"functional-suitability": 0,
"reliability": 0,
"performance": 0,
"usability-ai": 0,
"usability-human": 0,
"security": 0,
"maintainability": 0,
"agent-specific": 0
},
"findings": [
{
"id": "F001",
"criterion": "criterion-id",
"category": "category-id",
"score": 0,
"description": "Detailed finding description",
"priority": "P0 | P1 | P2",
"suggestion": "Optional improvement suggestion"
}
],
"summary": "Overall assessment summary",
"reviewedAt": "2025-01-01T00:00:00Z",
"reviewer": "AI-Evaluator",
"sourceCommit": "optional git SHA"
}
Field rules:
totalScore: Integer 0-100
categoryScores: Must include ALL 8 categories
- Each category max score = number of criteria × 4
findings: Array of ReviewFinding objects
- Each finding:
id (unique), criterion (criteria ID), category (category ID), score (0-4 integer), description, priority (P0/P1/P2)
needsManualReview: Set to true if the skill uses external network access, imports unknown dependencies, or contains scripts that require human judgment
Review Status Determination
| Condition |
Status |
Action |
| Score ≥ 80, no P0 findings |
approved |
Skill is publishable |
| Score < 80 or has P0 findings |
rejected |
Do NOT merge; CI must fail |
| Has network access / external deps / requires human judgment |
needs_manual_review |
Block until admin approves |
Critical: rejected status MUST cause the CI workflow to fail (hard block). Skills with needs_manual_review also block until admin approval.
Rejection Criteria (Automatic)
A skill is automatically rejected when ANY of the following are true:
- Total score < 60
- Any P0 finding exists (credential leak, path traversal, missing SKILL.md, invalid frontmatter)
- Security scan fails (secrets detected, hidden sensitive files)
- Name mismatch between SKILL.md and directory
- Missing required frontmatter fields (name, description, version, compatibility)
Manual Review Triggers
Set needsManualReview: true and reviewStatus: "needs_manual_review" when:
- Scripts contain network access (fetch, curl, wget) to non-whitelisted domains
- Scripts import external packages not listed in a manifest
- Skill behavior depends on runtime environment assumptions
- Complex security considerations that AI cannot definitively resolve
Quick Start
1. Run automated checks
python3 scripts/eval-skill.py /path/to/skill
python3 scripts/eval-skill.py /path/to/skill --json # machine-readable
python3 scripts/eval-skill.py /path/to/skill --verbose # show all details
Checks: file structure, frontmatter, description quality, script syntax, dependency audit, credential scan, env var documentation.
2. Manual assessment
Use the rubric at references/rubric.md to score 25 criteria across 8 categories (0–4 each, 100 total). Each criterion has concrete descriptions per score level.
3. Write the evaluation
Copy assets/EVAL-TEMPLATE.md to skills/<skill-name>/EVAL.md. Fill in automated results + manual scores.
Do not prepend YAML front matter manually — the workflow owns that step.
Also write artifacts/skill-review.json following the schema above.
Evaluation Process
- Run
eval-skill.py — get the automated structural score and determine skill type (tool vs. documentation-only)
- Read the skill's SKILL.md — understand what it does
- Determine skill type — If the skill has no executable scripts (
scripts/ empty or absent), apply the Document-Only Adjustments in references/rubric.md. Auto-exempt criteria 3.2, 8.3, 8.4, 8.5 (score 4 each). Use adjusted standards for 2.1, 2.2, 4.3, 4.4, 5.2, 7.1, 7.2, 7.3.
- Read/skim the scripts — assess code quality, error handling, testability (skip for doc-only skills)
- Score each manual criterion using references/rubric.md — concrete criteria per level
- Run behavior verification — if the skill's EVAL.md has test cases in the Behavior Verification section, execute each prompt against an Agent with the skill loaded. Verify outputs against the defined checkpoints. Record pass/fail results. If no test cases exist, flag this as a P1 finding and write test cases.
- Prioritize findings as P0 (blocks publishing) / P1 (should fix) / P2 (nice to have)
- Write EVAL.md in the skill directory with scores + findings
- Write skill-review.json in the artifacts directory
Behavior Verification Details
行为验证是评估 skill 在使用中的实际表现,而非仅检查其文件结构。
验证方法:
- 读取 skill EVAL.md 的 "Behavior Verification" 章节中的测试用例表
- 逐条向 Agent 发送提示词(skill 已加载)
- 比对输出与验证点:
[D] 验证点 — 用正则/关键字匹配直接判定 pass/fail
[J] 验证点 — 人工判断输出质量,给出 pass/fail + 说明
- 在 EVAL.md 的 "验证结果" 表中填入通过情况
通过标准:
- 正向用例必须 100% 通过 → 否则 P0
- 负向用例必须 100% 通过 → 否则 P1
- 边界用例 ≥ 50% 通过 → 否则 P2
如果 EVAL.md 中没有测试用例:
- 初审:标记为 P1 缺陷,要求 skill 作者补充
- 复审:必须包含至少 4 条用例(2 正向 + 1 负向 + 1 边界)
Categories (8 categories, 25 criteria)
| # |
Category |
Source Framework |
Criteria |
| 1 |
Functional Suitability |
ISO 25010 |
Completeness, Correctness, Appropriateness |
| 2 |
Reliability |
ISO 25010 |
Fault Tolerance, Error Reporting, Recoverability |
| 3 |
Performance / Context |
ISO 25010 + Agent |
Token Cost, Execution Efficiency |
| 4 |
Usability — AI Agent |
Shneiderman, Gerhardt-Powals |
Learnability, Consistency, Feedback, Error Prevention |
| 5 |
Usability — Human |
Tognazzini, Norman |
Discoverability, Forgiveness |
| 6 |
Security |
ISO 25010 + OpenSSF |
Credentials, Input Validation, Data Safety |
| 7 |
Maintainability |
ISO 25010 |
Modularity, Modifiability, Testability |
| 8 |
Agent-Specific |
Novel |
Trigger Precision, Progressive Disclosure, Composability, Idempotency, Escape Hatches |
Interpreting Scores
| Range |
Verdict |
Action |
| 90–100 |
Excellent |
Publish confidently |
| 80–89 |
Good |
Publishable, note known issues |
| 70–79 |
Acceptable |
Fix P0s before publishing |
| 60–69 |
Needs Work |
Fix P0+P1 before publishing |
| <60 |
Not Ready |
Significant rework needed |
Deeper Security Scanning
This evaluator covers security basics (credentials, input validation, data safety) but for thorough security audits of skills under development, consider SkillLens (npx skilllens scan <path>). It checks for exfiltration, code execution, persistence, privilege bypass, and prompt injection — complementary to the quality focus here.
Dependencies
- Python 3.6+ (for eval-skill.py)
- PyYAML (
pip install pyyaml) — for frontmatter parsing in automated checks
1---2name: skill-evaluator3description: Evaluate Clawdbot skills for quality, reliability, and publish-readiness using a multi-framework rubric (ISO 25010, OpenSSF, Shneiderman, agent-specific heuristics). Use when asked to review, audit, evaluate, score, or assess a skill before publishing, or when checking skill quality. Runs automated structural checks and guides manual assessment across 25 criteria.4---56# Skill Evaluator78Evaluate skills across 25 criteria using a hybrid automated + manual approach.910## Critical Rules11121. **One Skill Per PR**: When invoked in CI, only review the ONE skill that was changed in this PR. Do not attempt to review all skills in the repository.13142. **Dual Output Required**: Every review MUST produce TWO outputs:15 - `skills/<skill-name>/EVAL.md` — Human-readable evaluation report body16 - `artifacts/skill-review.json` — Machine-readable structured review data1718 The CI workflow will sync the structured JSON into the YAML front matter of `EVAL.md` after your run. Do **not** manually add or maintain front matter inside `EVAL.md`; write the Markdown body only.19203. **Hard Blocking**: If a skill is `rejected`, the CI job MUST fail (exit code 1). This is a hard gate — rejected skills must never be merged.2122## Output Specification2324### 1. EVAL.md (Human-Readable Body)2526Write to `skills/<skill-name>/EVAL.md`. Use the template at [assets/EVAL-TEMPLATE.md](assets/EVAL-TEMPLATE.md).2728Important:29- Write the Markdown report body only30- Do not add YAML front matter yourself31- The workflow will inject structured front matter based on `artifacts/skill-review.json`3233Must include:34- Skill name, version, review date, evaluator identity35- Automated check results summary36- All 25 criteria scores with notes37- Total score out of 10038- Priority fixes (P0/P1/P2)39- Final verdict (approved / rejected / needs_manual_review)4041### 2. skill-review.json (Machine-Readable)4243Write to `artifacts/skill-review.json`. Must conform to this structure:4445```json46{47 "skillName": "string",48 "skillVersion": "string",49 "reviewStatus": "approved | rejected | needs_manual_review",50 "needsManualReview": false,51 "totalScore": 0,52 "categoryScores": {53 "functional-suitability": 0,54 "reliability": 0,55 "performance": 0,56 "usability-ai": 0,57 "usability-human": 0,58 "security": 0,59 "maintainability": 0,60 "agent-specific": 061 },62 "findings": [63 {64 "id": "F001",65 "criterion": "criterion-id",66 "category": "category-id",67 "score": 0,68 "description": "Detailed finding description",69 "priority": "P0 | P1 | P2",70 "suggestion": "Optional improvement suggestion"71 }72 ],73 "summary": "Overall assessment summary",74 "reviewedAt": "2025-01-01T00:00:00Z",75 "reviewer": "AI-Evaluator",76 "sourceCommit": "optional git SHA"77}78```7980Field rules:81- `totalScore`: Integer 0-10082- `categoryScores`: Must include ALL 8 categories83- Each category max score = number of criteria × 484- `findings`: Array of ReviewFinding objects85- Each finding: `id` (unique), `criterion` (criteria ID), `category` (category ID), `score` (0-4 integer), `description`, `priority` (P0/P1/P2)86- `needsManualReview`: Set to `true` if the skill uses external network access, imports unknown dependencies, or contains scripts that require human judgment8788## Review Status Determination8990| Condition | Status | Action |91|-----------|--------|--------|92| Score ≥ 80, no P0 findings | `approved` | Skill is publishable |93| Score < 80 or has P0 findings | `rejected` | Do NOT merge; CI must fail |94| Has network access / external deps / requires human judgment | `needs_manual_review` | Block until admin approves |9596**Critical**: `rejected` status MUST cause the CI workflow to fail (hard block). Skills with `needs_manual_review` also block until admin approval.9798## Rejection Criteria (Automatic)99100A skill is automatically `rejected` when ANY of the following are true:101- Total score < 60102- Any P0 finding exists (credential leak, path traversal, missing SKILL.md, invalid frontmatter)103- Security scan fails (secrets detected, hidden sensitive files)104- Name mismatch between SKILL.md and directory105- Missing required frontmatter fields (name, description, version, compatibility)106107## Manual Review Triggers108109Set `needsManualReview: true` and `reviewStatus: "needs_manual_review"` when:110- Scripts contain network access (fetch, curl, wget) to non-whitelisted domains111- Scripts import external packages not listed in a manifest112- Skill behavior depends on runtime environment assumptions113- Complex security considerations that AI cannot definitively resolve114115## Quick Start116117### 1. Run automated checks118119```bash120python3 scripts/eval-skill.py /path/to/skill121python3 scripts/eval-skill.py /path/to/skill --json # machine-readable122python3 scripts/eval-skill.py /path/to/skill --verbose # show all details123```124125Checks: file structure, frontmatter, description quality, script syntax, dependency audit, credential scan, env var documentation.126127### 2. Manual assessment128129Use the rubric at [references/rubric.md](references/rubric.md) to score 25 criteria across 8 categories (0–4 each, 100 total). Each criterion has concrete descriptions per score level.130131### 3. Write the evaluation132133Copy [assets/EVAL-TEMPLATE.md](assets/EVAL-TEMPLATE.md) to `skills/<skill-name>/EVAL.md`. Fill in automated results + manual scores.134135Do not prepend YAML front matter manually — the workflow owns that step.136137Also write `artifacts/skill-review.json` following the schema above.138139## Evaluation Process1401411. **Run `eval-skill.py`** — get the automated structural score and determine skill type (tool vs. documentation-only)1422. **Read the skill's SKILL.md** — understand what it does1433. **Determine skill type** — If the skill has no executable scripts (`scripts/` empty or absent), apply the **Document-Only Adjustments** in [references/rubric.md](references/rubric.md). Auto-exempt criteria 3.2, 8.3, 8.4, 8.5 (score 4 each). Use adjusted standards for 2.1, 2.2, 4.3, 4.4, 5.2, 7.1, 7.2, 7.3.1444. **Read/skim the scripts** — assess code quality, error handling, testability (skip for doc-only skills)1455. **Score each manual criterion** using [references/rubric.md](references/rubric.md) — concrete criteria per level1466. **Run behavior verification** — if the skill's EVAL.md has test cases in the Behavior Verification section, execute each prompt against an Agent with the skill loaded. Verify outputs against the defined checkpoints. Record pass/fail results. If no test cases exist, flag this as a P1 finding and write test cases.1477. **Prioritize findings** as P0 (blocks publishing) / P1 (should fix) / P2 (nice to have)1488. **Write EVAL.md** in the skill directory with scores + findings1499. **Write skill-review.json** in the artifacts directory150151### Behavior Verification Details152153行为验证是评估 skill **在使用中的实际表现**,而非仅检查其文件结构。154155**验证方法**:1561. 读取 skill EVAL.md 的 "Behavior Verification" 章节中的测试用例表1572. 逐条向 Agent 发送提示词(skill 已加载)1583. 比对输出与验证点:159 - `[D]` 验证点 — 用正则/关键字匹配直接判定 pass/fail160 - `[J]` 验证点 — 人工判断输出质量,给出 pass/fail + 说明1614. 在 EVAL.md 的 "验证结果" 表中填入通过情况162163**通过标准**:164- 正向用例必须 100% 通过 → 否则 P0165- 负向用例必须 100% 通过 → 否则 P1166- 边界用例 ≥ 50% 通过 → 否则 P2167168**如果 EVAL.md 中没有测试用例**:169- 初审:标记为 P1 缺陷,要求 skill 作者补充170- 复审:必须包含至少 4 条用例(2 正向 + 1 负向 + 1 边界)171172## Categories (8 categories, 25 criteria)173174| # | Category | Source Framework | Criteria |175|---|----------|-----------------|----------|176| 1 | Functional Suitability | ISO 25010 | Completeness, Correctness, Appropriateness |177| 2 | Reliability | ISO 25010 | Fault Tolerance, Error Reporting, Recoverability |178| 3 | Performance / Context | ISO 25010 + Agent | Token Cost, Execution Efficiency |179| 4 | Usability — AI Agent | Shneiderman, Gerhardt-Powals | Learnability, Consistency, Feedback, Error Prevention |180| 5 | Usability — Human | Tognazzini, Norman | Discoverability, Forgiveness |181| 6 | Security | ISO 25010 + OpenSSF | Credentials, Input Validation, Data Safety |182| 7 | Maintainability | ISO 25010 | Modularity, Modifiability, Testability |183| 8 | Agent-Specific | Novel | Trigger Precision, Progressive Disclosure, Composability, Idempotency, Escape Hatches |184185## Interpreting Scores186187| Range | Verdict | Action |188|-------|---------|--------|189| 90–100 | Excellent | Publish confidently |190| 80–89 | Good | Publishable, note known issues |191| 70–79 | Acceptable | Fix P0s before publishing |192| 60–69 | Needs Work | Fix P0+P1 before publishing |193| <60 | Not Ready | Significant rework needed |194195## Deeper Security Scanning196197This evaluator covers security basics (credentials, input validation, data safety) but for thorough security audits of skills under development, consider [SkillLens](https://www.npmjs.com/package/skilllens) (`npx skilllens scan <path>`). It checks for exfiltration, code execution, persistence, privilege bypass, and prompt injection — complementary to the quality focus here.198199## Dependencies200201- Python 3.6+ (for eval-skill.py)202- PyYAML (`pip install pyyaml`) — for frontmatter parsing in automated checks