From promaker
Re-home a Dokploy app from one project to another in managed-apps-infrastructure. Engineering-facing — collects app_name, from_project, to_project and an optional flag to decommission the source project if it ends up empty, then dispatches the move-app workflow that opens a Terraform PR with `moved {}` blocks for state re-parenting. Use when an engineer asks to move an app, re-home an app, change an app's project, or decommission an empty project.
How this skill is triggered — by the user, by Claude, or both
Slash command
/promaker:move-appThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Engineering-facing. Mirror of the operator's `move-site` skill but
Engineering-facing. Mirror of the operator's move-site skill but
direct, technical English, no language filtering. The companion
skills are onboard-app, fix-app, start-app, stop-app,
report-app-down.
"App to move:"
Validate ^[a-z][a-z0-9_]*$.
"Current project:"
Validate ^[a-z][a-z0-9_]*$.
"Target project (auto-created if missing):"
Validate, reject if equal to from_project.
"Decommission
<from_project>if it ends up empty after the move? [Y/n]:"
Default true.
"Auto-merge once
terraform planpasses? [Y/n]:"
Default true.
Brief the engineer once before dispatching:
The workflow will open a single infra PR that:
1. mv apps/<from>/<app>.tf → apps/<to>/<app>.tf
2. Bootstrap apps/<to>/ if missing (modules/project + apps_<to>)
3. Regenerate apps/<from>/outputs.tf and apps/<to>/outputs.tf
4. Append a `moved {}` block to moved.tf so terraform re-parents
state for module.apps_<from>.module.<app> → module.apps_<to>.module.<app>
— GitHub env / variables / secrets / reCAPTCHA key survive
because their resource keys don't depend on environment_id
5. The dokploy_application + domains DO replace because their
environment_id is ForceNew (different project = different env)
6. If delete_empty_project=true and from_project becomes empty,
remove apps/<from>/, the project_<from> module, the
apps_<from> module, and the outputs block — terraform apply
will then destroy the Dokploy project and its 3 environments.
Proceed? [y/N]:
Only on yes.
actions_run_trigger({
method: "run_workflow",
owner: "PromakerDev",
repo: "managed-apps-workflows",
workflow_id: "move-app.yml",
ref: "main",
inputs: {
app_name: "<app>",
from_project: "<from>",
to_project: "<to>",
delete_empty_project: "true" | "false",
auto_merge: "true" | "false"
}
})
actions_list (list_workflow_runs, resource_id="move-app.yml")
to find the run, then poll actions_get (get_workflow_run) every
10s. Pull the PR URL from get_job_logs (grep Opened PR:).
✓ move-app completed
app: <app_name>
from project: <from>
to project: <to> (<bootstrapped|existing>)
cleanup from? <yes|no>
infra PR: <infra_pr_url> (auto-merge on plan pass)
terraform apply will replace dokploy_application + domains; expect
~1-3 min downtime as the build re-runs in the new project. Use
fix-app afterwards if the new app comes up unhealthy.
✗ move-app failed at step "<step_name>"
Run: <html_url>
Common causes:
- apps/<from>/<app>.tf doesn't exist (wrong app_name?)
- apps/<to>/<app>.tf already exists (target taken)
- PAT can't write to managed-apps-infrastructure
If the script crashed mid-way, the infra repo might have orphan
files. Inspect and clean up manually before retrying.
~ move-app cancelled.
delete_empty_project=true AND no other apps live in
apps/<from>/. The skill does not enumerate apps to confirm —
the workflow does. Trust the workflow.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub promakerdev/promaker-plugin --plugin promaker