Automated summary
Provisions or updates a Coolify deployment from coolify.yaml, configures Doppler secret injection, and generates the GitHub Actions deploy workflow, with plan, seed, init_cicd, init_app, and validate subcommands.
Strengths
- Idempotent provisioning across multiple environments and servers selected by the server alias in coolify.yaml.
- Read-only plan mode gives a Terraform-style CREATE/EXISTS/PATCH diff before any changes.
- Same-image promotion keeps only DOPPLER_TOKEN in Coolify and injects environment variables at runtime.
- Includes validate and seed subcommands to check credentials, schema, and Doppler key presence.
Limitations
- Requires an existing coolify.yaml and credentials in ~/.claude/coolify.json, or prior init_app/init_cicd setup.
- Assumes a Coolify + Doppler + GitHub Actions stack and does not cover other secret managers or CI systems.
- provision does not deploy immediately; the first deploy fires on push to main via the generated workflow.
Use this when standardizing and maintaining multi-environment Coolify deployments with Doppler secrets and GitHub Actions from a repository config file.
Avoid this if the project does not use Coolify and Doppler, or if you need a one-off manual deployment without prior configuration.
Security analysis
CautionThis is a legitimate DevOps provisioning skill that drives Coolify, Doppler, Cloudflare, and SSH using credentials from a local config file. It wields powerful tools (Bash, network APIs, remote SSH) and handles real secrets, which warrants a 'caution' rating, but there are no destructive, exfiltrating, obfuscated, or safety-disabling instructions. The secret-handling model (only DOPPLER_TOKEN in Coolify, scoped per config) is explicitly disclosed with its risk tradeoffs.
- •Uses Bash for provisioning and invokes helper scripts (provision.sh, seed.sh, validate.sh, lib-coolify-api.sh) under ~/.claude/skills/setup-coolify/scripts/ — meaningful local execution surface
- •Makes network API calls to Coolify, Doppler, and Cloudflare, and SSH access to remote deploy hosts — powerful but legitimate operational tooling
- •Reads long-lived credentials (api_key, doppler_account, ssh_host, doppler_token, cloudflare_api_token) from ~/.claude/coolify.json; compromise of that file or of the skill scripts grants wide control
- •DOPPLER_TOKEN is stored in Coolify and the skill itself notes it is visible in UI/API/logs and can read all secrets in the matching Doppler config — a real blast-radius concern, though disclosed
- •No evidence of exfiltration, obfuscation, base64 payloads, rm -rf, curl|sh, or disabling of safety; behavior is documented and idempotent
Examples
Run /setup-coolify plan against our production server to show the CREATE/EXISTS/PATCH diff before provisioning.Use /setup-coolify init_app to bootstrap coolify.yaml and .github/workflows/deploy.yml for this repo.Run /setup-coolify seed to fill missing Doppler keys from .env.local and .env.production without overwriting existing values.name: setup-coolify description: This skill should be used when the user runs /setup-coolify, /setup-coolify provision, /setup-coolify plan, /setup-coolify seed, /setup-coolify init_cicd, /setup-coolify init_app, or /setup-coolify validate. Provisions and updates a Coolify deployment for the current repo from coolify.yaml, configures Doppler secret injection (all env_vars including NEXT_PUBLIC_* injected at runtime via DOPPLER_TOKEN — same-image promotion model), and generates .github/workflows/deploy.yml. Reads coolify.yaml from the working directory and credentials from ~/.claude/coolify.json. Designed to work across multiple repos and multiple Coolify servers via the server alias in coolify.yaml. disable-model-invocation: true argument-hint: "[provision | plan | seed | init_cicd | init_app | validate | (blank = provision)]" allowed-tools: Read Write Bash
setup-coolify
Arguments: $ARGUMENTS
Provision or update a Coolify + Doppler deployment from coolify.yaml in the current
working directory. Same skill works for any repo and any Coolify server — the server:
alias in coolify.yaml selects both the Coolify URL and the Doppler account.
Subcommands
| Form | Action |
|------|--------|
| /setup-coolify | Provision/update: ensures Doppler keys exist, upserts every app in the environments: map (staging + production required; extra envs like qa provisioned identically), syncs env vars, mounts Doppler-fallback volume. Does NOT deploy — the first deploy fires on push to main via the generated workflow. Idempotent. |
| /setup-coolify provision | Explicit alias for blank — same as /setup-coolify with no arguments. Provision/update all apps idempotently. |
| /setup-coolify plan | Read-only diff (Terraform-style): runs provision.sh --plan, reporting + CREATE / = EXISTS / ~ PATCH per resource (project, apps, volumes, Doppler tokens, DNS records) against live state, then exits. Nothing is mutated. Use before re-running provision on a production server. |
| /setup-coolify seed | Explicit Doppler gap-fill from .env.local (seeds dev + stg) and .env.production (seeds prd). Runs bash $HOME/.claude/skills/setup-coolify/scripts/seed.sh. Logs every key set. Never overwrites an existing Doppler value. Run after creating a new repo's Doppler project before running provision. |
| /setup-coolify init_cicd | Interactive setup of ~/.claude/coolify.json for a new server alias. Prompts for url, api_key, doppler_account, ssh_host, doppler_token. Validates existing credentials before prompting for replacement. |
| /setup-coolify init_app | Bootstraps coolify.yaml and .github/workflows/deploy.yml in the current repo. Prompts for project name, server alias, domains, env vars, and optional deploy_server/deploy_ssh_host. Seeds dev+stg Doppler configs from .env.local when present. |
| /setup-coolify validate | Strictly read-only validation: verifies coolify.yaml schema, coolify.json Tier 1 fields (url, api_key, doppler_account, ssh_host, doppler_token), Tier 2 feature-gated fields (cloudflare_api_token when dns.credential_source: coolify_json; deploy_ssh_host/deploy_vps_ip when deploy_server is set), Doppler key presence, Coolify API reachability. No Doppler mutations — run /setup-coolify seed separately to fill missing keys. |
Secrets injection model (same-image promotion)
Coolify receives only DOPPLER_TOKEN — a service token scoped to the matching Doppler config (stg or prd). No other secret values are stored in or pass through Coolify. At container start, the Dockerfile ENTRYPOINT runs doppler run which uses DOPPLER_TOKEN to fetch all env_vars secrets directly from Doppler and inject them into the process environment.
The same Docker image is promoted from staging to production without a rebuild; the only thing that differs between the two app instances is the DOPPLER_TOKEN (scoped to the matching Doppler config). This means:
- Staging gets a service token for the
stgDoppler config → all staging secrets - Production gets a service token for the
prdDoppler config → all production secrets DOPPLER_TOKENitself is stored in Coolify and is visible in the Coolify UI, API responses, and deployment logs. It is a scoped service token — an attacker who obtains it can read all secrets in the matching Doppler config. Protect it accordingly (rotate on exposure;--rotate-tokensflag in provision).- Actual secret values (DATABASE_URL, API keys, etc.) are never stored in or pass through Coolify. They flow directly from Doppler to the container at start time via
doppler run.
The # build_time: true trailing-comment annotation in coolify.yaml is
reserved for a future per-env build mode and is NOT currently parsed by
this skill. Under the current model, the annotation has no behavioural effect —
every env_var is treated identically (runtime-injected). Do not rely on the
annotation to change provisioning behaviour today.
Execution flow (provision = blank arguments)
-
Load and validate config
- Parse
./coolify.yaml. Bail if missing or invalid YAML. - Read
~/.claude/coolify.json. Look upservers.$SERVER_ALIASentry. Bail if missing. - Run
bash $HOME/.claude/skills/setup-coolify/scripts/validate.sh. If non-zero, print errors and bail BEFORE touching Coolify.
- Parse
-
Discover Coolify topology by lookup-by-name (no hardcoded UUIDs)
- Source
lib-coolify-api.sh. Callcoolify_upsert_project "$PROJECT_NAME"to get project UUID. - Resolve
DEPLOY_SERVER_NAME: usesdeploy_serverincoolify.yamlif set, otherwise readsserver_namefrom~/.claude/coolify.json(servers.<alias>.server_name, defaultlocalhost). Callcoolify_get_server_uuid "$DEPLOY_SERVER_NAME". Bail if not found. - Call
coolify_get_destination_uuid "$DEPLOY_SERVER_UUID"(which scans existing applications on the server first, falling back to/destinations). - Resolve
DEPLOY_SSH_HOST: usesdeploy_ssh_hostincoolify.jsonif set, falling back tossh_host. REQUIRED — bail if missing (used in step 3 to create the Doppler-cache Docker volume on the deployment VPS).
- Source
-
Upsert staging app
- Compute name:
${PROJECT_NAME}-staging(e.g.skillmap-staging). coolify_find_app_by_name— if UUID returned, skip create. ElsePOST /applications/private-github-appwithsource_type: registryanddocker_registry_image_name: $REGISTRY_IMAGE. PATCHis_auto_deploy_enabled=false.- Source
lib-doppler-api.sh. Create a service token scoped tostagingconfig. Set onlyDOPPLER_TOKENon the Coolify app — no other secret values are stored in Coolify. The app's Dockerfile ENTRYPOINT runsdoppler runwhich usesDOPPLER_TOKENto fetch allenv_varssecrets directly from Doppler at container start. - SSH to the deployment VPS (
DEPLOY_SSH_HOST) and rundocker volume create ${APP_UUID}-doppler-cache. PATCH the app withcustom_docker_run_options: --mount source=${APP_UUID}-doppler-cache,target=/etc/doppler-cache.
- Compute name:
-
Upsert production app (same flow, name =
${PROJECT_NAME}-production) -
Write coolify_app_ids back to coolify.yaml (consumed by
generate-workflow.shto embed app UUIDs indeploy.yml; provisioning never reads it back — every run re-resolves by name) -
Done.
provision.shdoes NOT trigger an initial deploy. The first deploy is fired by pushing tomain, which activates the generated.github/workflows/deploy.yml(build → GHCR → deploy-staging → smoke-test → deploy-production). To redeploy manually, push any commit tomainor trigger the workflow from the GitHub Actions UI.
init_cicd flow
Interactive prompts (server credential collection):
- Server alias to add (string, e.g.
my-server) - Coolify URL (e.g.
https://coolify.example.com) - API key (paste — token displayed once in Coolify UI)
- Doppler account name (e.g.
my-doppler-account) - SSH host alias (e.g.
my-vps) - Cloudflare API token (optional — leave blank if DNS is managed outside Cloudflare or manually). When provided, stored as
cloudflare_api_tokenunder the server entry. Token requires Zone:DNS:Edit scope. Also prompt fordns_defaultblock: zone name (e.g.example.com) and credential key (cloudflare_api_token). This pre-populates thedns:block for futurecoolify.yamlgeneration and is used byprovision.shandtest/e2e.shto auto-create DNS A records.
If the alias already exists in ~/.claude/coolify.json, validates existing credentials first (Coolify API ping + doppler whoami). Prompts to replace only if validation fails.
Re-run to fill missing fields: As the skill evolves, new fields are added to the server entry schema. Re-running /setup-coolify init_cicd for an existing alias is the supported upgrade path — it skips fields that already pass validation and only prompts for absent or failing fields. doppler_token is now a Tier 1 required field (not optional); validate will exit 1 if it is missing. Re-run init_cicd to add it to an existing entry.
Merge into ~/.claude/coolify.json (preserve existing servers). chmod 0600.
Example resulting server entry:
"my-server": {
"url": "https://coolify.example.com",
"api_key": "...",
"doppler_account": "MyOrg",
"ssh_host": "my-vps",
"cloudflare_api_token": "...",
"dns_default": {
"provider": "cloudflare",
"zone_name": "example.com",
"credential_source": "coolify_json",
"credential_key": "cloudflare_api_token"
}
}
init_app flow
Run from the target repo root (bash ~/.claude/skills/setup-coolify/init/init.sh). Writes ./coolify.yaml and .github/workflows/deploy.yml.
Interactive prompts:
- Project name, server alias, Doppler project, registry image, staging/production domains
- DNS provider (cloudflare/none) and optional DNS zone + credential config
- Optional deploy_server (Coolify-registered server name) and build context/Dockerfile
- Env var keys
After writing files, detects .env.local and offers to seed dev and stg Doppler configs from it.
plan flow
Runs bash $HOME/.claude/skills/setup-coolify/scripts/provision.sh --plan.
Read-only: runs validate, resolves topology (project, server, destination, DNS zone),
then for every environment reports + CREATE (resource absent), = EXISTS (matches
desired state), or ~ PATCH (lists exactly which fields would change: domains, volume
mount, image name, health_check_path, DNS record IP). Exits 0 without mutating anything.
validate flow
Runs bash $HOME/.claude/skills/setup-coolify/scripts/validate.sh.
Strictly read-only — no Doppler mutations.
- Parses and schema-checks
coolify.yaml. - Verifies coolify.json Tier 1 fields:
url,api_key,doppler_account,ssh_host,doppler_token(hard fail if missing). - Verifies coolify.json Tier 2 fields gated on coolify.yaml features:
cloudflare_api_token(required whendns.credential_source: coolify_json),deploy_ssh_host/deploy_vps_ip(required whendeploy_server:is set). - Verifies Coolify API reachability, SSH connectivity, DNS credentials.
- Checks that every
env_varskey fromcoolify.yamlexists in Doppler staging AND production with a non-placeholder value. Reports all failures before exiting (error-accumulation pattern).
To fill missing Doppler keys from local .env files, run /setup-coolify seed separately.
See also
~/.claude/skills/setup-coolify/references/api-reference.md— Coolify + Doppler API endpoint referencedocs/schema.md(in the repo) —coolify.yamlandcoolify.jsonschema reference, including the reservedbuild_time: trueannotation
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/setup-coolify-doppler-ms2s7bqt/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/setup-coolify-doppler-ms2s7bqt' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/setup-coolify-doppler-ms2s7bqt/download' --output '.skill-downloads/setup-coolify-doppler-ms2s7bqt/SKILL.md.part' && mv '.skill-downloads/setup-coolify-doppler-ms2s7bqt/SKILL.md.part' '.skill-downloads/setup-coolify-doppler-ms2s7bqt/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
Tools declared by the author (check availability in your agent): Read Write Bash
Original excerpt: setup-coolify
Arguments: $ARGUMENTS
Provision or update a Coolify + Doppler deployment from coolify.yaml in the current
working directory. Same skill works for any repo and any Coolify server — the server:
alias in coolify.yaml selects both the Coolify URL and the Doppler account.
Subcommands
| Form | Action |
|---|---|
/setup-coolify | Provision/update: ensures Doppler keys exist, upserts every app in the environments: map (staging + production required; extra envs like qa provisioned identically), syncs env vars, mounts Doppler-fallback volume. Does NOT deploy — the first deploy fires on push to main via the generated workflow. Idempotent. |
/setup-coolify provision | Explicit alias for blank — same as /setup-coolify with no arguments. Provision/update all apps idempotently. |
/setup-coolify plan | Read-only diff (Terraform-style): runs provision.sh --plan, reporting + CREATE / = EXISTS / ~ PATCH per resource (project, apps, volumes, Doppler tokens, DNS records) against live state, then exits. Nothing is mutated. Use before re-running provision on a production server. |
/setup-coolify seed | Explicit Doppler gap-fill from .env.local (seeds dev + stg) and .env.production (seeds prd). Runs bash $HOME/.claude/skills/setup-coolify/scripts/seed.sh. Logs every key set. Never overwrites an existing Doppler value. Run after creating a new repo's Doppler project before running provision. |
/setup-coolify init_cicd | Interactive setup of ~/.claude/coolify.json for a new server alias. Prompts for url, api_key, doppler_account, ssh_host, doppler_token. Validates existing credentials before prompting for replacement. |
/setup-coolify init_app | Bootstraps coolify.yaml and .github/workflows/deploy.yml in the current repo. Prompts for project name, server alias, domains, env vars, and optional deploy_server/deploy_ssh_host. Seeds dev+stg Doppler configs from .env.local when present. |
/setup-coolify validate | Strictly read-only validation: verifies coolify.yaml schema, coolify.json Tier 1 fields (url, api_key, doppler_account, ssh_host, doppler_token), Tier 2 feature-gated fields (cloudflare_api_token when dns.credential_source: coolify_json; deploy_ssh_host/deploy_vps_ip when deploy_server is set), Doppler key presence, Coolify API reachability. No Doppler mutations — run /setup-coolify seed separately to fill missing keys. |
Secrets injection model (same-image promotion)
Coolify receives only DOPPLER_TOKEN — a service token scoped to the matching Doppler config (stg or prd). No other secret values are stored in or pass through Coolify. At container start, the Dockerfile ENTRYPOINT runs doppler run which uses DOPPLER_TOKEN to fetch all env_vars secrets directly from Doppler and inject them into the process environment.
The same Docker image is promoted from staging to production without a rebuild; the only thing that differs between the two app instances is the DOPPLER_TOKEN (scoped to the matching Doppler config). This means:
- Staging gets a service token for the
stgDoppler config → all staging secrets - Production gets a service token for the
prdDoppler config → all production secrets DOPPLER_TOKENitself is stored in Coolify and is visible in the Coolify UI, API responses, and deployment logs. It is a scoped service token — an attacker who obtains it can read all secrets in the matching Doppler config. Protect it accordingly (rotate on exposure;--rotate-tokensflag in provision).- Actual secret values (DATABASE_URL, API keys, etc.) are never stored in or pass through Coolify. They flow directly from Doppler to the container at start time via
doppler run.
The # build_time: true trailing-comment annotation in coolify.yaml is
reserved for a future per-env build mode and is NOT currently parsed by
this skill. Under the current model, the annotation has no behavioural effect —
every env_var is treated identically (runtime-injected). Do not rely on the
annotation to change provisioning behaviour today.
Execution flow (provision = blank arguments)
-
Load and validate config
- Parse
./coolify.yaml. Bail if missing or invalid YAML. - Read
~/.claude/coolify.json. Look upservers.$SERVER_ALIASentry. Bail if missing. - Run
bash $HOME/.claude/skills/setup-coolify/scripts/validate.sh. If non-zero, print errors and bail BEFORE touching Coolify.
- Parse
-
Discover Coolify topology by lookup-by-name (no hardcoded UUIDs)
- Source
lib-coolify-api.sh. Callcoolify_upsert_project "$PROJECT_NAME"to get project UUID. - Resolve
DEPLOY_SERVER_NAME: usesdeploy_serverincoolify.yamlif set, otherwise readsserver_namefrom~/.claude/coolify.json(servers.<alias>.server_name, defaultlocalhost). Callcoolify_get_server_uuid "$DEPLOY_SERVER_NAME". Bail if not found. - Call
coolify_get_destination_uuid "$DEPLOY_SERVER_UUID"(which scans existing applications on the server first, falling back to/destinations). - Resolve
DEPLOY_SSH_HOST: usesdeploy_ssh_hostincoolify.jsonif set, falling back tossh_host. REQUIRED — bail if missing (used in step 3 to create the Doppler-cache Docker volume on the deployment VPS).
- Source
-
Upsert staging app
- Compute name:
${PROJECT_NAME}-staging(e.g.skillmap-staging). coolify_find_app_by_name— if UUID returned, skip create. ElsePOST /applications/private-github-appwithsource_type: registryanddocker_registry_image_name: $REGISTRY_IMAGE. PATCHis_auto_deploy_enabled=false.- Source
lib-doppler-api.sh. Create a service token scoped tostagingconfig. Set onlyDOPPLER_TOKENon the Coolify app — no other secret values are stored in Coolify. The app's Dockerfile ENTRYPOINT runsdoppler runwhich usesDOPPLER_TOKENto fetch allenv_varssecrets directly from Doppler at container start. - SSH to the deployment VPS (
DEPLOY_SSH_HOST) and rundocker volume create ${APP_UUID}-doppler-cache. PATCH the app withcustom_docker_run_options: --mount source=${APP_UUID}-doppler-cache,target=/etc/doppler-cache.
- Compute name:
-
Upsert production app (same flow, name =
${PROJECT_NAME}-production) -
Write coolify_app_ids back to coolify.yaml (consumed by
generate-workflow.shto embed app UUIDs indeploy.yml; provisioning never reads it back — every run re-resolves by name) -
Done.
provision.shdoes NOT trigger an initial deploy. The first deploy is fired by pushing tomain, which activates the generated.github/workflows/deploy.yml(build → GHCR → deploy-staging → smoke-test → deploy-production). To redeploy manually, push any commit tomainor trigger the workflow from the GitHub Actions UI.
init_cicd flow
Interactive prompts (server credential collection):
- Server alias to add (string, e.g.
my-server) - Coolify URL (e.g.
https://coolify.example.com) - API key (paste — token displayed once in Coolify UI)
- Doppler account name (e.g.
my-doppler-account) - SSH host alias (e.g.
my-vps) - Cloudflare API token (optional — leave blank if DNS is managed outside Cloudflare or manually). When provided, stored as
cloudflare_api_tokenunder the server entry. Token requires Zone:DNS:Edit scope. Also prompt fordns_defaultblock: zone name (e.g.example.com) and credential key (cloudflare_api_token). This pre-populates thedns:block for futurecoolify.yamlgeneration and is used byprovision.shandtest/e2e.shto auto-create DNS A records.
If the alias already exists in ~/.claude/coolify.json, validates existing credentials first (Coolify API ping + doppler whoami). Prompts to replace only if validation fails.
Re-run to fill missing fields: As the skill evolves, new fields are added to the server entry schema. Re-running /setup-coolify init_cicd for an existing alias is the supported upgrade path — it skips fields that already pass validation and only prompts for absent or failing fields. doppler_token is now a Tier 1 required field (not optional); validate will exit 1 if it is missing. Re-run init_cicd to add it to an existing entry.
Merge into ~/.claude/coolify.json (preserve existing servers). chmod 0600.
Example resulting server entry:
"my-server": {
"url": "https://coolify.example.com",
"api_key": "...",
"doppler_account": "MyOrg",
"ssh_host": "my-vps",
"cloudflare_api_token": "...",
"dns_default": {
"provider": "cloudflare",
"zone_name": "example.com",
"credential_source": "coolify_json",
"credential_key": "cloudflare_api_token"
}
}
init_app flow
Run from the target repo root (bash ~/.claude/skills/setup-coolify/init/init.sh). Writes ./coolify.yaml and .github/workflows/deploy.yml.
Interactive prompts:
- Project name, server alias, Doppler project, registry image, staging/production domains
- DNS provider (cloudflare/none) and optional DNS zone + credential config
- Optional deploy_server (Coolify-registered server name) and build context/Dockerfile
- Env var keys
After writing files, detects .env.local and offers to seed dev and stg Doppler configs from it.
plan flow
Runs bash $HOME/.claude/skills/setup-coolify/scripts/provision.sh --plan.
Read-only: runs validate, resolves topology (project, server, destination, DNS zone),
then for every environment reports + CREATE (resource absent), = EXISTS (matches
desired state), or ~ PATCH (lists exactly which fields would change: domains, volume
mount, image name, health_check_path, DNS record IP). Exits 0 without mutating anything.
validate flow
Runs bash $HOME/.claude/skills/setup-coolify/scripts/validate.sh.
Strictly read-only — no Doppler mutations.
- Parses and schema-checks
coolify.yaml. - Verifies coolify.json Tier 1 fields:
url,api_key,doppler_account,ssh_host,doppler_token(hard fail if missing). - Verifies coolify.json Tier 2 fields gated on coolify.yaml features:
cloudflare_api_token(required whendns.credential_source: coolify_json),deploy_ssh_host/deploy_vps_ip(required whendeploy_server:is set). - Verifies Coolify API reachability, SSH connectivity, DNS credentials.
- Checks that every
env_varskey fromcoolify.yamlexists in Doppler staging AND production with a non-placeholder value. Reports all failures before exiting (error-accumulation pattern).
To fill missing Doppler keys from local .env files, run /setup-coolify seed separately.
See also
~/.claude/skills/setup-coolify/references/api-reference.md— Coolify + Doppler API endpoint referencedocs/schema.md(in the repo) —coolify.yamlandcoolify.jsonschema reference, including the reservedbuild_time: trueannotation
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/setup-coolify-doppler-ms2s7bqt/SKILL.md' && test -s '.skill-downloads/setup-coolify-doppler-ms2s7bqt/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/setup-coolify' && cp -R '.skill-downloads/setup-coolify-doppler-ms2s7bqt' '.claude/skills/setup-coolify'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/setup-coolify-doppler-ms2s7bqt'openskills read 'setup-coolify-doppler-ms2s7bqt'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/setup-coolify-doppler-ms2s7bqt/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
Configure a Chat Channel with SecretRefs
DevOps
Set up chat channels using non-interactive commands, with secrets only as SecretRefs. Covers gather, mutate, repair, and prove steps for reliable delivery.
Investigate ClickHouse CI Failures
DevOps
Investigate a ClickHouse CI failure end-to-end from a PR or S3 report URL. Fetches failed tests, classifies flaky vs real regression, and checks for existing issues/fixes.
Ansible PR Review
DevOps
Reviews an Ansible PR following the project's standardized process, including changelog checks, test coverage validation, and feedback tracking.