{
  "schemaVersion": "1.0",
  "item": {
    "slug": "storage",
    "name": "Storage",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ivangdavila/storage",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/storage",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/storage",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=storage",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/storage"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/storage",
    "agentPageUrl": "https://openagent3.xyz/skills/storage/agent",
    "manifestUrl": "https://openagent3.xyz/skills/storage/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/storage/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Object vs Block vs File",
        "body": "Object storage (S3, R2, GCS) for immutable blobs: images, videos, backups, logs — cheap, scales infinitely, but no partial updates\nBlock storage (EBS, Persistent Disks) for databases and apps needing filesystem semantics — faster, but tied to single instance\nNetwork file systems (NFS, EFS) when multiple instances need shared filesystem access — convenient but latency and cost add up\nDefault to object storage for user uploads — block storage for database files only"
      },
      {
        "title": "When SQL vs NoSQL",
        "body": "SQL when you need joins, transactions, or complex queries — fighting against NoSQL for relational data wastes months\nDocument stores (MongoDB, Firestore) for nested/variable schemas where you always fetch the whole document\nKey-value (Redis, DynamoDB) for simple lookups by ID at massive scale — not for complex queries\nTime-series databases (InfluxDB, TimescaleDB) for metrics with timestamp-based queries — regular SQL struggles with retention policies\nStart with PostgreSQL unless you have a specific reason not to — it handles JSON, full-text search, and scales further than most assume"
      },
      {
        "title": "Local vs Cloud Storage",
        "body": "Local disk for ephemeral data: temp files, build artifacts, caches — assume it disappears on restart\nCloud storage for anything that must survive instance termination — never store user data only on local disk\nLocal SSD for databases in production — network-attached storage adds latency to every query\nHybrid: local cache in front of cloud storage for frequently accessed files"
      },
      {
        "title": "CDN Patterns",
        "body": "Put CDN in front of static assets always — origin requests are slower and more expensive\nSet long cache TTLs with versioned URLs (style.abc123.css) — cache invalidation is slow and unreliable\nCDN for dynamic content only if latency matters more than freshness — adds complexity for marginal gains\nEdge caching for API responses works but cache keys get tricky — start simple, add only when needed"
      },
      {
        "title": "Upload Handling",
        "body": "Never accept uploads directly to app server disk in production — use presigned URLs to cloud storage\nSet file size limits at load balancer level, not just application — prevents memory exhaustion attacks\nGenerate unique keys for uploads (UUIDs) — user-provided filenames cause collisions and path traversal risks\nValidate file types by content (magic bytes), not extension — extensions are trivially spoofed"
      },
      {
        "title": "Data Locality",
        "body": "Keep compute and storage in same region — cross-region data transfer adds latency and cost\nReplicate data to regions where users are, not where developers are\nMulti-region storage adds complexity — single region with backups elsewhere usually sufficient\nDatabase read replicas in user regions for read-heavy workloads"
      },
      {
        "title": "Retention and Lifecycle",
        "body": "Define retention policy before storing data — \"keep everything\" becomes expensive and legally risky\nAutomate deletion of temporary data — manual cleanup never happens consistently\nTiered storage for aging data: hot → warm → cold → archive — but check retrieval costs before archiving\nSeparate storage for logs vs business data — different retention, different compliance requirements"
      },
      {
        "title": "Cost Traps",
        "body": "Egress fees dominate cloud storage costs — calculate before choosing provider\nMany small files cost more than few large files — batch small writes when possible\nMinimum storage duration on cold tiers — early deletion still charges full period\nAPI request costs matter at scale — millions of LIST operations add up"
      },
      {
        "title": "Backup Strategy",
        "body": "3-2-1 rule: 3 copies, 2 different media types, 1 offsite — cloud counts as one location\nTest restores regularly — untested backups are not backups\nPoint-in-time recovery for databases — daily snapshots lose a day of data\nVersion important files — deletion or corruption often discovered late"
      }
    ],
    "body": "Object vs Block vs File\nObject storage (S3, R2, GCS) for immutable blobs: images, videos, backups, logs — cheap, scales infinitely, but no partial updates\nBlock storage (EBS, Persistent Disks) for databases and apps needing filesystem semantics — faster, but tied to single instance\nNetwork file systems (NFS, EFS) when multiple instances need shared filesystem access — convenient but latency and cost add up\nDefault to object storage for user uploads — block storage for database files only\nWhen SQL vs NoSQL\nSQL when you need joins, transactions, or complex queries — fighting against NoSQL for relational data wastes months\nDocument stores (MongoDB, Firestore) for nested/variable schemas where you always fetch the whole document\nKey-value (Redis, DynamoDB) for simple lookups by ID at massive scale — not for complex queries\nTime-series databases (InfluxDB, TimescaleDB) for metrics with timestamp-based queries — regular SQL struggles with retention policies\nStart with PostgreSQL unless you have a specific reason not to — it handles JSON, full-text search, and scales further than most assume\nLocal vs Cloud Storage\nLocal disk for ephemeral data: temp files, build artifacts, caches — assume it disappears on restart\nCloud storage for anything that must survive instance termination — never store user data only on local disk\nLocal SSD for databases in production — network-attached storage adds latency to every query\nHybrid: local cache in front of cloud storage for frequently accessed files\nCDN Patterns\nPut CDN in front of static assets always — origin requests are slower and more expensive\nSet long cache TTLs with versioned URLs (style.abc123.css) — cache invalidation is slow and unreliable\nCDN for dynamic content only if latency matters more than freshness — adds complexity for marginal gains\nEdge caching for API responses works but cache keys get tricky — start simple, add only when needed\nUpload Handling\nNever accept uploads directly to app server disk in production — use presigned URLs to cloud storage\nSet file size limits at load balancer level, not just application — prevents memory exhaustion attacks\nGenerate unique keys for uploads (UUIDs) — user-provided filenames cause collisions and path traversal risks\nValidate file types by content (magic bytes), not extension — extensions are trivially spoofed\nData Locality\nKeep compute and storage in same region — cross-region data transfer adds latency and cost\nReplicate data to regions where users are, not where developers are\nMulti-region storage adds complexity — single region with backups elsewhere usually sufficient\nDatabase read replicas in user regions for read-heavy workloads\nRetention and Lifecycle\nDefine retention policy before storing data — \"keep everything\" becomes expensive and legally risky\nAutomate deletion of temporary data — manual cleanup never happens consistently\nTiered storage for aging data: hot → warm → cold → archive — but check retrieval costs before archiving\nSeparate storage for logs vs business data — different retention, different compliance requirements\nCost Traps\nEgress fees dominate cloud storage costs — calculate before choosing provider\nMany small files cost more than few large files — batch small writes when possible\nMinimum storage duration on cold tiers — early deletion still charges full period\nAPI request costs matter at scale — millions of LIST operations add up\nBackup Strategy\n3-2-1 rule: 3 copies, 2 different media types, 1 offsite — cloud counts as one location\nTest restores regularly — untested backups are not backups\nPoint-in-time recovery for databases — daily snapshots lose a day of data\nVersion important files — deletion or corruption often discovered late"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/storage",
    "publisherUrl": "https://clawhub.ai/ivangdavila/storage",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/storage",
    "downloadUrl": "https://openagent3.xyz/downloads/storage",
    "agentUrl": "https://openagent3.xyz/skills/storage/agent",
    "manifestUrl": "https://openagent3.xyz/skills/storage/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/storage/agent.md"
  }
}