CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

macos-auto-update

Add Sparkle auto-update support to a native macOS app. Use this skill whenever the user wants to add auto-updates, implement Sparkle, set up an appcast feed, add "Check for Updates" to their app, or integrate automatic update checking. Also trigger when the user mentions Sparkle, appcast, SUFeedURL, EdDSA signing, or update notifications. This covers the full setup: adding the Sparkle SPM dependency, creating the UpdaterManager singleton, wiring it into the app delegate and UI, configuring Info.plist, and generating the initial appcast.xml.

74

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

82%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-executed, highly actionable integration guide: every step has concrete, copy-paste-ready code or commands, the sequence is clear, and the heavy implementation is correctly pushed to a real reference file. Its weaknesses are minor — a few sentences of general Sparkle context, implicit rather than explicit validation checkpoints, and an appcast reference section that could be split out.

Suggestions

Trim the general-context sentences — e.g., "Sparkle is the standard open-source framework for macOS app updates outside the Mac App Store" and the second sentence of the Hardened Runtime section — since Claude already knows what Sparkle is.

Add one explicit validation checkpoint after Step 4, e.g., "Build and run; the Check for Updates button should become enabled once the updater starts — if it never enables, verify SUFeedURL points to the hosted appcast."

Move the "Appcast Item Format" section into a references/ file (e.g., references/appcast-format.md) and link to it from Step 5, keeping SKILL.md focused on initial setup.

DimensionReasoningScore

Conciseness

The body is dominated by executable code and commands with useful non-obvious rationale (e.g., "startingUpdater: false... gives you control over timing", the DEBUG-guard justification, the .accessory activation-policy note), but a few general-context sentences assume Claude lacks knowledge Sparkle already provides: "Sparkle is the standard open-source framework for macOS app updates outside the Mac App Store" and "Sparkle 2.x works with the standard hardened runtime configuration." These minor instances of over-explanation match anchor 4 rather than the every-token-earns-its-place anchor 5.

4 / 5

Actionability

Every step is copy-paste ready: the exact SPM URL with an "Up to Next Major Version" rule pinned to 2.0.0, a complete Info.plist XML block, a concrete find command for generate_keys, a complete AppDelegate, a complete SwiftUI settings pane, and a full appcast XML skeleton plus item template with clearly marked placeholders. This covers the common cases as anchor 5 requires; sign_update usage is shown even if its path is left to inference.

5 / 5

Workflow Clarity

A clear, well-sequenced 5-step flow (SPM dependency → UpdaterManager → Info.plist/keys → wiring → appcast) that matches the numbered Overview, with one explicit consistency requirement ("The URL must match SUFeedURL in Info.plist") and DEBUG guards built into the reference file. It sits above anchor 3's bare step list but below anchor 5 because verification steps are implicit rather than explicit (no build/run check that canCheckForUpdates becomes true); the destructive/batch cap does not apply since this is a non-destructive integration.

4 / 5

Progressive Disclosure

Good structure: the 178-line UpdaterManager implementation is properly externalized to the real, one-level-deep references/UpdaterManager.swift (the path cited in the body exists in the bundle), with the body keeping only its design decisions. Minor organization gaps keep it from anchor 5: the ~25-line "Appcast Item Format" section is release-tooling reference material that could live in its own reference file, and supplementary sections (Menu-Bar-Only Apps, Hardened Runtime) trail the numbered steps without cross-links.

4 / 5

Total

17

/

20

Passed

Description

100%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description that states a concrete capability set, enumerates the full setup scope, and provides an explicit and thorough 'Use when' trigger clause covering both user-goal phrasings and domain-specific technical terms. Third-person voice and no padding.

DimensionReasoningScore

Specificity

"adding the Sparkle SPM dependency, creating the UpdaterManager singleton, wiring it into the app delegate and UI, configuring Info.plist, and generating the initial appcast.xml" lists multiple specific concrete actions with comprehensive coverage of the setup, matching the anchor-5 example rather than anchor 4, which requires minor gaps in coverage. Voice is third person ("the user wants"), so no voice penalty applies.

5 / 5

Completeness

Explicitly answers what ("Add Sparkle auto-update support to a native macOS app... covers the full setup: adding the Sparkle SPM dependency, creating the UpdaterManager singleton, wiring it into the app delegate and UI, configuring Info.plist, and generating the initial appcast.xml") and when ("Use this skill whenever the user wants to... Also trigger when the user mentions Sparkle, appcast, SUFeedURL, EdDSA signing, or update notifications") with concrete trigger phrases — a direct match to the anchor-5 example.

5 / 5

Trigger Term Quality

Natural user phrasings ("add auto-updates", "implement Sparkle", "set up an appcast feed", "add 'Check for Updates'") are combined with technical triggers ("SUFeedURL, EdDSA signing, or update notifications") and synonyms (auto-updates / automatic update checking), plus file-level terms (appcast.xml). Coverage is comprehensive for the domain, exceeding anchor 4's 'a few natural terms missing'.

5 / 5

Distinctiveness Conflict Risk

A clear niche (Sparkle auto-updates for native macOS apps, explicitly scoped away from the Mac App Store) with distinct triggers (Sparkle, appcast, SUFeedURL, EdDSA) that no closely related skill would claim, giving minimal conflict risk.

5 / 5

Total

20

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

freekmurze/dotfiles

Path

config/claude/skills/auto-update/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.