app-platform-router

Routes DigitalOcean App Platform tasks to specialized sub-skills. Use when working with App Platform deployments, migrations, database configuration, networking, or troubleshooting.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "app-platform-router" with this command: npx skills add digitalocean-labs/do-app-platform-skills/digitalocean-labs-do-app-platform-skills-app-platform-router

App Platform Skills — Router

Overview

This skill routes DigitalOcean App Platform tasks to specialized sub-skills. Each sub-skill is optimized for a specific workflow, keeping context focused and responses precise.

Philosophy: These skills are opinionated playbooks, not documentation replicas. They make decisions for you (VPC by default, GitHub Actions for CI/CD, etc.) and only defer to docs for edge cases.

Key Principle: Skills contain only DO-specific knowledge the LLM doesn't have from training. Generic SQL, SDK patterns, and programming concepts are NOT duplicated here.

Trust the AI: The AI assistant should reason about the full workflow, chain skills together when needed, and adapt based on context (greenfield vs brownfield vs troubleshooting). Skills provide domain knowledge, not rigid scripts to follow blindly.

Available Skills

Development Phase

SkillPurposeKey Artifacts
devcontainersLocal development environment with prod parity.devcontainer/, docker-compose.dev.yml

Architecture Phase

SkillPurposeKey Artifacts
designerNatural language → production-ready App Spec.do/app.yaml
migrationConvert existing apps (Heroku, AWS, etc.) to App Platform. Deep Heroku chapter with Procfile/app.json/heroku.yml parsing, add-on mapping, pipeline migration.do/app.yaml, migration checklist
plannerGenerate staged project plans from design to deploymentPlan/*.md stage files

Operations Phase

SkillPurposeKey Artifacts
deploymentShip code to production via GitHub Actions.github/workflows/deploy.yml
troubleshootingDebug running apps with pre-built debug container, analyze logsFixes, diagnostic reports
sandboxIsolated containers for AI agent code execution, testingEphemeral sandboxes

Data Services

SkillPurposeKey Artifacts
postgresFull PostgreSQL setup: schemas, users, permissions, multi-tenantSQL scripts (user-executed)
managed-db-servicesMySQL, MongoDB, Valkey, Kafka, OpenSearch (bindable vars)App spec snippets
spacesS3-compatible object storage configurationCORS config, app spec snippets

AI Services

SkillPurposeKey Artifacts
ai-servicesGradient AI inference endpointsApp spec snippets

Console SDK for AI Assistants

CRITICAL: AI assistants cannot use doctl apps console — it opens an interactive WebSocket session that requires human input. Use the do-app-sandbox Python package instead.

# Install
uv pip install do-app-sandbox  # or: pip install do-app-sandbox

Two Use Cases (Same Package, Different Skills)

Use CaseSDK MethodSkill
Debug EXISTING appSandbox.get_from_id(app_id, component)troubleshooting
Create NEW sandboxSandbox.create(), SandboxManagersandbox
# Debug existing app (troubleshooting skill)
app = Sandbox.get_from_id(app_id="your-app-id", component="web")

# Create new isolated sandbox (sandbox skill)
sandbox = Sandbox.create(image="python")

Full guide: See shared/console-sdk-patterns.md


Routing Decision Tree

┌─────────────────────────────────────────────────────────────────┐
│                        USER REQUEST                              │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                ┌─────────────────────────┐
                │ Setting up development? │
                └─────────────────────────┘
                              │
                      "local" / "devcontainer"
                              ▼
                      ┌───────────┐
                      │devcontainers│
                      └───────────┘
                              │
                              ▼
                ┌─────────────────────────┐
                │ Designing or creating?  │
                └─────────────────────────┘
                      │           │           │
             "new app"│           │ "migrate" │ "plan" / "staged"
                      ▼           ▼           ▼
              ┌───────────┐  ┌───────────┐  ┌───────────┐
              │ designer  │  │ migration │  │  planner  │
              └───────────┘  └───────────┘  └───────────┘
                              │
                              ▼
                ┌─────────────────────────┐
                │    Shipping code?       │
                └─────────────────────────┘
                              │
                      "deploy" / "ship" / "release"
                              ▼
                      ┌───────────┐
                      │deployment │
                      └───────────┘
                              │
                              ▼
                ┌─────────────────────────┐
                │   Something broken?     │
                └─────────────────────────┘
                              │
                      "broken" / "failing" / "debug" / "logs"
                              ▼
                    ┌───────────────┐
                    │troubleshooting│
                    └───────────────┘
                              │
                              ▼
                ┌─────────────────────────┐
                │ Need isolated execution?│
                └─────────────────────────┘
                              │
                      "sandbox" / "isolated" / "execute code" / "code interpreter"
                              ▼
                      ┌───────────┐
                      │  sandbox  │
                      └───────────┘
                              │
                              ▼
                ┌─────────────────────────┐
                │ Configuring data?       │
                └─────────────────────────┘
                      │           │           │
           "postgres" │  "mysql"  │           │ "storage" / "S3" / "spaces"
           (complex)  │  "mongo"  │           │
                      │  "valkey" │           │
                      │  "kafka"  │           │
                      │  "opensearch"         │
                      ▼           ▼           ▼
              ┌───────────┐  ┌─────────────────────┐  ┌───────────┐
              │ postgres  │  │ managed-db-services │  │  spaces   │
              └───────────┘  └─────────────────────┘  └───────────┘
                              │
                              ▼
                ┌─────────────────────────┐
                │ AI inference needed?    │
                └─────────────────────────┘
                              │
                      "gradient" / "LLM" / "inference"
                              ▼
                      ┌─────────────┐
                      │ ai-services │
                      └─────────────┘

Workflow Chaining

The AI assistant should reason about the full workflow, not just route to a single skill.

Workflow Types

Request TypeWorkflowSkills Chain
Full Greenfield"Build a new app from scratch"devcontainers → designer → planner → deployment
Migration"Migrate from Heroku/AWS"migration → (then full greenfield workflow)
Brownfield"Deploy my existing app"planner → deployment
Enhancement"Add Kafka to my app"managed-db-services → update app.yaml → deployment
Troubleshooting"My app is broken"troubleshooting (standalone)
AI Agent Execution"Run code in isolation"sandbox (standalone)
Specific Task"Set up PostgreSQL"postgres (standalone)

Chaining Logic

┌─────────────────────────────────────────────────────────────────┐
│                    UNDERSTAND THE GOAL                           │
│  Is this a single task or a multi-phase workflow?                │
└─────────────────────────────────────────────────────────────────┘
                              │
              ┌───────────────┴───────────────┐
              │                               │
              ▼                               ▼
       ┌─────────────┐                 ┌─────────────┐
       │ Single Task │                 │  Workflow   │
       │             │                 │             │
       │ Route to    │                 │ Chain       │
       │ one skill   │                 │ multiple    │
       └─────────────┘                 └─────────────┘
              │                               │
              ▼                               ▼
       troubleshooting              migration → designer →
       postgres                     planner → deployment
       spaces
       etc.

Examples

"I want to build a new event-driven app with Kafka"

  1. Start with designer → create .do/app.yaml with Kafka
  2. Use managed-db-services for Kafka-specific bindable variables
  3. Use planner → generate staged Plan/ files
  4. Execute with deployment skill

"Migrate my Heroku app to DigitalOcean"

  1. Start with migration → Heroku deep chapter auto-routes based on intent (Q&A, Guided, Auto-Migrate)
  2. Parses Procfile, app.json, heroku.yml, maps add-ons, generates .do/app.yaml
  3. Use planner → plan the staged deployment
  4. Execute with deployment skill

"My deployed app keeps returning 502"

  1. Route directly to troubleshooting (single skill, no chaining)
  2. Use debug container, analyze logs, fix issue

"Add PostgreSQL to my existing app"

  1. Use postgres for schema/user setup
  2. Update .do/app.yaml with database binding
  3. Redeploy with deployment skill

Key Principle

The AI assistant should:

  1. Understand the overall goal (not just the immediate request)
  2. Identify which skills are needed and in what order
  3. Chain skills together, passing artifacts between them
  4. Adapt based on what already exists (greenfield vs brownfield)

Trust the AI to reason. These skills provide domain knowledge, not rigid scripts.


Trigger Phrases Reference

Route ToTrigger Phrases
devcontainers"local dev", "docker compose", "run locally", "devcontainer"
designer"design my app", "create app spec", "new application", "architect"
migration"migrate", "convert", "move from Heroku", "move from AWS", "Heroku", "Procfile", "heroku.yml", "dynos", "Heroku add-ons", "Heroku pipeline"
planner"create a plan", "plan this project", "staged approach", "plan deployment", "how should I deploy"
deployment"deploy", "ship", "release", "GitHub Actions", "CI/CD"
troubleshooting"broken", "failing", "debug", "logs", "502", "crash", "error"
sandbox"sandbox", "isolated environment", "execute code", "code interpreter", "run untrusted code", "agent execution", "hot pool"
postgres"postgres", "postgresql", "schema isolation", "multi-tenant database"
managed-db-services"mysql", "mongodb", "mongo", "valkey", "redis", "kafka", "opensearch"
spaces"object storage", "S3", "Spaces", "file upload", "bucket"
ai-services"gradient", "inference", "LLM endpoint", "AI platform"

Third-Party Integrations (No Skill Needed)

For integrations not covered by dedicated skills (DataDog, Sentry, New Relic, Stripe, etc.):

  1. Get credentials from the vendor
  2. Add to GitHub Secrets (Repo → Settings → Secrets → Actions)
  3. Reference in app spec:
    envs:
      - key: DATADOG_API_KEY
        scope: RUN_TIME
        value: ${DATADOG_API_KEY}  # From GitHub Secrets
    
  4. Follow vendor documentation for SDK/agent setup

→ The agent's training covers vendor-specific patterns — no skill required.


Credential Handling Philosophy

CRITICAL: These skills are designed to keep credentials out of agent hands.

Priority Order (Most to Least Preferred)

1. GITHUB SECRETS (RECOMMENDED DEFAULT)
   ├── Agent never sees credentials
   ├── User manually adds: Repo → Settings → Secrets → Actions
   ├── Workflow references: ${{ secrets.DATABASE_URL }}
   └── Agent generates workflow, user handles secrets

2. APP PLATFORM BINDABLE VARIABLES
   ├── For DO Managed Databases (Postgres, MySQL, MongoDB, etc.)
   ├── Credentials injected via ${db.DATABASE_URL}
   ├── Agent configures app spec, never sees credentials
   └── Best for: Apps using DO managed services

3. LOCAL .ENV + EPHEMERAL APP SPEC
   ├── User maintains .env file locally
   ├── Agent creates temp app spec with placeholders
   └── Substitutes values → Deploys → Deletes temp file

4. EXTERNAL SERVICES
   ├── Same patterns as #1 or #3
   └── User responsible for credential management

Artifact Contracts

All skills produce and consume artifacts with consistent naming:

ArtifactFilenameProducerConsumer
App Spec.do/app.yamldesigner, migrationdeployment, planner
Deploy Button.do/deploy.template.yamldesigner, migrationGitHub
Deployment PlanPlan/0N-*.mdplannerUser, deployment
Dev Environment.devcontainer/devcontainer.jsondevcontainersVS Code, Cursor
Docker Composedocker-compose.ymldevcontainersDocker Desktop
CI/CD Workflow.github/workflows/deploy.ymldeployment, plannerGitHub Actions
SQL Scriptsdb-*.sqlpostgresUser (manual execution)
CORS Configspaces-cors.jsonspacesDO Console

Handoff Protocol

When a skill completes, it should:

  1. State the artifact(s) produced: "Created .do/app.yaml with 3-component architecture"
  2. Indicate the file path: Relative to project root
  3. Suggest next skill if applicable: "To deploy this, use the deployment skill"

Plugin/Tool Requirements

SkillRequiredOptional
devcontainersfilesystem, docker, gitgh
designerfilesystem
migrationfilesystem, doctl, git, pythongh, DigitalOcean MCP
deploymentfilesystem, doctl, git, pythongh, GitHub MCP
troubleshootingfilesystem, python, doctl
sandboxfilesystem, python, doctl
postgresfilesystem, psql— (scripts only)
managed-db-servicesfilesystem, doctl
spacesfilesystems3cmd (for bucket ops; doctl only manages keys)
ai-servicesfilesystem

Sub-Skill Locations

app-platform-skills/
├── SKILL.md                              # This file (router)
├── skills/
│   ├── devcontainers/SKILL.md
│   ├── designer/SKILL.md
│   ├── migration/SKILL.md
│   ├── deployment/SKILL.md
│   ├── planner/SKILL.md                  # Staged project plans (design to deployment)
│   │   └── templates/                    # Local + Tier 1, 2, 3 stage templates
│   ├── troubleshooting/SKILL.md
│   ├── sandbox/SKILL.md                  # Isolated containers for AI agent execution
│   ├── postgres/SKILL.md
│   ├── managed-db-services/SKILL.md      # MySQL, MongoDB, Valkey, Kafka, OpenSearch
│   ├── spaces/SKILL.md
│   └── ai-services/SKILL.md              # Gradient AI
└── shared/
    ├── app-spec-schema.yaml
    ├── artifact-contracts.md
    └── credential-patterns.md

Opinionated Defaults Summary

DomainDefaultOverride Trigger
NetworkingVPC-only, internal routingUser explicitly requests public
CI/CDGitHub + GitHub ActionsUser specifies GitLab/Bitbucket
SecretsGitHub SecretsUser has existing vault
BuildDockerfileUser explicitly prefers buildpacks
DatabaseDO Managed + Bindable VariablesUser has external DB
MonorepoSupported by default (source_dir)N/A
Python envuv for package/venv managementUser prefers pip/poetry
Node envnvm for version managementUser prefers n/volta

Escalation

If a task doesn't fit any skill or spans multiple skills ambiguously:

  1. Ask clarifying question to determine primary intent
  2. Suggest skill sequence if task is multi-phase
  3. For truly novel tasks, fall back to App Platform documentation: https://docs.digitalocean.com/products/app-platform/

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ai-image-generator

AI 图片与视频异步生成技能,调用 AI Artist API 根据文本提示词生成图片或视频,自动轮询直到任务完成。 ⚠️ 使用前必须设置环境变量 AI_ARTIST_TOKEN 为你自己的 API Key! 获取 API Key:访问 https://staging.kocgo.vip/index 注册登录后创建。 支持图片模型:SEEDREAM5_0(默认高质量图片)、NANO_BANANA_2(轻量快速)。 支持视频模型:SEEDANCE_1_5_PRO(文生视频,支持音频)、SORA2(文生视频或首尾帧图生视频,支持 firstImageUrl/lastImageUrl)。 触发场景: - 用户要求生成图片,如"生成一匹狼"、"画一只猫"、"风景画"、"帮我画"等。 - 用户要求生成视频,如"生成视频"、"用 SORA2 生成"、"文生视频"、"图生视频"、"生成一段...的视频"等。 - 用户指定模型:SEEDREAM5_0、NANO_BANANA_2、SEEDANCE_1_5_PRO、SORA2。

Archived SourceRecently Updated
General

fosun-skills-setup-guide

复星财富 OpenAPI 技能集(fosun-skills)的安装引导与安全提示说明。当用户首次安装 fosun-skills、或对 ClawHub 安装过程中的安全风险提示有疑问时使用。

Archived SourceRecently Updated
General

media-compress

Compress and convert images and videos using ffmpeg. Use when the user wants to reduce file size, change format, resize, or optimize media files. Handles common formats like JPG, PNG, WebP, MP4, MOV, WebM. Triggers on phrases like "compress image", "compress video", "reduce file size", "convert to webp/mp4", "resize image", "make image smaller", "batch compress", "optimize media".

Archived SourceRecently Updated
General

humanizer

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.

Archived SourceRecently Updated