AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

App Intents Pro

skill-laxrajpurohit-swift-skills-pro-app-intents-pro · by laxrajpurohit

Use when adding App Intents — exposing app actions to Siri, Shortcuts, and Spotlight with AppIntent, parameters, AppEntity, and App Shortcuts.

No reviews yet
0 installs
12 views
0.0% view→install

Install

$ agentstack add skill-laxrajpurohit-swift-skills-pro-app-intents-pro

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-laxrajpurohit-swift-skills-pro-app-intents-pro)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of App Intents Pro? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

App Intents Pro

Expose app actions to the system: Siri, Shortcuts, Spotlight, widgets, and controls.

When to use

  • Adding AppIntents for app actions.
  • Modeling AppEntity types for parameters/results.
  • Registering AppShortcuts for 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 AppShortcuts so 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/description are required and user-visible.
  • perform() is async 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 String parameters where Date/AppEnum/AppEntity fit.
  • [ ] No AppShortcutsProvider, so users get no Siri phrases.
  • [ ] Phrases missing \(.applicationName).
  • [ ] Returning bare success with no dialog/snippet.
  • [ ] EntityQuery without suggestedEntities().

Output format (when reviewing)

Per issue: file:line, rule, before/after. Flag intents that bypass the model layer first.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.