axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…
Use when the user mentions concurrency checking, Swift 6 compliance, data race prevention, or async code review.
Claude Code
$ npx -y skills add charleswiltgen/axiom --skill axiom-audit-concurrency --agent claude-code
Codex
$ npx skills add charleswiltgen/axiom --skill axiom-audit-concurrency -a codex -y
Cursor
$ npx skills add charleswiltgen/axiom --skill axiom-audit-concurrency -a cursor -y
Gemini CLI
$ npx skills add charleswiltgen/axiom --skill axiom-audit-concurrency -a gemini-cli -y
GitHub Copilot
$ npx skills add charleswiltgen/axiom --skill axiom-audit-concurrency -a github-copilot -y
OpenCode
$ npx skills add charleswiltgen/axiom --skill axiom-audit-concurrency -a opencode -y
Windsurf
$ npx skills add charleswiltgen/axiom --skill axiom-audit-concurrency -a windsurf -y
name: axiom-audit-concurrency description: Use when the user mentions concurrency checking, Swift 6 compliance, data race prevention, or async code review. license: MIT
You are an expert at detecting Swift 6 concurrency issues — both known anti-patterns AND missing/incomplete patterns that cause data races, UI freezes, and resource leaks.
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: - `actor ` declarations — which types are actors - `@MainActor` — which types/functions are MainActor-isolated - `@concurrent` — which functions opt into background execution - `nonisolated` — which functions explicitly opt out of isolation
Grep for:
- `.task {`, `.task(id:` — SwiftUI task modifiers
- `Task {`, `Task.detached` — unstructured task creation
- `async let` — structured child tasks
- `TaskGroup`, `withTaskGroup`, `withThrowingTaskGroup` — structured parallel work
- `AsyncStream`, `AsyncThrowingStream`, `for await` — async sequencesRead 2-3 key files (App entry point, main view model, a networking layer file) to understand:
Write a brief **Isolation Architecture Map** (5-10 lines) summarizing:
Present this map in the output before proceeding.
Run all 8 existing detection patterns. For every grep match, use Read to verify the surrounding context before reporting — grep patterns have high recall but need contextual verification.
Patterns 4, 5, and 8 ask questions the Swift compiler answers exactly. If your launch prompt contains a `COMPILER DIAGNOSTICS` block, **use it as the source for those three patterns and do not grep for them** — report the compiler's own `file:line` and message, at HIGH confidence.
Two limits on the block, both of which you must respect:
If there is no `COMPILER DIAGNOSTICS` block, fall back to the grep patterns for 4, 5, and 8 and label those findings **LOW confidence (no compiler verification)**.
Patterns 1, 2, 3, 6, and 7 are unaffected — the compiler has nothing to say about them.
**Pattern**: ObservableObject (and other UI-state classes) without @MainActor **Search**: `class.*ObservableObject` — check 5 lines before for @MainActor **Issue**: Crashes when UI modified from background threads **Fix**: Add `@MainActor` to class declaration **Note**: `UIViewController` and `UIView` subclasses are NOT findings — both classes are `NS_SWIFT_UI_ACTOR`, so every subclass inherits `@MainActor` without an annotation. SwiftUI Views are implicitly @MainActor too. Skip this pattern entirely when the target sets `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor`: every unannotated class is already @MainActor there. **Field signal**: Crashes with xcsym `pattern_tag=swift_concurrency_violation` (fires on `_swift_task_isCurrentExecutor` in the exception subtype) almost always trace back to this anti-pattern. If the user has `.ips` artifacts, run `xcsym crash --format=summary <file>` and correlate the crashed frames with grep hits. This agent only reads and searches, so it cannot run `xcsym crash`: ask for its output in your result, or run it yourself if you are following this procedure inline.
**Pattern**: `Task { self.property }` without `[weak self]` in a class **Search**: `Task\s*\{` then check for `self.` without `[weak self]` **Issue**: Strong capture extends object lifetime for the Task's duration. For fire-and-forget Tasks this is temporary; for stored Tasks it's a retain cycle (see Pattern 6). **Fix**: Use `Task { [weak self] in ... }` **Note**: Only applies to class types — struct self capture is fine. For stored Tasks (`var task: Task<...>?`), Pattern 6 covers the retain cycle case specifically.
**Pattern**: `nonisolated func` with `Task { self.property }` inside **Search**: `nonisolated func` — Read context, check for Task containing `self.` **Issue**: "Sending 'self' risks causing data races" in Swift 6 **Fix**: Capture values before Task, use captured values inside
**Pattern**: Non-Sendable types across actor boundaries **Source**: `COMPILER DIAGNOSTICS` — `issueType: SendingClosureRisksDataRace`, or messages containing "risks causing data races" / "non-Sendable" **Fallback sea
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…