From tl
Use when code is ready to ship and you want a structured deployment with readiness checks and rollback criteria. Supports direct, canary, blue-green, and rolling strategies. Keywords: deploy, ship, release, rollout, canary, blue-green, rollback, production.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tl:deploy <service or target environment><service or target environment>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are running the **Deploy** workflow -- a structured deployment process with readiness gating, strategy selection, execution, monitoring, and rollback criteria. Target: **$ARGUMENTS**
You are running the Deploy workflow -- a structured deployment process with readiness gating, strategy selection, execution, monitoring, and rollback criteria. Target: $ARGUMENTS
Deploy works in 5 phases. The readiness gate (Phase 0) must pass before any deployment begins.
Readiness gate (tests, git, open work)
-> Strategy selection (direct / canary / blue-green / rolling)
-> Execution (CI/CD tooling or guided manual steps)
-> Monitoring (health checks, logs, endpoints)
-> Rollback criteria (automated triggers + manual guide)
This phase is a hard gate. If any check fails, stop here and report what must be fixed.
If $ARGUMENTS is empty, ask the user: "What are you deploying, and to which environment (staging, production, etc.)?"
If provided, confirm the target: service name and environment (e.g., "api-gateway to production").
git status --short
git log --oneline -3
main or release/*).Detect the test runner from project config:
# Check for common test configs
ls package.json Makefile pytest.ini go.mod Cargo.toml 2>/dev/null
npm test or npm run testpytest or python -m pytestgo test ./...cargo testmake testIf a test command exists, report the last test run result from git log or CI artifacts if available. If tests cannot be verified, warn the user and ask for confirmation before proceeding.
Check your project's task tracker for open high-priority (P0/P1) work items. If any are open and their scope overlaps with the files changed since last deploy (from git diff --name-only HEAD~1), warn the user: "Open high-priority work touches files in this deploy. Confirm you want to continue."
Report:
## Readiness Gate: [PASS | FAIL]
- Git: [clean on main | FAIL: dirty files listed]
- Tests: [verified passing | unverified — user confirmed | FAIL: X failures]
- Open high-priority work: [none affecting deploy | WARNING: N items]
[If FAIL]: Fix the above before deploying. Re-run /deploy when ready.
[If PASS]: Proceeding to strategy selection.
Scan the project root for deployment configuration:
ls .github/workflows/ Dockerfile docker-compose.yml k8s/ helm/ fly.toml railway.json Procfile .heroku/ 2>/dev/null
Build a tooling inventory:
| Signal | Tooling Detected |
|---|---|
.github/workflows/*.yml with deploy or release | GitHub Actions |
Dockerfile + docker-compose.yml | Docker Compose |
k8s/ or helm/ directory | Kubernetes / Helm |
fly.toml | Fly.io |
railway.json | Railway |
Procfile | Heroku |
Makefile with deploy target | Make-based deploy |
Read the detected config files to understand what the deploy pipeline does.
Rate the deployment risk based on:
Ask the user if the risk level is unclear.
Based on tooling and risk:
| Risk | Recommended Strategy | Why |
|---|---|---|
| Low | Direct | Fast, simple. Roll forward if issues appear. |
| Medium | Canary | Expose a small slice of traffic first. Monitor, then promote. |
| High | Blue-Green | Two identical environments; instant switch back on failure. |
| Any with k8s | Rolling | Kubernetes handles this natively; zero-downtime by default. |
Present the recommendation with rationale. Show the alternative strategies briefly.
Confirm with the user before proceeding:
"Recommended strategy: [strategy]. Reason: [1 sentence]. Proceed with this strategy, or choose a different one? (direct / canary / blue-green / rolling)"
Wait for confirmation. Proceed with the confirmed strategy.
Execute the deployment using the confirmed strategy and detected tooling. This phase is project-specific -- adapt to what you found in Phase 1.
The simplest path: deploy the current build directly to the target environment.
GitHub Actions (push-to-deploy):
git push origin main
# Then monitor the workflow run
gh run list --limit 1
gh run watch <run-id>
Docker Compose:
docker build -t <image>:<tag> .
docker push <registry>/<image>:<tag>
# On the target host:
docker compose pull && docker compose up -d
Fly.io:
fly deploy
Heroku:
git push heroku main
Make:
make deploy
Manual (no tooling detected): Guide the user through their specific deploy steps. Ask: "What command do you use to deploy?" Then execute it.
Route a small slice of traffic to the new version before full rollout.
v2-canary)If GitHub Actions or CI handles canary, trigger the canary workflow and monitor:
gh workflow run canary-deploy.yml
gh run watch <run-id>
Two identical environments: blue (current stable) and green (new release).
If using Kubernetes:
kubectl apply -f k8s/green/
kubectl rollout status deployment/<name>-green
# After smoke tests pass:
kubectl patch service/<name> -p '{"spec":{"selector":{"slot":"green"}}}'
Replace instances one by one. Kubernetes handles this natively.
kubectl set image deployment/<name> <container>=<image>:<tag>
kubectl rollout status deployment/<name>
Monitor: kubectl get pods -w to watch instance replacement.
After executing the deploy command, confirm:
## Execution: [IN PROGRESS | COMPLETE | FAILED]
- Strategy: [direct | canary | blue-green | rolling]
- Tooling: [GitHub Actions | Docker | k8s | Make | manual]
- Deploy command run: [yes | no]
- Build/image: [tag or commit]
- [If CI]: Workflow URL or run ID for monitoring
Post-deployment health verification. Duration varies by strategy.
| Strategy | Minimum Wait | What to Watch |
|---|---|---|
| Direct | 5 minutes | Error rate, application logs |
| Canary | 15-30 minutes | Canary error rate vs. baseline |
| Blue-Green | 15 minutes after switch | Error rate on green |
| Rolling | Until all instances replaced | kubectl rollout status |
If the project exposes HTTP endpoints, check them:
# Basic health endpoint
curl -sf https://<host>/health && echo "OK" || echo "FAIL"
# Or application root
curl -sf https://<host>/ -o /dev/null -w "%{http_code}"
If the URL is not known, ask the user: "What URL should I check to confirm the service is up?"
Scan recent logs for error signals:
Docker:
docker logs <container> --tail=50 --since=5m
Kubernetes:
kubectl logs deployment/<name> --tail=50 --since=5m
Fly.io:
fly logs --app <app-name>
Local/manual: Ask the user where logs live and what error patterns to look for.
Look for:
Report after the monitoring window:
## Monitoring: [HEALTHY | DEGRADED | FAILED]
Monitoring window: [N minutes]
- Endpoint check: [pass (HTTP 200) | fail (HTTP NNN) | skipped]
- Log signals: [clean | WARNING: N errors | FAIL: error pattern found]
- Error rate: [baseline | elevated — see rollback criteria]
[If HEALTHY]: Deployment successful. Proceed to close out (see Phase 4).
[If DEGRADED or FAILED]: Rollback criteria triggered — see Phase 4.
Define what triggers rollback and how to execute it.
Automatic triggers (execute rollback immediately, do not wait for manual review):
kubectl rollout status reports ErrImagePull or CrashLoopBackOffManual triggers (report to user, ask for decision):
Execute the appropriate rollback based on strategy:
Direct / Git push:
git revert HEAD --no-edit
git push origin main
# Or: redeploy the previous tag
git checkout <previous-tag>
# Then re-run the deploy command
Kubernetes rolling:
kubectl rollout undo deployment/<name>
kubectl rollout status deployment/<name>
Blue-Green:
# Switch load balancer back to blue
kubectl patch service/<name> -p '{"spec":{"selector":{"slot":"blue"}}}'
# Confirm traffic is back on blue
Canary:
# Route 0% traffic to canary
# (tooling-specific — guide the user through their load balancer or feature flag config)
Docker Compose (redeploy previous):
docker compose pull <previous-tag> && docker compose up -d
After rollback:
If no rollback was needed:
## Deploy Complete
- Target: [service / environment]
- Strategy: [direct | canary | blue-green | rolling]
- Version: [git tag, commit hash, or image tag]
- Monitoring window: [N minutes, all checks passed]
- Rolled back: no
Next steps:
- Tag the release if not already tagged: `git tag v<version> && git push origin v<version>`
- Close any related tasks in your task tracker
- Announce to team if applicable
After the close-out block, emit a pipe-format summary so downstream skills (/status, /retro) can consume deployment outcomes:
## Deployment outcomes
**Source**: /deploy
**Input**: [service / environment from $ARGUMENTS]
**Pipeline**: (none — working from direct input)
### Items (5)
1. **Deployment strategy** — [direct | canary | blue-green | rolling]
- tooling: [GitHub Actions | Docker | k8s | Make | manual]
- target: [service / environment]
2. **Version deployed** — [git tag, commit hash, or image tag]
- branch: [branch name]
- commit: [short SHA]
3. **Readiness gate** — [PASS | FAIL]
- git: [clean on main | dirty — describe]
- tests: [verified passing | unverified | failed]
- open high-priority work: [none | N items affecting deploy]
4. **Health check result** — [HEALTHY | DEGRADED | FAILED]
- endpoint: [pass HTTP 200 | fail HTTP NNN | skipped]
- logs: [clean | N errors | error pattern found]
- monitoring window: [N minutes]
5. **Rollback status** — [not triggered | triggered — reason]
- stable version: [tag or commit if rolled back | n/a]
- follow-up task: [task ID or "none"]
### Summary
[One paragraph: what was deployed, which strategy was used, whether health checks passed, and whether a rollback occurred.]
rules/memory-layout.md, checkpoint at phase boundaries to .claude/tackline/memory/scratch/deploy-checkpoint.md./test-strategy — verify tests pass before starting Phase 0/tracer — implement the feature end-to-end before deploying/premortem — identify deployment failure modes before executing Phase 2/review — code review before shipping/status — check current backlog and session state before deployingnpx claudepluginhub tyevans/tackline --plugin tacklineProvides deployment plans for blue-green, canary releases, progressive rollouts, automated rollback, feature flag coordination, and zero-downtime migrations. For high-risk changes and rollouts.
Provides rollback procedures, risk assessment, pre/post-deployment validation checklists, and contingency planning for safe deployments.
Blue-green, canary, rolling deployments, traffic shifting, and safe release strategies.