skill-authoring-patterns — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skill-authoring-patterns (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.
This is a thin complement, not a replacement. For the general discipline of writing a skill — whether a skill should exist at all, the test-first / RED-GREEN loop, matching the guidance form to the failure mode, and word-count budgets — use `superpowers:writing-skills` first. This skill adds only what is specific to this catalog and to Apple/Swift framework skills: how to word descriptions so an agent routes to the right framework skill, the section conventions we standardize on, and how we review skills.
SKILL.md for this repo (especially an Apple/Swift framework skill).description routes wrong (or over-fires); you're rewording it.references/.This skill owns the catalog-specific and Apple/Swift-specific authoring conventions below. It does not own: the decision to create a skill, test-first skill development, or general prose-economy rules — route those to superpowers:writing-skills. Distribution/packaging (plugin vs marketplace, discovery) → claude-skill-plugin-packaging.
The description is the only part of a skill that stays in the model's context by default (the body loads when the skill is invoked, and the description is length-capped). So spend its words on routing, not summary.
Sendable, @MainActor, MetricKit, AccessibilityFocusState. This is the highest-leverage delta for framework skills: an agent routing on "I'm getting a Sendable error" only lands here if Sendable is in the description.BAD: description: Helps with accessibility.
GOOD: description: VoiceOver / Dynamic Type / touch-target implementation for SwiftUI & UIKit.
Use when adding or auditing user-facing UI; when asked "make this accessible" / "VoiceOver
doesn't read this" / "does this pass WCAG"; before an App Review a11y pass. Covers
accessibilityLabel/value/hint/traits, Dynamic Type + minimumScaleFactor, 44pt targets.
Does NOT cover deep Rotor/Focus APIs — see <sibling>.Order the middle by the topic's pedagogy, but keep these conventions:
DateFormatter() in body"), as many as are real — do not pad to a number.- [ ] list at the end, runnable top-to-bottom.Use a scope-boundary line in the body wherever a sibling is close ("owns X; does NOT own Y → route to <sibling>") — this is what stops two framework skills both claiming the same request.
---
name: <kebab-matches-folder>
description: <precision router — see above>
---
# <Title>
<1-paragraph scope: what it implements/reviews + target version>
## When to invoke
## Scope ← what it does NOT own → sibling
## <body: triage/workflow → decision table → rules → code>
## Rationale
## Deviation
## Common Mistakes
## Review Checklist
## References ← only if it has references/
## Related skillsKeep SKILL.md scannable: decision logic, short paired WRONG/RIGHT snippets (one point each), quick tables. Move long migrations, full API references, and big samples into references/*.md and point to them from `SKILL.md` with a plain instruction ("for the full lock-vs-actor guide, read references/synchronization.md"). This is a documentation convention — the agent reads those files via normal file reads when your SKILL.md tells it to; there is no automatic lazy-load. It keeps the always-in-context cost low while letting depth exist.
name is kebab-case; our consistency gate requires `name` to equal the directory (run mise run check) for clean cross-references and tooling. (Note: that's our rule — Claude Code itself derives the command from the directory and treats name as a label.)widgetkit, storekit). For cross-cutting topics use a descriptive compound at the right altitude — swift-concurrency, not the too-broad swiftui nor the too-narrow swiftui-observable.When you CR a skill or a batch, apply the evidence-based, multi-lens doctrine (it caught real errors in this catalog):
SKILL.md, bloating always-in-context cost — move to references/..task, our build has bug #361") — ships wrong advice to every consumer.#available guards or won't compile.superpowers:writing-skills first.)name equals the directory; mise run check passes.description is router form: verb-anchored, embeds the triggering framework APIs, lists trigger scenarios; a negative boundary if it could over-fire.references/*.md with an in-body pointer; SKILL.md stays scannable.Rationale + Deviation present; code uses current APIs with version gates marked inline.Common Mistakes are concrete and anti-pattern-named; no padding.superpowers:writing-skills — read first for the general discipline this skill deliberately does not repeat.claude-skill-plugin-packaging — packaging/distribution/discovery of the authored skill.subagent-review-cycles — the round structure the evidence-based CR plugs into.The structural patterns (router descriptions, bookend sections, two-tier references, naming) were distilled by studying high-quality public Swift/Apple skill collections — methodology only, no content copied — and combined with this catalog's own Rationale/Deviation convention and an evidence-based multi-reviewer CR doctrine. General skill-authoring doctrine is intentionally delegated to superpowers:writing-skills.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.