{"id":"adc9f8ab-3c90-4646-ade8-2e62aa26f88c","entityType":"agent","slug":"clawhub-skills-6mile-puppet-s3-sort","name":"s3-bulk-upload","canonicalUrl":"https://www.xpersona.co/agent/clawhub-skills-6mile-puppet-s3-sort","canonicalPath":"/agent/clawhub-skills-6mile-puppet-s3-sort","generatedAt":"2026-10-09T17:05:58.105Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Upload many files to S3 with automatic organization by first-character prefixes. --- name: s3-bulk-upload description: Upload many files to S3 with automatic organization by first-character prefixes. version: 1.0.0 metadata: openclaw: requires: env: - AWS_ACCESS_KEY_ID - AWS_SECRET_ACCESS_KEY bins: - aws primaryEnv: AWS_ACCESS_KEY_ID emoji: \"\\U0001F4E6\" install: - kind: brew formula: awscli bins: [aws] --- S3 Bulk Upload Upload files to S3 with automatic organization using first-character prefixe","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.","installCommand":"clawhub skill install skills:6mile-puppet:s3-sort","sourceUrl":"https://github.com/openclaw/skills/tree/main/skills/6mile-puppet/s3-sort","homepage":null,"primaryLinks":[{"label":"View on ClawHub","url":"https://github.com/openclaw/skills/tree/main/skills/6mile-puppet/s3-sort","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":50,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Upload many files to S3 with automatic organization by first-character prefixes. --- name: s3-bulk-upload description: Upload many files to S3 with automatic or"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No source adoption metrics were available."},"stars":null,"forks":null,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-25T05:53:40.081Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-25T05:53:40.081Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-26T05:53:40.081Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install skills:6mile-puppet:s3-sort","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T17:05:58.105Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-6mile-puppet-s3-sort/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"---\nname: s3-bulk-upload\ndescription: Upload many files to S3 with automatic organization by first-character prefixes.\nversion: 1.0.0\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - AWS_ACCESS_KEY_ID\n        - AWS_SECRET_ACCESS_KEY\n      bins:\n        - aws\n    primaryEnv: AWS_ACCESS_KEY_ID\n    emoji: \"\\U0001F4E6\"\n    install:\n      - kind: brew\n        formula: awscli\n        bins: [aws]\n---\n\n# S3 Bulk Upload\n\nUpload files to S3 with automatic organization using first-character prefixes (e.g., `a/apple.txt`, `b/banana.txt`, `0-9/123.txt`).\n\n## Quick Start\n\nUse the included script for bulk uploads:\n\n```bash\n# Basic upload\n./s3-bulk-upload.sh ./files my-bucket\n\n# Dry run to preview\n./s3-bulk-upload.sh ./files my-bucket --dry-run\n\n# Use sync mode (faster for many files)\n./s3-bulk-upload.sh ./files my-bucket --sync\n\n# With storage class\n./s3-bulk-upload.sh ./files my-bucket --storage-class STANDARD_IA\n```\n\n## Prerequisites\n\nVerify AWS credentials are configured:\n\n```bash\naws sts get-caller-identity\n```\n\nIf this fails, ensure `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` are set, or configure via `aws configure`.\n\n## Organization Logic\n\nFiles are organized by the first character of their filename:\n\n| First Character | Prefix |\n|-----------------|--------|\n| `a-z` | Lowercase letter (e.g., `a/`, `b/`) |\n| `A-Z` | Lowercase letter (e.g., `a/`, `b/`) |\n| `0-9` | `0-9/` |\n| Other | `_other/` |\n\n## Single File Upload\n\nUpload a single file with automatic prefix:\n\n```bash\nFILE=\"example.txt\"\nBUCKET=\"my-bucket\"\n\n# Compute prefix from first character\nFIRST_CHAR=$(echo \"${FILE}\" | cut -c1 | tr '[:upper:]' '[:lower:]')\nif [[ \"$FIRST_CHAR\" =~ [a-z] ]]; then\n  PREFIX=\"$FIRST_CHAR\"\nelif [[ \"$FIRST_CHAR\" =~ [0-9] ]]; then\n  PREFIX=\"0-9\"\nelse\n  PREFIX=\"_other\"\nfi\n\naws s3 cp \"$FILE\" \"s3://${BUCKET}/${PREFIX}/${FILE}\"\n```\n\n## Bulk Upload\n\nUpload all files from a directory:\n\n```bash\nSOURCE_DIR=\"./files\"\nBUCKET=\"my-bucket\"\n\nfor FILE in \"$SOURCE_DIR\"/*; do\n  [ -f \"$FILE\" ] || continue\n  BASENAME=$(basename \"$FILE\")\n  FIRST_CHAR=$(echo \"$BASENAME\" | cut -c1 | tr '[:upper:]' '[:lower:]')\n\n  if [[ \"$FIRST_CHAR\" =~ [a-z] ]]; then\n    PREFIX=\"$FIRST_CHAR\"\n  elif [[ \"$FIRST_CHAR\" =~ [0-9] ]]; then\n    PREFIX=\"0-9\"\n  else\n    PREFIX=\"_other\"\n  fi\n\n  aws s3 cp \"$FILE\" \"s3://${BUCKET}/${PREFIX}/${BASENAME}\"\ndone\n```\n\n## Efficient Bulk Sync\n\nFor large uploads, stage files with symlinks then use `aws s3 sync`:\n\n```bash\nSOURCE_DIR=\"./files\"\nSTAGING_DIR=\"./staging\"\nBUCKET=\"my-bucket\"\n\n# Create staging directory with prefix structure\nrm -rf \"$STAGING_DIR\"\nmkdir -p \"$STAGING_DIR\"\n\nfor FILE in \"$SOURCE_DIR\"/*; do\n  [ -f \"$FILE\" ] || continue\n  BASENAME=$(basename \"$FILE\")\n  FIRST_CHAR=$(echo \"$BASENAME\" | cut -c1 | tr '[:upper:]' '[:lower:]')\n\n  if [[ \"$FIRST_CHAR\" =~ [a-z] ]]; then\n    PREFIX=\"$FIRST_CHAR\"\n  elif [[ \"$FIRST_CHAR\" =~ [0-9] ]]; then\n    PREFIX=\"0-9\"\n  else\n    PREFIX=\"_other\"\n  fi\n\n  mkdir -p \"$STAGING_DIR/$PREFIX\"\n  ln -s \"$(realpath \"$FILE\")\" \"$STAGING_DIR/$PREFIX/$BASENAME\"\ndone\n\n# Sync entire staging directory to S3\naws s3 sync \"$STAGING_DIR\" \"s3://${BUCKET}/\"\n\n# Clean up\nrm -rf \"$STAGING_DIR\"\n```\n\n## Verification\n\nList files by prefix:\n\n```bash\nBUCKET=\"my-bucket\"\nPREFIX=\"a\"\n\naws s3 ls \"s3://${BUCKET}/${PREFIX}/\" --recursive\n```\n\nGenerate a manifest of all uploaded files:\n\n```bash\nBUCKET=\"my-bucket\"\n\naws s3 ls \"s3://${BUCKET}/\" --recursive | awk '{print $4}'\n```\n\nCount files per prefix:\n\n```bash\nBUCKET=\"my-bucket\"\n\nfor PREFIX in {a..z} 0-9 _other; do\n  COUNT=$(aws s3 ls \"s3://${BUCKET}/${PREFIX}/\" --recursive 2>/dev/null | wc -l | tr -d ' ')\n  [ \"$COUNT\" -gt 0 ] && echo \"$PREFIX: $COUNT files\"\ndone\n```\n\n## Error Handling\n\nCommon issues and solutions:\n\n| Error | Cause | Solution |\n|-------|-------|----------|\n| `AccessDenied` | Insufficient permissions | Check IAM policy has `s3:PutObject` on bucket |\n| `NoSuchBucket` | Bucket doesn't exist | Create bucket or check bucket name spelling |\n| `InvalidAccessKeyId` | Bad credentials | Verify `AWS_ACCESS_KEY_ID` is correct |\n| `ExpiredToken` | Session token expired | Refresh credentials or re-authenticate |\n\nTest bucket access before bulk upload:\n\n```bash\nBUCKET=\"my-bucket\"\necho \"test\" | aws s3 cp - \"s3://${BUCKET}/_test_access.txt\" && \\\n  aws s3 rm \"s3://${BUCKET}/_test_access.txt\" && \\\n  echo \"Bucket access OK\"\n```\n\n## Storage Classes\n\nOptimize costs with storage classes:\n\n```bash\n# Standard (default)\naws s3 cp file.txt s3://bucket/prefix/file.txt\n\n# Infrequent Access (cheaper storage, retrieval fee)\naws s3 cp file.txt s3://bucket/prefix/file.txt --storage-class STANDARD_IA\n\n# Glacier Instant Retrieval (archive with fast access)\naws s3 cp file.txt s3://bucket/prefix/file.txt --storage-class GLACIER_IR\n\n# Intelligent Tiering (auto-optimize based on access patterns)\naws s3 cp file.txt s3://bucket/prefix/file.txt --storage-class INTELLIGENT_TIERING\n```\n\nAdd `--storage-class` to bulk upload loops for cost optimization on infrequently accessed files.\n","readmeExcerpt":"--- name: s3-bulk-upload description: Upload many files to S3 with automatic organization by first-character prefixes. version: 1.0.0 metadata: openclaw: requires: env: - AWS_ACCESS_KEY_ID - AWS_SECRET_ACCESS_KEY bins: - aws primaryEnv: AWS_ACCESS_KEY_ID emoji: \"\\U0001F4E6\" install: - kind: brew formula: awscli bins: [aws] --- S3 Bulk Upload Upload files to S3 with automatic organization using first-character prefixe","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Basic upload\n./s3-bulk-upload.sh ./files my-bucket\n\n# Dry run to preview\n./s3-bulk-upload.sh ./files my-bucket --dry-run\n\n# Use sync mode (faster for many files)\n./s3-bulk-upload.sh ./files my-bucket --sync\n\n# With storage class\n./s3-bulk-upload.sh ./files my-bucket --storage-class STANDARD_IA"},{"language":"bash","snippet":"aws sts get-caller-identity"},{"language":"bash","snippet":"FILE=\"example.txt\"\nBUCKET=\"my-bucket\"\n\n# Compute prefix from first character\nFIRST_CHAR=$(echo \"${FILE}\" | cut -c1 | tr '[:upper:]' '[:lower:]')\nif [[ \"$FIRST_CHAR\" =~ [a-z] ]]; then\n  PREFIX=\"$FIRST_CHAR\"\nelif [[ \"$FIRST_CHAR\" =~ [0-9] ]]; then\n  PREFIX=\"0-9\"\nelse\n  PREFIX=\"_other\"\nfi\n\naws s3 cp \"$FILE\" \"s3://${BUCKET}/${PREFIX}/${FILE}\""},{"language":"bash","snippet":"SOURCE_DIR=\"./files\"\nBUCKET=\"my-bucket\"\n\nfor FILE in \"$SOURCE_DIR\"/*; do\n  [ -f \"$FILE\" ] || continue\n  BASENAME=$(basename \"$FILE\")\n  FIRST_CHAR=$(echo \"$BASENAME\" | cut -c1 | tr '[:upper:]' '[:lower:]')\n\n  if [[ \"$FIRST_CHAR\" =~ [a-z] ]]; then\n    PREFIX=\"$FIRST_CHAR\"\n  elif [[ \"$FIRST_CHAR\" =~ [0-9] ]]; then\n    PREFIX=\"0-9\"\n  else\n    PREFIX=\"_other\"\n  fi\n\n  aws s3 cp \"$FILE\" \"s3://${BUCKET}/${PREFIX}/${BASENAME}\"\ndone"},{"language":"bash","snippet":"SOURCE_DIR=\"./files\"\nSTAGING_DIR=\"./staging\"\nBUCKET=\"my-bucket\"\n\n# Create staging directory with prefix structure\nrm -rf \"$STAGING_DIR\"\nmkdir -p \"$STAGING_DIR\"\n\nfor FILE in \"$SOURCE_DIR\"/*; do\n  [ -f \"$FILE\" ] || continue\n  BASENAME=$(basename \"$FILE\")\n  FIRST_CHAR=$(echo \"$BASENAME\" | cut -c1 | tr '[:upper:]' '[:lower:]')\n\n  if [[ \"$FIRST_CHAR\" =~ [a-z] ]]; then\n    PREFIX=\"$FIRST_CHAR\"\n  elif [[ \"$FIRST_CHAR\" =~ [0-9] ]]; then\n    PREFIX=\"0-9\"\n  else\n    PREFIX=\"_other\"\n  fi\n\n  mkdir -p \"$STAGING_DIR/$PREFIX\"\n  ln -s \"$(realpath \"$FILE\")\" \"$STAGING_DIR/$PREFIX/$BASENAME\"\ndone\n\n# Sync entire staging directory to S3\naws s3 sync \"$STAGING_DIR\" \"s3://${BUCKET}/\"\n\n# Clean up\nrm -rf \"$STAGING_DIR\""},{"language":"bash","snippet":"BUCKET=\"my-bucket\"\nPREFIX=\"a\"\n\naws s3 ls \"s3://${BUCKET}/${PREFIX}/\" --recursive"}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"CLAWHUB","editorialOverview":"Upload many files to S3 with automatic organization by first-character prefixes. --- name: s3-bulk-upload description: Upload many files to S3 with automatic organization by first-character prefixes. version: 1.0.0 metadata: openclaw: requires: env: - AWS_ACCESS_KEY_ID - AWS_SECRET_ACCESS_KEY bins: - aws primaryEnv: AWS_ACCESS_KEY_ID emoji: \"\\U0001F4E6\" install: - kind: brew formula: awscli bins: [aws] --- S3 Bulk Upload Upload files to S3 with automatic organization using first-character prefixe","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":387,"uniquenessScore":63,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:05:58.105Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}