{
  "schemaVersion": "1.0",
  "item": {
    "slug": "deno-subhosting-deploy-skill",
    "name": "Deno Deploy",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/hosainnet/deno-subhosting-deploy-skill",
    "canonicalUrl": "https://clawhub.ai/hosainnet/deno-subhosting-deploy-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/deno-subhosting-deploy-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=deno-subhosting-deploy-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/deploy.py"
    ],
    "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/deno-subhosting-deploy-skill"
    },
    "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/deno-subhosting-deploy-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/deno-subhosting-deploy-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/deno-subhosting-deploy-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/deno-subhosting-deploy-skill/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": "Deno Deploy Skill (Standalone)",
        "body": "Deploy simple web pages and HTML apps to Deno Deploy using a bundled Python script that calls the Deno REST API directly. No MCP tool required."
      },
      {
        "title": "Credentials Setup (First Time)",
        "body": "Before deploying, the user must create a Deno Subhosting organization and retrieve their credentials:\n\nGo to dash.deno.com/subhosting/new_auto and create a new subhosting org\nFrom the org dashboard, copy the org ID and access token\n\nThen save them as config files under ~/.config/deno-deploy/:\n\nmkdir -p ~/.config/deno-deploy\necho \"your_token_here\" > ~/.config/deno-deploy/access_token\necho \"your_org_id_here\" > ~/.config/deno-deploy/org_id\n\nIf these files don't exist, the deploy script will print a clear error with setup instructions. Direct the user to dash.deno.com/subhosting/new_auto to get started."
      },
      {
        "title": "Step 1: Plan the App",
        "body": "Before writing code, think about:\n\nWhat HTML/CSS/JS is needed?\nDoes it need external libraries? (Use CDN links — no npm installs)\nIs it purely static, or does it need a simple backend (e.g., an API route)?\n\nFor simple pages: serve everything from a single main.ts file with inline HTML."
      },
      {
        "title": "Standard Pattern",
        "body": "All Deno Deploy apps must export a fetch handler:\n\nexport default {\n  async fetch(req: Request): Promise<Response> {\n    const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>My App</title>\n</head>\n<body>\n  <!-- content here -->\n</body>\n</html>`;\n\n    return new Response(html, {\n      headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n    });\n  },\n};"
      },
      {
        "title": "Key Rules",
        "body": "No Node.js APIs — no require(), no fs, no path\nNo npm packages — use CDN links (e.g. https://cdn.tailwindcss.com)\nSingle file — inline all HTML, CSS, JS as template literals in main.ts\nAlways set Content-Type — include charset=utf-8 for HTML responses\nRouting — use new URL(req.url).pathname for multi-route apps"
      },
      {
        "title": "Useful CDN Libraries",
        "body": "PurposeURLTailwind CSShttps://cdn.tailwindcss.comAlpine.jshttps://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.jsChart.jshttps://cdn.jsdelivr.net/npm/chart.jsMarked (markdown)https://cdn.jsdelivr.net/npm/marked/marked.min.js"
      },
      {
        "title": "Step 3: Save the Code to a File",
        "body": "Write the TypeScript code to a temporary file, e.g. /tmp/main.ts:\n\ncat > /tmp/main.ts << 'EOF'\nexport default {\n  async fetch(req: Request): Promise<Response> {\n    ...\n  },\n};\nEOF"
      },
      {
        "title": "Step 4: Deploy Using the Script",
        "body": "Run the bundled deploy script:\n\npython scripts/deploy.py \\\n  --name <project-name> \\\n  --code /tmp/main.ts\n\nProject naming tips:\n\nUse the topic/purpose: birthday-card, sales-dashboard, quiz-game\nLowercase, hyphens only, max ~30 chars\nAvoid generic names like app or test\n\nThe script will:\n\nCreate a new Deno Deploy project\nUpload the code\nPrint the live URL"
      },
      {
        "title": "Step 5: Verify the Deployment",
        "body": "After the deploy script runs, you MUST verify the deployment was successful:\n\nCheck the script output — look at the deployment response JSON printed by the script:\n\n\"status\" should NOT be \"failed\". If it is, the code has errors — fix and redeploy.\nIf the status is \"pending\", wait a few seconds and proceed to the next check.\n\n\n\nCurl the live URL to confirm it's serving correctly:\ncurl -s -o /dev/null -w \"%{http_code}\" https://<project-name>.deno.dev\n\n\n200 = success, the page is live\n404 or 500 = something is wrong — check the deployment logs URL printed by the script\nAny other error = the deployment may still be propagating, wait 5 seconds and retry once\n\n\n\nIf the deployment failed, check for these common causes:\n\nSyntax errors in the TypeScript code (missing braces, unclosed template literals)\nMissing export default { fetch } handler\nUse of Node.js APIs (require, fs, etc.)\nFix the issue in the code file and redeploy\n\nDo NOT tell the user the deployment succeeded until you have confirmed it with curl."
      },
      {
        "title": "Step 6: Share the Result",
        "body": "After a verified successful deployment, always:\n\nShare the live URL prominently as a clickable link\nBriefly explain what the user will see when they open it\n\nExample:\n\nYour page is live at https://your-project.deno.dev\nIt shows [brief description]. Let me know if you'd like to change anything!"
      },
      {
        "title": "Common Pitfalls",
        "body": "Don't forget <!DOCTYPE html> — browsers may render in quirks mode without it\nDon't use backticks inside template literals without escaping them\nDon't forget export default { fetch } — the app won't start without it\nIf the project name is already taken, try a more specific name or add a suffix"
      }
    ],
    "body": "Deno Deploy Skill (Standalone)\n\nDeploy simple web pages and HTML apps to Deno Deploy using a bundled Python script that calls the Deno REST API directly. No MCP tool required.\n\nCredentials Setup (First Time)\n\nBefore deploying, the user must create a Deno Subhosting organization and retrieve their credentials:\n\nGo to dash.deno.com/subhosting/new_auto and create a new subhosting org\nFrom the org dashboard, copy the org ID and access token\n\nThen save them as config files under ~/.config/deno-deploy/:\n\nmkdir -p ~/.config/deno-deploy\necho \"your_token_here\" > ~/.config/deno-deploy/access_token\necho \"your_org_id_here\" > ~/.config/deno-deploy/org_id\n\n\nIf these files don't exist, the deploy script will print a clear error with setup instructions. Direct the user to dash.deno.com/subhosting/new_auto to get started.\n\nStep 1: Plan the App\n\nBefore writing code, think about:\n\nWhat HTML/CSS/JS is needed?\nDoes it need external libraries? (Use CDN links — no npm installs)\nIs it purely static, or does it need a simple backend (e.g., an API route)?\n\nFor simple pages: serve everything from a single main.ts file with inline HTML.\n\nStep 2: Write Good Deno-Compatible Code\nStandard Pattern\n\nAll Deno Deploy apps must export a fetch handler:\n\nexport default {\n  async fetch(req: Request): Promise<Response> {\n    const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>My App</title>\n</head>\n<body>\n  <!-- content here -->\n</body>\n</html>`;\n\n    return new Response(html, {\n      headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n    });\n  },\n};\n\nKey Rules\nNo Node.js APIs — no require(), no fs, no path\nNo npm packages — use CDN links (e.g. https://cdn.tailwindcss.com)\nSingle file — inline all HTML, CSS, JS as template literals in main.ts\nAlways set Content-Type — include charset=utf-8 for HTML responses\nRouting — use new URL(req.url).pathname for multi-route apps\nUseful CDN Libraries\nPurpose\tURL\nTailwind CSS\thttps://cdn.tailwindcss.com\nAlpine.js\thttps://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.js\nChart.js\thttps://cdn.jsdelivr.net/npm/chart.js\nMarked (markdown)\thttps://cdn.jsdelivr.net/npm/marked/marked.min.js\nStep 3: Save the Code to a File\n\nWrite the TypeScript code to a temporary file, e.g. /tmp/main.ts:\n\ncat > /tmp/main.ts << 'EOF'\nexport default {\n  async fetch(req: Request): Promise<Response> {\n    ...\n  },\n};\nEOF\n\nStep 4: Deploy Using the Script\n\nRun the bundled deploy script:\n\npython scripts/deploy.py \\\n  --name <project-name> \\\n  --code /tmp/main.ts\n\n\nProject naming tips:\n\nUse the topic/purpose: birthday-card, sales-dashboard, quiz-game\nLowercase, hyphens only, max ~30 chars\nAvoid generic names like app or test\n\nThe script will:\n\nCreate a new Deno Deploy project\nUpload the code\nPrint the live URL\nStep 5: Verify the Deployment\n\nAfter the deploy script runs, you MUST verify the deployment was successful:\n\nCheck the script output — look at the deployment response JSON printed by the script:\n\n\"status\" should NOT be \"failed\". If it is, the code has errors — fix and redeploy.\nIf the status is \"pending\", wait a few seconds and proceed to the next check.\n\nCurl the live URL to confirm it's serving correctly:\n\ncurl -s -o /dev/null -w \"%{http_code}\" https://<project-name>.deno.dev\n\n200 = success, the page is live\n404 or 500 = something is wrong — check the deployment logs URL printed by the script\nAny other error = the deployment may still be propagating, wait 5 seconds and retry once\n\nIf the deployment failed, check for these common causes:\n\nSyntax errors in the TypeScript code (missing braces, unclosed template literals)\nMissing export default { fetch } handler\nUse of Node.js APIs (require, fs, etc.)\nFix the issue in the code file and redeploy\n\nDo NOT tell the user the deployment succeeded until you have confirmed it with curl.\n\nStep 6: Share the Result\n\nAfter a verified successful deployment, always:\n\nShare the live URL prominently as a clickable link\nBriefly explain what the user will see when they open it\n\nExample:\n\nYour page is live at https://your-project.deno.dev\n\nIt shows [brief description]. Let me know if you'd like to change anything!\n\nCommon Pitfalls\nDon't forget <!DOCTYPE html> — browsers may render in quirks mode without it\nDon't use backticks inside template literals without escaping them\nDon't forget export default { fetch } — the app won't start without it\nIf the project name is already taken, try a more specific name or add a suffix"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/hosainnet/deno-subhosting-deploy-skill",
    "publisherUrl": "https://clawhub.ai/hosainnet/deno-subhosting-deploy-skill",
    "owner": "hosainnet",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/deno-subhosting-deploy-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/deno-subhosting-deploy-skill",
    "agentUrl": "https://openagent3.xyz/skills/deno-subhosting-deploy-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/deno-subhosting-deploy-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/deno-subhosting-deploy-skill/agent.md"
  }
}