Skip to content
Mobile
Skill

/axiom-audit-siri-ai

Use when the user mentions Siri AI readiness, tool intents, or App Skills.

From plugin
axiom
1.3k71 skills44 agents18 commands1 MCP

Claude Code

$ npx -y skills add charleswiltgen/axiom --skill axiom-audit-siri-ai --agent claude-code

SKILL.md

axiom-audit-siri-ai.SKILL.md
name: axiom-audit-siri-ai
description: Use when the user mentions Siri AI readiness, tool intents, or App Skills.
license: MIT

Siri AI Auditor Agent

You audit an app's App Intents code and App Skills for how well Siri AI (27.3 Developer Preview) can use them: whether Siri can find, choose, fill, and run the app's actions, and whether those actions survive being run by Siri while the app isn't on screen. You complement `sirimetadataanalyzer`, which reads built metadata and can't see source-level traps such as a search tool, a dependency registered from a view, or a donation inside `perform()`.

Tool Use Is Mandatory

Run every Glob, Grep, and Read this prompt lists. Do not reason from training data instead of scanning. Run each Grep pattern as written. Confirm every candidate finding by reading the surrounding code before reporting it.

Files to Exclude

Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`

Phase 1: Map the App Intents Surface

Glob: **/*.swift, **/project.pbxproj, **/project.xcproj, **/project.yml, **/Project.swift, **/*.skillsbundle/Skills/*/SKILL.md, **/*.xcconfig
Grep:
  - `import\s+AppIntents`                                  — files in scope
  - `:\s*[^{]*\b(AppIntent|WidgetConfigurationIntent|OpenIntent|AudioPlaybackIntent|SnippetIntent|ShowInAppSearchResultsIntent|DeleteIntent|ForegroundContinuableIntent)\b|@AppIntent\(` — intents
  - `@AppIntent\(\s*\[?\.tool|:\s*[^{]*\bToolIntent\b`     — tool intents
  - `@AppIntent\([^)]*schema:`                             — schema intents
  - `:\s*[^{]*\b(AppEntity|IndexedEntity|TransientAppEntity|UniqueAppEntity|FileEntity|SyncableEntity)\b|@AppEntity\(` — entities
  - `@AppEntity\(\s*\[?\.generable|GenerableEntity`        — generable entities
  - `:\s*[^{]*\bAppEnum\b|@AppEnum\(`                      — enums
  - `EntityQuery|EntityStringQuery|EnumerableEntityQuery|IndexedEntityQuery|EntityPropertyQuery` — queries
  - `@Dependency|@AppDependency|AppDependencyManager`      — dependencies
  - `indexAppEntities|IndexedEntity`                       — Spotlight indexing
  - `IPHONEOS_DEPLOYMENT_TARGET|MACOSX_DEPLOYMENT_TARGET|XROS_DEPLOYMENT_TARGET|WATCHOS_DEPLOYMENT_TARGET|TVOS_DEPLOYMENT_TARGET|SUPPORTED_PLATFORMS` — targets

Label build settings read from files "declared; effective value unverified". Read every tool intent, every entity a tool takes or returns, and every `SKILL.md`.

Output

A map: intents (N, of which tools T, schema S), entities (N, IndexedEntity I, generable G), enums, queries, dependency registrations (where), skills (N), deployment targets, and whether watchOS/tvOS targets share the intents.

Phase 2: Detect Known Anti-Patterns

Severity/confidence after each title. Each finding needs a file:line you read.

1. Search or Find Tool (HIGH/HIGH)

A tool whose job is to find the app's entities: title or type name with Search/Find/Lookup/Query, or a free-text `String` query parameter. Criteria parameters returning `[SomeEntity]` with neither signal are MEDIUM/MEDIUM: a read tool like "List trips this week" is legitimate (Phase 3, Read-only tools). Siri finds entities itself through Spotlight (`IndexedEntity`) and `EnumerableEntityQuery`, then passes them to tools that act on them; a search tool duplicates and competes with that. Fix: make the entities findable and write tools that take the entity as a parameter. Not an issue: `.system.searchInApp` / `ShowInAppSearchResultsIntent`, which opens the app's own search UI.

2. Tool Metadata Missing (HIGH/HIGH)

A tool with no `static let description` / `static var description`, or a parameter whose `@Parameter` has no `description:` where the title alone doesn't give the meaning and format. Siri's model chooses and fills tools from this text. `title: "Quantity"` on an `Int` is fine without a description. For a schema tool intent (`@AppIntent(.tool, schema:)`), the schema defines its parameters; check only the intent's own description and any parameters the app adds.

3. Entity Siri Can't Read (HIGH/HIGH)

An entity a tool takes or returns with no `@Property`, `@ComputedProperty`, or `@DeferredProperty` member: plain `var`s are invisible to the system (`sirimetadataanalyzer` reports `SMA601` after a build). **Exception: `@AppEntity(schema:)` types** get `@Property` implicitly for the schema's own members (measured), so plain `var`s matching the schema are exposed; only *extra* plain members on a schema entity are invisible. Also MEDIUM/MEDIUM: exposed properties with no `description:` when the target is 27.3+ or the entity is 27.3-only.

4. Tool Entity Siri Can't Find (HIGH/MEDIUM)

An entity used as a tool parameter whose type isn't `IndexedEntity` (with indexing in place) and whose query isn't `EnumerableEntityQuery`. Siri doesn't use `suggestedEntities()`, `EntityStringQuery`, or `EntityPropertyQuery` for tools, and queries the app only when the request names it. Confirm by reading the query type, and for `IndexedEntity` confirm `indexAppEntities` runs. Not an issue: a `TransientAppEntity` or generable entity (`@AppEntity(.generable)` / `GenerableEntity`), whose value the model writes with no query; `UniqueAppEntity` (its query is enumerable); or an entity Siri only receives from another tool's result or an onscreen annotation, since `entities(for:)` resolves identifiers Siri already has.

5. Dependency Not Registered for a Cold Launch (CRITICAL/HIGH)

`@Dependency` used, and `AppDependencyManager.shared.add(` either absent or only inside a `View`, `.onAppear`, `.task`, a button action, or lazily. Siri launches the app without UI; the first access is an uncatchable `fatalError`. Fix: register in `App.init()` (or the extension's setup). Not an issue: `@Dependency(default:)`.

6. Dependency on an Entity or Enum (HIGH/HIGH)

`@AppDependency` declared in a type conforming to `AppEntity` or `AppEnum`: it co

Read more
@charleswiltgen
Ships withaxiom

Battle-tested skills, agents, and tools for modern Apple OS development — Swift 6, SwiftUI, Liquid Glass, Apple Intelligence, and more. Supports Claude Code, Codex, and all other popular coding harnesses and AI-savvy IDEs.

1.3k71 skills44 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
1.3k
Star history of charleswiltgen/axiom on GitHub, a chart by star-history.com

Other skills on axiom.

axiom-accessibility

axiom-accessibility

Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…

axiom-ai

axiom-ai

Use when implementing, testing, or evaluating ANY Apple Intelligence, on-device AI, or speech-to-text feature. Covers Foundation…

axiom-analyze-crash

axiom-analyze-crash

Use when the user has a crash log (.ips, MetricKit JSON, legacy .crash text, .xccrashpoint bundle, or pasted text) that needs…

More skills from other plugins.

deep-code-review

deep-code-review

In-depth design-focused code review - understands codebase context before evaluating PR changes, posts structured feedback to…

expo3d53k
@expo@expoInstall Skill
modlens

modlens

Plug-in vision for text-only models. Hard rule: when a file path or URL with an image extension (.png, .jpg, .jpeg, .webp, .gif,…

modlens3w4.6k
@liustack@liustackInstall Skill
appllama-app-design-skill

appllama-app-design-sk…

Build native-feeling, benchmark-quality mobile app screens (Expo / React Native). Use when designing or implementing any mobile…

appllama2mo3.9k
@appllama@appllamaInstall Skill

Questions about axiom-audit-siri-ai.

Which coding agents can use axiom-audit-siri-ai?
axiom-audit-siri-ai installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.