Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage Coolify deployments, applications, databases, and services via the Coolify API. Use when the user wants to deploy, start, stop, restart, or manage applications hosted on Coolify.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-07 | ✗→✓ | ▲ Improved | — | — |
| case-08 | ✗→✓ | ▲ Improved | — | — |
| case-06 | ✗→✓ | ▲ Improved | — | — |
Comprehensive management of Coolify deployments, applications, databases, services, and infrastructure via the Coolify API.
Use this skill when the user needs to:
read, write, deploy)COOLIFY_TOKEN environment variableapp.coolify.io) or self-hosted instancebash# List all applications {baseDir}/scripts/coolify applications list # Get application details {baseDir}/scripts/coolify applications get --uuid abc-123 # Deploy an application {baseDir}/scripts/coolify deploy --uuid abc-123 --force # View application logs {baseDir}/scripts/coolify applications logs --uuid abc-123 # Restart an application {baseDir}/scripts/coolify applications restart --uuid abc-123
bash{baseDir}/scripts/coolify applications list
Output:
json{ "success": true, "data": [ { "uuid": "abc-123", "name": "my-app", "status": "running", "fqdn": "https://app.example.com" } ], "count": 1 }
bash{baseDir}/scripts/coolify applications get --uuid abc-123
bash# Start {baseDir}/scripts/coolify applications start --uuid abc-123 # Stop {baseDir}/scripts/coolify applications stop --uuid abc-123 # Restart {baseDir}/scripts/coolify applications restart --uuid abc-123
bash{baseDir}/scripts/coolify applications logs --uuid abc-123
bash# List environment variables {baseDir}/scripts/coolify applications envs list --uuid abc-123 # Create environment variable {baseDir}/scripts/coolify applications envs create \ --uuid abc-123 \ --key DATABASE_URL \ --value "postgres://user:pass@host:5432/db" \ --is-runtime true \ --is-buildtime false # Update environment variable {baseDir}/scripts/coolify applications envs update \ --uuid abc-123 \ --env-uuid env-456 \ --value "new-value" # Bulk update environment variables {baseDir}/scripts/coolify applications envs bulk-update \ --uuid abc-123 \ --json '{"DATABASE_URL":"postgres://...","API_KEY":"..."}' # Delete environment variable {baseDir}/scripts/coolify applications envs delete \ --uuid abc-123 \ --env-uuid env-456
bash# Public Git repository {baseDir}/scripts/coolify applications create-public \ --project-uuid proj-123 \ --server-uuid server-456 \ --git-repository "https://github.com/user/repo" \ --git-branch main \ --name "My App" # Private GitHub App {baseDir}/scripts/coolify applications create-private-github-app \ --project-uuid proj-123 \ --server-uuid server-456 \ --github-app-uuid gh-789 \ --git-repository "user/repo" \ --git-branch main # Dockerfile {baseDir}/scripts/coolify applications create-dockerfile \ --project-uuid proj-123 \ --server-uuid server-456 \ --dockerfile-location "./Dockerfile" \ --name "My Docker App" # Docker Image {baseDir}/scripts/coolify applications create-dockerimage \ --project-uuid proj-123 \ --server-uuid server-456 \ --docker-image "nginx:latest" \ --name "Nginx" # Docker Compose {baseDir}/scripts/coolify applications create-dockercompose \ --project-uuid proj-123 \ --server-uuid server-456 \ --docker-compose-location "./docker-compose.yml"
bash{baseDir}/scripts/coolify databases list
bash{baseDir}/scripts/coolify databases get --uuid db-123
bash# Start {baseDir}/scripts/coolify databases start --uuid db-123 # Stop {baseDir}/scripts/coolify databases stop --uuid db-123 # Restart {baseDir}/scripts/coolify databases restart --uuid db-123 # Delete {baseDir}/scripts/coolify databases delete --uuid db-123
bash# PostgreSQL {baseDir}/scripts/coolify databases create-postgresql \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-postgres" \ --postgres-user admin \ --postgres-password secret \ --postgres-db myapp # MySQL {baseDir}/scripts/coolify databases create-mysql \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-mysql" # MariaDB {baseDir}/scripts/coolify databases create-mariadb \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-mariadb" # MongoDB {baseDir}/scripts/coolify databases create-mongodb \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-mongo" # Redis {baseDir}/scripts/coolify databases create-redis \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-redis" # KeyDB {baseDir}/scripts/coolify databases create-keydb \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-keydb" # ClickHouse {baseDir}/scripts/coolify databases create-clickhouse \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-clickhouse" # Dragonfly {baseDir}/scripts/coolify databases create-dragonfly \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "my-dragonfly"
bash# List backup configurations {baseDir}/scripts/coolify databases backups list --uuid db-123 # Create backup configuration {baseDir}/scripts/coolify databases backups create \ --uuid db-123 \ --frequency "0 2 * * *" \ --enabled true # Get backup details {baseDir}/scripts/coolify databases backups get \ --uuid db-123 \ --backup-uuid backup-456 # Update backup {baseDir}/scripts/coolify databases backups update \ --uuid db-123 \ --backup-uuid backup-456 \ --frequency "0 3 * * *" # Trigger manual backup {baseDir}/scripts/coolify databases backups trigger \ --uuid db-123 \ --backup-uuid backup-456 # List backup executions {baseDir}/scripts/coolify databases backups executions \ --uuid db-123 \ --backup-uuid backup-456 # Delete backup configuration {baseDir}/scripts/coolify databases backups delete \ --uuid db-123 \ --backup-uuid backup-456
bash{baseDir}/scripts/coolify services list
bash{baseDir}/scripts/coolify services get --uuid service-123
bash# Start {baseDir}/scripts/coolify services start --uuid service-123 # Stop {baseDir}/scripts/coolify services stop --uuid service-123 # Restart {baseDir}/scripts/coolify services restart --uuid service-123 # Delete {baseDir}/scripts/coolify services delete --uuid service-123
bash{baseDir}/scripts/coolify services create \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "My Service" \ --docker-compose '{"version":"3.8","services":{"web":{"image":"nginx"}}}'
bash# List {baseDir}/scripts/coolify services envs list --uuid service-123 # Create {baseDir}/scripts/coolify services envs create \ --uuid service-123 \ --key API_KEY \ --value "secret" # Update {baseDir}/scripts/coolify services envs update \ --uuid service-123 \ --env-uuid env-456 \ --value "new-secret" # Bulk update {baseDir}/scripts/coolify services envs bulk-update \ --uuid service-123 \ --json '{"API_KEY":"secret","DB_HOST":"localhost"}' # Delete {baseDir}/scripts/coolify services envs delete \ --uuid service-123 \ --env-uuid env-456
bash# Deploy by UUID {baseDir}/scripts/coolify deploy --uuid abc-123 # Force rebuild {baseDir}/scripts/coolify deploy --uuid abc-123 --force # Deploy by tag {baseDir}/scripts/coolify deploy --tag production # Instant deploy (skip queue) {baseDir}/scripts/coolify deploy --uuid abc-123 --instant-deploy
bash# List all running deployments {baseDir}/scripts/coolify deployments list # List deployments for specific application {baseDir}/scripts/coolify deployments list-for-app --uuid abc-123
bash{baseDir}/scripts/coolify deployments get --uuid deploy-456
bash{baseDir}/scripts/coolify deployments cancel --uuid deploy-456
bash{baseDir}/scripts/coolify servers list
bash{baseDir}/scripts/coolify servers get --uuid server-123
bash{baseDir}/scripts/coolify servers create \ --name "Production Server" \ --ip "192.168.1.100" \ --port 22 \ --user root \ --private-key-uuid key-456
bash{baseDir}/scripts/coolify servers update \ --uuid server-123 \ --name "Updated Name" \ --description "Production environment"
bash{baseDir}/scripts/coolify servers validate --uuid server-123
bash# List all resources on server {baseDir}/scripts/coolify servers resources --uuid server-123 # Get domains configured on server {baseDir}/scripts/coolify servers domains --uuid server-123
bash{baseDir}/scripts/coolify servers delete --uuid server-123
bash{baseDir}/scripts/coolify projects list
bash{baseDir}/scripts/coolify projects get --uuid proj-123
bash{baseDir}/scripts/coolify projects create \ --name "My Project" \ --description "Production project"
bash{baseDir}/scripts/coolify projects update \ --uuid proj-123 \ --name "Updated Name"
bash{baseDir}/scripts/coolify projects delete --uuid proj-123
bash# List environments {baseDir}/scripts/coolify projects environments list --uuid proj-123 # Create environment {baseDir}/scripts/coolify projects environments create \ --uuid proj-123 \ --name "staging" # Get environment details {baseDir}/scripts/coolify projects environments get \ --uuid proj-123 \ --environment staging # Delete environment {baseDir}/scripts/coolify projects environments delete \ --uuid proj-123 \ --environment staging
bash{baseDir}/scripts/coolify teams list
bash{baseDir}/scripts/coolify teams current
bash{baseDir}/scripts/coolify teams members
bash{baseDir}/scripts/coolify teams get --id 1
bash{baseDir}/scripts/coolify security keys list
bash{baseDir}/scripts/coolify security keys get --uuid key-123
bash{baseDir}/scripts/coolify security keys create \ --name "Production Key" \ --description "SSH key for production servers" \ --private-key "$(cat ~/.ssh/id_rsa)"
bash{baseDir}/scripts/coolify security keys update \ --uuid key-123 \ --name "Updated Key Name"
bash{baseDir}/scripts/coolify security keys delete --uuid key-123
bash{baseDir}/scripts/coolify github-apps list
bash{baseDir}/scripts/coolify github-apps get --uuid gh-123
bash{baseDir}/scripts/coolify github-apps create \ --name "My GitHub App" \ --app-id 123456 \ --installation-id 789012 \ --private-key "$(cat github-app-key.pem)"
bash{baseDir}/scripts/coolify github-apps update \ --uuid gh-123 \ --name "Updated App Name"
bash{baseDir}/scripts/coolify github-apps delete --uuid gh-123
bash{baseDir}/scripts/coolify github-apps repos --uuid gh-123
bash{baseDir}/scripts/coolify github-apps branches \ --uuid gh-123 \ --owner myorg \ --repo myrepo
bash {baseDir}/scripts/coolify servers list
bash {baseDir}/scripts/coolify applications create-public \ --project-uuid proj-123 \ --server-uuid server-456 \ --git-repository "https://github.com/user/repo" \ --git-branch main \ --name "My App"
bash {baseDir}/scripts/coolify applications envs create \ --uuid <new-app-uuid> \ --key DATABASE_URL \ --value "postgres://..." \ --is-runtime true
bash {baseDir}/scripts/coolify deploy --uuid <new-app-uuid>
bash {baseDir}/scripts/coolify databases create-postgresql \ --project-uuid proj-123 \ --server-uuid server-456 \ --name "production-db"
bash {baseDir}/scripts/coolify databases backups create \ --uuid <db-uuid> \ --frequency "0 2 * * *" \ --enabled true
bash {baseDir}/scripts/coolify databases backups trigger \ --uuid <db-uuid> \ --backup-uuid <backup-uuid>
bash {baseDir}/scripts/coolify applications get --uuid abc-123
bash {baseDir}/scripts/coolify applications logs --uuid abc-123
bash {baseDir}/scripts/coolify deployments list-for-app --uuid abc-123
Cause: COOLIFY_TOKEN environment variable not set.
Solution:
bashexport COOLIFY_TOKEN="your-token-here"
Or configure in OpenClaw config at ~/.openclaw/openclaw.json:
json{ "skills": { "entries": { "coolify": { "apiKey": "your-token-here" } } } }
Cause: Too many API requests in a short time.
Solution: The client automatically retries with exponential backoff. Wait for the retry or reduce request frequency.
Cause: Invalid or non-existent UUID.
Solution:
bash# List all applications to find correct UUID {baseDir}/scripts/coolify applications list
Cause: Cannot connect to Coolify API.
Solution for self-hosted:
bash# Set custom API URL export COOLIFY_API_URL="https://your-coolify.example.com/api/v1"
Solution for cloud: Verify internet connection and that app.coolify.io is accessible.
Cause: Build or deployment error.
Solution:
bash {baseDir}/scripts/coolify deployments get --uuid deploy-456
bash {baseDir}/scripts/coolify applications logs --uuid abc-123
bash {baseDir}/scripts/coolify applications envs list --uuid abc-123
Cause: Node.js not installed or not in PATH.
Solution:
bash# macOS (via Homebrew) brew install node # Verify installation node --version
All commands return structured JSON:
json{ "success": true, "data": { ... }, "count": 42 }
json{ "success": false, "error": { "type": "APIError", "message": "Application not found", "hint": "Use 'applications list' to find valid UUIDs" } }
| Variable | Required | Default | Description | |----------|----------|---------|-------------| | COOLIFY_TOKEN | Yes | — | API token from Coolify dashboard | | COOLIFY_API_URL | No | https://app.coolify.io/api/v1 | API base URL (for self-hosted) |
For self-hosted instances, set the API URL:
bashexport COOLIFY_API_URL="https://coolify.example.com/api/v1" export COOLIFY_TOKEN="your-token-here"
{baseDir}/references/API.mdMost commands require UUIDs, not names. Always use list commands first to find UUIDs:
bash# Bad: Using name (will fail) {baseDir}/scripts/coolify applications get --uuid "my-app" # Good: Using UUID {baseDir}/scripts/coolify applications list # Find UUID first {baseDir}/scripts/coolify applications get --uuid abc-123
Use --force flag carefully as it rebuilds from scratch:
bash# Normal deployment (uses cache) {baseDir}/scripts/coolify deploy --uuid abc-123 # Force rebuild (slower, but ensures clean build) {baseDir}/scripts/coolify deploy --uuid abc-123 --force
After updating environment variables, restart the application:
bash# Update env var {baseDir}/scripts/coolify applications envs update \ --uuid abc-123 \ --env-uuid env-456 \ --value "new-value" # Restart to apply changes {baseDir}/scripts/coolify applications restart --uuid abc-123
Use cron expressions for backup schedules:
| Expression | Description | |------------|-------------| | 0 2 * * * | Daily at 2 AM | | 0 */6 * * * | Every 6 hours | | 0 0 * * 0 | Weekly on Sunday at midnight | | 0 0 1 * * | Monthly on 1st at midnight |
This skill provides complete access to Coolify's API across:
All operations return structured JSON for easy agent consumption.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 18 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.