{
  "schemaVersion": "1.0",
  "item": {
    "slug": "r2-upload",
    "name": "Send Me My Files - R2 upload with short lived signed urls",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/julianengel/r2-upload",
    "canonicalUrl": "https://clawhub.ai/julianengel/r2-upload",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/r2-upload",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=r2-upload",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CLAWDHUB.md",
      "README.md",
      "SECURITY.md",
      "SKILL.md",
      "example-config.yml",
      "package.json"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-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/r2-upload"
    },
    "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/r2-upload",
    "agentPageUrl": "https://openagent3.xyz/skills/r2-upload/agent",
    "manifestUrl": "https://openagent3.xyz/skills/r2-upload/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/r2-upload/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Send Me My Files - R2 Upload with Short Lived Signed URLs",
        "body": "Upload files to Cloudflare R2 or any S3-compatible storage and generate presigned download links."
      },
      {
        "title": "Features",
        "body": "Upload files to R2/S3 buckets\nGenerate presigned download URLs (configurable expiration)\nSupport for any S3-compatible storage (R2, AWS S3, MinIO, etc.)\nMultiple bucket configurations\nAutomatic content-type detection"
      },
      {
        "title": "Configuration",
        "body": "Create ~/.r2-upload.yml (or set R2_UPLOAD_CONFIG env var):\n\n# Default bucket (used when no bucket specified)\ndefault: my-bucket\n\n# Bucket configurations\nbuckets:\n  my-bucket:\n    endpoint: https://abc123.r2.cloudflarestorage.com\n    access_key_id: your_access_key\n    secret_access_key: your_secret_key\n    bucket_name: my-bucket\n    public_url: https://files.example.com  # Optional: custom domain\n    region: auto  # For R2, use \"auto\"\n    \n  # Additional buckets\n  personal:\n    endpoint: https://xyz789.r2.cloudflarestorage.com\n    access_key_id: ...\n    secret_access_key: ...\n    bucket_name: personal-files\n    region: auto"
      },
      {
        "title": "Cloudflare R2 Setup",
        "body": "Go to Cloudflare Dashboard → R2\nCreate a bucket\nGo to R2 API Tokens: https://dash.cloudflare.com/<ACCOUNT_ID>/r2/api-tokens\nCreate a new API token\n\nImportant: Apply to specific bucket (select your bucket)\nPermissions: Object Read & Write\n\n\nCopy the Access Key ID and Secret Access Key\nUse endpoint format: https://<account_id>.r2.cloudflarestorage.com\nSet region: auto"
      },
      {
        "title": "AWS S3 Setup",
        "body": "aws-bucket:\n  endpoint: https://s3.us-east-1.amazonaws.com\n  access_key_id: ...\n  secret_access_key: ...\n  bucket_name: my-aws-bucket\n  region: us-east-1"
      },
      {
        "title": "Upload a file",
        "body": "r2-upload /path/to/file.pdf\n# Returns: https://files.example.com/abc123/file.pdf?signature=..."
      },
      {
        "title": "Upload with custom path",
        "body": "r2-upload /path/to/file.pdf --key uploads/2026/file.pdf"
      },
      {
        "title": "Upload to specific bucket",
        "body": "r2-upload /path/to/file.pdf --bucket personal"
      },
      {
        "title": "Custom expiration (default: 5 minutes)",
        "body": "r2-upload /path/to/file.pdf --expires 24h\nr2-upload /path/to/file.pdf --expires 1d\nr2-upload /path/to/file.pdf --expires 300  # seconds"
      },
      {
        "title": "Public URL (no signature)",
        "body": "r2-upload /path/to/file.pdf --public"
      },
      {
        "title": "Tools",
        "body": "r2_upload - Upload file and get presigned URL\nr2_list - List recent uploads\nr2_delete - Delete a file"
      },
      {
        "title": "Environment Variables",
        "body": "R2_UPLOAD_CONFIG - Path to config file (default: ~/.r2-upload.yml)\nR2_DEFAULT_BUCKET - Override default bucket\nR2_DEFAULT_EXPIRES - Default expiration in seconds (default: 300 = 5 minutes)"
      },
      {
        "title": "Notes",
        "body": "Uploaded files are stored with their original filename unless --key is specified\nAutomatic UUID prefix added to prevent collisions (e.g., abc123/file.pdf)\nContent-Type automatically detected from file extension\nPresigned URLs expire after the configured duration"
      }
    ],
    "body": "Send Me My Files - R2 Upload with Short Lived Signed URLs\n\nUpload files to Cloudflare R2 or any S3-compatible storage and generate presigned download links.\n\nFeatures\nUpload files to R2/S3 buckets\nGenerate presigned download URLs (configurable expiration)\nSupport for any S3-compatible storage (R2, AWS S3, MinIO, etc.)\nMultiple bucket configurations\nAutomatic content-type detection\nConfiguration\n\nCreate ~/.r2-upload.yml (or set R2_UPLOAD_CONFIG env var):\n\n# Default bucket (used when no bucket specified)\ndefault: my-bucket\n\n# Bucket configurations\nbuckets:\n  my-bucket:\n    endpoint: https://abc123.r2.cloudflarestorage.com\n    access_key_id: your_access_key\n    secret_access_key: your_secret_key\n    bucket_name: my-bucket\n    public_url: https://files.example.com  # Optional: custom domain\n    region: auto  # For R2, use \"auto\"\n    \n  # Additional buckets\n  personal:\n    endpoint: https://xyz789.r2.cloudflarestorage.com\n    access_key_id: ...\n    secret_access_key: ...\n    bucket_name: personal-files\n    region: auto\n\nCloudflare R2 Setup\nGo to Cloudflare Dashboard → R2\nCreate a bucket\nGo to R2 API Tokens: https://dash.cloudflare.com/<ACCOUNT_ID>/r2/api-tokens\nCreate a new API token\nImportant: Apply to specific bucket (select your bucket)\nPermissions: Object Read & Write\nCopy the Access Key ID and Secret Access Key\nUse endpoint format: https://<account_id>.r2.cloudflarestorage.com\nSet region: auto\nAWS S3 Setup\naws-bucket:\n  endpoint: https://s3.us-east-1.amazonaws.com\n  access_key_id: ...\n  secret_access_key: ...\n  bucket_name: my-aws-bucket\n  region: us-east-1\n\nUsage\nUpload a file\nr2-upload /path/to/file.pdf\n# Returns: https://files.example.com/abc123/file.pdf?signature=...\n\nUpload with custom path\nr2-upload /path/to/file.pdf --key uploads/2026/file.pdf\n\nUpload to specific bucket\nr2-upload /path/to/file.pdf --bucket personal\n\nCustom expiration (default: 5 minutes)\nr2-upload /path/to/file.pdf --expires 24h\nr2-upload /path/to/file.pdf --expires 1d\nr2-upload /path/to/file.pdf --expires 300  # seconds\n\nPublic URL (no signature)\nr2-upload /path/to/file.pdf --public\n\nTools\nr2_upload - Upload file and get presigned URL\nr2_list - List recent uploads\nr2_delete - Delete a file\nEnvironment Variables\nR2_UPLOAD_CONFIG - Path to config file (default: ~/.r2-upload.yml)\nR2_DEFAULT_BUCKET - Override default bucket\nR2_DEFAULT_EXPIRES - Default expiration in seconds (default: 300 = 5 minutes)\nNotes\nUploaded files are stored with their original filename unless --key is specified\nAutomatic UUID prefix added to prevent collisions (e.g., abc123/file.pdf)\nContent-Type automatically detected from file extension\nPresigned URLs expire after the configured duration"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/julianengel/r2-upload",
    "publisherUrl": "https://clawhub.ai/julianengel/r2-upload",
    "owner": "julianengel",
    "version": "1.0.4",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/r2-upload",
    "downloadUrl": "https://openagent3.xyz/downloads/r2-upload",
    "agentUrl": "https://openagent3.xyz/skills/r2-upload/agent",
    "manifestUrl": "https://openagent3.xyz/skills/r2-upload/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/r2-upload/agent.md"
  }
}