| name | add-deploy |
| description | [ADD v0.11.0] Environment-aware commit, push, and deploy workflow |
| argument-hint | [--env local|dev|staging|production] [--skip-verify] |
ADD Deploy Skill v0.11.0
Execute environment-aware deployment: commit changes, push to remote, trigger CI/CD, and verify successful deployment.
Overview
The Deploy skill orchestrates the final step of the development workflow:
- Commit — Stage and commit code changes with traceability
- Push — Push to remote repository and branch
- CI/CD — Trigger or monitor CI pipeline
- Verify — Confirm deployment success and run smoke tests
The skill is environment-aware: deployment to production is gated with additional safety checks and requires human approval.
Deployment flows:
- Local: Commit only (no push)
- Dev: Commit → Push → Optional CI
- Staging: Commit → Push → CI required → Verify
- Production: Commit → Push → CI required → Gated approval → Verify smoke tests
Pre-Flight Checks
-
Verify code quality
- Run /add-verify --level deploy (unless --skip-verify)
- Halt if quality gates fail
- Ensure all tests passing
-
Load configuration
- Read .add/config.json
- Extract deployment settings:
- ci.enabled (true/false)
- ci.provider (github, gitlab, circleci, etc.)
- environments: dev, staging, production configs
- deployment.strategy (direct, blue-green, canary)
- Load credential/auth settings
-
Verify git repository
- Confirm working directory is a git repo
- Check git is configured (user.name, user.email)
- Verify branch protection rules won't block merge
-
Determine environment
- Use --env flag or prompt user
- Default: staging (safe default)
- Validate environment exists in config
-
Check for uncommitted changes
- Run
git status
- Verify all relevant changes are staged
- Halt if unintended changes exist
- Ask user to review staged changes
-
Verify feature branch
- Confirm on feature branch (not main/master)
- For production, branch should be up-to-date with main
- For dev, any branch acceptable
-
Check for session handoff
- Read
.add/handoff.md if it exists
- Note any in-progress work or decisions relevant to this operation
- If handoff mentions blockers for this skill's scope, warn before proceeding
Execution Steps
Step 1: Pre-Deployment Verification
Unless --skip-verify:
npm test
npm run lint
npm run build
python -m pytest
python -m flake8
Capture results:
- Exit code (0 = success)
- Test count and results
- Coverage percentage
- Build artifacts created
If any verification fails:
- Report which gate failed
- Do NOT proceed with deployment
- Ask user to fix issues and re-run
Step 1.5: Pre-commit secrets gate
Before composing the commit message, run the shared secrets gate per ~/.codex/add/references/secrets-gate.md — the same gate as /add-verify Gate 4.6. The executable scanner (~/.codex/add/lib/scan-secrets.sh against the staged diff) is the single point of truth — do NOT re-implement the catalog inline. Scanner invocation, exit codes, finding format, --allow-secret confirm-phrase matching rules, .secretsignore handling, and edge cases are all in the reference.
Deploy-specific behavior:
-
Blocking vs advisory by maturity: at POC maturity the gate is advisory — report findings and continue only with explicit user acknowledgment. At Alpha and above, any unsuppressed finding aborts the commit: no commit is created, and staged changes are preserved so the user can fix and retry.
-
Overrides: interactive override via /add-deploy --allow-secret (exact confirm phrase, matched literally per the reference), or the automation-friendly commit-message trailer [ADD-SECRET-OVERRIDE: {SEC-NNN} (reason)] — the scanner accepts the trailer when --commit-msg-file points at the message and the trailer enumerates the SEC codes being overridden.
-
On a successful override, before proceeding to Step 2, append to .add/observations.md:
{YYYY-MM-DD HH:MM} | deploy | secrets-gate override: {file}:{line} {PATTERN_NAME} | reason: {user's stated reason}
and append the override record to .add/redaction-log.json under { "artifact": "deploy-gate-override", ... } if the log exists.
-
.secretsignore-listed files staged anyway (SEC-998 findings) are treated the same as catalog matches — abort unless overridden; the file should not be committed at all.
Step 2: Prepare Commit Message
Compose a detailed commit message following conventions:
- First line:
{type}: {short description under 50 chars} — types are feat, fix, refactor, test, docs, perf, ci, chore.
- Body: a longer description explaining the change.
- Then structured sections: Acceptance Criteria (per-AC ✓ status), Test Coverage (test count + coverage %), Quality Gates (lint / types / tests / spec compliance).
- Footer:
Closes: #{issue-number} if applicable.
Full format specification and a worked example: ~/.codex/add/templates/commit-message.md.
Step 3: Stage and Commit Changes
Stage relevant files (not sensitive files):
git add src/
git add tests/
git add docs/
git status
git diff --cached
Ask user to verify staged changes:
Staged files:
- src/form.ts
- src/api/submit.ts
- tests/form.test.ts
- tests/api.test.ts
- docs/performance.md
Proceed with commit? [yes/no]
Wait for explicit confirmation before committing.
Create commit:
git commit -m "$(cat <<'EOF'
feat: Add form submission with email validation
[full message as prepared in Step 2]
EOF
)"
Verify commit:
git log -1 --oneline
Step 4: Push to Remote
For Dev/Staging Environments:
Determine target branch:
- Default: same name as feature branch
- Or specified via config
Push to remote:
git push origin {feature-branch}
git push -u origin {feature-branch}
Verify push succeeded:
- Check exit code (0 = success)
- Confirm remote shows new commit
For Production Environment:
Production requires PR/merge request workflow:
-
Create PR/MR with:
- Title from commit message
- Description with AC list
- Link to spec and plan
- Risk assessment
-
Request reviews:
- At least 2 approvals required (per config)
- Assign to code owners
- Wait for approval
-
Merge to main:
git checkout main
git pull origin main
git merge {feature-branch}
-
Tag release:
git tag -a v{version} -m "Release {feature-name} v{version}"
git push origin v{version}
Step 5: Trigger or Monitor CI/CD
CI/CD Pipeline:
Check if CI is enabled in config (ci.enabled):
If enabled:
-
Trigger CI (if not automatic)
- GitHub: automatic on push/PR
- GitLab: automatic on push/MR
- CircleCI: may require manual trigger
- Jenkins: may require webhook/API call
-
Monitor pipeline progress
- Fetch build status from CI provider
- Poll until complete (timeout: 30min)
- Stream logs if available
-
Check gate results
CI Pipeline Status: 🟡 In Progress
Jobs:
- Lint: ✓ PASSED (2 min)
- Type Check: ✓ PASSED (3 min)
- Unit Tests: 🟡 IN PROGRESS (4/32 tests)
- Integration Tests: ⊘ PENDING
- Deploy to Staging: ⊘ PENDING
Elapsed: 5 minutes
ETA: 8 minutes
-
Wait for completion
- All jobs must pass
- No failures allowed
- Report if any job fails
If CI disabled:
- Document that CI is skipped
- Warn user: "CI verification skipped - consider enabling"
- Continue to deployment
Step 6: Production Approval Gate — Confirm-Phrase (Production Only)
This gate is a runtime check, not a behavioral rule. The skill MUST NOT proceed to any production deployment action without capturing the exact confirmation phrase below. This applies regardless of --promote, away mode, or any other autonomy granting — production is the one boundary that remains human-gated at all maturities.
Also required: .add/config.json → environments.production.autoPromote must be false. If it is true, halt with: "autoPromote: true on production is not permitted — ADD refuses to proceed. Edit .add/config.json to set autoPromote: false."
6.1 Present deployment plan
⚠️ PRODUCTION DEPLOYMENT
Feature: Form submission with email validation
Commit: abc1234
Branch: feature/form-submission
Target: main
Changes:
- 3 files modified
- 450 lines added, 20 lines removed
Testing:
- ✓ All 32 tests passing
- ✓ 87% code coverage
- ✓ Lint and type checks passing
Acceptance Criteria Verified:
- AC-001: ✓ User can submit valid form
- AC-002: ✓ Validation errors shown
- AC-003: ✓ Network errors handled
Risk Assessment:
- Integration Points: 1 (Email service)
- Database Changes: None
- Breaking Changes: None
- Rollback Plan: Revert commit + redeploy previous tag
6.2 Require the confirm-phrase
Ask the user:
"To proceed with production deployment, type DEPLOY TO PRODUCTION (all caps, exactly) and press enter. Any other response — including 'yes', 'y', 'ok', or silence — will cancel."
Matching rules — implemented literally in the skill, not left to agent judgment:
- The response MUST equal the string
DEPLOY TO PRODUCTION (no quotes, no leading/trailing whitespace other than a trailing newline).
- Case-sensitive match.
deploy to production does NOT pass. Deploy to Production does NOT pass.
- The match is on the ENTIRE user response.
DEPLOY TO PRODUCTION please does NOT pass.
- The match must be the IMMEDIATELY NEXT user message. If the user sends any intervening message (clarification, question), the gate resets and must be re-asked.
If the match succeeds: proceed to Step 7.
If the match fails for any reason: halt and output:
Production deployment CANCELLED. No changes made.
Re-run /add-deploy --env production when ready to deploy.
The confirm-phrase gate exists to prevent automation, rushed approvals,
and ambiguous consent from deploying to production.
Why this gate exists: ADD's autonomous-execution model is powerful enough that "please approve" prompts during away mode get fuzzy. Requiring a specific literal string means no agent, no script, no accidental enter-key can trigger a production deploy without the human actively typing the phrase. This is a technical gate, not a behavioral rule.
6.3 Record and proceed
- Timestamp the approval
- Record in
.add/deploy-log.md with commit hash, branch, and confirm-phrase timestamp
- Include in the commit message body:
Approved via DEPLOY TO PRODUCTION phrase at {UTC timestamp}
- Continue to Step 7
6.4 Timeout and boundary behavior
- If the user does not respond within 15 minutes: halt and cancel (same as a non-matching response)
- During away mode: the gate still requires the phrase. If away mode is active and the user is unreachable, the production deploy MUST wait for the user's return. Log to
.add/away-log.md and move to the next task.
Step 7: Execute Deployment
For Dev Environment:
npm run deploy:dev
./scripts/deploy-dev.sh
For Staging Environment:
npm run deploy:staging
./scripts/deploy-staging.sh
For Production Environment:
npm run deploy:production
./scripts/deploy-production.sh
Monitor deployment:
- Watch deployment logs
- Check for errors or failures
- Verify services are coming online
- Confirm no data loss
Step 8: Verify Deployment Success
After deployment completes:
-
Run smoke tests
npm run test:smoke -- --environment production
Smoke tests check:
- API endpoints responding
- Database connectivity
- Cache working
- Email service working
- No obvious breakage
-
Verify application health
curl https://api.example.com/health
-
Check user-facing changes
- Navigate to deployed application
- Test happy path for new feature
- Verify no visual regressions
- Check mobile responsiveness
-
Monitor error logs
- Check application logs for errors
- Check infrastructure logs
- Alert on unexpected errors
-
Verify metrics
- Response time within targets
- Error rate normal
- Resource usage normal
- User activity patterns normal
Success Criteria:
- All smoke tests pass
- No critical errors in logs
- Metrics within normal ranges
- Feature working as designed
Failure Response:
- If any smoke test fails, escalate
- For production, implement rollback plan
- Document the failure
- Root cause analysis
Output Format
Upon successful deployment, output a "Deployment Complete" report covering: deployment summary (environment, feature, commit, branch, timestamp, duration), code changes, pre-deploy quality gates, CI/CD job results, post-deployment verification (smoke tests, health check, error rate, response time), deployment details (strategy + rollback plan), deployed files, notifications, and next steps. Render per the sample report in ~/.codex/add/templates/deploy-reference.md.
Error Handling
Quality gates fail (--skip-verify not set)
- Report which gates fail
- Do NOT proceed with deployment
- Ask user to fix issues
- Run /add-verify to see detailed failures
Uncommitted changes detected
- List uncommitted changes
- Ask user: commit or discard?
- Halt until resolved
Branch protection rules block push
- Report which rule is blocking
- For production, this is expected (PR required)
- Guide user through PR process
CI pipeline fails
- Report which job failed
- Show job logs
- Do NOT proceed with deployment
- Ask user to fix and retry
Smoke tests fail after deployment
- Immediate escalation for production
- For prod, recommend rollback
- For staging, document and investigate
- Run root cause analysis
Production deployment approval timeout
- Halt after 15 minutes of no response
- Preserve staged changes for retry
- Notify user to re-run when ready
Deployment script fails
- Report error from deployment command
- Show relevant logs
- Suggest manual investigation
- For production, initiate rollback procedure
Environment Promotion Ladder
When deploying to a multi-environment project (Tier 2+), the deploy skill supports automatic promotion through environments:
Promotion Mode (--promote)
When invoked with --promote (or during away mode), the skill climbs the promotion ladder:
- Deploy to current environment → run
verifyCommand for that environment
- If verification passes AND next environment has
autoPromote: true → deploy to next environment
- Repeat until ladder ends, verification fails, or
autoPromote: false is reached
- If verification fails at any level → rollback that environment to last known good, log failure, stop
/add-deploy --promote --env dev
→ deploys to dev
→ runs dev verifyCommand (integration tests)
→ PASS → auto-promotes to staging
→ runs staging verifyCommand (e2e + perf)
→ PASS → stops (production requires human approval)
→ logs: "Verified through staging. Production queued for human approval."
Rollback on Failure
If verification fails after deploying to an environment:
- Read
rollbackStrategy from config for that environment:
revert-commit: git revert {commit} && git push → redeploy
redeploy-previous-tag: find last stable tag → checkout → redeploy
- Run smoke test against the rolled-back environment to confirm it's healthy
- Log the failure with: what was deployed, what failed, what was rolled back
- Stop the ladder — do not promote further
Away Mode Behavior
During away mode, the deploy skill automatically uses --promote behavior:
- Climb the ladder through all
autoPromote: true environments
- Stop before any
autoPromote: false environment (always production)
- On failure: rollback, log, move to next task in the away plan
Integration with Other Skills
- Called after /add-tdd-cycle and /add-verify succeed
- Triggers /add-verify --level smoke after deployment
- Supports
--promote for automatic environment ladder climbing
- Final step in development workflow
- Completes the cycle: Spec → Plan → Code → Deploy
Configuration in .add/config.json
Deploy reads: git.* (defaultBranch, requirePR, requireReviews), ci.* (enabled, provider, timeout), deployment.* (strategy, rollbackEnabled, smokeTestScript), and per-environment environments.{env} settings (branch, requireApproval, requireReviews, targetHost). Full annotated example: ~/.codex/add/templates/deploy-reference.md.
Deployment Checklist
Before deploying to production, walk the 15-item pre-production checklist in ~/.codex/add/templates/deploy-reference.md (ACs implemented, tests + coverage, reviews, spec compliance, performance, migrations, docs, release notes, rollback plan, notifications, monitoring, smoke tests).
Rollback Procedure
If production deployment fails: revert the problematic commit (or check out the previous stable tag), push, redeploy the previous version, then verify health with smoke tests against production. Commands: ~/.codex/add/templates/deploy-reference.md.
Document: what broke, why it broke, how to prevent it in future, and the incident timeline.
Post-Deployment Monitoring
After production deployment:
- Monitor error rates for 1 hour
- Check user feedback channels
- Verify feature adoption
- Monitor performance metrics
- Be ready to rollback if issues arise
Epilogue
End-of-skill epilogue: follow ~/.codex/add/references/skill-epilogue.md (observation + learning checkpoint + progress tracking).
Deploy specifics: progress-task phases are pre-deploy checks → prepare → deploy → smoke tests; the observation line uses skill name deploy; the learning checkpoint uses the "After Deployment" trigger in ~/.codex/add/references/learning-reference.md.