{
  "schemaVersion": "1.0",
  "item": {
    "slug": "kleo-static-files",
    "name": "Kleo Static files",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/awaaate/kleo-static-files",
    "canonicalUrl": "https://clawhub.ai/awaaate/kleo-static-files",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/kleo-static-files",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=kleo-static-files",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/sf-helper.sh",
      "references/install.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-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/kleo-static-files"
    },
    "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/kleo-static-files",
    "agentPageUrl": "https://openagent3.xyz/skills/kleo-static-files/agent",
    "manifestUrl": "https://openagent3.xyz/skills/kleo-static-files/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/kleo-static-files/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": "Static Files Hosting",
        "body": "Host static content on *.{domain} subdomains with automatic SSL."
      },
      {
        "title": "Quick Reference",
        "body": "# Create site\nsf sites create mysite\n# → https://mysite.498as.com\n\n# Upload file\nsf upload ./index.html mysite\n\n# Upload directory  \nsf upload ./dist mysite\n\n# Add authentication\nsf sites auth mysite admin:secretpass123\n\n# List files\nsf files mysite\n\n# Delete file\nsf files mysite delete path/to/file.txt\n\n# Delete site\nsf sites delete mysite"
      },
      {
        "title": "Environment Setup",
        "body": "export SF_API_URL=http://localhost:3000   # API endpoint\nexport SF_API_KEY=sk_xxxxx                # Your API key"
      },
      {
        "title": "Deploy a Static Website",
        "body": "# 1. Create the site\nsf sites create docs\n\n# 2. Upload the build directory\nsf upload ./build docs\n\n# 3. Verify\ncurl -I https://docs.498as.com"
      },
      {
        "title": "Protected File Sharing",
        "body": "# 1. Create site with auth\nsf sites create private\nsf sites auth private user:strongpassword\n\n# 2. Upload sensitive files\nsf upload ./reports private\n\n# 3. Share URL + credentials\n# https://private.498as.com (user / strongpassword)"
      },
      {
        "title": "Update Existing Files",
        "body": "# Overwrite existing file\nsf upload ./new-version.pdf mysite --overwrite\n\n# Or delete and re-upload\nsf files mysite delete old-file.pdf\nsf upload ./new-file.pdf mysite"
      },
      {
        "title": "sites",
        "body": "CommandDescriptionsf sites listList all sitessf sites create <name>Create new sitesf sites delete <name>Delete site and all filessf sites auth <name> <user:pass>Set basic authsf sites auth <name> --removeRemove auth"
      },
      {
        "title": "upload",
        "body": "sf upload <path> <site> [subdir] [--overwrite] [--json]\n\npath: File or directory to upload\nsite: Target site name\nsubdir: Optional subdirectory\n--overwrite: Replace existing files\n--json: Output JSON"
      },
      {
        "title": "files",
        "body": "CommandDescriptionsf files <site>List all filessf files <site> delete <path>Delete specific file"
      },
      {
        "title": "stats",
        "body": "sf stats              # Global stats\nsf stats <site>       # Site-specific stats"
      },
      {
        "title": "API Endpoints",
        "body": "Base: $SF_API_URL with Authorization: Bearer $SF_API_KEY\n\nMethodPathDescriptionGET/sitesList sitesPOST/sitesCreate siteDELETE/sites/{name}Delete sitePATCH/sites/{name}Update authGET/sites/{name}/filesList filesPOST/sites/{name}/filesUpload fileDELETE/sites/{name}/files/{path}Delete fileGET/statsGlobal statsGET/stats/{name}Site statsGET/healthHealth check"
      },
      {
        "title": "Constraints",
        "body": "Site names: lowercase, alphanumeric, hyphens only (max 63 chars)\nFile size: 50MB default (configurable)\nQuota: 100MB per site default\nRate limit: 100 requests/minute per API key"
      },
      {
        "title": "\"Cannot connect to API\"",
        "body": "# Check service status\nsystemctl status kleo-static-files\n\n# Check if port is listening\ncurl http://localhost:3000/health"
      },
      {
        "title": "\"Invalid API key\"",
        "body": "# Verify key is set\necho $SF_API_KEY\n\n# Create new key if needed\nbun run /opt/kleo-static-files/scripts/create-key.ts \"new-key\""
      },
      {
        "title": "\"Quota exceeded\"",
        "body": "# Check current usage\nsf stats mysite\n\n# Delete unused files\nsf files mysite delete large-file.zip"
      },
      {
        "title": "Site not accessible via HTTPS",
        "body": "# Verify DNS points to server\ndig mysite.498as.com\n\n# Check Caddy config\ncat /etc/caddy/sites.d/static-files.caddy\n\n# Resync Caddy\nbun run /opt/kleo-static-files/scripts/sync-caddy.ts --reload"
      },
      {
        "title": "Server Installation (run once on host)",
        "body": "curl -fsSL https://raw.githubusercontent.com/498AS/kleo-static-files/main/install.sh | sudo bash\n\nThe installer outputs JSON with connection details between KLEO_SF_CONFIG_BEGIN and KLEO_SF_CONFIG_END markers. Parse this to get api_url and api_key."
      },
      {
        "title": "After Installation",
        "body": "export SF_API_URL=http://localhost:3000\nexport SF_API_KEY=sk_xxxxx  # from installer output"
      },
      {
        "title": "Check Status",
        "body": "sudo /opt/kleo-static-files/install.sh --status\n\nSee references/install.md for manual installation."
      }
    ],
    "body": "Static Files Hosting\n\nHost static content on *.{domain} subdomains with automatic SSL.\n\nQuick Reference\n# Create site\nsf sites create mysite\n# → https://mysite.498as.com\n\n# Upload file\nsf upload ./index.html mysite\n\n# Upload directory  \nsf upload ./dist mysite\n\n# Add authentication\nsf sites auth mysite admin:secretpass123\n\n# List files\nsf files mysite\n\n# Delete file\nsf files mysite delete path/to/file.txt\n\n# Delete site\nsf sites delete mysite\n\nEnvironment Setup\nexport SF_API_URL=http://localhost:3000   # API endpoint\nexport SF_API_KEY=sk_xxxxx                # Your API key\n\nWorkflows\nDeploy a Static Website\n# 1. Create the site\nsf sites create docs\n\n# 2. Upload the build directory\nsf upload ./build docs\n\n# 3. Verify\ncurl -I https://docs.498as.com\n\nProtected File Sharing\n# 1. Create site with auth\nsf sites create private\nsf sites auth private user:strongpassword\n\n# 2. Upload sensitive files\nsf upload ./reports private\n\n# 3. Share URL + credentials\n# https://private.498as.com (user / strongpassword)\n\nUpdate Existing Files\n# Overwrite existing file\nsf upload ./new-version.pdf mysite --overwrite\n\n# Or delete and re-upload\nsf files mysite delete old-file.pdf\nsf upload ./new-file.pdf mysite\n\nCLI Commands\nsites\nCommand\tDescription\nsf sites list\tList all sites\nsf sites create <name>\tCreate new site\nsf sites delete <name>\tDelete site and all files\nsf sites auth <name> <user:pass>\tSet basic auth\nsf sites auth <name> --remove\tRemove auth\nupload\nsf upload <path> <site> [subdir] [--overwrite] [--json]\n\npath: File or directory to upload\nsite: Target site name\nsubdir: Optional subdirectory\n--overwrite: Replace existing files\n--json: Output JSON\nfiles\nCommand\tDescription\nsf files <site>\tList all files\nsf files <site> delete <path>\tDelete specific file\nstats\nsf stats              # Global stats\nsf stats <site>       # Site-specific stats\n\nAPI Endpoints\n\nBase: $SF_API_URL with Authorization: Bearer $SF_API_KEY\n\nMethod\tPath\tDescription\nGET\t/sites\tList sites\nPOST\t/sites\tCreate site\nDELETE\t/sites/{name}\tDelete site\nPATCH\t/sites/{name}\tUpdate auth\nGET\t/sites/{name}/files\tList files\nPOST\t/sites/{name}/files\tUpload file\nDELETE\t/sites/{name}/files/{path}\tDelete file\nGET\t/stats\tGlobal stats\nGET\t/stats/{name}\tSite stats\nGET\t/health\tHealth check\nConstraints\nSite names: lowercase, alphanumeric, hyphens only (max 63 chars)\nFile size: 50MB default (configurable)\nQuota: 100MB per site default\nRate limit: 100 requests/minute per API key\nTroubleshooting\n\"Cannot connect to API\"\n# Check service status\nsystemctl status kleo-static-files\n\n# Check if port is listening\ncurl http://localhost:3000/health\n\n\"Invalid API key\"\n# Verify key is set\necho $SF_API_KEY\n\n# Create new key if needed\nbun run /opt/kleo-static-files/scripts/create-key.ts \"new-key\"\n\n\"Quota exceeded\"\n# Check current usage\nsf stats mysite\n\n# Delete unused files\nsf files mysite delete large-file.zip\n\nSite not accessible via HTTPS\n# Verify DNS points to server\ndig mysite.498as.com\n\n# Check Caddy config\ncat /etc/caddy/sites.d/static-files.caddy\n\n# Resync Caddy\nbun run /opt/kleo-static-files/scripts/sync-caddy.ts --reload\n\nInstallation\nServer Installation (run once on host)\ncurl -fsSL https://raw.githubusercontent.com/498AS/kleo-static-files/main/install.sh | sudo bash\n\n\nThe installer outputs JSON with connection details between KLEO_SF_CONFIG_BEGIN and KLEO_SF_CONFIG_END markers. Parse this to get api_url and api_key.\n\nAfter Installation\nexport SF_API_URL=http://localhost:3000\nexport SF_API_KEY=sk_xxxxx  # from installer output\n\nCheck Status\nsudo /opt/kleo-static-files/install.sh --status\n\n\nSee references/install.md for manual installation."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/awaaate/kleo-static-files",
    "publisherUrl": "https://clawhub.ai/awaaate/kleo-static-files",
    "owner": "awaaate",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/kleo-static-files",
    "downloadUrl": "https://openagent3.xyz/downloads/kleo-static-files",
    "agentUrl": "https://openagent3.xyz/skills/kleo-static-files/agent",
    "manifestUrl": "https://openagent3.xyz/skills/kleo-static-files/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/kleo-static-files/agent.md"
  }
}