con un clic
release
One spell — handover, check, ship, watch, then comment + close the issue
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
One spell — handover, check, ship, watch, then comment + close the issue
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Multi-slide bilingual brand carousels — Claude writes the deck, kun renders Anthropic-styled slides at exact platform sizes, a human approves, channels receive
Draft, stage, and publish brand social posts — Claude drafts, /higgs renders, a human approves, Hermes relays
Convert a file or URL to Markdown via MarkItDown (PDF, Office, images, audio, web)
Full pipeline — idea to production (chains every stage)
Autonomous block QA — detect, adversarially verify, fix safe tiers, hand the residual to a human
Technical spec — data model, file plan, refined acceptance criteria
| name | release |
| description | One spell — handover, check, ship, watch, then comment + close the issue |
| when_to_use | Use when a feature block is code-complete on main and Abdout wants it shipped to the client in one move — the full local-to-production-and-verified chain, not a single stage like /check (tight loop), /ship (deploy only), /handover (QA only), or /watch (verify only). Triggers on: release <block>, send to client, one-spell handoff (handover→check→ship→watch→close issue), give away to client, ship it and tell the client. |
| argument-hint | <block> [--issue |
One spell to take a finished feature block from local-on-main to live-in-production-and-verified. Orchestrates /handover → /check → /ship → /watch, then auto-comments the production URL + verdict on the related GitHub issue.
This is the "send it to the client" verb. Four sharp tools, one invocation.
/release admission — full chain on the admission block/release admission --issue #42 — override the GitHub issue to notify/release admission --notify-slack #demos — also post the summary to a Slack channel/release admission --skip-handover — re-run after fixing handover findings/release admission --skip-check — re-run after fixing check findingsRefuse to proceed if any of these fail. Each check should print the offending state clearly.
Working tree clean
git status --short
If any output: stop with "Working tree has uncommitted changes. Commit, stash, or discard before /release."
On main, up-to-date
git rev-parse --abbrev-ref HEAD # must be 'main'
git fetch origin main
git rev-list --count HEAD..origin/main # must be 0 (not behind)
git rev-list --count origin/main..HEAD # must be 0 (not ahead)
If any check fails: stop with the specific reason (behind, ahead, or wrong branch). Suggest the fix.
Sentinel cache (shared session state)
Read .claude/session-state.json if it exists. Each gate command writes its own key (handover, check) on PASS. For each stage, if its sentinel is PASS and the timestamp is within the last 10 minutes, mark it SKIP. This makes re-runs idempotent after fixing one stage — and lets /ship and /check invoked alone earlier in the session contribute their results here.
Sentinel shape:
{
"handover": {
"scope": "block",
"block": "admission",
"status": "PASS",
"at": "2026-05-29T14:30:00Z"
},
"check": { "status": "PASS", "at": "2026-05-29T14:32:00Z" }
}
Explicit --skip-handover or --skip-check flags override the cache.
QA signoff (advisory — warn, do not block)
Resolve the block's QA signoff issue: read blocks.json[block].qa.issue, or search by label
qa-signoff + block:<block>. Then:
⚠️ QA signoff issue #N is still open — a human hasn't signed off. Proceeding anyway. and continue.qa-blocked → print ⚠️ Block is qa-blocked (#N) — autonomous QA couldn't reach CLEAN. Proceeding anyway.
and continue.QA signoff #N closed — clear to ship. and continue.No QA signoff issue — block was not run through /qa. and continue.This is advisory by design: /qa is the place that gates on quality; /release only surfaces the
signoff state so the human knows what they're shipping. Run /qa <block> first for the full gate.
/release needs to know which issue to comment on. Resolve in this order:
--issue #N flag — use directlyCloses #N or Refs #N in the most recent commit on main (git log -1 --pretty=%B)type/feat label whose title fuzzy-matches the <block> argument:
gh issue list --repo <repo> --state open --label type/feat --search "<block>"
Capture $ISSUE_NUMBER for Phase 6.
Delegate to .claude/skills/handover/SKILL.md in block mode:
handover.status == PASS and block matches and at is within 10 min/handover <block> against localhost:3000 (default) or --env staging if passed/handover writes its own sentinel on PASSBLOCKED: stop, surface findings with file:line referencesREADY FOR DEMO: continueDelegate to .claude/skills/check/SKILL.md:
check.status == PASS and at is within 10 min/check (inherits the auto-fix loop, max 5 attempts)/check writes its own sentinel on PASSBLOCKED: stop, surface the failing gateREADY TO SHIP: continueDelegate to .claude/skills/ship/SKILL.md:
/ship (inherits the auto-fix retry loop, max 5)Delegate to .claude/skills/watch/SKILL.md:
/watch <production-url> with the URL from Stage 3ISSUES FOUND (console errors, network failures, smoke test fail): stop, do not auto-revert — surface for human judgmentHEALTHY: continue to notificationPost a comment on the resolved issue with this exact shape:
Released to production.
**URL**: <production-url>
**Handover**: PASS (5/5 passes clean on N routes)
**Check**: PASS (typecheck + build + visual)
**Ship**: Deployed in <duration>, commit <sha>
**Watch**: HEALTHY (no console errors, smoke test passed)
**Released by**: <git config user.name>
**Released at**: <ISO timestamp>
gh issue comment $ISSUE_NUMBER --repo <repo> --body "$(cat <<EOF
... above ...
EOF
)"
Then close the issue if it is still open:
gh issue close $ISSUE_NUMBER --repo <repo>
If --notify-slack <channel> was passed:
slack MCP (mcp__slack__slack_post_message) to post the same summary to the channelPrint one report at the end. No per-stage chatter beyond what each delegated command already printed.
## Release — admission — COMPLETE
URL: https://kingfahad.databayt.org/admission
Issue: #42 (commented, closed)
Slack: #demos (posted) | (skipped)
Stages:
- Handover PASS (skipped from cache | clean on 12 routes)
- Check PASS (skipped from cache | typecheck + build + visual)
- Ship PASS (deployed in 1m 42s, commit abc1234)
- Watch PASS (healthy in production)
Total elapsed: <duration>
| Stage | Failure | What /release does |
|---|---|---|
| Pre-flight | Dirty tree | Stop; instruct user to commit/stash |
| Pre-flight | Wrong branch / behind / ahead | Stop; print the rev-list output |
| Pre-flight | QA signoff issue open/blocked | Warn and proceed — advisory only; run /qa <block> for the gate |
| Resolve issue | None found | Stop; ask the user for --issue #N |
| Handover | Translation FAIL / RTL FAIL | Stop; suggest /handover <block> --fix |
| Handover | Flow FAIL / Responsive FAIL | Stop; surface findings — human judgment |
| Check | Build error after auto-fix | Stop; print remaining errors |
| Ship | Deploy error after auto-fix | Stop; print the full error trail |
| Watch | Issues found | Stop; do not auto-revert — alert the user |
| Notify | gh CLI fails | Print the comment body so the user can paste it manually |
--notify-slack).claude/session-state.json (other gates' sentinels untouched)/check for the tight loop instead/ship directly/handover alone/watch + /incident