
App Intents
Ship Spotlight and Siri shortcuts for an iOS app by indexing AppEntity types correctly and avoiding duplicate Core Spotlight results.
Overview
App Intents is an agent skill for the Build phase that reviews and corrects iOS App Intents and Core Spotlight indexing plans so entities appear once in search and open with the right intent.
Install
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill app-intentsWhat is this skill?
- Correction-focused review aligned to eval expectations for IndexedEntity and Spotlight indexing
- Covers `@Property(indexingKey:)` / `@ComputedProperty(indexingKey:)` instead of hand-rolled attribute misuse
- Requires named `CSSearchableIndex` plus `indexAppEntities` rather than relying on legacy-only paths
- Warns when custom `attributeSet` drops default attributes unless `defaultAttributeSet` is merged
- Recommends `associateAppEntity(_:priority:)` and `OpenIntent` to prevent duplicate results and deep links
- Eval scenario targets iOS 26 recipe app IndexedEntity Spotlight review
Adoption & trust: 1.8k installs on skills.sh; 713 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You want recipes or other models in Spotlight and Shortcuts but your plan mixes legacy CSSearchableItem indexing, wrong attribute sets, and missing OpenIntent handlers.
Who is it for?
Indie iOS devs adding or refactoring IndexedEntity Spotlight search on an existing app that may still index CSSearchableItem data.
Skip if: Greenfield apps with no Spotlight requirements, Android-only projects, or teams that already have an approved indexing spec and passing integration tests.
When should I use this skill?
Reviewing or planning App Intents Spotlight indexing, IndexedEntity conformance, or migration off duplicate CSSearchableItem indexing.
What do I get? / Deliverables
You get a checklist-aligned correction list you can implement before merge, with named indexes, non-duplicative association, and entity metadata keyed the way Apple documents.
- Correction-focused review bullets
- Indexing and association recommendations before implementation
Recommended Skills
Journey fit
App Intents and Core Spotlight wiring happen while you integrate platform APIs into a shipping iOS build, not during idea or launch marketing work. The skill centers on IndexedEntity, CSSearchableIndex, OpenIntent, and association with existing CSSearchableItem paths—classic system integration work.
How it compares
Use as a pre-implementation reviewer for Apple indexing APIs, not as a generic SwiftUI layout or navigation skill.
Common Questions / FAQ
Who is app-intents for?
Solo and small-team iOS builders shipping agent-assisted features that expose app content through App Intents, Shortcuts, and Core Spotlight on iPhone or iPad.
When should I use app-intents?
Use it in Build while integrating platform search—before you wire IndexedEntity, CSSearchableIndex, and OpenIntent in Swift, and whenever you plan to keep legacy CSSearchableItem indexing alongside app entities.
Is app-intents safe to install?
Treat it like any third-party agent skill: review the Security Audits panel on this Prism page and your org policy before enabling it in Claude Code, Cursor, or Codex.
SKILL.md
READMESKILL.md - App Intents
{ "skill_name": "app-intents", "evals": [ { "id": 0, "name": "spotlight-indexed-entity-review", "prompt": "Review this App Intents Spotlight plan for an iOS 26 recipe app. We will conform RecipeEntity to IndexedEntity, put title and summary into attributeSet, call CSSearchableIndex.default().indexAppEntities from app launch, and also keep our old CSSearchableItem indexing path for the same recipes. What should we change before implementation?", "expected_output": "A correction-focused review that uses current App Intents and Core Spotlight guidance for IndexedEntity, indexing keys, named indexes, default attributes, duplicate indexing, and opening search results.", "files": [], "expectations": [ "Recommends `@Property(indexingKey:)` or `@ComputedProperty(indexingKey:)` with key paths for entity metadata that is already exposed on the AppEntity.", "Says app entities still need to be indexed with `CSSearchableIndex(name: ...).indexAppEntities(...)` and recommends a named index rather than the default index for production.", "Warns that a custom `attributeSet` replaces the default attribute set unless `defaultAttributeSet` contents are included.", "Avoids duplicate search results by recommending `associateAppEntity(_:priority:)` when the app already indexes matching `CSSearchableItem` values.", "Mentions providing an `OpenIntent` for indexed entity types so Spotlight results can open the right app content." ] }, { "id": 1, "name": "visual-intelligence-value-query", "prompt": "I need to expose my shopping app to Visual Intelligence on iOS 26. Sketch the App Intents pieces for returning matching ProductEntity and StoreEntity results from onscreen/camera input, and call out the main API constraints so another engineer does not create two competing visual queries.", "expected_output": "An implementation outline that models Visual Intelligence with IntentValueQuery, SemanticContentDescriptor, AppEntity results, optional UnionValue, and handoff/opening behavior.", "files": [], "expectations": [ "Uses `IntentValueQuery.values(for input: SemanticContentDescriptor)` for Visual Intelligence matching.", "Uses `input.pixelBuffer` and/or descriptor labels appropriately, and keeps matching work quick and bounded.", "States that only one `IntentValueQuery` can take `SemanticContentDescriptor` and recommends `@UnionValue` when one query must return multiple AppEntity result types.", "Requires returned results to be AppEntity-compatible types with stable identifiers and display representations.", "Mentions providing an `OpenIntent` or equivalent opening path for selected results." ] }, { "id": 2, "name": "widget-control-boundary", "prompt": "We are adding a configurable widget, a Control Center toggle, and an interactive Siri snippet for a smart-home app. Write the App Intents review checklist for which protocols belong to each surface and the pitfalls around optional parameters, snippets, and shared actions.", "expected_output": "A boundary-aware checklist that distinguishes WidgetConfigurationIntent, ControlConfigurationIntent, action AppIntent, and SnippetIntent responsibilities without drifting into WidgetKit layout detail.", "files": [], "expectations": [ "Uses `WidgetConfigurationIntent` for configurable widget parameters and `ControlConfigurationIntent` for Control Center or Lock Screen control configuration.", "States that a `ControlConfigurationIntent` parameter without a default value must be optional so the system can preview the control before configuration.", "Separates reusable action intents from configuration intents and notes that configuration intents do not need `perform()` unless reused as actions.", "Mentions that `SnippetIntent.perform()` may run multiple times and should a