App intents pro
Skill laxrajpurohit/swift-skills-pro/app-intents-pro/skills/app-intents-pro
Modern, original agent skills for Swift and Apple-platform development
npx -y skills add laxrajpurohit/swift-skills-pro --skill app-intents-proAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when adding App Intents — exposing app actions to Siri, Shortcuts, and Spotlight with AppIntent, parameters, AppEntity, and App Shortcuts.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.4 KB, as published. Nobody here has run it
App Intents Pro
Expose app actions to the system: Siri, Shortcuts, Spotlight, widgets, and controls.
When to use
- Adding
AppIntents for app actions. - Modeling
AppEntitytypes for parameters/results. - Registering
AppShortcutsfor zero-setup Siri phrases.
Trigger: /app-intents-pro.
Core principles
- An intent is a small, single-purpose action with typed parameters.
- Keep business logic in your model layer; the intent is a thin adapter.
- Provide
AppShortcutsso users get Siri phrases without manual setup. - Return useful results/snippets, not just success.
A basic intent
import AppIntents
struct AddTaskIntent: AppIntent {
static let title: LocalizedStringResource = "Add Task"
static let description = IntentDescription("Creates a new task.")
@Parameter(title: "Title") var taskTitle: String
func perform() async throws -> some IntentResult & ProvidesDialog {
try await TaskStore.shared.add(title: taskTitle)
return .result(dialog: "Added “\(taskTitle)”.")
}
}
title/descriptionare required and user-visible.perform()isasync throws— call your real model, don't duplicate logic.
Parameters
❌ Untyped, no prompt
@Parameter var value: String // Siri can't elicit it well
✅
@Parameter(title: "Due date") var dueDate: Date
@Parameter(title: "Priority") var priority: Priority // an AppEnum
AppEnum for fixed choices:
enum Priority: String, AppEnum {
case low, normal, high
static let typeDisplayRepresentation: TypeDisplayRepresentation = "Priority"
static let caseDisplayRepresentations: [Priority: DisplayRepresentation] =
[.low: "Low", .normal: "Normal", .high: "High"]
}
AppEntity (model objects as parameters/results)
struct TaskEntity: AppEntity, Identifiable {
let id: UUID
let title: String
static let typeDisplayRepresentation: TypeDisplayRepresentation = "Task"
var displayRepresentation: DisplayRepresentation { .init(title: "\(title)") }
static var defaultQuery = TaskQuery()
}
struct TaskQuery: EntityQuery {
func entities(for ids: [UUID]) async throws -> [TaskEntity] { /* fetch */ }
func suggestedEntities() async throws -> [TaskEntity] { /* recents */ }
}
App Shortcuts (zero-config Siri)
struct TasksShortcuts: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(intent: AddTaskIntent(),
phrases: ["Add a task in \(.applicationName)"],
shortTitle: "Add Task",
systemImageName: "plus.circle")
}
}
Always include \(.applicationName) in at least one phrase.
Common mistakes checklist
- Business logic copied into
perform()instead of calling the model. - Untyped
Stringparameters whereDate/AppEnum/AppEntityfit. - No
AppShortcutsProvider, so users get no Siri phrases. - Phrases missing
\(.applicationName). - Returning bare success with no dialog/snippet.
-
EntityQuerywithoutsuggestedEntities().
Output format (when reviewing)
Per issue: file:line, rule, before/after. Flag intents that bypass the model layer first.