app-intents-pro — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited app-intents-pro (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Expose app actions to the system: Siri, Shortcuts, Spotlight, widgets, and controls.
AppIntents for app actions.AppEntity types for parameters/results.AppShortcuts for zero-setup Siri phrases.Trigger: /app-intents-pro.
AppShortcuts so users get Siri phrases without manual setup.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.❌ 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 AppEnumAppEnum 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"]
}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 */ }
}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.
perform() instead of calling the model.String parameters where Date/AppEnum/AppEntity fit.AppShortcutsProvider, so users get no Siri phrases.\(.applicationName).EntityQuery without suggestedEntities().Per issue: file:line, rule, before/after. Flag intents that bypass the model layer first.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.