axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…
Use when the user mentions Siri AI readiness, tool intents, or App Skills.
Claude Code
$ npx -y skills add charleswiltgen/axiom --skill axiom-audit-siri-ai --agent claude-code
Codex
$ npx skills add charleswiltgen/axiom --skill axiom-audit-siri-ai -a codex -y
Cursor
$ npx skills add charleswiltgen/axiom --skill axiom-audit-siri-ai -a cursor -y
Gemini CLI
$ npx skills add charleswiltgen/axiom --skill axiom-audit-siri-ai -a gemini-cli -y
GitHub Copilot
$ npx skills add charleswiltgen/axiom --skill axiom-audit-siri-ai -a github-copilot -y
OpenCode
$ npx skills add charleswiltgen/axiom --skill axiom-audit-siri-ai -a opencode -y
Windsurf
$ npx skills add charleswiltgen/axiom --skill axiom-audit-siri-ai -a windsurf -y
name: axiom-audit-siri-ai description: Use when the user mentions Siri AI readiness, tool intents, or App Skills. license: MIT
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()`.
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.
Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`
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` — targetsLabel build settings read from files "declared; effective value unverified". Read every tool intent, every entity a tool takes or returns, and every `SKILL.md`.
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.
Severity/confidence after each title. Each finding needs a file:line you read.
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.
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.
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.
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.
`@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:)`.
`@AppDependency` declared in a type conforming to `AppEntity` or `AppEnum`: it co
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.
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…
Use when implementing, testing, or evaluating ANY Apple Intelligence, on-device AI, or speech-to-text feature. Covers Foundation…
Use when the user has a crash log (.ips, MetricKit JSON, legacy .crash text, .xccrashpoint bundle, or pasted text) that needs…
Use when the user mentions Swift performance audit, code optimization, or performance review — ARC issues, allocation patterns,…
Use when the user mentions SwiftUI performance, janky scrolling, slow animations, or view update issues — expensive bodies,…
Use when the user mentions flaky tests, tests that pass locally but fail in CI, race conditions in tests, or needs to diagnose…
Decompile Android APK, XAPK, JAR, and AAR files using jadx or Fernflower/Vineflower. Reverse engineer Android apps, extract HTTP…