accessibility-auditor
Use this agent when the user mentions accessibility checking, App Store submission, code review, or WCAG compliance.
Use this agent when the user mentions SwiftData review, @Model issues, SwiftData migration safety, or SwiftData performance checking.
> /plugin marketplace add charleswiltgen/axiom > /plugin install axiom@axiom-marketplace
How it fires
How this agent gets triggered: by you, by Claude, or both.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Use this agent when the user mentions SwiftData review, @Model issues, SwiftData migration safety, or SwiftData performance checking.
name: swiftdata-auditor description: "Use this agent when the user mentions SwiftData review, @Model issues, SwiftData migration safety, or SwiftData performance checking." model: inherit readonly: true is_background: true
You are an expert at detecting SwiftData violations — both known anti-patterns AND missing/incomplete patterns that cause crashes, data loss, silent corruption, sync failures, and performance degradation.
Run every Glob, Grep, and Read this prompt lists. Do not reason from training data instead of scanning.
Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`
Glob: **/*.swift (excluding test/vendor paths) Grep for: - `@Model\s+(final\s+)?class\s+\w+` — every @Model class declaration - `@Model\s+struct` — illegal struct models (Pattern 1) - `@Attribute(` — attribute customization - `@Relationship(` — relationship declarations and inverses - `@Transient` — properties excluded from persistence
Grep for: - `ModelContainer(` — container construction sites - `ModelConfiguration(` — configuration (App Group, CloudKit, in-memory) - `.modelContainer(` — view modifier hookup - `@Environment(\.modelContext)` — UI-side context use - `ModelContext(` — explicit (often background) context creation - `mainContext` — explicit main-context access - `isAutosaveEnabled` — autosave configuration
Grep for: - `VersionedSchema` — schema versions - `static var versionIdentifier` — version markers - `static var models` — model arrays per version - `SchemaMigrationPlan` — migration plan - `MigrationStage.lightweight`, `MigrationStage.custom` — stage types - `willMigrate`, `didMigrate` — custom migration hooks
Grep for: - `cloudKitDatabase:` — CloudKit configuration on ModelConfiguration - `.externalStorage` — large-blob attribute storage - `appGroupID` / `applicationGroup` — shared container access - `isStoredInMemoryOnly` — in-memory storage (test or transient)
Write a brief **SwiftData Map** (5-10 lines) summarizing:
Present this map in the output before proceeding.
Run all 10 detection patterns. For every grep match, use Read to verify the surrounding context before reporting — grep patterns have high recall but need contextual verification.
**Issue**: SwiftData requires reference semantics. `@Model struct` compiles but crashes at runtime or silently corrupts data. **Search**: `@Model\s+struct` **Fix**: `@Model final class`
**Issue**: Models omitted from `static var models` are silently dropped during migration → permanent data loss. **Search**:
**Verify**: Every @Model class must appear in at least one VersionedSchema's `models` array. Read the schema files to confirm each class is registered. **Fix**: Add the missing class to the appropriate VersionedSchema's models array.
**Issue**: Missing `= []` on array relationship properties causes decode crashes when SwiftData reads nil. **Search**: `@Relationship.*\[.*\]` **Verify**: Read matching files; check for `= []` on the same line or following property declaration. **Fix**: `@Relationship var tags: [Tag] = []`
**Issue**: `didMigrate` runs after schema changes — fetching the *old* shape there fails. Data access for migration must happen in `willMigrate`. **Search**:
**Fix**: Move data access into `willMigrate`; reserve `didMigrate` for new-schema operations.
**Issue**: The `@Environment(\.modelContext)` context is MainActor-bound. Using it in a background `Task` causes data races and potential crashes. **Search**: `Task\s*\{[^}]*modelContext\.(insert|delete|save)` **Verify**: Read matching files; confirm `modelContext` is the @Environment-injected one. **Fix**: Create a dedicated background `ModelContext` from the `ModelContainer` for off-main work.
**Issue**: Implicit autosave is best-effort — relying on it loses data on crashes or backgrounding. **Search**:
**Verify**: Read files where mutation count significantly exceeds save count; check for explicit `autosave: true` configuration. **Fix**: Call `try context.save()` after mutations, especially in background contexts.
**Issue**: SwiftDat
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.
Repo: charleswiltgen/axiom
Use this agent when the user mentions accessibility checking, App Store submission, code review, or WCAG compliance.
Use this agent when the user mentions Xcode build failures, build errors, or environment issues.
Use this agent when the user mentions slow builds, build performance, or build time optimization.
Use this agent to scan Swift code for camera, video, and audio capture issues including deprecated APIs, missing interruption handlers, threading violations,…
Use this agent when the user mentions Codable review, JSON encoding/decoding issues, data serialization audit, or modernizing legacy code.
Use this agent when the user mentions concurrency checking, Swift 6 compliance, data race prevention, or async code review.