CtrlK
BlogDocsLog inGet started
Tessl Logo

axiom-health-check

Use when the user wants a comprehensive project-wide audit, full health check, or scan across all domains.

69

Quality

83%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

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:

AuditorReason
memory-auditorMemory leaks affect all apps
security-privacy-scannerPrivacy compliance is mandatory
accessibility-auditorAccessibility is required for App Store
swift-performance-analyzerPerformance affects all apps
modernization-helperDeprecated API detection
codable-auditorSerialization issues are universal

Conditional (grep for signals)

Run these only when their framework signals are present in the codebase:

Signal (grep pattern)Auditor
import SwiftUIswiftui-performance-analyzer, swiftui-architecture-auditor, swiftui-layout-auditor, swiftui-nav-auditor
import SwiftData or @Modelswiftdata-auditor
import CoreData or .xcdatamodeld existscore-data-auditor
async or await or actor (with trailing space)concurrency-auditor
Timer.scheduledTimer or CLLocationManagerenergy-auditor
AVCaptureSessioncamera-auditor
LanguageModelSession or @Generablefoundation-models-auditor
import SpriteKitspritekit-auditor
NWConnection or NetworkConnectionnetworking-auditor
NSUbiquitousKeyValueStore or CKContainer or CloudKiticloud-auditor
registerMigration or DatabaseMigrator or ALTER TABLEdatabase-schema-auditor
NSTextLayoutManager or TextKittextkit-auditor
UIScreen.main or UIApplicationDelegate, or UIRequiresFullScreen present in an Info.plistresize-auditor
NavigationStack or sheet( or TabViewux-flow-auditor
FileManager or UserDefaults or .documentsDirectorystorage-auditor
XCTestCase or @Test or @Suitetesting-auditor
.glassBackgroundEffect or GlassEffectContainerliquid-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 (full vs diff vs <base>, plus file count if diff-scoped)
  • How many auditors were launched
  • Which are "always run" vs "conditional" (and what signals triggered them)
  • Which were skipped (no signal detected) or excluded (user request)

Phase 3: Collect and Deduplicate

After all auditors complete:

  1. Use TaskOutput to collect the summary from each background agent launched in Phase 2. Wait for all agents to return before proceeding.
  2. Read each scratch/health-check-*-{date}.md file
  3. Parse findings — look for file:line references and severity levels
  4. Identify duplicate file:line references across multiple auditor reports
  5. Merge duplicates: keep all domain tags (e.g., "memory + concurrency") and the highest severity

Phase 4: Generate Unified Report

Write to scratch/health-check-{date}.md (full audit) or scratch/health-check-diff-{date}.md (diff-scoped) with:

Scope (always the first section)

  • Full audit: Scope: full project audit (N Swift files)
  • Diff-scoped: Scope: changed files vs `<base>` (merge-base `<short-SHA>`, N files), followed by the bulleted file list.

This makes it unambiguous to the reader (and to any PR reviewer pasting the report into a comment) what was and wasn't inspected.

Executive Summary

Top 5 most critical findings across all domains. Each with:

  • Severity (CRITICAL/HIGH/MEDIUM/LOW)
  • Domain(s)
  • File:line
  • One-line description

Findings by Domain

Group findings by domain (memory, accessibility, concurrency, etc.). Within each domain, sort by severity (CRITICAL first).

Passed Audits

List auditors that found zero issues — this is valuable signal.

Summary Table

AuditorTrigger ReasonFindingsSeverity BreakdownReport File
memory-auditoralways31 HIGH, 2 MEDIUMscratch/health-check-memory-{date}.md
...............

Output Limits

If >100 total findings across all auditors:

  • Show only CRITICAL and HIGH findings in the conversation response
  • Reference the scratch files for MEDIUM and LOW findings
  • Provide the summary table in full regardless

If <=100 total findings:

  • Show all findings grouped by domain in the conversation response

Guidelines

  1. If an auditor fails or times out, note it in the report and continue with others
  2. Deduplicate aggressively — the same file:line appearing in 3 auditors should be one finding with 3 domain tags
  3. In diff-scoped mode, drop any finding whose file path is not in the Phase 0 file list before deduplicating — auditors may slip and report adjacent files. The scope is a hard boundary.

Related

For individual audits: Use the specific auditor agent directly (e.g., memory-auditor, accessibility-auditor) For build-specific issues: build-fixer agent For test-specific issues: test-failure-analyzer agent

Repository
CharlesWiltgen/Axiom
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.