skill-gen — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skill-gen (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.
A guided generator for portable Agent Skills. It conducts a short interview, picks the minimum viable shape, and writes a skill that runs across Claude Code, OpenAI Codex, and opencode — isolating each platform's quirks instead of hard-coding one.
Core principle. The base spec recognizes only five frontmatter fields (name,description,license,compatibility,metadata). Everything else (allowed-tools,disable-model-invocation, Codexopenai.yaml, opencodepermission.skill) is platform-specific and lives in a different place per runtime. A portable skill keeps its logic in the body +references/+scripts/, and treats per-platform control as a sidecar — never a dependency.
This SKILL.md is a router. Load only the reference you need for the current step.
| Open when you need to… | Read |
|---|---|
| know exactly what each runtime supports (dirs, frontmatter, tools, invocation) | references/platforms.md |
| decide the portable layout and what breaks where | references/portability.md |
| look up every frontmatter field and which platform honors it | references/frontmatter.md |
decide what goes in SKILL.md vs references//scripts//assets/ | references/progressive-disclosure.md |
| pick an execution shape and decide single vs multiple skills | references/archetypes-and-splitting.md |
| (only if the skill must involve the user) elicit well — recommended defaults, calibrate to experience; otherwise default to autonomy | references/interaction-and-elicitation.md |
| find & ground the content — local code, context7, web, subagent fan-out, then synthesize | references/research-grounding.md |
| set least-privilege tools and avoid injection/exfil risks | references/security.md |
| improve/fix an existing skill from outcomes & examples | references/iteration.md |
| tune the trigger — reduce false positives/negatives in the description | references/description-optimization.md |
| copy a starting skeleton | assets/templates/ |
First decide the operation:
to the iteration loop in references/iteration.md: capture the examples, split working vs holdout, make the smallest delta, replay, and confirm no regression. Then run Step 5 (validate) + the description tuning in Step 4b before reporting. Skip the create-only steps.
If the conversation already contains the workflow to capture ("turn this into a skill"), extract answers from history before asking: the steps taken, tools used, corrections the user made, input/output formats observed. Only ask what you cannot infer.
Ask one question at a time, each with your recommended answer, and explore the codebase instead of asking when the answer is discoverable. Use the AskUserQuestion tool when it fits. Cover these decision axes (full rationale in the linked references):
should activate it? What is the expected output? (The `description` is the trigger — get real phrases the user would actually type.)
triggers/audiences? If triggers diverge, split. → references/archetypes-and-splitting.md
install location(s) and which sidecars to emit. → references/platforms.md
references/archetypes-and-splitting.md:references/)scripts/)barred from auto-invocation? → references/security.md + references/frontmatter.md
references/ split now. → references/progressive-disclosure.md
Record the chosen answers as a short spec before writing anything. If the user says "just vibe with me / skip the interview", collapse to questions 1, 3, and 5 only.
Prefer autonomy. A generated skill should act on its own and involve the user only for a decision genuinely theirs to make, or a real branch the agent can't resolve from context and sensible defaults. Most skills should lean autonomous. Only when the skill must elicit a choice (or the user is explicitly driving the decision) give it the thinking-partner style — a recommended default marked "(Recomendado)" with a one-line why, calibrated to the user's experience. → references/interaction-and-elicitation.md. (E.g. tech-discovery is intentionally interactive; a formatter or one-shot generator should just run.)
A skill is only as good as the knowledge curated into it — structure isn't enough. When the skill encodes domain knowledge that must be correct and current (a library/framework/API, a security/compliance domain, a methodology, anything with per-language/per-platform detail), go find the content → references/research-grounding.md:
Grep/Glob the target repo for real conventions and gotchas;check installed versions and pin research to them; read sibling skills for house style.
primary sources (official docs, RFCs) over blogs; use WebSearch/WebFetch for recent practice.
final references:
(<workspace>/<slug>/raw/NN-*.md), one per dimension — fan out with subagents (`Task`), one per item, each writing its own file with provenance + confidence.
verifying non-obvious claims against a second source first. The raw workspace doesn't ship.
Skip this step for a thin procedural wrapper with no external knowledge. Output: a short research log (findings + sources + gaps) that feeds the authoring step.
From the interview, fix:
name, 1–64 chars, lowercase, single-hyphen separators);references/portability.md §placement);references/, scripts/, assets/) the shape requires.Default to .claude/skills/<name>/ when targeting Claude Code and opencode — opencode reads .claude/skills/ natively, so one copy covers both. Add a .codex/skills/<name>/ copy (or a config.toml entry) only when Codex is a target. Use .agents/skills/<name>/ when the user wants the broadest cross-client convention.
Start from assets/templates/SKILL.md.tpl. Rules:
allowed-tools. Unknown fields are harmless in opencode/Codex (ignored) but keep them minimal. → references/frontmatter.md
Claude-only — those don't expand in Codex/opencode. Instead, instruct the agent to run the command as a workflow step ("run ls -la and read the output").
SKILL.md under ~500 lines; route heavy material into references/ with explicit"open when…" pointers. → references/progressive-disclosure.md
prose.
allowed-tools (and optionally disable-model-invocation: true) in thefrontmatter. Use the scoped syntax Bash(git add *) for least privilege.
agents/openai.yaml from assets/templates/openai.yaml.tpl(dependencies, allow_implicit_invocation). Tool/dep control lives here, not in frontmatter.
allowed-tools; permission is set in the user's opencode.jsonunder permission.skill. Don't write to their config — instead, if the skill needs restriction, emit a short PORTABILITY.md telling them the exact opencode.json snippet.
PORTABILITY.md listing what toconfigure where (template in assets/templates/). → references/portability.md
The description is what decides whether the skill fires. Tune it before validating → references/description-optimization.md: draft realistic trigger phrasing, build should-trigger / should-not-trigger query sets (the near-misses matter most), check the description against both, and edit until false positives/negatives are acceptable. Keep it generic across runtimes unless the skill is intentionally provider-specific.
Run the bundled checker, then a security pass:
python3 scripts/validate_skill.py <path-to-generated-skill>It checks: SKILL.md exists, valid YAML, name/description present and within limits, name matches the directory, and flags Claude-only constructs (!cmd`, ${CLAUDE_SKILL_DIR}) when the skill is declared cross-platform. Then apply references/security.md (least privilege, no secret-prompting, review any scripts/). If a skill-scanner` skill is available, run it too.
Return:
config.toml entry, opencode permission snippet).
SKILL.md, 5 fields +allowed-tools: Read Grep Glob, no references. Done in one file.
allowed-tools for Claude,openai.yaml for Codex, PORTABILITY.md for opencode permissions.
SKILL.md + references/<topic>.md, each with an"open when…" entry.
scripts/ helper so every future run reusesit instead of reinventing.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.