Coolify Skill
Use this skill whenever the user asks to deploy/manage apps on Coolify.
Primary path: call the coolify_deploy tool (runtime-integrated, key-safe).
Fallback path: raw API calls with curl only when debugging.
Environment Assumptions
- Coolify URL:
https://coolify.semfreak.dev - API key variable:
COOLIFY_API_KEY - Server IP:
66.90.191.45 - Wildcard domain:
*.semfreak.dev - GitHub org:
webdevtodayjason
The key is stored encrypted in service keys and resolved by runtime at call-time. Do not ask users to paste plaintext keys into chat.
Tool Action Map
test_connection:- Checks
GET /api/v1/version.
- Checks
list_servers:- Lists server UUIDs/IDs available in Coolify.
list_projects:- Lists projects and identifiers.
create_project:- Creates a Coolify project.
create_database:- Creates PostgreSQL resource in a project.
create_application:- Creates app resource from GitHub repo + branch + domain.
trigger_deploy:- Triggers deployment for application UUID.
deployment_status:- Reads deployment state by deployment UUID or by app UUID.
deployment_logs:- Reads logs for a deployment UUID (or latest deployment for an app UUID).
deploy_project:- Full pipeline:
- optional GitHub repo create (
gh) - optional local scaffold + commit + push
- Coolify project/db/app provisioning
- optional deploy trigger
- optional GitHub repo create (
- Full pipeline:
teardown_project:- Deletes app/database resources for a project, then deletes the project.
Canonical Flow
When user asks: "build and deploy "
- Validate access:
coolify_deploywithaction: test_connection
- Resolve server:
action: list_servers(or useCOOLIFY_DEFAULT_SERVER_IDif already set)
- Run full deploy:
action: deploy_project
- Return evidence:
- Project UUID
- App UUID
- Deployment UUID/status
- Live URL (
https://<project>.semfreak.dev)
Minimal Full Deploy Input
{
"action": "deploy_project",
"project_name": "invoicer",
"project_description": "Node.js API with Postgres",
"repo_org": "webdevtodayjason",
"repo_name": "invoicer",
"stack": "node",
"domain": "invoicer.semfreak.dev",
"deploy_now": true
}
Granular Mode Examples
Create project:
{
"action": "create_project",
"project_name": "invoicer",
"project_description": "Node API"
}
Create database:
{
"action": "create_database",
"project_uuid": "<PROJECT_UUID>",
"project_name": "invoicer",
"server_uuid": "<SERVER_UUID>",
"environment_name": "production"
}
Create application:
{
"action": "create_application",
"project_uuid": "<PROJECT_UUID>",
"project_name": "invoicer",
"server_uuid": "<SERVER_UUID>",
"repo_org": "webdevtodayjason",
"repo_name": "invoicer",
"branch": "main",
"domain": "invoicer.semfreak.dev",
"app_port": 3000
}
Trigger deploy:
{
"action": "trigger_deploy",
"application_uuid": "<APP_UUID>"
}
Status check:
{
"action": "deployment_status",
"application_uuid": "<APP_UUID>",
"limit": 1
}
Operator Notes
- Prefer
deploy_projectunless troubleshooting. - Keep project/repo/domain naming aligned (
<name>,<name>-app,<name>-db,<name>.semfreak.dev). - If
ghauth is missing, stop and return exact remediation. - If Coolify responds with schema/endpoint mismatch, capture status + response body and report for adapter update.