axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…
Use when the user mentions file storage issues, data loss, backup bloat, or asks to audit storage usage.
Claude Code
$ npx -y skills add charleswiltgen/axiom --skill axiom-audit-storage --agent claude-code
Codex
$ npx skills add charleswiltgen/axiom --skill axiom-audit-storage -a codex -y
Cursor
$ npx skills add charleswiltgen/axiom --skill axiom-audit-storage -a cursor -y
Gemini CLI
$ npx skills add charleswiltgen/axiom --skill axiom-audit-storage -a gemini-cli -y
GitHub Copilot
$ npx skills add charleswiltgen/axiom --skill axiom-audit-storage -a github-copilot -y
OpenCode
$ npx skills add charleswiltgen/axiom --skill axiom-audit-storage -a opencode -y
Windsurf
$ npx skills add charleswiltgen/axiom --skill axiom-audit-storage -a windsurf -y
name: axiom-audit-storage description: Use when the user mentions file storage issues, data loss, backup bloat, or asks to audit storage usage. license: MIT
You are an expert at detecting file storage mistakes — both known anti-patterns AND missing/incomplete patterns that cause data loss, backup bloat, sensitive-data exposure, and cross-process invisibility.
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, **/Info.plist, **/*.entitlements (excluding test/vendor paths) Grep for: - `\.documentDirectory`, `Documents/` — user-visible storage - `\.cachesDirectory`, `Caches/` — purgeable cache - `\.applicationSupportDirectory`, `Application Support` — hidden persistent app data - `NSTemporaryDirectory`, `tmp/` — truly temporary - `containerURL(forSecurityApplicationGroupIdentifier:` — App Group shared container - `forUbiquityContainerIdentifier` — iCloud Drive container - `Library/` — generic library subpaths
Grep for: - `UserDefaults` — small KV settings - `Keychain`, `kSecClass` — secure secrets - `\.write\(to:`, `Data.*write\(`, `FileManager.*createFile` — direct file writes - `URLResourceValues` — resource attribute customization - `isExcludedFromBackup` — backup exclusion - `FileProtectionType`, `\.completeFileProtection`, `\.completeUntilFirstUserAuthentication`, `\.complete` — protection level
Grep for: - `token`, `password`, `secret`, `apiKey`, `credential`, `auth` (case-insensitive) — sensitive identifiers - `JWT`, `OAuth`, `refreshToken`, `accessToken` — auth tokens - file writes of these → should be in Keychain, not files
Read 2-3 representative files (FileManager extension / DownloadManager / CacheManager / SettingsService) to understand:
Write a brief **Storage Map** (5-10 lines) summarizing:
Present this map in the output before proceeding.
Run all 5 detection patterns. For every grep match, use Read to verify the surrounding context before reporting — grep patterns have high recall but need contextual verification.
The size and duration numbers in this procedure (1MB payloads, 100KB config files, 10KB defaults, sub-hour temp files, files over 10MB) are this audit's policy thresholds — tunable, not platform limits. Apple publishes no size or timing cliff for any of them; adjust to the app under audit.
**Issue**: `tmp/` is purged by iOS periodically, while your app is not running (and on device restore). Anything that needs to survive past a few minutes is at data-loss risk. **Search**:
**Verify**: Read matching files; check what's being written and whether the lifecycle is true scratch (delete within seconds/minutes) or persistence-intent. **Fix**:
**Issue**: Files above the size threshold (>1MB) in backed-up locations consume the user's iCloud quota unnecessarily. Re-downloadable or regenerable content should be excluded. **Search**:
**Verify**: Read matching files; determine whether the data is regenerable (cache, downloads, derived) or original (user-created). **Fix**: `setResourceValues` is mutating, so shadow a `let` URL or function parameter first — `var fileURL = url; var values = URLResourceValues(); values.isExcludedFromBackup = true; try fileURL.setResourceValues(values)` — for regenerable content, OR move it to `Caches/` instead.
**Issue**: Default file protection is `.completeUntilFirstUserAuthentication`. Sensitive data needs `.complete`; clearly-public data can be `.none` for performance. **Search**:
**Verify**: Read matching files; identify whether the data being written is sensitive (tokens, PII, financial) and whether explicit protection is set on the write call or the file's resource values. **Fix**: For sensitive data: `try data.write(to: url, options: [.atomic, .completeFileP
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…