Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add tranfu-labs/tranfu-skills --skill tranfu-coolify-opsgit clone --depth 1 https://github.com/tranfu-labs/tranfu-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/tranfu-labs/tranfu-skills/tranfu-coolify-ops)<a href="https://agentmods.dev/skills/tranfu-labs/tranfu-skills/tranfu-coolify-ops"><img src="https://agentmods.dev/badge/skills/tranfu-labs/tranfu-skills/tranfu-coolify-ops/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/tranfu-labs/tranfu-skills/tranfu-coolify-ops"><img src="https://agentmods.dev/badge/skills/tranfu-labs/tranfu-skills/tranfu-coolify-ops.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00390 | $0.12308 |
| Opus 5 | $0.00195 | $0.06154 |
| Sonnet 5 | $0.00078 | $0.02462 |
| Haiku 4.5 | $0.00039 | $0.01231 |
Grade A, and why
tranfu-coolify-ops scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
5. **curl 用 `-H "Authorization: Bearer $COOLIFY_API_TOKEN"`**,不写明文 How it starts
The opening of the file, as written. The whole thing — 356 lines — stays where its author put it; the contents beside it link to each section on GitHub.
tranfu Coolify 部署运维
把 tranfu-labs/-app 端到端部署到公司 Coolify 实例。新项目 / 故障修复 / 临时改动全部走同一份 reconcile 流程——流程自己识别要做什么,整套幂等可重跑。
Token 纪律(硬约束,写在最前面)
$COOLIFY_API_TOKEN 是高敏感凭据。全 skill 范围遵守:
- 校验脚本只输出 ✓ / ✗——长度、前缀都不打(见 assets/preflight.sh)
- agent 给 Bash tool 的命令字符串里永远只引用
$COOLIFY_API_TOKEN变量名——token 原文只在 shell 内展开,不进对话转录 - 禁止
echo $COOLIFY_API_TOKEN来"看一眼对不对"——校验只能通过 preflight.sh - gh secret 用
--body "$COOLIFY_API_TOKEN",不写明文 - curl 用
-H "Authorization: Bearer $COOLIFY_API_TOKEN",不写明文 - Coolify 返回的 env value 是明文——agent 拿来做 diff,不展示,hash 比较代替明文显示
- 用户给的
.env文件——读完直接打 API,不在对话里 echo 内容
这套纪律比"四件套合规"还硬——违反一次 token 就外泄。
心智模型(读一遍再开干)
- GitHub repo name == Coolify project name == intended Application name——从 GitHub URL 初始化/同名探测时三者同名是硬约束。给一个
https://github.com/tranfu-labs/markdown-kits-app,立刻派生REPO_NAME = PROJECT_NAME = APP_NAME = markdown-kits-app,全 skill 围绕这一个锚点定位资源,不扫描其他 project / 不让用户从列表里挑。但若入口是 Coolify UI URL / 已知 Application UUID,Coolify 返回的name可能是派生显示名(如<repo>:<branch>-<uuid>),此时不要用name == repo判失败;以git_repository/git_branch/build_pack/github_app_uuid/project_uuid/docker_compose_location/docker_compose_domains等绑定字段判定 0.8 形态。 - Application 创建/GHA 成功后仍 unhealthy 要继续排障到可观测结论——先读 deployment 记录和容器日志;常见根因是运行时 env 缺失(例如应用启动直接抛 missing env)。如果
coolify app logs <uuid> --lines N因Application is not running拿不到运行日志,可用只读docker ps -a --filter name=<app_uuid>+docker logs --tail N <container>取退出容器日志;注意 Coolify CLI 的 app logs 参数是--lines/-n,不是--tail。补 env 时不展示值,补完立即 POST/deploy?force=false并验证running:healthy+ 公网 2xx/3xx。细节见 references/application-onboard-runtime-env-pitfalls.md;数据引导类失败案例见 references/session-2026-07-02-college-fit-app-data-bootstrap-notes.md。 - 用户在聊天里贴出的 secret 不要硬编码进脚本/JSON 字面量——Hermes/Feishu/日志脱敏层可能把值改写成占位符,导致 Coolify env 写入假的 masked value;也会扩大泄露面。优先让用户/运维在 UI 或终端手动录入,或使用不会把明文写入生成代码/日志的安全通道;若无法保证,就输出可复制模板而不是代执行。写完只验证 key/HTTP 状态,不打印 value;若怀疑写入被脱敏,明确要求人工覆盖并轮换。案例见 references/session-2026-07-03-offerpilot-env-redaction-pitfall.md。
- Coolify 全量只读盘点是部署 reconcile 的例外入口——当用户明确要求遍历 project/resources/deployments、输出域名/首次成功部署日期/状态清单时,可以跨 project 做只读 inventory;不得执行 PATCH/POST deploy/env/delete/start/stop/restart。使用
projects/{uuid}建 environment→project 映射、/api/v1/resources取资源归属和域名、deployment 历史取最早finished/success。详见 references/coolify-read-only-inventory.md。 - GHA success + Coolify deployment
finished不等于应用可用——deploymentfinished只说明部署流程结束,Application 可能随后从restarting:unknown落到exited:unhealthy,公网返回503 no available server。收尾必须继续查coolify app get运行状态 + 公网/health route;若运行日志因Application is not running取不到,先读 deployment logs,再按reversible-ops只读规则取一次性容器日志。案例和命令见 references/session-2026-07-02-college-fit-app-finished-but-unhealthy.md。 503 no available server的多服务 Application 排障顺序——先确认目标 Applicationstatus;若为exited:unhealthy/restarting:unknown,不要只重启或只看 GHA success。读取最近 deployment logs,定位具体 unhealthy service(例如dependency failed to start: container asr-... is unhealthy);若coolify app logs返回Application is not running,这是预期限制,不代表无日志,改查coolify app deployments list/logs。多服务 compose 中depends_on: condition: service_healthy会让一个子服务 unhealthy 拖垮整组,即使其他服务 healthy。恢复后必须同时验证coolify app get == running:healthy和公网/、关键 health route 返回 2xx。- env 重复 key 是风险信号但不自动清理——Coolify env API 可能已有重复
IMAGE_REF/ 业务配置 key,排障时只输出 key/count/hash/长度,不展示值;若当前恢复不依赖删除重复项,不要自动 DELETE。删除重复 env 属于有风险清理,应单独列出受影响 key、保留候选和值哈希差异后再请求确认。 - GHA success 也可能只是 build-only success——如果仓库 workflow 使用旧变量名/条件(如
COOLIFY_APPLICATION_UUID、COOLIFY_API_URL、webhook token),Update Coolify IMAGE_REF/Deploy to Coolify可能被 skip 但整条 run 仍 success。用户说 workflow 成功后,仍要打开实际 workflow 或 run job summary 确认 deploy step 没被跳过;social-media-analytics-app 细节见 references/session-2026-07-03-social-media-analytics-app-onboard-notes.md。 - 资源类型: Application (private-github-app) + build_pack=dockercompose——POST
/api/v1/applications/private-github-app创建, GET/PATCH/DELETE 走/api/v1/applications/{uuid}。不用 Service / Compose Empty namespace (那是 0.7 旧形态)。详见 references/service-vs-application.md - Application 身份确认要多锚点——不要只靠
git_repository或name选目标;重复 Application、project_uuid=null、旧 unhealthy 实例都可能存在。写 env / deploy 前用生产域名、已验证 UUID、status、deployment URL/path 等交叉确认;重复 env key 只列 key/hash,不自动删或覆盖。详见 references/application-identity-and-env-duplicates.md - GHA deploy template must contain executable auth headers, not log-masked placeholders——
assets/deploy.yml.templateand generated workflows must use-H "Authorization: Bearer $TOKEN"inside run steps. Never commit copied log-redaction text likeBearer ***; it produces invalid shell/YAML and deploy calls fail silently or at curl parse time. After generating or editing workflow files, run a static check for: no***,Update Coolify IMAGE_REF,Trigger Coolify deploy,Bearer $TOKEN, no old variable names, and YAML parse success. When patching repeated YAML header lines, do not use broad fuzzy replace; patch with surrounding step context or rewrite the full file then read back the relevant section. - GitHub App integration 是 Coolify 实例级一次性配置——
GET /api/v1/github-apps找organization=tranfu-labs的那一条, preflight 校验存在并 export$GITHUB_APP_UUID。skill 永不接管创建 (要上传 private key / installation id, 一次性手工配置, 所有 tranfu-labs 项目复用同一个)。不存在 → preflight 终止 + 给 UI 入口 - Auto Deploy on Push 永远关闭——
is_auto_deploy_enabled: false. Coolify 收到 GitHub push 不部署, 部署只能由 GHA build 完后 POST/api/v1/deploy触发。4I.4 GET 必须校验这个字段;接管/更新已有 Application 时也必须确认 UI 的 Deployment → Auto Deploy 已关闭,不要只看 GHA 链路或默认假设。若 API 返回null/缺字段/不确定,按未确认处理,明确提醒用户到 UI 关掉或给出可恢复的 PATCH/设置命令模板,不能在报告里声称已关闭。 - 镜像链路: GHA → GHCR → IMAGE_REF → Coolify pull——compose 里主 service 只写
image: ${IMAGE_REF:-ghcr.io/${REPO}:latest}+pull_policy: always,不写build:。GHA build/push 成功后先 PATCH/POST Coolify app envIMAGE_REF=ghcr.io/${REPO}:sha-<commit>,再 POST/api/v1/deploy;Coolify 读取不可变 sha tag 拉镜像。latest只是 fallback/滚动标签,不是生产版本真相。回滚 = 改IMAGE_REF回上一个 sha tag + redeploy,不需要改 git 或重 build。若更新旧仓库从IMAGE_TAG/latest迁到IMAGE_REF,注意验证 workflow 先写IMAGE_REF再 deploy,并检查是否已有重复IMAGE_REFenv(只报告,不自动删除)。详见 references/file-generation-rules.md、references/application-ghcr-node-deploy-quirks.md 和 references/session-2026-07-01-agentreach-image-ref-notes.md - 生成 workflow 时避免 Bearer header 被脱敏破坏——在 Hermes/ops 会话里写
.github/workflows/deploy.yml时,形如Authorization: Bearer $TOKEN的文本可能被安全脱敏层改写成***,导致文件或 patch 变成无效 shell/YAML。模板和手写修复优先用curl --oauth2-bearer "$TOKEN"携带 Coolify token,或在最终文件中显式静态校验“不含***且含--oauth2-bearer "$TOKEN"”。详见 references/hermes-bearer-header-redaction.md - 一个 Application + dockercompose = 一份 compose + 内嵌 sub-applications 数组——compose 里有 N 个 service, sub-applications 数组就有 N 条, 每条有独立 uuid + fqdn
- 改域名走
docker_compose_domains字段(不是domains、不是urls、不是 compose 里SERVICE_FQDN_*)——详见 references/urls-vs-docker-compose-domains.md SERVICE_FQDN_*是 Coolify → 容器的 output, 不是 user → Coolify 的 input——compose 里写''即可, 写真值无效。详见 references/service-fqdn-trap.md- 改 compose 走 git push, 不走 PATCH
docker_compose_raw——0.7 Service 形态 compose 存在 Coolify 里 (base64), 改了要 PATCH; 0.8 Application 形态 compose 存在 git repo 里, 改完 push 即可, Coolify 下次 deploy 自动读最新 commit - 部署链路: GHA push GHCR → curl
$BASE/api/v1/deploy?uuid=$APP_UUID→ Coolify pull 重启。详见 commands/deploy-trigger.md - 同名 Service 残留 (0.7 历史) skill 不接管——Step 1 探测到同名 Service 而无 Application 时, 终止并告知用户手动 DELETE 旧 service 后重跑;legacy Service 可能
project_uuid=null,不能只按name + project_uuid查,需额外 name-only/null-project fallback(见 references/session-2026-07-02-offerpilot-legacy-service-null-project.md) - Application identity 不只看
git_repository——Coolify 里可能存在同 repo/同名的重复 Application,或 API 返回project_uuid=null导致 Step 1 的name + project_uuidfilter 漏掉真实线上实例;写 env / deploy 前必须用 domain、已验证 UUID、status、deployment URL 等多锚点确认目标。详见 references/application-identity-and-env-duplicates.md
What ships with it
54 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- agents/openai.yaml 80 B
- assets/deploy.yml.template 4.4 KB
- assets/icon.png 986 B
- assets/icon.svg 735 B
- assets/preflight.sh 12 KB runs code
- commands/app.md 8.3 KB
- commands/application-crud.md 7.2 KB
- commands/application-env.md 6.5 KB
- commands/context.md 3.9 KB
- commands/conventions.md 4.6 KB
- commands/deploy-trigger.md 8.7 KB
- commands/domain.md 4.6 KB
- commands/prerequisites.md 5.8 KB
- commands/project.md 2.9 KB
- commands/server.md 3.8 KB
- commands/tranfu-naming.md 3.7 KB
- README.md 5.9 KB
- README.zh.md 5.5 KB
- references/application-ghcr-node-deploy-quirks.md 5.1 KB
- references/application-identity-and-env-duplicates.md 3.2 KB
- references/application-onboard-runtime-env-pitfalls.md 3.5 KB
- references/archived-coolify-deploy.md 2.5 KB
- references/coolify-api-fields.md 8.8 KB
- references/coolify-clear-deployments-and-redeploy.md 7.4 KB
- references/coolify-cli-1.6.2-onboard-quirks.md 4.6 KB
- references/coolify-compose-deploy-failure-triage.md 5.8 KB
- references/coolify-disk-capacity-and-prune.md 6.0 KB
- references/coolify-docker-inspection.md 8.5 KB
- references/coolify-env-redeploy.md 8.2 KB
- references/coolify-read-only-inventory.md 2.0 KB
- references/coolify-url-entrypoint-and-legacy-application.md 2.3 KB
- references/file-generation-rules.md 15 KB
- references/ghcr-pnpm-coolify-deploy-quirks.md 4.9 KB
- references/hermes-bearer-header-redaction.md 1.5 KB
- references/pnpm-native-dependency-policy.md 2.1 KB
- references/service-fqdn-trap.md 2.9 KB
- references/service-vs-application.md 3.6 KB
- references/session-2026-07-01-agentreach-image-ref-notes.md 3.1 KB
- references/session-2026-07-01-alphaos-app-0-8-notes.md 4.5 KB
- references/session-2026-07-01-alphaos-app-url-verification-notes.md 2.6 KB
- references/session-2026-07-01-markdown-kits-app-0-8-notes.md 2.0 KB
- references/session-2026-07-02-college-fit-app-auto-bootstrap-notes.md 2.8 KB
- references/session-2026-07-02-college-fit-app-data-bootstrap-notes.md 2.5 KB
- references/session-2026-07-02-college-fit-app-finished-but-unhealthy.md 3.0 KB
- references/session-2026-07-02-offerpilot-app-empty-project-onboard-notes.md 1.9 KB
- references/session-2026-07-02-offerpilot-app-onboard-notes.md 2.5 KB
- references/session-2026-07-02-offerpilot-legacy-service-null-project.md 2.1 KB
- references/session-2026-07-03-offerpilot-env-redaction-pitfall.md 1.7 KB
- references/session-2026-07-03-social-media-analytics-app-onboard-notes.md 4.0 KB
- references/session-2026-07-05-offerpilot-asr-websocket-client.md 2.2 KB
- references/session-2026-07-05-tranfu-agents-dev-branch-notes.md 2.4 KB
- references/tranfu-agents-volume-and-skills-dashboard-notes.md 3.1 KB
- references/urls-vs-docker-compose-domains.md 3.9 KB
- scenarios/reconcile-deployment.md 33 KB
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 356 lines · 390 tokens per session scan A cf5dcd62b6b8
tranfu-coolify-ops is a skill published in the GitHub repository tranfu-labs/tranfu-skills (2 stars, last pushed 2d ago), licensed MIT. It adds 390 tokens to every session and 12,308 once invoked, about $0.0019 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
azd-deployment
Deploy containerized frontend + backend applications to Azure Container Apps with remote builds, managed identity, and idempotent infrastructure.
openshell-cli
Guide agents through using the OpenShell CLI (openshell) for sandbox management, gateway registration, provider configuration and refresh, policy iteration, settings, service exposure, BYOC workflows, and attached-provider inference. Covers basic through advanced multi-step workflows. Trigger keywords - openshell…
langbot-deploy
Deploy and configure a LangBot instance — Docker / Docker Compose, Kubernetes, the config.yaml model, the Box sandbox runtime, the plugin runtime, and the global API key. Use when installing, deploying, upgrading, or configuring LangBot in production or self-hosted environments. Triggers on "deploy langbot", "langbot…
compute-env-setup
Set up a compute environment on a remote provider so Claude Science jobs can run there. Covers direct SSH/conda hosts, Slurm clusters, container-via-bridge runners, and managed-API providers (Modal, GCP, RunPod). Use when standing up a new provider, porting an env to a different backend, adding a tool that needs its…
azure-cloud-migrate
Assess and migrate cross-cloud workloads to Azure with reports and code conversion. Supports Lambda→Functions, Beanstalk/Heroku/App Engine→App Service, Fargate/Kubernetes/Cloud Run/Spring Boot→Container Apps. WHEN: migrate Lambda to Functions, AWS to Azure, migrate Beanstalk, migrate Heroku, migrate App Engine, Cloud…
atmos-helmfile
Helmfile orchestration: sync/apply/destroy/diff, Kubernetes deployments, varfile generation, EKS integration, source management.