[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEJCS24MNHR37SABGS3VAH":3,"skill-same:01M6EEJCS24MNHR37SABGS3VAH":67},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6EEJCS24MNHR37SABGS3VAH","caprover",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fcaprover\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# CapRover — Self-Hosted PaaS with One-Click Apps\n\n\n## Overview\n\n\nCapRover, the open-source PaaS that turns any Linux server into a Heroku-like platform with automatic HTTPS, one-click app deployment, and Docker-based containerization. Helps developers deploy applications, configure custom domains, and manage the CapRover cluster.\n\n\n## Instructions\n\n### Installation\n\n```bash\n# Prerequisites: Ubuntu 20.04+, Docker installed, ports 80\u002F443\u002F3000 open\n\n# Install CapRover\ndocker run -p 80:80 -p 443:443 -p 3000:3000 \\\n  -e ACCEPTED_TERMS=true \\\n  -v \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock \\\n  -v \u002Fcaptain:\u002Fcaptain \\\n  caprover\u002Fcaprover\n\n# Install CLI\nnpm install -g caprover\n\n# Set up server (interactive)\ncaprover serversetup\n# → Enter: IP address, root domain (*.apps.myserver.com), email for SSL, password\n\n# Login\ncaprover login\n# → URL: https:\u002F\u002Fcaptain.apps.myserver.com\n```\n\n### Deploy Applications\n\nDeploy via CLI, Git, or Dockerfile:\n\n```bash\n# Method 1: CLI deploy from current directory\ncaprover deploy -a my-api\n\n# Method 2: Deploy with a captain-definition file\ncat > captain-definition \u003C\u003C 'EOF'\n{\n  \"schemaVersion\": 2,\n  \"dockerfilePath\": \".\u002FDockerfile\"\n}\nEOF\ncaprover deploy -a my-api\n```\n\n```json\n\u002F\u002F captain-definition — Deployment configuration\n\u002F\u002F Option A: Dockerfile-based\n{\n  \"schemaVersion\": 2,\n  \"dockerfilePath\": \".\u002FDockerfile\"\n}\n\n\u002F\u002F Option B: Image-based (pre-built)\n{\n  \"schemaVersion\": 2,\n  \"imageName\": \"ghcr.io\u002Fmyorg\u002Fmy-api:v1.2.3\"\n}\n\n\u002F\u002F Option C: Docker Compose (multi-container)\n{\n  \"schemaVersion\": 2,\n  \"dockerComposeFileLocation\": \".\u002Fdocker-compose.yml\"\n}\n```\n\n### One-Click Apps\n\nDeploy popular software instantly through the web UI:\n\n```markdown\n## Available One-Click Apps (examples)\n- **Databases**: PostgreSQL, MySQL, MongoDB, Redis, MariaDB\n- **CMS**: WordPress, Ghost, Strapi, Directus\n- **DevOps**: GitLab, Drone CI, Jenkins, Portainer\n- **Monitoring**: Grafana, Prometheus, Uptime Kuma, Plausible\n- **Communication**: Mattermost, Rocket.Chat, n8n\n- **Storage**: MinIO, Nextcloud, Filebrowser\n- **Analytics**: Matomo, PostHog, Umami\n```\n\n### API for Automation\n\n```typescript\n\u002F\u002F scripts\u002Fcaprover-api.ts — CapRover API client\nconst CAPROVER_URL = \"https:\u002F\u002Fcaptain.apps.myserver.com\";\n\nasync function caproverApi(path: string, data?: any) {\n  const token = process.env.CAPROVER_TOKEN!;\n  const response = await fetch(`${CAPROVER_URL}\u002Fapi\u002Fv2${path}`, {\n    method: data ? \"POST\" : \"GET\",\n    headers: {\n      \"Content-Type\": \"application\u002Fjson\",\n      \"x-captain-auth\": token,\n    },\n    body: data ? JSON.stringify(data) : undefined,\n  });\n  const result = await response.json();\n  if (result.status !== 100) throw new Error(result.description);\n  return result.data;\n}\n\n\u002F\u002F Create a new app\nasync function createApp(appName: string) {\n  return caproverApi(\"\u002Fuser\u002Fapps\u002FappDefinitions\u002Fregister\", {\n    appName,\n    hasPersistentData: false,\n  });\n}\n\n\u002F\u002F Update environment variables\nasync function setEnvVars(appName: string, envVars: { key: string; value: string }[]) {\n  return caproverApi(\"\u002Fuser\u002Fapps\u002FappDefinitions\u002Fupdate\", {\n    appName,\n    envVars,\n  });\n}\n\n\u002F\u002F Enable SSL for app\nasync function enableSsl(appName: string) {\n  return caproverApi(\"\u002Fuser\u002Fapps\u002FappDefinitions\u002Fenablecustomdomainssl\", {\n    appName,\n    customDomain: `${appName}.apps.myserver.com`,\n  });\n}\n\n\u002F\u002F Scale app\nasync function scaleApp(appName: string, instanceCount: number) {\n  return caproverApi(\"\u002Fuser\u002Fapps\u002FappDefinitions\u002Fupdate\", {\n    appName,\n    instanceCount,\n  });\n}\n\n\u002F\u002F Add custom domain\nasync function addCustomDomain(appName: string, domain: string) {\n  return caproverApi(\"\u002Fuser\u002Fapps\u002FappDefinitions\u002Fcustomdomain\", {\n    appName,\n    customDomain: domain,\n  });\n}\n```\n\n### Persistent Storage\n\nConfigure volumes for stateful applications:\n\n```bash\n# Via CLI or captain-definition, define persistent directories\n# In CapRover dashboard: App → App Configs → Persistent Directories\n\n# Example persistent paths:\n# \u002Fapp\u002Fuploads    → Store user-uploaded files\n# \u002Fapp\u002Fdata       → Application data directory\n# \u002Fvar\u002Flog\u002Fapp    → Log files\n```\n\n### Multi-Server Cluster\n\nScale beyond a single server:\n\n```bash\n# On the main server: get join token\n# Dashboard → Cluster → Add Worker Node\n\n# On the worker server:\ndocker swarm join --token SWMTKN-xxx manager-ip:2377\n\n# CapRover automatically distributes containers across nodes\n# Use placement constraints for specific workloads:\n# Dashboard → App → App Configs → Node Placement\n```\n\n\n## Examples\n\n\n### Example 1: Setting up Caprover for a microservices project\n\n**User request:**\n\n```\nI have a Node.js API and a React frontend running in Docker. Set up Caprover for monitoring\u002Fdeployment.\n```\n\nThe agent creates the necessary configuration files based on patterns like `# Prerequisites: Ubuntu 20.04+, Docker installed, ports 80\u002F4`, sets up the integration with the existing Docker setup, configures appropriate defaults for a Node.js + React stack, and provides verification commands to confirm everything is working.\n\n### Example 2: Troubleshooting deploy applications issues\n\n**User request:**\n\n```\nCaprover is showing errors in our deploy applications. Here are the logs: [error output]\n```\n\nThe agent analyzes the error output, identifies the root cause by cross-referencing with common Caprover issues, applies the fix (updating configuration, adjusting resource limits, or correcting syntax), and verifies the resolution with appropriate health checks.\n\n\n## Guidelines\n\n1. **Wildcard DNS first** — Point `*.apps.yourdomain.com` to your server IP before installation; SSL won't work without it\n2. **Use captain-definition** — Version the deployment config with your code; don't rely on dashboard settings\n3. **Enable HTTPS everywhere** — CapRover auto-provisions Let's Encrypt certificates; click \"Enable HTTPS\" for each app\n4. **Persistent data for databases** — Always configure persistent directories for databases; container restarts lose data otherwise\n5. **Resource limits** — Set memory limits per app in the dashboard to prevent one app from consuming all server resources\n6. **Use one-click apps for infra** — Don't manually configure PostgreSQL or Redis; use the one-click templates\n7. **Automated backups** — CapRover doesn't back up automatically; set up cron jobs for database dumps and volume backups\n8. **Monitor with built-in NetData** — CapRover includes NetData for server monitoring; access at captain URL + port 19999\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fcaprover",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill caprover",{"tool":37,"command":38},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill caprover",{"tool":40,"command":41},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill caprover","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fcaprover\u002FSKILL.md",true,[45,51,55,59,63],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"project-context-template.md","REFERENCE","参考文档",543,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-generate-project-context\u002Fproject-context-template.md",{"path":52,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":53,"sourceHtmlUrl":54},"steps\u002Fstep-01-discover.md",6016,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-generate-project-context\u002Fsteps\u002Fstep-01-discover.md",{"path":56,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":57,"sourceHtmlUrl":58},"steps\u002Fstep-02-generate.md",9135,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-generate-project-context\u002Fsteps\u002Fstep-02-generate.md",{"path":60,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":61,"sourceHtmlUrl":62},"steps\u002Fstep-03-complete.md",8122,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-generate-project-context\u002Fsteps\u002Fstep-03-complete.md",{"path":64,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":65,"sourceHtmlUrl":66},"workflow.md",1749,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-generate-project-context\u002Fworkflow.md",[68,82,92,101,107,114],{"skillNo":69,"name":70,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":78,"publishedAt":18},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[73],{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[79,80,81],"model","model hierarchy","model hierarchy skill",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":88,"publishedAt":18},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[87],{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},[89,90,91],"MCP","zoom","zoom mcp",{"skillNo":93,"name":94,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":18},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[98,99,100,90],"sdk","zoom apps sdk","apps",{"skillNo":102,"name":103,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":18},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[103],{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":113,"publishedAt":18},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[112],{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},[109],{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":18},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[116]]