{
  "schemaVersion": "1.0",
  "item": {
    "slug": "static-app",
    "name": "Static App",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/Akellacom/static-app",
    "canonicalUrl": "https://clawhub.ai/Akellacom/static-app",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/static-app",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=static-app",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/delete.js",
      "scripts/deploy.js",
      "scripts/download.js",
      "scripts/files.js",
      "scripts/list.js"
    ],
    "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/static-app"
    },
    "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/static-app",
    "agentPageUrl": "https://openagent3.xyz/skills/static-app/agent",
    "manifestUrl": "https://openagent3.xyz/skills/static-app/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/static-app/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.app Deployment Skill",
        "body": "Deploy static websites and applications to Static.app hosting directly from OpenClaw."
      },
      {
        "title": "Workspace Structure",
        "body": "All Static.app operations in your workspace use a dedicated folder structure:\n\nworkspace/\n└── staticapp/              # Main folder for all Static.app operations\n    ├── new-site/           # New sites created locally\n    └── {pid}/              # Downloaded existing sites (by PID)\n\nNew sites: Created in staticapp/ subfolders before deployment\nDownloaded sites: Extracted to staticapp/{pid}/ for editing"
      },
      {
        "title": "How Static.app Handles Files",
        "body": "Static.app automatically creates clean URLs from your filenames:\n\nFileURLindex.html/ (homepage)about.html/aboutportfolio.html/portfoliocontact.html/contact\n\nNo subdirectories needed! Just create .html files in the root folder."
      },
      {
        "title": "Simple Multi-Page Site",
        "body": "my-site/\n├── index.html          # Homepage → /\n├── about.html          # About page → /about\n├── portfolio.html      # Portfolio → /portfolio\n├── contact.html        # Contact → /contact\n├── style.css           # Stylesheet\n├── js/                 # JavaScript files\n│   ├── main.js\n│   └── utils.js\n└── images/             # Images folder\n    ├── logo.png\n    └── photo.jpg"
      },
      {
        "title": "JavaScript App (React, Vue, etc.)",
        "body": "For JS apps, build first, then deploy the dist (or build) folder:\n\n# Build your app\nnpm run build\n\n# Deploy the dist folder\nnode scripts/deploy.js ./dist"
      },
      {
        "title": "Prerequisites",
        "body": "Get API Key: Go to https://static.app/account/api and create an API key (starts with sk_)\nSet Environment Variable: Store the API key in STATIC_APP_API_KEY env var"
      },
      {
        "title": "Deploy Multi-Page Site",
        "body": "# Create your pages\necho '<h1>Home</h1>' > index.html\necho '<h1>About</h1>' > about.html\necho '<h1>Portfolio</h1>' > portfolio.html\n\n# Deploy\nnode scripts/deploy.js"
      },
      {
        "title": "Deploy Specific Directory",
        "body": "node scripts/deploy.js ./my-site"
      },
      {
        "title": "Update Existing Site",
        "body": "node scripts/deploy.js . --pid olhdscieyr"
      },
      {
        "title": "List All Sites",
        "body": "node scripts/list.js"
      },
      {
        "title": "List Site Files",
        "body": "node scripts/files.js YOUR_PID\n\nOptions:\n\n--raw — Output raw JSON\n-k <key> — Specify API key"
      },
      {
        "title": "Delete Site",
        "body": "node scripts/delete.js YOUR_PID\n\nOptions:\n\n-f, --force — Skip confirmation prompt\n-k <key> — Specify API key"
      },
      {
        "title": "Download Site",
        "body": "Download an existing site to your workspace for editing:\n\nnode scripts/download.js YOUR_PID\n\nThis will:\n\nFetch the download URL from Static.app API\nDownload the site archive\nExtract it to staticapp/{pid}/\n\nOptions:\n\n-p, --pid — Site PID to download\n-o, --output — Custom output directory (default: ./staticapp/{pid})\n-k <key> — Specify API key\n--raw — Output raw JSON response\n\nExample:\n\n# Download site to default location\nnode scripts/download.js abc123\n\n# Download to custom folder\nnode scripts/download.js abc123 -o ./my-site"
      },
      {
        "title": "Script Options",
        "body": "node scripts/deploy.js [SOURCE_DIR] [OPTIONS]\n\nArguments:\n  SOURCE_DIR          Directory to deploy (default: current directory)\n\nOptions:\n  -k, --api-key       API key (or set STATIC_APP_API_KEY env var)\n  -p, --pid           Project PID to update existing site\n  -e, --exclude       Comma-separated exclude patterns\n  --keep-zip          Keep zip archive after deployment"
      },
      {
        "title": "Default Exclusions",
        "body": "The following are automatically excluded from deployment:\n\nnode_modules\n.git, .github\n*.md\npackage*.json\n.env\n.openclaw"
      },
      {
        "title": "✅ What Works",
        "body": "Static HTML sites — Any number of .html pages\nCSS & JavaScript — Frontend frameworks, vanilla JS\nImages & Assets — Place in images/ folder or root\nJavaScript files — Place in js/ folder or root\nBuilt JS Apps — Deploy dist/ or build/ folder after npm run build"
      },
      {
        "title": "❌ What Doesn't Work",
        "body": "Node.js Server Apps — No server-side rendering, no Express.js, no API routes\nPHP, Python, Ruby — Static.app only serves static files\nDatabases — Use client-side storage or external APIs"
      },
      {
        "title": "JavaScript Apps Workflow",
        "body": "# 1. Build your React/Vue/Angular app\nnpm run build\n\n# 2. Deploy the build output\nnode scripts/deploy.js ./dist --pid YOUR_PID"
      },
      {
        "title": "Deploy Site",
        "body": "Endpoint: POST https://api.static.app/v1/sites/zip\nAuth: Bearer token (API key)\nBody: Multipart form with archive (zip file) and optional pid"
      },
      {
        "title": "List Sites",
        "body": "Endpoint: GET https://api.static.app/v1/sites\nAuth: Bearer token (API key)\nHeaders: Accept: application/json"
      },
      {
        "title": "List Site Files",
        "body": "Endpoint: GET https://api.static.app/v1/sites/files/{pid}\nAuth: Bearer token (API key)\nHeaders: Accept: application/json"
      },
      {
        "title": "Delete Site",
        "body": "Endpoint: DELETE https://api.static.app/v1/sites/{pid}\nAuth: Bearer token (API key)\nHeaders: Accept: application/json"
      },
      {
        "title": "Download Site",
        "body": "Endpoint: GET https://api.static.app/v1/sites/download/{pid}\nAuth: Bearer token (API key)\nHeaders: Accept: application/json\nResponse: Returns download URL for the site archive"
      },
      {
        "title": "Dependencies",
        "body": "archiver — Zip archive creation\nform-data — Multipart form encoding\nnode-fetch — HTTP requests\nadm-zip — Zip extraction\n\nInstall with: cd scripts && npm install"
      },
      {
        "title": "Response",
        "body": "On success, the script outputs:\n\n✅ Deployment successful!\n🌐 Site URL: https://xyz.static.app\n📋 PID: abc123\n\nSTATIC_APP_URL=https://xyz.static.app\nSTATIC_APP_PID=abc123"
      },
      {
        "title": "Workflow",
        "body": "Check for STATIC_APP_API_KEY env var or --api-key\nCreate zip archive from source directory (with exclusions)\nUpload to Static.app API\nParse response and output URLs\nClean up temporary zip file"
      },
      {
        "title": "Error Handling",
        "body": "Missing API key → Clear error with instructions\nNetwork issues → HTTP error details\nInvalid PID → API error message"
      }
    ],
    "body": "Static.app Deployment Skill\n\nDeploy static websites and applications to Static.app hosting directly from OpenClaw.\n\nWorkspace Structure\n\nAll Static.app operations in your workspace use a dedicated folder structure:\n\nworkspace/\n└── staticapp/              # Main folder for all Static.app operations\n    ├── new-site/           # New sites created locally\n    └── {pid}/              # Downloaded existing sites (by PID)\n\nNew sites: Created in staticapp/ subfolders before deployment\nDownloaded sites: Extracted to staticapp/{pid}/ for editing\nHow Static.app Handles Files\n\nStatic.app automatically creates clean URLs from your filenames:\n\nFile\tURL\nindex.html\t/ (homepage)\nabout.html\t/about\nportfolio.html\t/portfolio\ncontact.html\t/contact\n\nNo subdirectories needed! Just create .html files in the root folder.\n\nProject Structure\nSimple Multi-Page Site\nmy-site/\n├── index.html          # Homepage → /\n├── about.html          # About page → /about\n├── portfolio.html      # Portfolio → /portfolio\n├── contact.html        # Contact → /contact\n├── style.css           # Stylesheet\n├── js/                 # JavaScript files\n│   ├── main.js\n│   └── utils.js\n└── images/             # Images folder\n    ├── logo.png\n    └── photo.jpg\n\nJavaScript App (React, Vue, etc.)\n\nFor JS apps, build first, then deploy the dist (or build) folder:\n\n# Build your app\nnpm run build\n\n# Deploy the dist folder\nnode scripts/deploy.js ./dist\n\nPrerequisites\nGet API Key: Go to https://static.app/account/api and create an API key (starts with sk_)\nSet Environment Variable: Store the API key in STATIC_APP_API_KEY env var\nUsage\nDeploy Multi-Page Site\n# Create your pages\necho '<h1>Home</h1>' > index.html\necho '<h1>About</h1>' > about.html\necho '<h1>Portfolio</h1>' > portfolio.html\n\n# Deploy\nnode scripts/deploy.js\n\nDeploy Specific Directory\nnode scripts/deploy.js ./my-site\n\nUpdate Existing Site\nnode scripts/deploy.js . --pid olhdscieyr\n\nList All Sites\nnode scripts/list.js\n\nList Site Files\nnode scripts/files.js YOUR_PID\n\n\nOptions:\n\n--raw — Output raw JSON\n-k <key> — Specify API key\nDelete Site\nnode scripts/delete.js YOUR_PID\n\n\nOptions:\n\n-f, --force — Skip confirmation prompt\n-k <key> — Specify API key\nDownload Site\n\nDownload an existing site to your workspace for editing:\n\nnode scripts/download.js YOUR_PID\n\n\nThis will:\n\nFetch the download URL from Static.app API\nDownload the site archive\nExtract it to staticapp/{pid}/\n\nOptions:\n\n-p, --pid — Site PID to download\n-o, --output — Custom output directory (default: ./staticapp/{pid})\n-k <key> — Specify API key\n--raw — Output raw JSON response\n\nExample:\n\n# Download site to default location\nnode scripts/download.js abc123\n\n# Download to custom folder\nnode scripts/download.js abc123 -o ./my-site\n\nScript Options\nnode scripts/deploy.js [SOURCE_DIR] [OPTIONS]\n\nArguments:\n  SOURCE_DIR          Directory to deploy (default: current directory)\n\nOptions:\n  -k, --api-key       API key (or set STATIC_APP_API_KEY env var)\n  -p, --pid           Project PID to update existing site\n  -e, --exclude       Comma-separated exclude patterns\n  --keep-zip          Keep zip archive after deployment\n\nDefault Exclusions\n\nThe following are automatically excluded from deployment:\n\nnode_modules\n.git, .github\n*.md\npackage*.json\n.env\n.openclaw\nImportant Notes\n✅ What Works\nStatic HTML sites — Any number of .html pages\nCSS & JavaScript — Frontend frameworks, vanilla JS\nImages & Assets — Place in images/ folder or root\nJavaScript files — Place in js/ folder or root\nBuilt JS Apps — Deploy dist/ or build/ folder after npm run build\n❌ What Doesn't Work\nNode.js Server Apps — No server-side rendering, no Express.js, no API routes\nPHP, Python, Ruby — Static.app only serves static files\nDatabases — Use client-side storage or external APIs\nJavaScript Apps Workflow\n# 1. Build your React/Vue/Angular app\nnpm run build\n\n# 2. Deploy the build output\nnode scripts/deploy.js ./dist --pid YOUR_PID\n\nAPI Reference\nDeploy Site\nEndpoint: POST https://api.static.app/v1/sites/zip\nAuth: Bearer token (API key)\nBody: Multipart form with archive (zip file) and optional pid\nList Sites\nEndpoint: GET https://api.static.app/v1/sites\nAuth: Bearer token (API key)\nHeaders: Accept: application/json\nList Site Files\nEndpoint: GET https://api.static.app/v1/sites/files/{pid}\nAuth: Bearer token (API key)\nHeaders: Accept: application/json\nDelete Site\nEndpoint: DELETE https://api.static.app/v1/sites/{pid}\nAuth: Bearer token (API key)\nHeaders: Accept: application/json\nDownload Site\nEndpoint: GET https://api.static.app/v1/sites/download/{pid}\nAuth: Bearer token (API key)\nHeaders: Accept: application/json\nResponse: Returns download URL for the site archive\nDependencies\narchiver — Zip archive creation\nform-data — Multipart form encoding\nnode-fetch — HTTP requests\nadm-zip — Zip extraction\n\nInstall with: cd scripts && npm install\n\nResponse\n\nOn success, the script outputs:\n\n✅ Deployment successful!\n🌐 Site URL: https://xyz.static.app\n📋 PID: abc123\n\nSTATIC_APP_URL=https://xyz.static.app\nSTATIC_APP_PID=abc123\n\nWorkflow\nCheck for STATIC_APP_API_KEY env var or --api-key\nCreate zip archive from source directory (with exclusions)\nUpload to Static.app API\nParse response and output URLs\nClean up temporary zip file\nError Handling\nMissing API key → Clear error with instructions\nNetwork issues → HTTP error details\nInvalid PID → API error message"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Akellacom/static-app",
    "publisherUrl": "https://clawhub.ai/Akellacom/static-app",
    "owner": "Akellacom",
    "version": "1.0.4",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/static-app",
    "downloadUrl": "https://openagent3.xyz/downloads/static-app",
    "agentUrl": "https://openagent3.xyz/skills/static-app/agent",
    "manifestUrl": "https://openagent3.xyz/skills/static-app/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/static-app/agent.md"
  }
}