skill-maintainer
Skill Maintainer — Documentation Ingestion & Skill Updater
Process new Apple developer documentation and route extracted knowledge into the correct skill files.
Workflow
Step 1: Classify Incoming Documentation
Read each uploaded document and classify it by answering:
| Question | Action |
|---|---|
| Which framework(s) does it cover? | Map to target skill(s) using the Skill Registry below |
| Is this a new API or an update to an existing one? | New → may need new skill; Update → patch existing |
| What's the minimum deployment target? | Tag patterns with OS version requirements |
| Does it deprecate anything? | Add to Critical Constraints in target skill |
If a document spans multiple skills (e.g., "SwiftUI-WebKit-Integration" touches both swiftui-core and a potential swiftui-webkit skill), extract relevant portions into each.
Step 2: Extract Actionable Content
From each document, extract exactly these categories:
Patterns — Working, copy-pasteable code blocks with:
- The API call or view/modifier being demonstrated
- Required imports
- Minimum OS version (if not the latest)
- Inline comments on non-obvious behavior
Constraints — Things an LLM will get wrong:
- Deprecated APIs that the new one replaces (❌ old → ✅ new)
- Parameters that changed names or types
- Behaviors that differ from what the name implies
- Common mistakes visible in the doc's "Best Practices" or notes
Decision Logic — When to use which approach:
- If the doc presents multiple approaches (e.g.,
.backgroundvs.foreground(.dynamic)intent modes), capture the decision tree - If the doc distinguishes platform availability, capture the conditional
References — Source links:
- Apple Developer Documentation URLs
- WWDC session links with year
Step 3: Diff Against Existing Skills
Before writing, read the target skill file(s) and check:
- Duplicate patterns — Does this pattern already exist? If yes, check if the new version supersedes it
- Contradictions — Does the new doc contradict existing constraints? If yes, the new doc wins (it's more recent)
- Gaps — Does the existing skill lack coverage for this area? If yes, add a new section
- Deprecations — Does the new doc make any existing patterns obsolete? If yes, move old pattern to constraints with ❌
Step 4: Update Target Skills
Apply changes following the target skill's internal structure. Every skill should maintain these sections (add if missing):
## Critical Constraints ← ❌ DO NOT / ✅ INSTEAD rules
## Decision Tree ← When to use what
## Verified Patterns ← Working code blocks
### Pattern: [Name] ← Each with OS version tag
## Common Mistakes & Fixes ← Table format
## References ← Apple doc + WWDC links
Formatting rules for inserted content:
- Tag every pattern with version:
<!-- Verified: macOS 26, Swift 6.2, Xcode 26 --> - Prefix new constraints with the source:
<!-- Source: SwiftUI-New-Toolbar-Features.md --> - Keep code blocks self-contained (include imports)
- Prefer short inline comments over paragraph explanations
Step 5: Handle New Skills
If the document covers a framework with no existing skill, create one:
- Use the Skill Registry to confirm no existing skill covers it
- Create
SKILL.mdwith proper frontmatter - Follow the standard section structure above
- If content exceeds ~400 lines, split into
SKILL.md(core workflow + index) andreferences/files - Register the new skill in the registry
Step 6: Report Changes
After processing, output a summary:
## Ingestion Report
### Documents Processed
- [filename] → [target skill(s)]
### Changes Made
| Skill | Action | Details |
|-------|--------|---------|
| swift-lang | UPDATED | Added @concurrent attribute pattern, Swift 6.2 default MainActor isolation |
| liquid-glass | UPDATED | Added WidgetKit accented rendering mode |
| swiftui-webkit | CREATED | New skill — WebView/WebPage APIs from SwiftUI-WebKit-Integration.md |
### Deprecations Flagged
- `NavigationView` → `NavigationSplitView` (swiftui-core)
- `ObservableObject` → `@Observable` for macOS 14+ (swift-lang)
### Unresolved
- [any docs that didn't map cleanly — ask user for guidance]
Skill Registry
Map frameworks/topics to target skills. Update this when creating new skills.
| Framework / Topic | Target Skill | Reference Files |
|---|---|---|
| Swift language, concurrency, value types, macros | swift-lang |
— |
| SwiftUI views, navigation, state, toolbars, text | swiftui-core |
— |
| SwiftData models, queries, inheritance, migration | swiftdata |
— |
| macOS app lifecycle, windows, scenes, entitlements | macos-app-structure |
— |
| AppKit bridging, NSView, NSPanel, NSEvent | appkit-bridge |
— |
| Global hotkeys, CGEvent, keyboard monitoring | global-hotkeys |
— |
| Clipboard, text insertion, paste simulation | pasteboard-textinsertion |
— |
| macOS permissions, Accessibility, TCC | macos-permissions |
— |
| Liquid Glass (SwiftUI, AppKit, UIKit, WidgetKit) | liquid-glass |
Per-framework reference files |
| WebView, WebPage, WebKit in SwiftUI | swiftui-webkit |
— |
| FoundationModels, on-device LLM, @Generable | foundation-models |
— |
| AppIntents, Siri, Shortcuts, Spotlight | app-intents |
— |
| StoreKit, IAP, subscriptions | macos-distribution |
— |
| Swift Testing, @Test, #expect | testing-swift |
— |
| MapKit, GeoToolbox, PlaceDescriptor | mapkit-geo (optional) |
— |
| Charts, Chart3D, SurfacePlot | charts-3d (optional) |
— |
Unmapped content: If a document doesn't fit any existing skill, flag it and ask the user whether to create a new skill or fold it into an existing one.
Classification Heuristics
Use these signals to auto-classify documents:
| Signal in Document | Likely Target Skill |
|---|---|
import SwiftUI + view/modifier patterns |
swiftui-core |
import SwiftData or @Model |
swiftdata |
import AppKit or NS* classes |
appkit-bridge |
import FoundationModels or LanguageModelSession |
foundation-models |
import WebKit + WebView/WebPage |
swiftui-webkit |
import AppIntents or AppIntent protocol |
app-intents |
import StoreKit |
macos-distribution |
glassEffect, GlassEffectContainer, Liquid Glass |
liquid-glass |
@concurrent, nonisolated, Sendable, actor isolation |
swift-lang |
InlineArray, Span, MutableSpan |
swift-lang |
CGEvent, NSEvent.addGlobalMonitor |
global-hotkeys |
NSPasteboard, AXUIElement |
pasteboard-textinsertion |
AXIsProcessTrusted, permission prompts |
macos-permissions |
WindowGroup, MenuBarExtra, Settings scene |
macos-app-structure |
@Test, #expect, @Suite |
testing-swift |
Quality Rules
When updating skills, enforce these standards:
- No orphan code — Every code block must include required
importstatements - No version ambiguity — Every pattern tagged with minimum OS version
- No stale deprecations — If adding a new way, mark the old way as ❌
- No duplicates — Search existing skill before inserting; merge if similar
- Constraints > Patterns — It's more valuable to tell the agent what NOT to do than to show one more example
- Size budget — SKILL.md body stays under 500 lines; overflow goes to
references/ - Self-contained patterns — Each code block should compile independently if pasted into a fresh file with the right imports
Batch Processing
When processing multiple documents at once:
- Read all documents first to build a complete picture
- Group by target skill to minimize file edits
- Process in dependency order:
swift-langfirst (language level), then frameworks - Deduplicate across documents (e.g., Liquid Glass appears in 4 docs — consolidate)
- Generate a single unified ingestion report at the end
More from makgunay/claude-swift-skills
macos-app-structure
macOS application architecture patterns covering App protocol (@main), Scene types (WindowGroup, Window, Settings, MenuBarExtra), multi-window management, NSApplicationDelegateAdaptor for AppKit lifecycle hooks, Info.plist configuration (LSUIElement for menu bar apps, NSAccessibilityUsageDescription), entitlements for sandbox/hardened runtime, and project structure conventions. Use when scaffolding a new macOS app, configuring scenes and windows, setting up menu bar apps, or resolving macOS-specific lifecycle issues. Corrects the common LLM mistake of generating iOS-only app structures.
31macos-permissions
macOS permission handling for Accessibility (AXIsProcessTrusted), Screen Recording, Full Disk Access, input monitoring, camera, microphone, location, and contacts. Covers TCC (Transparency Consent and Control) database, graceful degradation when permissions are denied, permission prompting patterns, opening System Settings to the correct pane, detecting permission changes, and the privacy manifest (PrivacyInfo.xcprivacy) requirement. Use when implementing features that require system permissions, building permission onboarding flows, or handling denied permissions gracefully.
17appkit-bridge
Bridging AppKit components into SwiftUI macOS apps. Covers NSViewRepresentable and NSViewControllerRepresentable protocols for hosting AppKit views in SwiftUI, NSHostingView/NSHostingController for hosting SwiftUI in AppKit, NSPanel for floating windows, NSWindow configuration (styleMask, level, collectionBehavior), responder chain integration, NSEvent monitoring (global and local), NSAnimationContext for AppKit animations, NSPopover, NSStatusItem for menu bar, and NSGlassEffectView for AppKit Liquid Glass. Use when SwiftUI lacks a native equivalent, building floating panels, custom window chrome, or integrating legacy AppKit components.
15swiftui-core
Core SwiftUI patterns for macOS and iOS development including navigation (NavigationSplitView, NavigationStack), state management (@State, @Binding, @Environment, @Bindable with @Observable), the new customizable toolbar system (toolbar IDs, ToolbarSpacer, DefaultToolbarItem, searchToolbarBehavior, matchedTransitionSource, sharedBackgroundVisibility), styled text editing (TextEditor with AttributedString, AttributedTextSelection, transformAttributes, textFormattingDefinition), and layout patterns. Use when building any SwiftUI view, implementing navigation, managing state, creating toolbars, or building rich text editors. Corrects common LLM errors like using deprecated NavigationView, wrong state wrappers, and outdated toolbar APIs.
14global-hotkeys
System-wide keyboard shortcut registration on macOS using NSEvent monitoring (simple, app-level) and Carbon EventHotKey API (reliable, system-wide). Covers NSEvent.addGlobalMonitorForEvents and addLocalMonitorForEvents, CGEvent tap for keystroke simulation, Carbon RegisterEventHotKey for system-wide hotkeys, modifier flag handling (.deviceIndependentFlagsMask), common key code mappings, debouncing, Accessibility permission requirements (AXIsProcessTrusted), and SwiftUI .onKeyPress for in-app shortcuts. Use when implementing global keyboard shortcuts, hotkey-triggered panels, or system-wide key event monitoring.
11swiftui-webkit
Native SwiftUI WebKit integration with the new WebView struct and WebPage observable class. Covers WebView creation from URLs, WebPage for navigation control and state management, JavaScript execution (callJavaScript with arguments and content worlds), custom URL scheme handlers, navigation management (load, reload, back/forward), navigation decisions, text search (findNavigator), content capture (snapshots, PDF generation, web archives), and configuration (data stores, user agents, JS permissions). Use when embedding web content in SwiftUI apps instead of the old WKWebView + UIViewRepresentable/NSViewRepresentable bridge pattern. This is a brand new API — do NOT use the old WKWebView wrapping approach.
10