create-skill — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited create-skill (Agent Skill) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
<example> <commentary>User wants to create a brand-new skill from scratch.</commentary> user: "Create a new skill called link-validator" assistant: [triggers create-skill, runs discovery interview, scaffolds directory structure with SKILL.md, evals/evals.json, references/acceptance-criteria.md] </example>
<example> <commentary>Negative — user wants to improve an existing skill, not scaffold a new one.</commentary> user: "Improve the trigger description for my link-checker skill" assistant: [triggers os-skill-improvement, not create-skill] </example>
Scaffolds a complete, standards-compliant agent skill directory. Handles filesystem operations, template rendering, name validation, and discovery — then hands off to the TDD quality gate.
Scope: This skill owns structure. It does not own content quality or routing accuracy. Those are governed by os-skill-improvement (see cross-plugin handoff below).
$ARGUMENTS — optional skill name or brief use-case description passed as initialcontext to the discovery phase. Omit to start with open discovery.
Before writing any files, capture all required inputs:
link-validator). Validate: no spaces,no special characters, no shell injection sequences (reject names containing ;, &, |, $, ` ``).
allowed-tools does it require?If $ARGUMENTS is provided, treat it as a starting point and confirm rather than re-ask.
Present the proposed directory layout before writing anything:
plugins/<plugin>/skills/<skill-name>/
SKILL.md
evals/
evals.json
references/
acceptance-criteria.md
./scripts/ (if the skill needs Python helpers)
./assets/ (if the skill needs static resources)Confirm with the user before proceeding. If a directory with that name already exists:
"Warning: <path> already exists. Overwrite? (yes/no)" Do NOT overwrite without explicit confirmation.Create the confirmed directory structure. Standards enforced by acceptance-criteria.md:
scripts/*.py. Never generate .sh bash scripts.scripts/ directory, create a file-level symlink in skills/<skill>/scripts/ pointing to ../../../scripts/<canonical_name>.py. Never duplicate the file. The symlink filename may differ from the target (e.g. execute.py → exploration_optimizer_execute.py). Create with:
ln -s ../../../scripts/<canonical_name>.py skills/<skill>/scripts/<name>.pyVerify the symlink resolved: python -c "import os; print(os.path.exists('skills/<skill>/scripts/<name>.py'))" must print True. On Windows/core.symlinks=false machines, git will check these out as plain-text "stand-in" files — run bulk_symlink_fixer.py to restore them after checkout.
name, description (use the purpose from Phase 1; MUST NOT exceed 1024 characters),allowed-tools. Body: stub sections for Identity, Steps, and Common Failures.
should_trigger schema: { "id": "eval-1-positive", "type": "positive", "prompt": "REPLACE", "should_trigger": true }
{ "id": "eval-2-negative", "type": "negative", "prompt": "REPLACE", "should_trigger": false }⚠️ Schema requirement: Always useshould_trigger: true/false. The legacyexpected_behaviorstring field is ignored by the eval scorer and will produce 0% accuracy.
references/acceptance-criteria.md with theacceptance criteria captured in Phase 1.
[!TIP] See INSTALL.md for instructions on how to install missing dependencies.
If `os-skill-improvement` is available, hand off immediately after scaffolding:
Invoke os-skill-improvement on the newly scaffolded skill at <path>.
The RED scenario is: [trigger phrase from Phase 1 discovery].
Run the RED-GREEN-REFACTOR cycle to verify routing accuracy before shipping.If not available, advise the user:
Scaffold complete. To verify routing accuracy and trigger description quality, ensure **os-skill-improvement** is installed. See [INSTALL.md](https://github.com/richfrem/agent-plugins-skills/blob/main/INSTALL.md).✅ Scaffolded: plugins/<plugin>/skills/<skill-name>/
Files created: SKILL.md, evals/evals.json, references/acceptance-criteria.md
Quality gate: [PASSED via ~~skill-improvement | SKIPPED — ~~eval-gate not installed]
Next: fill in REPLACE placeholders in evals/evals.json, then run ~~eval-gate baseline~~skill-improvement capability — that skill owns contentquality and routing improvement. create-skill is for net-new scaffolding only.
the full trace to the user — do not silently skip
base template inline and instruct the user to fill values manually
acceptance-criteria.md — structural pass/fail criteriafallback-tree.md — error handling proceduresreferences/ADRs/. Always consult them for standards on plugin architecture, shared scripts, cross-plugin dependencies, symlinking, and loose coupling to avoid repeating yourself.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.