{
  "schemaVersion": "1.0",
  "item": {
    "slug": "deploy-on-render",
    "name": "render",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ojusave/deploy-on-render",
    "canonicalUrl": "https://clawhub.ai/ojusave/deploy-on-render",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/deploy-on-render",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=deploy-on-render",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "assets/web-with-postgres.yaml",
      "assets/python-web.yaml",
      "assets/static-site.yaml",
      "assets/node-express.yaml",
      "references/rest-api-deployment.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",
      "slug": "deploy-on-render",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-12T14:17:50.840Z",
      "expiresAt": "2026-05-19T14:17:50.840Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=deploy-on-render",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=deploy-on-render",
        "contentDisposition": "attachment; filename=\"deploy-on-render-3.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "deploy-on-render"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/deploy-on-render"
    },
    "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/deploy-on-render",
    "agentPageUrl": "https://openagent3.xyz/skills/deploy-on-render/agent",
    "manifestUrl": "https://openagent3.xyz/skills/deploy-on-render/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/deploy-on-render/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": "Render Skill",
        "body": "Deploy and manage applications on Render using Blueprints (render.yaml), the Dashboard, or the API. This skill mirrors the Codex render-deploy flow: analyze codebase → generate/validate Blueprint → commit & push → one-click Dashboard deeplink → optional API/mcporter verify or re-deploy."
      },
      {
        "title": "When to Use This Skill",
        "body": "Activate when the user wants to:\n\nDeploy, host, or publish an application on Render\nCreate or edit a render.yaml Blueprint (new or existing repo)\nAdd web, static site, private, worker, or cron services; Postgres; or Key Value\nConfigure env vars, health checks, scaling, disks, or regions\nSet up preview environments or projects\nValidate a Blueprint or get Dashboard/API links"
      },
      {
        "title": "Deployment Method Selection",
        "body": "If RENDER_API_KEY is set → Prefer REST API or MCP (fastest; no user click). Use references/rest-api-deployment.md for request bodies, or mcporter if configured (see references/mcp-integration.md).\nIf no API key → Use Blueprint + deeplink (user commits, pushes, then clicks the deeplink to deploy).\n\nCheck for API key:\n\n[ -n \"$RENDER_API_KEY\" ] && echo \"RENDER_API_KEY is set\" || echo \"RENDER_API_KEY is not set\""
      },
      {
        "title": "Happy Path (New Users)",
        "body": "Before deep analysis, use this short sequence to reduce friction:\n\nAsk whether they want to deploy from a Git repo (required for Blueprint and deeplink) or only get guidance. If no Git remote, they must create/push one first.\nAsk whether the app needs a database, workers, cron, or other services so you can choose the right Blueprint shape.\n\nThen follow Deploy to Render below (Blueprint → push → deeplink → verify)."
      },
      {
        "title": "Prerequisites Check",
        "body": "Git remote – Required for Blueprint deploy. Run git remote -v; if none, ask the user to create a repo on GitHub/GitLab/Bitbucket, add origin, and push.\nRender CLI (optional) – For local validation: render blueprints validate render.yaml. Install: brew install render or Render CLI.\nAPI key (optional) – For verifying deploys or triggering re-deploys: Dashboard → API Keys. Set RENDER_API_KEY in the environment."
      },
      {
        "title": "Security Notes",
        "body": "Never commit secrets to render.yaml — always use sync: false for API keys, passwords, and tokens; the user fills them in the Dashboard.\nValidate before suggesting deployment — run render blueprints validate render.yaml or use the Validate Blueprint API so invalid YAML is never pushed.\nValidate user-provided values — when writing env vars or service names from user input into YAML, sanitize or quote as needed to avoid injection."
      },
      {
        "title": "References",
        "body": "references/codebase-analysis.md (detect runtime, build/start commands, env vars)\nreferences/blueprint-spec.md (root keys, service types, env vars, validation)\nreferences/rest-api-deployment.md (direct API create service: ownerId, request bodies, type mapping)\nreferences/mcp-integration.md (Render MCP tools, mcporter usage, supported runtimes/plans/regions)\nreferences/post-deploy-checks.md (verify deploy status and health via API)\nreferences/troubleshooting-basics.md (build/startup/runtime failures)\nassets/ (example Blueprints: node-express.yaml, python-web.yaml, static-site.yaml, web-with-postgres.yaml)"
      },
      {
        "title": "Blueprint Basics",
        "body": "File: render.yaml at the root of the Git repository (required).\nRoot-level keys (official spec): services, databases, envVarGroups, projects, ungrouped, previews.generation, previews.expireAfterDays.\nSpec: Blueprint YAML Reference. JSON Schema for IDE validation: https://render.com/schema/render.yaml.json (e.g. YAML extension by Red Hat in VS Code/Cursor).\n\nValidation: render blueprints validate render.yaml (Render CLI v2.7.0+), or the Validate Blueprint API endpoint."
      },
      {
        "title": "Service Types",
        "body": "typePurposewebPublic HTTP app or static site (use runtime: static for static)pservPrivate service (internal hostname only, no public URL)workerBackground worker (runs continuously, e.g. job queues)cronScheduled job (cron expression; runs and exits)keyvalueRender Key Value instance (Redis/Valkey-compatible; defined in services)\n\nNote: Private services use pserv, not private. Key Value is a service with type: keyvalue; do not use a separate root key for it in new Blueprints (some older blueprints use keyValueStores and fromKeyValueStore—prefer the official format)."
      },
      {
        "title": "Runtimes",
        "body": "Use runtime (preferred; env is deprecated): node, python, elixir, go, ruby, rust, docker, image, static. For static sites: type: web, runtime: static, and staticPublishPath (e.g. ./build or ./dist) required."
      },
      {
        "title": "Minimal Web Service",
        "body": "services:\n  - type: web\n    name: my-app\n    runtime: node\n    buildCommand: npm install\n    startCommand: npm start\n    envVars:\n      - key: NODE_ENV\n        value: production\n\nPython example: runtime: python, buildCommand: pip install -r requirements.txt, startCommand: uvicorn app.main:app --host 0.0.0.0 --port $PORT (or gunicorn). Set PYTHON_VERSION / NODE_VERSION in envVars when needed."
      },
      {
        "title": "Static Site",
        "body": "- type: web\n  name: my-blog\n  runtime: static\n  buildCommand: yarn build\n  staticPublishPath: ./build\n\nOptional: headers, routes (redirects/rewrites). See Static Sites."
      },
      {
        "title": "Environment Variables",
        "body": "Literal: key + value (never hardcode secrets).\nFrom Postgres: fromDatabase.name + fromDatabase.property (e.g. connectionString).\nFrom Key Value or other service: fromService.type + fromService.name + fromService.property (e.g. connectionString, host, port, hostport) or fromService.envVarKey for another service’s env var.\nSecret / user-set: sync: false (user is prompted in Dashboard on first create; add new secrets manually later). Cannot be used inside env var groups.\nGenerated: generateValue: true (base64 256-bit value).\nShared: fromGroup: <envVarGroups[].name> to attach an env var group.\n\nEnv groups cannot reference other services (no fromDatabase/fromService in groups) and cannot use sync: false. Put secrets and DB/KV references in service-level envVars, or reference a group and add service-specific vars alongside."
      },
      {
        "title": "Databases (Render Postgres)",
        "body": "databases:\n  - name: my-db\n    plan: basic-256mb\n    databaseName: my_app\n    user: my_user\n    region: oregon\n    postgresMajorVersion: \"18\"\n\nPlans (current): free, basic-256mb, basic-1gb, basic-4gb, pro-*, accelerated-*. Legacy: starter, standard, pro, pro plus (no new DBs on legacy). Optional: diskSizeGB, ipAllowList, readReplicas, highAvailability.enabled. Reference in services: fromDatabase.name, property: connectionString."
      },
      {
        "title": "Key Value (Redis/Valkey)",
        "body": "Key Value instances are services with type: keyvalue (or deprecated redis). ipAllowList is required: use [] for internal-only, or - source: 0.0.0.0/0 to allow external.\n\nservices:\n  - type: keyvalue\n    name: my-cache\n    ipAllowList:\n      - source: 0.0.0.0/0\n        description: everywhere\n    plan: free\n    maxmemoryPolicy: allkeys-lru\n\nReference in another service: fromService.type: keyvalue, fromService.name: my-cache, property: connectionString. Policies: allkeys-lru (caching), noeviction (job queues), etc. See Key Value.\n\nNote: Some repos use root-level keyValueStores and fromKeyValueStore; the official spec uses services + fromService. Prefer the official form for new Blueprints."
      },
      {
        "title": "Cron Jobs",
        "body": "- type: cron\n  name: my-cron\n  runtime: python\n  schedule: \"0 * * * *\"\n  buildCommand: \"true\"\n  startCommand: python scripts/daily.py\n  envVars: []\n\nschedule is a cron expression (minute hour day month weekday). buildCommand is required (use \"true\" if no build). Free plan not available for cron/worker/pserv."
      },
      {
        "title": "Env Var Groups",
        "body": "Share vars across services. No fromDatabase/fromService/sync: false inside groups—only literal values or generateValue: true.\n\nenvVarGroups:\n  - name: app-env\n    envVars:\n      - key: CONCURRENCY\n        value: \"2\"\n      - key: APP_SECRET\n        generateValue: true\n\nservices:\n  - type: web\n    name: api\n    envVars:\n      - fromGroup: app-env\n      - key: DATABASE_URL\n        fromDatabase:\n          name: my-db\n          property: connectionString"
      },
      {
        "title": "Health Check, Region, Pre-deploy",
        "body": "Web only: healthCheckPath: /health for zero-downtime deploys.\nRegion: region: oregon (default), ohio, virginia, frankfurt, singapore (set at create; cannot change later).\nPre-deploy: preDeployCommand runs after build, before start (e.g. migrations)."
      },
      {
        "title": "Scaling",
        "body": "Manual: numInstances: 2.\nAutoscaling (Professional workspace): scaling.minInstances, scaling.maxInstances, scaling.targetCPUPercent or scaling.targetMemoryPercent. Not available with persistent disks."
      },
      {
        "title": "Disks, Monorepos, Docker",
        "body": "Persistent disk: disk.name, disk.mountPath, disk.sizeGB (web, pserv, worker).\nMonorepo: rootDir, buildFilter.paths / buildFilter.ignoredPaths, dockerfilePath / dockerContext.\nDocker: runtime: docker (build from Dockerfile) or runtime: image (pull from registry). Use dockerCommand instead of startCommand when needed."
      },
      {
        "title": "Preview Environments & Projects",
        "body": "Preview environments: Root-level previews.generation: off | manual | automatic, optional previews.expireAfterDays. Per-service previews.generation, previews.numInstances, previews.plan.\nProjects/environments: Root-level projects with environments (each lists services, databases, envVarGroups). Use for staging/production. Optional ungrouped for resources not in any environment."
      },
      {
        "title": "Full stack (web + Postgres + Key Value)",
        "body": "Web service with fromDatabase for Postgres and fromService for Key Value. Add one databases entry and one type: keyvalue service; reference both from the web service envVars. See assets/web-with-postgres.yaml for Postgres; add a keyvalue service and fromService for Redis URL."
      },
      {
        "title": "Microservices (API + worker + cron)",
        "body": "Multiple services in one Blueprint: type: web for the API, type: worker for a background processor, type: cron for scheduled jobs. Share envVarGroups or repeat env vars; use fromDatabase/fromService for shared DB/Redis. All use the same branch and buildCommand/startCommand as appropriate per runtime."
      },
      {
        "title": "Preview environments for PRs",
        "body": "Set root-level previews.generation: automatic (or manual). Optionally previews.expireAfterDays: 7. Each PR gets a preview URL; per-service overrides with previews.generation, previews.numInstances, or previews.plan when needed."
      },
      {
        "title": "Plans (Services)",
        "body": "plan: free | starter | standard | pro | pro plus (and for web/pserv/worker: pro max, pro ultra). Omit to keep existing or default to starter for new. Free not available for pserv, worker, cron."
      },
      {
        "title": "Dashboard & API",
        "body": "Dashboard: https://dashboard.render.com — New → Blueprint, connect repo, select render.yaml.\nKey Value: https://dashboard.render.com/new/redis"
      },
      {
        "title": "API Access",
        "body": "To use the Render API from the agent (verify deploys, trigger deploys, list services/logs):\n\nGet an API key: Dashboard → Account Settings → API Keys.\nStore as env var: Set RENDER_API_KEY in the environment (e.g. skills.entries.render.env or process env).\nAuthentication: Use Bearer token: Authorization: Bearer $RENDER_API_KEY on all requests.\nAPI docs: https://api-docs.render.com — services, deploys, logs, validate Blueprint, etc."
      },
      {
        "title": "Deploy to Render (same flow as Codex render-deploy skill)",
        "body": "Goal: get the app deployed by generating a Blueprint, then one-click via Dashboard deeplink; optionally trigger or verify via API when the user has RENDER_API_KEY."
      },
      {
        "title": "Step 1: Analyze codebase and create render.yaml",
        "body": "Use references/codebase-analysis.md to determine runtime, build/start commands, env vars, and datastores.\nAdd or update render.yaml at repo root (see Blueprint sections above and references/blueprint-spec.md). Use sync: false for secrets. See assets/ for examples.\nValidate before asking the user to push:\n\nCLI: render blueprints validate render.yaml (install: brew install render or Render CLI install).\nOr API: POST to Validate Blueprint with the YAML body.\n\n\nFix any validation errors before proceeding."
      },
      {
        "title": "Step 2: Commit and push (required)",
        "body": "Render reads the Blueprint from the Git remote. The file must be committed and pushed.\n\ngit add render.yaml\ngit commit -m \"Add Render deployment configuration\"\ngit push origin main\n\nIf there is no Git remote, stop and ask the user to create a repo on GitHub/GitLab/Bitbucket, add it as origin, and push. Without a pushed repo, the Dashboard deeplink will not work."
      },
      {
        "title": "Step 3: Dashboard deeplink (one-click deploy)",
        "body": "Get the repo URL and build the Blueprint deeplink:\n\ngit remote get-url origin\n\nIf the URL is SSH, convert to HTTPS (Render needs HTTPS for the deeplink):\n\nSSHHTTPSgit@github.com:user/repo.githttps://github.com/user/repogit@gitlab.com:user/repo.githttps://gitlab.com/user/repogit@bitbucket.org:user/repo.githttps://bitbucket.org/user/repo\n\nPattern: replace git@<host>: with https://<host>/, remove .git suffix.\n\nDeeplink format:\n\nhttps://dashboard.render.com/blueprint/new?repo=<REPO_HTTPS_URL>\n\nExample: https://dashboard.render.com/blueprint/new?repo=https://github.com/username/my-app\n\nGive the user this checklist:\n\nConfirm render.yaml is in the repo at the root (they just pushed it).\nClick the deeplink to open Render Dashboard.\nComplete Git provider OAuth if prompted.\nName the Blueprint (or accept default).\nFill in secret env vars (those with sync: false).\nReview services/databases, then click Apply to deploy.\n\nDeployment starts automatically. User can monitor in the Dashboard."
      },
      {
        "title": "Step 4: Verify deployment (optional, needs API key)",
        "body": "If the user has set RENDER_API_KEY (e.g. in skills.entries.render.env or process env), the agent can verify after the user has applied the Blueprint:\n\nList services: GET https://api.render.com/v1/services — Header: Authorization: Bearer $RENDER_API_KEY. Find the service by name.\nList deploys: GET https://api.render.com/v1/services/{serviceId}/deploys?limit=1 — Check for status: \"live\" to confirm success.\nLogs (if needed): Render API or Dashboard → service → Logs.\n\nExample (exec tool or curl):\n\ncurl -s -H \"Authorization: Bearer $RENDER_API_KEY\" \"https://api.render.com/v1/services\" | head -100\ncurl -s -H \"Authorization: Bearer $RENDER_API_KEY\" \"https://api.render.com/v1/services/{serviceId}/deploys?limit=1\"\n\nFor a short checklist and common fixes, use references/post-deploy-checks.md and references/troubleshooting-basics.md."
      },
      {
        "title": "Triggering deploys (re-deploy without push)",
        "body": "After repo is connected: Pushes to the linked branch trigger automatic deploys when auto-deploy is on.\nTrigger via API: With RENDER_API_KEY, trigger a new deploy:\n\nPOST https://api.render.com/v1/services/{serviceId}/deploys\nHeader: Authorization: Bearer $RENDER_API_KEY\nOptional body: { \"clearCache\": \"do_not_clear\" } or \"clear\"\n\n\nDeploy hook (no API key): Dashboard → service → Settings → Deploy Hook. User can set that URL as an env var (e.g. RENDER_DEPLOY_HOOK_URL); then the agent can run curl -X POST \"$RENDER_DEPLOY_HOOK_URL\" to trigger a deploy.\n\nSo: OpenClaw can deploy by (1) creating render.yaml, (2) having the user push and click the Blueprint deeplink (one-click), and optionally (3) triggering or verifying deploys via API or deploy hook when credentials are available."
      },
      {
        "title": "Render from OpenClaw (no native MCP)",
        "body": "OpenClaw does not load MCP servers from config. Use one of:"
      },
      {
        "title": "Option A: REST API (recommended when API key is set)",
        "body": "Use RENDER_API_KEY and the Render REST API (curl/exec): create services, list services, trigger deploys, list deploys, list logs. Request bodies and endpoints: references/rest-api-deployment.md."
      },
      {
        "title": "Option B: MCP via mcporter (if installed)",
        "body": "If the user has mcporter and Render configured (URL https://mcp.render.com/mcp, Bearer $RENDER_API_KEY), the agent can call Render MCP tools directly. Tool list and example commands: references/mcp-integration.md.\n\nExample:\n\nmcporter call render.list_services\nmcporter call render.create_web_service name=my-api runtime=node buildCommand=\"npm ci\" startCommand=\"npm start\" repo=https://github.com/user/repo branch=main plan=free\n\nWorkspace must be set first (e.g. user: “Set my Render workspace to MyTeam”). Use mcporter list render --schema to see current tools and parameters."
      },
      {
        "title": "Checklist for New Deploys",
        "body": "Add or update render.yaml with services (and optionally databases, envVarGroups, projects). Use runtime and official Key Value form (type: keyvalue in services, fromService for references).\nUse sync: false for secrets in service envVars only; tell user to set them in Dashboard. Never put secrets in env groups.\nFor Key Value, set ipAllowList (required).\nValidate: render blueprints validate render.yaml or API.\nUser must commit and push, then use the Blueprint deeplink (https://dashboard.render.com/blueprint/new?repo=<HTTPS_REPO_URL>) to deploy. Optionally verify or re-deploy via API if RENDER_API_KEY is set."
      },
      {
        "title": "Rules",
        "body": "Prefer Blueprint for full app definition; suggest Dashboard/API only when Blueprint cannot express something.\nNever commit real API keys or secrets; use sync: false and document which env vars the user must set.\nUse runtime (not deprecated env). For Python/Node set PYTHON_VERSION/NODE_VERSION in envVars when required.\nWhen referencing Key Value or other services, use fromService with correct type (e.g. keyvalue, pserv)."
      }
    ],
    "body": "Render Skill\n\nDeploy and manage applications on Render using Blueprints (render.yaml), the Dashboard, or the API. This skill mirrors the Codex render-deploy flow: analyze codebase → generate/validate Blueprint → commit & push → one-click Dashboard deeplink → optional API/mcporter verify or re-deploy.\n\nWhen to Use This Skill\n\nActivate when the user wants to:\n\nDeploy, host, or publish an application on Render\nCreate or edit a render.yaml Blueprint (new or existing repo)\nAdd web, static site, private, worker, or cron services; Postgres; or Key Value\nConfigure env vars, health checks, scaling, disks, or regions\nSet up preview environments or projects\nValidate a Blueprint or get Dashboard/API links\nDeployment Method Selection\nIf RENDER_API_KEY is set → Prefer REST API or MCP (fastest; no user click). Use references/rest-api-deployment.md for request bodies, or mcporter if configured (see references/mcp-integration.md).\nIf no API key → Use Blueprint + deeplink (user commits, pushes, then clicks the deeplink to deploy).\n\nCheck for API key:\n\n[ -n \"$RENDER_API_KEY\" ] && echo \"RENDER_API_KEY is set\" || echo \"RENDER_API_KEY is not set\"\n\nHappy Path (New Users)\n\nBefore deep analysis, use this short sequence to reduce friction:\n\nAsk whether they want to deploy from a Git repo (required for Blueprint and deeplink) or only get guidance. If no Git remote, they must create/push one first.\nAsk whether the app needs a database, workers, cron, or other services so you can choose the right Blueprint shape.\n\nThen follow Deploy to Render below (Blueprint → push → deeplink → verify).\n\nPrerequisites Check\nGit remote – Required for Blueprint deploy. Run git remote -v; if none, ask the user to create a repo on GitHub/GitLab/Bitbucket, add origin, and push.\nRender CLI (optional) – For local validation: render blueprints validate render.yaml. Install: brew install render or Render CLI.\nAPI key (optional) – For verifying deploys or triggering re-deploys: Dashboard → API Keys. Set RENDER_API_KEY in the environment.\nSecurity Notes\nNever commit secrets to render.yaml — always use sync: false for API keys, passwords, and tokens; the user fills them in the Dashboard.\nValidate before suggesting deployment — run render blueprints validate render.yaml or use the Validate Blueprint API so invalid YAML is never pushed.\nValidate user-provided values — when writing env vars or service names from user input into YAML, sanitize or quote as needed to avoid injection.\nReferences\nreferences/codebase-analysis.md (detect runtime, build/start commands, env vars)\nreferences/blueprint-spec.md (root keys, service types, env vars, validation)\nreferences/rest-api-deployment.md (direct API create service: ownerId, request bodies, type mapping)\nreferences/mcp-integration.md (Render MCP tools, mcporter usage, supported runtimes/plans/regions)\nreferences/post-deploy-checks.md (verify deploy status and health via API)\nreferences/troubleshooting-basics.md (build/startup/runtime failures)\nassets/ (example Blueprints: node-express.yaml, python-web.yaml, static-site.yaml, web-with-postgres.yaml)\nBlueprint Basics\nFile: render.yaml at the root of the Git repository (required).\nRoot-level keys (official spec): services, databases, envVarGroups, projects, ungrouped, previews.generation, previews.expireAfterDays.\nSpec: Blueprint YAML Reference. JSON Schema for IDE validation: https://render.com/schema/render.yaml.json (e.g. YAML extension by Red Hat in VS Code/Cursor).\n\nValidation: render blueprints validate render.yaml (Render CLI v2.7.0+), or the Validate Blueprint API endpoint.\n\nService Types\ntype\tPurpose\nweb\tPublic HTTP app or static site (use runtime: static for static)\npserv\tPrivate service (internal hostname only, no public URL)\nworker\tBackground worker (runs continuously, e.g. job queues)\ncron\tScheduled job (cron expression; runs and exits)\nkeyvalue\tRender Key Value instance (Redis/Valkey-compatible; defined in services)\n\nNote: Private services use pserv, not private. Key Value is a service with type: keyvalue; do not use a separate root key for it in new Blueprints (some older blueprints use keyValueStores and fromKeyValueStore—prefer the official format).\n\nRuntimes\n\nUse runtime (preferred; env is deprecated): node, python, elixir, go, ruby, rust, docker, image, static. For static sites: type: web, runtime: static, and staticPublishPath (e.g. ./build or ./dist) required.\n\nMinimal Web Service\nservices:\n  - type: web\n    name: my-app\n    runtime: node\n    buildCommand: npm install\n    startCommand: npm start\n    envVars:\n      - key: NODE_ENV\n        value: production\n\n\nPython example: runtime: python, buildCommand: pip install -r requirements.txt, startCommand: uvicorn app.main:app --host 0.0.0.0 --port $PORT (or gunicorn). Set PYTHON_VERSION / NODE_VERSION in envVars when needed.\n\nStatic Site\n- type: web\n  name: my-blog\n  runtime: static\n  buildCommand: yarn build\n  staticPublishPath: ./build\n\n\nOptional: headers, routes (redirects/rewrites). See Static Sites.\n\nEnvironment Variables\nLiteral: key + value (never hardcode secrets).\nFrom Postgres: fromDatabase.name + fromDatabase.property (e.g. connectionString).\nFrom Key Value or other service: fromService.type + fromService.name + fromService.property (e.g. connectionString, host, port, hostport) or fromService.envVarKey for another service’s env var.\nSecret / user-set: sync: false (user is prompted in Dashboard on first create; add new secrets manually later). Cannot be used inside env var groups.\nGenerated: generateValue: true (base64 256-bit value).\nShared: fromGroup: <envVarGroups[].name> to attach an env var group.\n\nEnv groups cannot reference other services (no fromDatabase/fromService in groups) and cannot use sync: false. Put secrets and DB/KV references in service-level envVars, or reference a group and add service-specific vars alongside.\n\nDatabases (Render Postgres)\ndatabases:\n  - name: my-db\n    plan: basic-256mb\n    databaseName: my_app\n    user: my_user\n    region: oregon\n    postgresMajorVersion: \"18\"\n\n\nPlans (current): free, basic-256mb, basic-1gb, basic-4gb, pro-*, accelerated-*. Legacy: starter, standard, pro, pro plus (no new DBs on legacy). Optional: diskSizeGB, ipAllowList, readReplicas, highAvailability.enabled. Reference in services: fromDatabase.name, property: connectionString.\n\nKey Value (Redis/Valkey)\n\nKey Value instances are services with type: keyvalue (or deprecated redis). ipAllowList is required: use [] for internal-only, or - source: 0.0.0.0/0 to allow external.\n\nservices:\n  - type: keyvalue\n    name: my-cache\n    ipAllowList:\n      - source: 0.0.0.0/0\n        description: everywhere\n    plan: free\n    maxmemoryPolicy: allkeys-lru\n\n\nReference in another service: fromService.type: keyvalue, fromService.name: my-cache, property: connectionString. Policies: allkeys-lru (caching), noeviction (job queues), etc. See Key Value.\n\nNote: Some repos use root-level keyValueStores and fromKeyValueStore; the official spec uses services + fromService. Prefer the official form for new Blueprints.\n\nCron Jobs\n- type: cron\n  name: my-cron\n  runtime: python\n  schedule: \"0 * * * *\"\n  buildCommand: \"true\"\n  startCommand: python scripts/daily.py\n  envVars: []\n\n\nschedule is a cron expression (minute hour day month weekday). buildCommand is required (use \"true\" if no build). Free plan not available for cron/worker/pserv.\n\nEnv Var Groups\n\nShare vars across services. No fromDatabase/fromService/sync: false inside groups—only literal values or generateValue: true.\n\nenvVarGroups:\n  - name: app-env\n    envVars:\n      - key: CONCURRENCY\n        value: \"2\"\n      - key: APP_SECRET\n        generateValue: true\n\nservices:\n  - type: web\n    name: api\n    envVars:\n      - fromGroup: app-env\n      - key: DATABASE_URL\n        fromDatabase:\n          name: my-db\n          property: connectionString\n\nHealth Check, Region, Pre-deploy\nWeb only: healthCheckPath: /health for zero-downtime deploys.\nRegion: region: oregon (default), ohio, virginia, frankfurt, singapore (set at create; cannot change later).\nPre-deploy: preDeployCommand runs after build, before start (e.g. migrations).\nScaling\nManual: numInstances: 2.\nAutoscaling (Professional workspace): scaling.minInstances, scaling.maxInstances, scaling.targetCPUPercent or scaling.targetMemoryPercent. Not available with persistent disks.\nDisks, Monorepos, Docker\nPersistent disk: disk.name, disk.mountPath, disk.sizeGB (web, pserv, worker).\nMonorepo: rootDir, buildFilter.paths / buildFilter.ignoredPaths, dockerfilePath / dockerContext.\nDocker: runtime: docker (build from Dockerfile) or runtime: image (pull from registry). Use dockerCommand instead of startCommand when needed.\nPreview Environments & Projects\nPreview environments: Root-level previews.generation: off | manual | automatic, optional previews.expireAfterDays. Per-service previews.generation, previews.numInstances, previews.plan.\nProjects/environments: Root-level projects with environments (each lists services, databases, envVarGroups). Use for staging/production. Optional ungrouped for resources not in any environment.\nCommon Deployment Patterns\nFull stack (web + Postgres + Key Value)\n\nWeb service with fromDatabase for Postgres and fromService for Key Value. Add one databases entry and one type: keyvalue service; reference both from the web service envVars. See assets/web-with-postgres.yaml for Postgres; add a keyvalue service and fromService for Redis URL.\n\nMicroservices (API + worker + cron)\n\nMultiple services in one Blueprint: type: web for the API, type: worker for a background processor, type: cron for scheduled jobs. Share envVarGroups or repeat env vars; use fromDatabase/fromService for shared DB/Redis. All use the same branch and buildCommand/startCommand as appropriate per runtime.\n\nPreview environments for PRs\n\nSet root-level previews.generation: automatic (or manual). Optionally previews.expireAfterDays: 7. Each PR gets a preview URL; per-service overrides with previews.generation, previews.numInstances, or previews.plan when needed.\n\nPlans (Services)\n\nplan: free | starter | standard | pro | pro plus (and for web/pserv/worker: pro max, pro ultra). Omit to keep existing or default to starter for new. Free not available for pserv, worker, cron.\n\nDashboard & API\nDashboard: https://dashboard.render.com — New → Blueprint, connect repo, select render.yaml.\nKey Value: https://dashboard.render.com/new/redis\nAPI Access\n\nTo use the Render API from the agent (verify deploys, trigger deploys, list services/logs):\n\nGet an API key: Dashboard → Account Settings → API Keys.\nStore as env var: Set RENDER_API_KEY in the environment (e.g. skills.entries.render.env or process env).\nAuthentication: Use Bearer token: Authorization: Bearer $RENDER_API_KEY on all requests.\nAPI docs: https://api-docs.render.com — services, deploys, logs, validate Blueprint, etc.\nDeploy to Render (same flow as Codex render-deploy skill)\n\nGoal: get the app deployed by generating a Blueprint, then one-click via Dashboard deeplink; optionally trigger or verify via API when the user has RENDER_API_KEY.\n\nStep 1: Analyze codebase and create render.yaml\nUse references/codebase-analysis.md to determine runtime, build/start commands, env vars, and datastores.\nAdd or update render.yaml at repo root (see Blueprint sections above and references/blueprint-spec.md). Use sync: false for secrets. See assets/ for examples.\nValidate before asking the user to push:\nCLI: render blueprints validate render.yaml (install: brew install render or Render CLI install).\nOr API: POST to Validate Blueprint with the YAML body.\nFix any validation errors before proceeding.\nStep 2: Commit and push (required)\n\nRender reads the Blueprint from the Git remote. The file must be committed and pushed.\n\ngit add render.yaml\ngit commit -m \"Add Render deployment configuration\"\ngit push origin main\n\n\nIf there is no Git remote, stop and ask the user to create a repo on GitHub/GitLab/Bitbucket, add it as origin, and push. Without a pushed repo, the Dashboard deeplink will not work.\n\nStep 3: Dashboard deeplink (one-click deploy)\n\nGet the repo URL and build the Blueprint deeplink:\n\ngit remote get-url origin\n\n\nIf the URL is SSH, convert to HTTPS (Render needs HTTPS for the deeplink):\n\nSSH\tHTTPS\ngit@github.com:user/repo.git\thttps://github.com/user/repo\ngit@gitlab.com:user/repo.git\thttps://gitlab.com/user/repo\ngit@bitbucket.org:user/repo.git\thttps://bitbucket.org/user/repo\n\nPattern: replace git@<host>: with https://<host>/, remove .git suffix.\n\nDeeplink format:\n\nhttps://dashboard.render.com/blueprint/new?repo=<REPO_HTTPS_URL>\n\n\nExample: https://dashboard.render.com/blueprint/new?repo=https://github.com/username/my-app\n\nGive the user this checklist:\n\nConfirm render.yaml is in the repo at the root (they just pushed it).\nClick the deeplink to open Render Dashboard.\nComplete Git provider OAuth if prompted.\nName the Blueprint (or accept default).\nFill in secret env vars (those with sync: false).\nReview services/databases, then click Apply to deploy.\n\nDeployment starts automatically. User can monitor in the Dashboard.\n\nStep 4: Verify deployment (optional, needs API key)\n\nIf the user has set RENDER_API_KEY (e.g. in skills.entries.render.env or process env), the agent can verify after the user has applied the Blueprint:\n\nList services: GET https://api.render.com/v1/services — Header: Authorization: Bearer $RENDER_API_KEY. Find the service by name.\nList deploys: GET https://api.render.com/v1/services/{serviceId}/deploys?limit=1 — Check for status: \"live\" to confirm success.\nLogs (if needed): Render API or Dashboard → service → Logs.\n\nExample (exec tool or curl):\n\ncurl -s -H \"Authorization: Bearer $RENDER_API_KEY\" \"https://api.render.com/v1/services\" | head -100\ncurl -s -H \"Authorization: Bearer $RENDER_API_KEY\" \"https://api.render.com/v1/services/{serviceId}/deploys?limit=1\"\n\n\nFor a short checklist and common fixes, use references/post-deploy-checks.md and references/troubleshooting-basics.md.\n\nTriggering deploys (re-deploy without push)\nAfter repo is connected: Pushes to the linked branch trigger automatic deploys when auto-deploy is on.\nTrigger via API: With RENDER_API_KEY, trigger a new deploy:\nPOST https://api.render.com/v1/services/{serviceId}/deploys\nHeader: Authorization: Bearer $RENDER_API_KEY\nOptional body: { \"clearCache\": \"do_not_clear\" } or \"clear\"\nDeploy hook (no API key): Dashboard → service → Settings → Deploy Hook. User can set that URL as an env var (e.g. RENDER_DEPLOY_HOOK_URL); then the agent can run curl -X POST \"$RENDER_DEPLOY_HOOK_URL\" to trigger a deploy.\n\nSo: OpenClaw can deploy by (1) creating render.yaml, (2) having the user push and click the Blueprint deeplink (one-click), and optionally (3) triggering or verifying deploys via API or deploy hook when credentials are available.\n\nRender from OpenClaw (no native MCP)\n\nOpenClaw does not load MCP servers from config. Use one of:\n\nOption A: REST API (recommended when API key is set)\n\nUse RENDER_API_KEY and the Render REST API (curl/exec): create services, list services, trigger deploys, list deploys, list logs. Request bodies and endpoints: references/rest-api-deployment.md.\n\nOption B: MCP via mcporter (if installed)\n\nIf the user has mcporter and Render configured (URL https://mcp.render.com/mcp, Bearer $RENDER_API_KEY), the agent can call Render MCP tools directly. Tool list and example commands: references/mcp-integration.md.\n\nExample:\n\nmcporter call render.list_services\nmcporter call render.create_web_service name=my-api runtime=node buildCommand=\"npm ci\" startCommand=\"npm start\" repo=https://github.com/user/repo branch=main plan=free\n\n\nWorkspace must be set first (e.g. user: “Set my Render workspace to MyTeam”). Use mcporter list render --schema to see current tools and parameters.\n\nChecklist for New Deploys\nAdd or update render.yaml with services (and optionally databases, envVarGroups, projects). Use runtime and official Key Value form (type: keyvalue in services, fromService for references).\nUse sync: false for secrets in service envVars only; tell user to set them in Dashboard. Never put secrets in env groups.\nFor Key Value, set ipAllowList (required).\nValidate: render blueprints validate render.yaml or API.\nUser must commit and push, then use the Blueprint deeplink (https://dashboard.render.com/blueprint/new?repo=<HTTPS_REPO_URL>) to deploy. Optionally verify or re-deploy via API if RENDER_API_KEY is set.\nRules\nPrefer Blueprint for full app definition; suggest Dashboard/API only when Blueprint cannot express something.\nNever commit real API keys or secrets; use sync: false and document which env vars the user must set.\nUse runtime (not deprecated env). For Python/Node set PYTHON_VERSION/NODE_VERSION in envVars when required.\nWhen referencing Key Value or other services, use fromService with correct type (e.g. keyvalue, pserv)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ojusave/deploy-on-render",
    "publisherUrl": "https://clawhub.ai/ojusave/deploy-on-render",
    "owner": "ojusave",
    "version": "3.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/deploy-on-render",
    "downloadUrl": "https://openagent3.xyz/downloads/deploy-on-render",
    "agentUrl": "https://openagent3.xyz/skills/deploy-on-render/agent",
    "manifestUrl": "https://openagent3.xyz/skills/deploy-on-render/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/deploy-on-render/agent.md"
  }
}