Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问clear审计通过

axiom-storage-diag公理存储诊断

Agent Skill

axiom-storage-diag 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

4,227

周安装

171

GitHub Stars

873

下载量

1,327
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

3

许可证

MIT

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:axiom-storage-diag(公理存储诊断)
来源仓库:https://github.com/charleswiltgen/axiom
仓库路径:skills/axiom-storage-diag
安装命令:
npx skills add https://github.com/charleswiltgen/axiom --skill axiom-storage-diag
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/charleswiltgen/axiom --skill axiom-storage-diag

简介

用于诊断本地文件存储问题,聚焦存储位置和保护级别选择。

  • 适用于文件消失、备份异常或访问失败等文件系统故障。
  • 提供保护级别配置、备份排除和磁盘空间检查等解决方案。
  • 安装前建议确认权限范围和维护状态,避免触发联网或命令执行操作。
  • axiom-storage-diag 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

Local File Storage Diagnostics

Overview

Core principle 90% of file storage problems stem from choosing the wrong storage location, misunderstanding file protection levels, or missing backup exclusions—not iOS file system bugs.

The iOS file system is battle-tested across millions of apps and devices. If your files are disappearing, becoming inaccessible, or causing backup issues, the problem is almost always in storage location choice or protection configuration.

Red Flags — Suspect File Storage Issue

If you see ANY of these:

  • Files mysteriously disappear after device restart
  • Files disappear randomly (weeks after creation)
  • App backup size unexpectedly large (>500 MB)
  • "File not found" after app background/foreground cycle
  • Files inaccessible when device is locked
  • Users report lost data after iOS update
  • Background tasks can't access files

FORBIDDEN "iOS deleted my files, the file system is broken"

  • iOS file system handles billions of files daily across all apps
  • System behavior is documented and predictable
  • 99% of issues are location/protection mismatches

Mandatory First Steps

ALWAYS check these FIRST (before changing code):

// 1. Check WHERE file is stored
func diagnoseFileLocation(_ url: URL) {
    let path = url.path
    if path.contains("/tmp/") {
        print("⚠️ File in tmp/ - system purges aggressively")
    } else if path.contains("/Caches/") {
        print("⚠️ File in Caches/ - purged under storage pressure")
    } else if path.contains("/Documents/") {
        print("✅ File in Documents/ - never purged, backed up")
    } else if path.contains("/Library/Application Support/") {
        print("✅ File in Application Support/ - never purged, backed up")
    }
}

// 2. Check file protection level
func diagnoseFileProtection(_ url: URL) throws {
    let attrs = try FileManager.default.attributesOfItem(atPath: url.path)
    if let protection = attrs[.protectionKey] as? FileProtectionType {
        print("Protection: \(protection)")
        if protection == .complete {
            print("⚠️ File inaccessible when device locked")
        }
    }
}

// 3. Check backup status
func diagnoseBackupStatus(_ url: URL) throws {
    let values = try url.resourceValues(forKeys: [.isExcludedFromBackupKey])
    if let excluded = values.isExcludedFromBackup {
        print("Excluded from backup: \(excluded)")
    }
}

// 4. Check file existence and size
func diagnoseFileState(_ url: URL) {
    if FileManager.default.fileExists(atPath: url.path) {
        if let size = try? FileManager.default.attributesOfItem(atPath: url.path)[.size] as? Int64 {
            print("File exists, size: \(size) bytes")
        }
    } else {
        print("❌ File does not exist")
    }
}

Decision Tree

Files Disappeared

Files missing? → Check where stored

├─ Disappeared after device restart
│   ├─ Was in tmp/? → EXPECTED (tmp/ purged on reboot)
│   │   → FIX: Move to Caches/ or Application Support/
│   │
│   ├─ Was in Caches/? → System purged (storage pressure)
│   │   → FIX: Move to Application Support/ if can't be regenerated
│   │
│   └─ Protection level .complete? → Inaccessible until unlock
│       → FIX: Wait for unlock or use .completeUntilFirstUserAuthentication
│
├─ Disappeared randomly (weeks later)
│   ├─ In Caches/? → System purged under storage pressure
│   │   → EXPECTED if re-downloadable
│   │   → FIX: Re-download when needed, or move to Application Support/
│   │
│   └─ In Documents or Application Support/?
│       → Check if user deleted app (purges all data)
│       → Check iOS update (rare, but check migration path)
│
└─ Only some files missing
    → Check isExcludedFromBackup + iCloud sync
    → Check if file names have special characters
    → Check file permissions

Files Inaccessible

Can't access file?

├─ Error: "No permission" or NSFileReadNoPermissionError
│   ├─ Device locked? → Check file protection
│   │   └─ .complete protection? → Wait for unlock
│   │       → FIX: Use .completeUntilFirstUserAuthentication
│   │
│   └─ Background task accessing? → .complete blocks background
│       → FIX: Change to .completeUntilFirstUserAuthentication
│
├─ File exists but read returns empty/nil
│   └─ Check actual file size on disk
│       → May be zero-byte file from failed write
│
└─ File exists in debugger but not at runtime
    → Check if using wrong directory (Documents vs Caches)
    → Check URL construction

Backup Too Large

App backup > 500 MB?

├─ Check Documents directory size
│   └─ Large files (>10 MB each)?
│       ├─ Can they be re-downloaded? → Move to Caches + isExcludedFromBackup
│       └─ User-created? → Keep in Documents (warn user if >1 GB)
│
├─ Check Application Support size
│   └─ Downloaded media/podcasts?
│       → Mark isExcludedFromBackup = true
│
└─ Audit backup with code:

func auditBackupSize() { let docsURL = FileManager.default.urls( for: .documentDirectory, in: .userDomainMask )[0] let size = getDirectorySize(url: docsURL) print("Documents (backed up): \(size / 1_000_000) MB") }


Common Patterns by Symptom

Pattern 1: Files in tmp/ Disappear

Symptom: Temp files missing after restart or even during app lifecycle

Cause: tmp/ is purged aggressively by system

Fix:

// ❌ WRONG: Using tmp/ for anything that should persist
let tmpURL = FileManager.default.temporaryDirectory
let fileURL = tmpURL.appendingPathComponent("data.json")
try data.write(to: fileURL)  // WILL BE DELETED

// ✅ CORRECT: Use Caches/ for re-generable data
let cacheURL = FileManager.default.urls(
    for: .cachesDirectory,
    in: .userDomainMask
)[0]
let fileURL = cacheURL.appendingPathComponent("data.json")
try data.write(to: fileURL)

Pattern 2: Caches Purged, Data Lost

Symptom: Downloaded content disappears weeks later

Cause: Caches/ is purged under storage pressure (expected behavior)

Fix: Either re-download on demand OR move to Application Support if can't be regenerated

// ✅ CORRECT: Handle missing cache gracefully
func loadCachedImage(url: URL) async throws -> UIImage {
    let cacheURL = getCacheURL(for: url)

    // Try cache first
    if FileManager.default.fileExists(atPath: cacheURL.path),
       let data = try? Data(contentsOf: cacheURL),
       let image = UIImage(data: data) {
        return image
    }

    // Cache miss - re-download
    let (data, _) = try await URLSession.shared.data(from: url)
    try data.write(to: cacheURL)
    return UIImage(data: data)!
}

Pattern 3:.complete Protection Blocks Background

Symptom: Background tasks fail with "permission denied"

Cause: Files with.complete protection inaccessible when locked

Fix:

// ❌ WRONG: .complete protection for background-accessed files
try data.write(to: url, options: .completeFileProtection)
// Background task fails when device locked

// ✅ CORRECT: Use .completeUntilFirstUserAuthentication
try data.write(
    to: url,
    options: .completeFileProtectionUntilFirstUserAuthentication
)
// Accessible in background after first unlock

Pattern 4: Backup Bloat from Downloaded Content

Symptom: App backup >1 GB, app rejected or users complain

Cause: Downloaded content in Documents/ or not marked excluded

Fix:

// ✅ CORRECT: Exclude re-downloadable content
func downloadPodcast(url: URL) async throws {
    let appSupportURL = FileManager.default.urls(
        for: .applicationSupportDirectory,
        in: .userDomainMask
    )[0]

    let podcastURL = appSupportURL
        .appendingPathComponent("Podcasts")
        .appendingPathComponent(url.lastPathComponent)

    // Download
    let (data, _) = try await URLSession.shared.data(from: url)
    try data.write(to: podcastURL)

    // Mark excluded from backup
    var resourceValues = URLResourceValues()
    resourceValues.isExcludedFromBackup = true
    try podcastURL.setResourceValues(resourceValues)
}

Production Crisis Scenario

SYMPTOM: Users report lost photos after iOS update

DIAGNOSIS STEPS:

  1. Check storage location (5 min): // Were photos in Caches/? let photosInCaches = path.contains("/Caches/") // If yes → system purged them (expected)
  2. Check if backed up (5 min): // Check if excluded from backup let excluded = try? url.resourceValues(forKeys: [.isExcludedFromBackupKey]).isExcludedFromBackup // If excluded=true AND not synced → lost
  3. Check migration path (10 min):

- Did app container path change? - Did we migrate data from old location?

ROOT CAUSES (90% of cases):

  • Photos in Caches/ (purged under storage pressure)
  • Photos excluded from backup + no cloud sync
  • Migration code missing after major iOS update

FIX:

  • User photos MUST be in Documents/
  • Never exclude user-created content from backup
  • Always have cloud sync OR backup for user content

Quick Diagnostic Checklist

Run this on any storage problem:

func diagnoseStorageIssue(fileURL: URL) {
    print("=== Storage Diagnosis ===")

    // 1. Location
    diagnoseFileLocation(fileURL)

    // 2. Protection
    try? diagnoseFileProtection(fileURL)

    // 3. Backup status
    try? diagnoseBackupStatus(fileURL)

    // 4. File state
    diagnoseFileState(fileURL)

    // 5. Directory size
    if let parentURL = fileURL.deletingLastPathComponent() as URL? {
        let size = getDirectorySize(url: parentURL)
        print("Parent directory size: \(size / 1_000_000) MB")
    }

    print("=== End Diagnosis ===")
}

Related Skills

  • axiom-storage — Correct storage location decisions
  • axiom-file-protection-ref — Understanding protection levels
  • axiom-storage-management-ref — Purge behavior and capacity APIs

Last Updated: 2025-12-12 Skill Type: Diagnostic

适合场景

01

研究助手

02

事实核查

03

知识库问答

04

带来源的搜索总结

能力概览

能力 1

组合搜索和大模型调用

能力 2

支持多来源检索和总结

能力 3

强调引用来源和事实核查

能力 4

适合研究型 Agent 流程

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Claude Code

26.81%
按下载量换算356

Codex

25.48%
按下载量换算338

OpenCode

19.62%
按下载量换算260

Antigravity

11.42%
按下载量换算152

Cursor

7.11%
按下载量换算94

windsurf

3.37%
按下载量换算45

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

来源信息

继续浏览同类 Skills