Agent skill that helps Claude Code, Codex, Gemini, and Cursor write correct Swift App Intents code for Siri, Shortcuts, Spotlight, widgets, Control Center, and Apple Intelligence.
38
19 commits
updated Sep 26, 2026
🍎 Updated for WWDC 2026 - now covers the iOS 27 App Intents APIs: long-running & cancellable intents, on-screen awareness,
EntityCollection,SyncableEntity, and theAppIntentsTestingframework.
An agent skill that helps AI coding agents like Claude Code, Codex, Cursor, and Gemini write correct Swift App Intents code - exposing app actions and data to Siri, Shortcuts, Spotlight, widgets, Control Center, and Apple Intelligence.
It uses the Agent Skills format, so it works smoothly with Claude Code, Codex, Gemini, Cursor, and more.
AppIntent, OpenIntent, SnippetIntent, ForegroundContinuableIntent, DeleteIntent, ShowInAppSearchResultsIntent, TargetContentProvidingIntent, URLRepresentableIntent, ProgressReportingIntent, LongRunningIntent, CancellableIntent, WidgetConfigurationIntent, ControlConfigurationIntent, PredictableIntentLongRunningIntent + performBackgroundTask (iOS 27), CancellableIntent + withIntentCancellationHandler (iOS 26.4), background GPU access, allowedExecutionTargets to pin an intent to the app or an extensionForegroundContinuableIntent (iOS 17), requestToContinueInForeground, modern supportedModes + continueInForeground (iOS 26)ProvidesDialog, ReturnsValue, ShowsSnippetView, ShowsSnippetIntent, OpensIntent, OpenURLIntent, IntentDialog(full:supporting:), grammar agreementIntentDescription(categoryName:searchKeywords:resultValueName:), isDiscoverable, openAppWhenRun, hard limits (10 shortcuts, 1000 phrases)@Parameter (with Xcode 16 inferred titles), @AppEnum (with typeDisplayName), DynamicOptionsProvider, IntentParameterDependency, EntityCollection (identifiers-only at scale), native Duration / PersonNameComponents, valueState (set / cleared / unset for update intents), measurement options, array size per widget family, requestValue / needsValueError / requestConfirmation / requestChoice, conditional parameterSummary (Switch/Case/When/otherwise, widget-family conditions)AppEntity, IndexedEntity, TransientAppEntity, FileEntity, SyncableEntity (cross-device ids), OwnershipProvidingEntity (shared/public confirmation), RelevantEntities (proactive suggestions), shadow-struct pattern for SwiftData, @Property, @ComputedProperty(indexingKey:), @DeferredProperty, synonyms, pluralized TypeDisplayRepresentation, thumbnails (URL/Data/system/bundled), @UnionValue parametersEntityQuery, EntityStringQuery, EnumerableEntityQuery, EntityPropertyQuery (auto-generated Find intent with comparators + sort), UniqueIDEntityQuery, IndexedEntityQuery (Spotlight reindexing), IntentValueQuery (structured Siri search + visual intelligence)Transferable conformance for sharing, IntentValueRepresentation / ValueRepresentation for structured system types (IntentPerson, PlaceDescriptor), URLRepresentableEntity + URLRepresentableIntent for no-code universal-link opens, OpenURLIntent return type for post-create navigationShowsSnippetView (inline), ShowsSnippetIntent + SnippetIntent (indirect), interactive requestConfirmation(actionName:snippetIntent:) flows, iOS 26 snippet refresh cycle + SnippetIntent.reload(), 340pt height ceiling, Result vs Confirmation snippet types, Button(intent:)AppShortcutsProvider, the \(.applicationName) rule, updateAppShortcutParameters() (SwiftUI + UIKit), SiriTipView, ShortcutsLink, Flexible Matching (iOS 17+), Negative Phrases, AppShortcuts String Catalog, accent colors in Info.plist, Xcode's App Shortcuts Preview tool, watchOS / HomePod specificsWidgetConfigurationIntent, ControlConfigurationIntent, RelevantIntentManager + RelevantIntent for Smart Stack / complicationsIndexedEntity, CSSearchableIndex, associateAppEntity(_:priority:) for existing pipelines, @ComputedProperty(indexingKey:), custom attribute keys@Dependency, AppDependencyManager, data-controller pattern, AppIntentsPackage (frameworks, Swift Packages, static libs), cross-module entities, UISceneAppIntent + AppIntentSceneDelegate for UIKit, contentIdentifier + handlesExternalEvents for scene routingWidgetCenter.reloadAllTimelines() after intent writes, App Group sharing pattern for interactive widget stateModelContainer vs ModelContext sendability, safe cross-actor patterns@AppEntity / @AppIntent / @AppEnum schema macros, 13+ domains (.calendar.*, .messages.*, .photos.*, .journal.*, .mail.*, .browser.*, .visualIntelligence.*, .system.searchInApp, ...), three content-discovery paths (semantic index / structured search / in-app search), multi-schema build errors + Xcode fix-its, custom Siri responses, interaction donations (IntentDonationManager), confirmation + ownership, Use Model action via AttributedString parameters.userActivity, .appEntityIdentifier, collection forSelectionType, custom-canvas .appEntityUIElements), UIKit/AppKit equivalents, displayRepresentations fast path, entity annotations on User Notifications / Now Playing / AlarmKitIntentValueQuery + SemanticContentDescriptor, now on iOS / iPadOS / macOS, @UnionValue multi-type results, semanticContentSearch "More results", receiving data via system stores (EventKit / Contacts / HealthKit)AppIntentsTesting framework (out-of-process integration: IntentDefinitions, makeIntent/run(), entities(matching:), spotlightQuery(), viewAnnotations(), test-only intents), plus direct perform() struct tests, mocking @Dependency, Swift Testing patterns, what you can / can't unit-test@Model as AppEntity, missing \(.applicationName), @Query inside intents, unregistered intents, missing @Property, AppEntity instead of TransientAppEntity, missing Transferable, duplicate perform() on URLRepresentableIntent, mutation / expensive work in SnippetIntent.perform(), resolving entities at scale instead of EntityCollection, LongRunningIntent without progress, plain nil checks instead of valueState, cross-process write conflicts, TransientAppEntity for annotations, over-donating interactions, and moreYou can install this skill into Claude Code, Codex, Gemini, Cursor, and more by using npx:
npx skills add https://github.com/n0an/App-Intents-Agent-Skill --skill app-intents
If you get the error npx: command not found, it means you don't currently have Node installed. You need to run this command to install Node through Homebrew:
brew install node
And if that fails it usually means you need to install Homebrew first.
When using npx, you can select exactly which agents you want to use during the installation. You can also select whether the skill should be installed just for one project, or whether it should be made available for all your projects.
Claude Code:
/plugin install n0an/App-Intents-Agent-Skill
Gemini:
gemini extensions install https://github.com/n0an/App-Intents-Agent-Skill.git --consent
Alternatively, you can clone this whole repository and install it however you want.
The skill is called App Intents, and can be triggered in various ways. For example, in Claude Code you would use this:
/app-intents
And in Codex you would use this:
$app-intents
In both cases you can provide specific instructions if you want only a partial review. For example, /app-intents Fix the entity query in BookmarkEntity.swift on Claude, or $app-intents Add an OpenIntent that navigates to a selected article in Codex.
You can also trigger the skill using natural language:
Use the App Intents skill to review my Shortcuts integration in this project.
App Intents is a fast-moving framework that has changed significantly across iOS 16, 17, 18, 26, and the 27 releases (WWDC 2026). Most LLM training data either predates App Intents entirely or reflects the older SiriKit approach. As a result, agents routinely generate code that:
@Model class conform to AppEntity - which no longer compiles under Swift 6 because AppEntity requires Sendable@Query inside an intent, which silently does nothing because intents aren't views\(.applicationName) in Siri phrases, which fails the AppShortcutsProvider macro at build timeModelContainer and ModelContext inside perform() instead of injecting a shared data controller via @DependencyIntentResult variant, producing runtime type-check crashes that aren't caught by the compiler\(.applicationName) and shortcutTileColor, skips SiriTipView/ShortcutsLink, or never registers the intent in AppShortcutsProviderNSUserActivity or old SiriKit APIs when modern App Intents cover the use case cleanlyThis skill:
@Model entity conformance, bare String(format:) dialog, and unregistered intentsIndexedEntity, OpenIntent, ShowsSnippetView, @AssistantEntity / @AssistantIntent schemas, and the 27 releases additions (LongRunningIntent, EntityCollection, SyncableEntity, on-screen awareness, AppIntentsTesting)AppDependencyManager injection, main-actor-bound data controllers, and ModelContainer-only cross-actor transferContributions are welcome - whether adding new checks, improving existing examples, or fixing typos.
Available under the MIT License, which permits commercial use, modification, distribution, and private use.
Agent skill that helps Claude Code, Codex, Gemini, and Cursor write correct Swift App Intents code for Siri, Shortcuts, Spotlight, widgets, Control Center, and Apple Intelligence.
38
19 commits
updated Sep 26, 2026
🍎 Updated for WWDC 2026 - now covers the iOS 27 App Intents APIs: long-running & cancellable intents, on-screen awareness,
EntityCollection,SyncableEntity, and theAppIntentsTestingframework.
An agent skill that helps AI coding agents like Claude Code, Codex, Cursor, and Gemini write correct Swift App Intents code - exposing app actions and data to Siri, Shortcuts, Spotlight, widgets, Control Center, and Apple Intelligence.
It uses the Agent Skills format, so it works smoothly with Claude Code, Codex, Gemini, Cursor, and more.
AppIntent, OpenIntent, SnippetIntent, ForegroundContinuableIntent, DeleteIntent, ShowInAppSearchResultsIntent, TargetContentProvidingIntent, URLRepresentableIntent, ProgressReportingIntent, LongRunningIntent, CancellableIntent, WidgetConfigurationIntent, ControlConfigurationIntent, PredictableIntentLongRunningIntent + performBackgroundTask (iOS 27), CancellableIntent + withIntentCancellationHandler (iOS 26.4), background GPU access, allowedExecutionTargets to pin an intent to the app or an extensionForegroundContinuableIntent (iOS 17), requestToContinueInForeground, modern supportedModes + continueInForeground (iOS 26)ProvidesDialog, ReturnsValue, ShowsSnippetView, ShowsSnippetIntent, OpensIntent, OpenURLIntent, IntentDialog(full:supporting:), grammar agreementIntentDescription(categoryName:searchKeywords:resultValueName:), isDiscoverable, openAppWhenRun, hard limits (10 shortcuts, 1000 phrases)@Parameter (with Xcode 16 inferred titles), @AppEnum (with typeDisplayName), DynamicOptionsProvider, IntentParameterDependency, EntityCollection (identifiers-only at scale), native Duration / PersonNameComponents, valueState (set / cleared / unset for update intents), measurement options, array size per widget family, requestValue / needsValueError / requestConfirmation / requestChoice, conditional parameterSummary (Switch/Case/When/otherwise, widget-family conditions)AppEntity, IndexedEntity, TransientAppEntity, FileEntity, SyncableEntity (cross-device ids), OwnershipProvidingEntity (shared/public confirmation), RelevantEntities (proactive suggestions), shadow-struct pattern for SwiftData, @Property, @ComputedProperty(indexingKey:), @DeferredProperty, synonyms, pluralized TypeDisplayRepresentation, thumbnails (URL/Data/system/bundled), @UnionValue parametersEntityQuery, EntityStringQuery, EnumerableEntityQuery, EntityPropertyQuery (auto-generated Find intent with comparators + sort), UniqueIDEntityQuery, IndexedEntityQuery (Spotlight reindexing), IntentValueQuery (structured Siri search + visual intelligence)Transferable conformance for sharing, IntentValueRepresentation / ValueRepresentation for structured system types (IntentPerson, PlaceDescriptor), URLRepresentableEntity + URLRepresentableIntent for no-code universal-link opens, OpenURLIntent return type for post-create navigationShowsSnippetView (inline), ShowsSnippetIntent + SnippetIntent (indirect), interactive requestConfirmation(actionName:snippetIntent:) flows, iOS 26 snippet refresh cycle + SnippetIntent.reload(), 340pt height ceiling, Result vs Confirmation snippet types, Button(intent:)AppShortcutsProvider, the \(.applicationName) rule, updateAppShortcutParameters() (SwiftUI + UIKit), SiriTipView, ShortcutsLink, Flexible Matching (iOS 17+), Negative Phrases, AppShortcuts String Catalog, accent colors in Info.plist, Xcode's App Shortcuts Preview tool, watchOS / HomePod specificsWidgetConfigurationIntent, ControlConfigurationIntent, RelevantIntentManager + RelevantIntent for Smart Stack / complicationsIndexedEntity, CSSearchableIndex, associateAppEntity(_:priority:) for existing pipelines, @ComputedProperty(indexingKey:), custom attribute keys@Dependency, AppDependencyManager, data-controller pattern, AppIntentsPackage (frameworks, Swift Packages, static libs), cross-module entities, UISceneAppIntent + AppIntentSceneDelegate for UIKit, contentIdentifier + handlesExternalEvents for scene routingWidgetCenter.reloadAllTimelines() after intent writes, App Group sharing pattern for interactive widget stateModelContainer vs ModelContext sendability, safe cross-actor patterns@AppEntity / @AppIntent / @AppEnum schema macros, 13+ domains (.calendar.*, .messages.*, .photos.*, .journal.*, .mail.*, .browser.*, .visualIntelligence.*, .system.searchInApp, ...), three content-discovery paths (semantic index / structured search / in-app search), multi-schema build errors + Xcode fix-its, custom Siri responses, interaction donations (IntentDonationManager), confirmation + ownership, Use Model action via AttributedString parameters.userActivity, .appEntityIdentifier, collection forSelectionType, custom-canvas .appEntityUIElements), UIKit/AppKit equivalents, displayRepresentations fast path, entity annotations on User Notifications / Now Playing / AlarmKitIntentValueQuery + SemanticContentDescriptor, now on iOS / iPadOS / macOS, @UnionValue multi-type results, semanticContentSearch "More results", receiving data via system stores (EventKit / Contacts / HealthKit)AppIntentsTesting framework (out-of-process integration: IntentDefinitions, makeIntent/run(), entities(matching:), spotlightQuery(), viewAnnotations(), test-only intents), plus direct perform() struct tests, mocking @Dependency, Swift Testing patterns, what you can / can't unit-test@Model as AppEntity, missing \(.applicationName), @Query inside intents, unregistered intents, missing @Property, AppEntity instead of TransientAppEntity, missing Transferable, duplicate perform() on URLRepresentableIntent, mutation / expensive work in SnippetIntent.perform(), resolving entities at scale instead of EntityCollection, LongRunningIntent without progress, plain nil checks instead of valueState, cross-process write conflicts, TransientAppEntity for annotations, over-donating interactions, and moreYou can install this skill into Claude Code, Codex, Gemini, Cursor, and more by using npx:
npx skills add https://github.com/n0an/App-Intents-Agent-Skill --skill app-intents
If you get the error npx: command not found, it means you don't currently have Node installed. You need to run this command to install Node through Homebrew:
brew install node
And if that fails it usually means you need to install Homebrew first.
When using npx, you can select exactly which agents you want to use during the installation. You can also select whether the skill should be installed just for one project, or whether it should be made available for all your projects.
Claude Code:
/plugin install n0an/App-Intents-Agent-Skill
Gemini:
gemini extensions install https://github.com/n0an/App-Intents-Agent-Skill.git --consent
Alternatively, you can clone this whole repository and install it however you want.
The skill is called App Intents, and can be triggered in various ways. For example, in Claude Code you would use this:
/app-intents
And in Codex you would use this:
$app-intents
In both cases you can provide specific instructions if you want only a partial review. For example, /app-intents Fix the entity query in BookmarkEntity.swift on Claude, or $app-intents Add an OpenIntent that navigates to a selected article in Codex.
You can also trigger the skill using natural language:
Use the App Intents skill to review my Shortcuts integration in this project.
App Intents is a fast-moving framework that has changed significantly across iOS 16, 17, 18, 26, and the 27 releases (WWDC 2026). Most LLM training data either predates App Intents entirely or reflects the older SiriKit approach. As a result, agents routinely generate code that:
@Model class conform to AppEntity - which no longer compiles under Swift 6 because AppEntity requires Sendable@Query inside an intent, which silently does nothing because intents aren't views\(.applicationName) in Siri phrases, which fails the AppShortcutsProvider macro at build timeModelContainer and ModelContext inside perform() instead of injecting a shared data controller via @DependencyIntentResult variant, producing runtime type-check crashes that aren't caught by the compiler\(.applicationName) and shortcutTileColor, skips SiriTipView/ShortcutsLink, or never registers the intent in AppShortcutsProviderNSUserActivity or old SiriKit APIs when modern App Intents cover the use case cleanlyThis skill:
@Model entity conformance, bare String(format:) dialog, and unregistered intentsIndexedEntity, OpenIntent, ShowsSnippetView, @AssistantEntity / @AssistantIntent schemas, and the 27 releases additions (LongRunningIntent, EntityCollection, SyncableEntity, on-screen awareness, AppIntentsTesting)AppDependencyManager injection, main-actor-bound data controllers, and ModelContainer-only cross-actor transferContributions are welcome - whether adding new checks, improving existing examples, or fixing typos.
Available under the MIT License, which permits commercial use, modification, distribution, and private use.