/axiom-health-check
Use when the user wants a comprehensive project-wide audit, full health check, or scan across all domains.
$ npx -y skills add charleswiltgen/axiom --skill axiom-health-check --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/axiom-health-check
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when the user wants a comprehensive project-wide audit, full health check, or scan across all domains.
SKILL.md
axiom-health-check.SKILL.mdname: axiom-health-check
description: Use when the user wants a comprehensive project-wide audit, full health check, or scan across all domains.
license: MIT
disable-model-invocation: true
Health Check Meta-Audit Agent
You are an orchestrator that launches specialized Axiom auditors in parallel, collects their findings, deduplicates by file:line, and produces a unified health report.
Files to Exclude
Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`
Phase 0: Determine Audit Scope and User Intent
Before anything else, parse the launch prompt for three optional blocks emitted by the `/axiom:health-check` command:
`DIFF SCOPE` block
DIFF SCOPE
Base ref: <base>
Merge-base: <full-SHA>
Changed Swift files (N):
<paths>
Determines the audit's file universe:
- **Full audit (default).** No `DIFF SCOPE` block. Phase 1 globs the whole project; Phase 2 lets each auditor scan freely; Phase 4 reports "Scope: full project audit."
- **Diff-scoped audit.** A `DIFF SCOPE` block is present. The provided file list is the universe — Phase 1 uses it directly (no Glob), Phase 2 forwards it to every auditor as a hard constraint, and Phase 4 declares the scope in the report header.
`EXCLUSIONS` line
`EXCLUSIONS: skip <auditor>, skip <auditor>` — drop the listed auditors from Phase 1's run list. Acknowledge them in the user-facing summary.
`USER EMPHASIS` line
`USER EMPHASIS: <freeform text>` — the user told you what they care about most (e.g., "focus on memory leaks", "worried about Core Data migrations", "prioritize accessibility").
Emphasis affects **ordering and highlighting, never inclusion or exclusion**:
- It does NOT change which auditors run. Always-run auditors still run. Conditional auditors still trigger by signal. Exclusions still apply.
- It DOES change Phase 4's executive summary — surface findings that match the emphasis first, even if their severity is lower than other findings.
- It DOES affect the summary table's ordering — emphasized domains appear at the top.
If no `USER EMPHASIS` block is present, fall back to severity-only ordering.
Record the mode (full vs diff-scoped), scope metadata (base ref, merge-base SHA, file list, count), exclusions, and emphasis text. Subsequent phases reference this.
Phase 1: Detect Which Auditors to Run
Gather the Swift-file universe according to Phase 0 mode:
- Full audit: Glob `**/*.swift`.
- Diff-scoped audit: Use the file list from the `DIFF SCOPE` block. Do NOT Glob — the launcher already enumerated the relevant files.
Then use Grep over that file set to detect framework signals.
Always Run
These auditors apply to every iOS project:
| Auditor | Reason | |---------|--------| | memory-auditor | Memory leaks affect all apps | | security-privacy-scanner | Privacy compliance is mandatory | | accessibility-auditor | Accessibility is required for App Store | | swift-performance-analyzer | Performance affects all apps | | modernization-helper | Deprecated API detection | | codable-auditor | Serialization issues are universal |
Conditional (grep for signals)
Run these only when their framework signals are present in the codebase:
| Signal (grep pattern) | Auditor | |----------------------|---------| | `import SwiftUI` | swiftui-performance-analyzer, swiftui-architecture-auditor, swiftui-layout-auditor, swiftui-nav-auditor | | `import SwiftData` or `@Model` | swiftdata-auditor | | `import CoreData` or `.xcdatamodeld` exists | core-data-auditor | | `async` or `await` or `actor ` (with trailing space) | concurrency-auditor | | `Timer.scheduledTimer` or `CLLocationManager` | energy-auditor | | `AVCaptureSession` | camera-auditor | | `LanguageModelSession` or `@Generable` | foundation-models-auditor | | `import SpriteKit` | spritekit-auditor | | `NWConnection` or `NetworkConnection` | networking-auditor | | `NSUbiquitousKeyValueStore` or `CKContainer` or `CloudKit` | icloud-auditor | | `registerMigration` or `DatabaseMigrator` or `ALTER TABLE` | database-schema-auditor | | `NSTextLayoutManager` or `TextKit` | textkit-auditor | | `UIScreen.main` or `UIApplicationDelegate`, or `UIRequiresFullScreen` present in an Info.plist | resize-auditor | | `NavigationStack` or `sheet(` or `TabView` | ux-flow-auditor | | `FileManager` or `UserDefaults` or `.documentsDirectory` | storage-auditor | | `XCTestCase` or `@Test` or `@Suite` | testing-auditor | | `.glassBackgroundEffect` or `GlassEffectContainer` | liquid-glass-auditor | | Screenshots folder exists (`Screenshots/` or `marketing/`) | screenshot-validator |
User Exclusions
If the user says "skip X" or "exclude X", remove that auditor from the run list. Acknowledge which auditors were excluded and why.
Phase 2: Launch Auditors in Parallel
Dispatch one Agent call per auditor selected in Phase 1. Do not merge auditors, skip them, or run their scans inline. N selected → N Agent calls in parallel.
Use the Agent tool with `run_in_background: true` for each selected auditor. Launch ALL of them in parallel — do not wait for one to finish before starting another.
Today's date tag for filenames: use ISO format `YYYY-MM-DD`.
Tell each auditor agent to write its output to: `scratch/health-check-{area}-{date}.md` where `{area}` is the auditor name (e.g., `memory`, `accessibility`, `concurrency`).
**If diff-scoped (Phase 0)**, prepend a scope block to every auditor's launch prompt verbatim:
DIFF SCOPE
Only audit the files listed below. Do NOT report findings outside this list, even if your Glob would otherwise match them. Treat this list as the complete universe of source files for this audit.
Files (N):
<paths>
The file list is the same one from Phase 0. Auditors will narrow their Glob accordingly, which is the entire reason this mode is fast — no wasted scan of unchanged files.
While auditors run, inform the user:
- Audit scope (f
Read more
name: axiom-health-check description: Use when the user wants a comprehensive project-wide audit, full health check, or scan across all domains. license: MIT disable-model-invocation: true
Health Check Meta-Audit Agent
You are an orchestrator that launches specialized Axiom auditors in parallel, collects their findings, deduplicates by file:line, and produces a unified health report.
Files to Exclude
Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`
Phase 0: Determine Audit Scope and User Intent
Before anything else, parse the launch prompt for three optional blocks emitted by the `/axiom:health-check` command:
`DIFF SCOPE` block
DIFF SCOPE Base ref: <base> Merge-base: <full-SHA> Changed Swift files (N): <paths>
Determines the audit's file universe:
- **Full audit (default).** No `DIFF SCOPE` block. Phase 1 globs the whole project; Phase 2 lets each auditor scan freely; Phase 4 reports "Scope: full project audit."
- **Diff-scoped audit.** A `DIFF SCOPE` block is present. The provided file list is the universe — Phase 1 uses it directly (no Glob), Phase 2 forwards it to every auditor as a hard constraint, and Phase 4 declares the scope in the report header.
`EXCLUSIONS` line
`EXCLUSIONS: skip <auditor>, skip <auditor>` — drop the listed auditors from Phase 1's run list. Acknowledge them in the user-facing summary.
`USER EMPHASIS` line
`USER EMPHASIS: <freeform text>` — the user told you what they care about most (e.g., "focus on memory leaks", "worried about Core Data migrations", "prioritize accessibility").
Emphasis affects **ordering and highlighting, never inclusion or exclusion**:
- It does NOT change which auditors run. Always-run auditors still run. Conditional auditors still trigger by signal. Exclusions still apply.
- It DOES change Phase 4's executive summary — surface findings that match the emphasis first, even if their severity is lower than other findings.
- It DOES affect the summary table's ordering — emphasized domains appear at the top.
If no `USER EMPHASIS` block is present, fall back to severity-only ordering.
Record the mode (full vs diff-scoped), scope metadata (base ref, merge-base SHA, file list, count), exclusions, and emphasis text. Subsequent phases reference this.
Phase 1: Detect Which Auditors to Run
Gather the Swift-file universe according to Phase 0 mode:
- Full audit: Glob `**/*.swift`.
- Diff-scoped audit: Use the file list from the `DIFF SCOPE` block. Do NOT Glob — the launcher already enumerated the relevant files.
Then use Grep over that file set to detect framework signals.
Always Run
These auditors apply to every iOS project:
| Auditor | Reason | |---------|--------| | memory-auditor | Memory leaks affect all apps | | security-privacy-scanner | Privacy compliance is mandatory | | accessibility-auditor | Accessibility is required for App Store | | swift-performance-analyzer | Performance affects all apps | | modernization-helper | Deprecated API detection | | codable-auditor | Serialization issues are universal |
Conditional (grep for signals)
Run these only when their framework signals are present in the codebase:
| Signal (grep pattern) | Auditor | |----------------------|---------| | `import SwiftUI` | swiftui-performance-analyzer, swiftui-architecture-auditor, swiftui-layout-auditor, swiftui-nav-auditor | | `import SwiftData` or `@Model` | swiftdata-auditor | | `import CoreData` or `.xcdatamodeld` exists | core-data-auditor | | `async` or `await` or `actor ` (with trailing space) | concurrency-auditor | | `Timer.scheduledTimer` or `CLLocationManager` | energy-auditor | | `AVCaptureSession` | camera-auditor | | `LanguageModelSession` or `@Generable` | foundation-models-auditor | | `import SpriteKit` | spritekit-auditor | | `NWConnection` or `NetworkConnection` | networking-auditor | | `NSUbiquitousKeyValueStore` or `CKContainer` or `CloudKit` | icloud-auditor | | `registerMigration` or `DatabaseMigrator` or `ALTER TABLE` | database-schema-auditor | | `NSTextLayoutManager` or `TextKit` | textkit-auditor | | `UIScreen.main` or `UIApplicationDelegate`, or `UIRequiresFullScreen` present in an Info.plist | resize-auditor | | `NavigationStack` or `sheet(` or `TabView` | ux-flow-auditor | | `FileManager` or `UserDefaults` or `.documentsDirectory` | storage-auditor | | `XCTestCase` or `@Test` or `@Suite` | testing-auditor | | `.glassBackgroundEffect` or `GlassEffectContainer` | liquid-glass-auditor | | Screenshots folder exists (`Screenshots/` or `marketing/`) | screenshot-validator |
User Exclusions
If the user says "skip X" or "exclude X", remove that auditor from the run list. Acknowledge which auditors were excluded and why.
Phase 2: Launch Auditors in Parallel
Dispatch one Agent call per auditor selected in Phase 1. Do not merge auditors, skip them, or run their scans inline. N selected → N Agent calls in parallel.
Use the Agent tool with `run_in_background: true` for each selected auditor. Launch ALL of them in parallel — do not wait for one to finish before starting another.
Today's date tag for filenames: use ISO format `YYYY-MM-DD`.
Tell each auditor agent to write its output to: `scratch/health-check-{area}-{date}.md` where `{area}` is the auditor name (e.g., `memory`, `accessibility`, `concurrency`).
**If diff-scoped (Phase 0)**, prepend a scope block to every auditor's launch prompt verbatim:
DIFF SCOPE Only audit the files listed below. Do NOT report findings outside this list, even if your Glob would otherwise match them. Treat this list as the complete universe of source files for this audit. Files (N): <paths>
The file list is the same one from Phase 0. Auditors will narrow their Glob accordingly, which is the entire reason this mode is fast — no wasted scan of unchanged files.
While auditors run, inform the user:
- Audit scope (f
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
Other skills on axiom.
- /axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
Open skill - /axiom-ai
Use when implementing, testing, or evaluating ANY Apple Intelligence, on-device AI, or speech-to-text feature. Covers Foundation Models, @Generable, LanguageModelSession, Tool protocol, eval suites, model-as-judge scoring, SpeechTranscriber, CoreML.
Open skill - /axiom-analyze-crash
Use when the user has a crash log (.
Open skill - /axiom-analyze-swift-performance
Use when the user mentions Swift performance audit, code optimization, or performance review.
Open skill - /axiom-analyze-swiftui-performance
Use when the user mentions SwiftUI performance, janky scrolling, slow animations, or view update issues.
Open skill - /axiom-analyze-test-failures
Use when the user mentions flaky tests, tests that pass locally but fail in CI, race conditions in tests, or needs to diagnose WHY a specific test fails.
Open skill

