skill-conductor — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skill-conductor (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Full lifecycle management for agent skills: draft → test → review → improve → repeat.
One skill to rule them all — from architecture to packaging. The core loop is always the same: write something, test it, see what fails, fix it, test again.
Read context cues. If the user is a skill author iterating on their own work, be direct and technical. If they're new to skills, explain the why behind each step — not just what to do, but why it matters. Default to conversational, not robotic.
Detect mode from context. If ambiguous, ask.
| Mode | When | What happens |
|---|---|---|
| 1. CREATE | "build a skill", "new skill for..." | Full lifecycle: intent → architecture → scaffold → write → test |
| 2. IMPROVE | "fix this skill", "it doesn't trigger" | Diagnose → eval loop → blind comparison → iterate |
| 3. VALIDATE | "test this skill", "run evals" | Structural checks + trigger testing + 5-axis scoring |
| 4. REVIEW | "review this skill", third-party assessment | 11-point quality gate, quick and focused |
| 5. OPTIMIZE | "improve triggering", "description optimization" | Automated description optimization with train/test split |
| 6. PACKAGE | "package for distribution" | Validate + bundle into .skill file |
Before writing anything, extract 2–3 concrete scenarios.
Ask:
Don't move on until you have a clear picture of what the skill does, for whom, and when. This prevents the most common failure: a skill that does something but triggers for the wrong things.
Before writing the skill, verify the agent fails without it:
If the agent already handles it perfectly, the skill is unnecessary. This sounds obvious, but it's the most skipped step and the most valuable one.
Choose a primary pattern from references/patterns.md (can combine):
| Pattern | Use when |
|---|---|
| Sequential workflow | clear step-by-step process |
| Iterative refinement | output improves with cycles |
| Context-aware selection | same goal, different tools by context |
| Domain intelligence | specialized knowledge beyond tool access |
| Multi-MCP coordination | workflow spans multiple services |
Choose degrees of freedom — this determines how much control vs. flexibility the skill gives the agent:
| Freedom | When | Example |
|---|---|---|
| Low (scripts) | fragile, error-prone, must be exact | PDF rotation, API calls |
| Medium (pseudocode) | preferred pattern exists, some variation ok | data processing |
| High (text) | multiple valid approaches, judgment needed | design decisions |
uv run scripts/init_skill.py <skill-name> --path <output-dir> [--resources scripts,references,assets]Or create manually:
skill-name/
├── SKILL.md # required — the brain
├── scripts/ # deterministic operations (executed, not loaded)
├── references/ # detailed docs (loaded on demand)
└── assets/ # templates, images for output (never loaded)#### Frontmatter
---
name: kebab-case-name
description: >
[Purpose in one sentence]. Use when [triggers].
Do NOT use for [negative triggers].
---The description is the single most important line. It determines whether the skill gets triggered at all. Rules:
name: lowercase, digits, hyphens only. No consecutive hyphens. Matches folder name. Max 64 charsdescription: max 1024 chars. No angle brackets. No process/workflow steps# GOOD: purpose + triggers, no process
description: Analyze Figma design files for developer handoff. Use when user uploads .fig files or asks for "design specs". Do NOT use for Sketch or Adobe XD.
# BAD: process in description (agent skips body)
description: Exports Figma assets, generates specs, creates Linear tasks, posts to Slack.#### Body structure
# Skill Name
## Overview
What this enables. 1-2 sentences. Core principle.
## [Main sections]
Step-by-step with numbered sequences.
Concrete templates over prose.
Imperative voice throughout.
## Common Mistakes
What goes wrong + how to fix.
## Troubleshooting (if applicable)
Error: [message] → Cause: [why] → Fix: [how]#### Writing rules
Create test cases in evals/evals.json (see references/schemas.md for format):
To run the eval loop:
agents/grader.mduv run eval-viewer/generate_review.py <workspace>--static <output.html> instead of live server. ALWAYS show viewer to user BEFORE editing skill yourselfIf any fail → iterate. Find how the agent rationalizes around the skill, plug loopholes, re-verify.
Read the existing SKILL.md completely. Identify the problem class:
| Problem | Signal | Fix |
|---|---|---|
| Undertriggering | skill doesn't load | add keywords, trigger phrases, file types to description |
| Overtriggering | loads for unrelated queries | add negative triggers, be more specific |
| Skips body | follows description only | remove process/workflow from description |
| Inconsistent output | varies across sessions | add explicit templates, reduce freedom, add scripts |
| Too slow | large context | move detail to references/, cut body to <500 lines |
scripts/. Saves every future invocation from reinventing the wheelThe improvement cycle mirrors CREATE Step 6, but focused on the broken behavior:
agents/grader.mduv run eval-viewer/generate_review.py <workspace>--static <output.html> instead of live serverWhen you have two meaningfully different versions:
agents/comparator.md — receives outputs A and B without knowing which skill produced whichagents/analyzer.md — unblinds results, analyzes WHY the winner wonThis prevents bias. The comparator judges output quality, not skill design.
Three stages, run in order.
uv run scripts/eval_skill.py <skill-folder>Checks: frontmatter, naming, description quality, process leak detection, body size, structure, scripts. Target: 10/10, no warnings.
Generate 6 test prompts:
Run each in clean session. Target: 6/6 correct.
For automated trigger testing at scale, use:
uv run scripts/run_eval.py --eval-set <path> --skill-path <path> --runs-per-query 3Rate on 5 axes (1–10 each):
| Axis | What it measures |
|---|---|
| Discovery | triggers correctly, doesn't false-trigger |
| Clarity | instructions unambiguous, no guessing needed |
| Efficiency | token budget respected, progressive disclosure used |
| Robustness | handles edge cases, scripts have error handling |
| Completeness | covers the stated use cases fully |
Interpretation: 45–50 production ready · 35–44 solid · 25–34 needs work · <25 rewrite
Quick quality gate for third-party skills.
[ ] SKILL.md exists, exact case
[ ] Valid YAML frontmatter (name + description)
[ ] name: kebab-case, matches folder, ≤64 chars
[ ] description: ≤1024 chars, no angle brackets
[ ] description has triggers ("Use when...")
[ ] description has NO workflow/process steps
[ ] No README.md inside skill folder
[ ] SKILL.md < 500 lines
[ ] References max 1 level deep
[ ] Scripts tested and executable
[ ] No hardcoded paths/tokens/secretsThen run VALIDATE Stage 2 (discovery) on the description. Report score + checklist.
The checklist exists because these are the failure modes that actually happen in practice — especially process-in-description, which causes the agent to skip the body entirely.
Automated description optimization. The description competes with other skills for Claude's attention — optimization finds the wording that triggers most accurately.
#### Writing good eval queries
Queries must be realistic — concrete, detailed, with file paths, context, abbreviations, typos. Not "Format this data" but "my boss sent Q4 sales final FINAL v2.xlsx, add profit margin % column, revenue is col C costs col D".
Should-trigger (10): Different phrasings of the same intent — formal, casual, implicit. Include cases where user doesn't name the skill but clearly needs it. Add competing-skill edge cases.
Should-NOT-trigger (10): Near-misses that share keywords but need something different. Adjacent domains, ambiguous phrasing. "Write fibonacci" as negative for PDF skill = useless — too easy. Make negatives genuinely tricky.
Triggering mechanics: Claude only consults skills for tasks it can't handle directly. Simple queries ("read this PDF") won't trigger skills regardless of description — Claude handles them with basic tools. Eval queries must be substantive enough that consulting a skill would help.
assets/eval_review.htmluv run scripts/run_loop.py \
--eval-set evals/eval_set.json \
--skill-path <skill-dir> \
--model claude-sonnet-4-20250514 \
--max-iterations 5 \
--holdout 0.4 \
--verboseThe loop:
| Script | Purpose |
|---|---|
scripts/run_eval.py | Run trigger evaluation on a description |
scripts/improve_description.py | Claude proposes improved description |
scripts/generate_report.py | HTML visualization of optimization history |
scripts/aggregate_benchmark.py | Statistical aggregation of benchmark runs |
uv run scripts/quick_validate.py <skill-folder>uv run scripts/package_skill.py <skill-folder> [output-dir]Creates skill-name.skill (zip with .skill extension). Verify: unzip in temp dir, check structure intact.
| Directory | Loaded? | Purpose |
|---|---|---|
| SKILL.md | on trigger | brain — instructions |
| references/ | on demand | detailed docs, schemas |
| scripts/ | executed, not loaded | deterministic operations |
| assets/ | never loaded | templates, images |
| Level | When loaded | Budget |
|---|---|---|
| Frontmatter | always (system prompt) | ~100 words |
| SKILL.md body | on trigger | <500 lines |
| Bundled resources | on demand | unlimited |
[What it does] + Use when [triggers, file types, symptoms]. + Do NOT use for [negatives].| Path | What's inside |
|---|---|
agents/grader.md | Evidence-based assertion grading |
agents/comparator.md | Blind A/B output comparison |
agents/analyzer.md | Post-hoc analysis + benchmark notes |
references/patterns.md | 5 architectural patterns + anti-patterns |
references/schemas.md | JSON schemas for evals, grading, benchmark |
eval-viewer/ | Interactive HTML viewer for eval results |
assets/eval_review.html | Trigger eval set editor |
scripts/eval_skill.py | Structural validation (10-point scoring) |
scripts/init_skill.py | Skill scaffolder |
scripts/run_eval.py | Trigger evaluation runner |
scripts/run_loop.py | Eval + improve optimization loop |
scripts/improve_description.py | Claude-powered description improvement |
scripts/aggregate_benchmark.py | Benchmark statistics aggregator |
scripts/generate_report.py | HTML report generator |
scripts/quick_validate.py | Quick validation for packager |
scripts/package_skill.py | Skill → .skill packager |
scripts/utils.py | Shared utilities (parse_skill_md) |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.