Phase 4 of /wazzap — write a concrete execution plan and offer handoff to an available executor (inline, executing-plans, GSD, BMAD, or close as decided). Use when the user invokes /wazzap:go or 'let's go'.
Phase 4 of 4. Mode: plan one-shot, then offer execution handoff. Turn the chosen approach into a concrete plan that any executor (you, an agent, a teammate, future-you) can pick up. Then ask how it should be executed.
Goal
Produce go.md — a complete, executor-agnostic plan — and update the manifest. Optionally hand off to an available execution path. Never force inline execution.
Preconditions
Read parent SKILL.md.
Resolve active decision; read up.md, real.md, approaches.md.
Soft-gate check: if no chosen_approach in manifest, warn ("No approach chosen yet. :go typically follows :approaches. Continue with the user's instruction anyway?"). Allow override.
Steps
Read context. Pull the chosen approach from approaches.md and the success criteria from real.md.
Draft the plan as vertical slices, not flat steps. Each slice is a self-contained deliverable that:
Cuts top-to-bottom — exercises every layer the slice touches (data → logic → interface; or for non-software decisions: stakeholder → action → feedback). Never "all schema then all API then all UI then integrate."
Has a user-observable outcome — something you (or a stakeholder) can see, measure, or learn from when the slice lands.
Is shippable / verifiable / learnable independently — if you stopped after this slice, the work-to-date still has integrity and produced learning.
Aim for 2–5 slices. 1 slice = not actually sliced. 8+ = slices too small or padded.
Each slice has:
A stable handle — S1, S2, S3... (used as the ticket key during handoff).
A name — short and outcome-shaped ("Auth lands on staging", not "Build login form").
A user-observable outcome — what's true after this slice that wasn't before.
Serves success criteria — which criteria from real.md (by name or quoted snippet) this slice moves the needle on. Every slice must trace to ≥1 success criterion. If it can't, ask why it's in the plan.
Estimated cycle — hours / days / weeks in plain language.
Steps inside the slice — verbs + acceptance checks + owner + dependencies, numbered S1.1, S1.2, etc.
Slice deliverable — the thing you can demo / point at / learn from when the slice is done.
For non-software decisions (career, relationship, business strategy): a "slice" is the smallest end-to-end thing you can do this week to learn something real. Same principle, different vocabulary.
Write the rest of the plan doc:
Recovery move — if this goes wrong mid-execution, what's the fallback?
Success criteria — copied from real.md for traceability.
Live open questions — only the ones that DON'T block step 1 from starting (block-the-start questions belong back in :real).
Out of scope — what this plan deliberately does not handle (forward links to follow-up wazzaps, tickets, etc).
Show the plan to the user. Ask: "Plan looks good? Edit, or ready to execute?". Apply edits.
Detect available execution paths. Check what's available in the current session:
Inline — agent executes step-by-step in this same chat. Always available.
superpowers:executing-plans — if the skill is listed in available_skills. Best for multi-step coding work with review checkpoints.
GSD — if .planning/gsd/ exists in the repo, or skills like gsd-executor are available. Best for phased engineering work.
BMAD — if .claude/skills/bmad-* exist or bmad-dev-story is in available_skills. Best for spec-driven development cycles.
External / manual — user will execute outside this session (write a ticket, talk to someone, etc.). Always available.
Close as decided — no execution will happen here; just close the manifest.
Write go.md. (See template.)
Offer handoff — show only paths that are actually available:
Plan written: <N> slices.
How do you want to execute?
1. Inline — I'll start S1 step-by-step and check in after each acceptance check.
2. superpowers:executing-plans — hand the plan (or a single slice) to that skill in a fresh session.
3. GSD — kick off /gsd:plan-phase per slice (1 slice = 1 phase).
4. External — you'll handle execution; I can draft GH/Linear issues per slice if you want.
5. Close as decided — record the plan but don't execute.
Skip lines for paths that aren't available. If user picks External, offer to draft 1 issue body per slice (title + body lifted from the slice section + back-link to go.md).
In all cases: current_phase: go, append go to completed_phases, bump updated_at.
Execute or hand off per user's choice. If inline: start step 1 and check in after each step's acceptance check.
go.md template
# Plan (Phase 4)
**Slug:** `<slug>`
**Drafted:** <ISO timestamp>
## Chosen approach
**<option name>** (from `approaches.md` — Option <N>)
> <one-line pitch from approaches.md>
## Plan — vertical slices
The plan is organized into shippable slices. Each slice cuts top-to-bottom and produces an observable outcome. Steps live inside slices, never outside them.
### S1 — <slice name (outcome-shaped, e.g. "Auth lands on staging")>
**User-observable outcome:** <what's true after this slice that wasn't before>
**Serves success criteria** (from `real.md`): <criterion 1>, <criterion 3>
**Estimated cycle:** <hours / days / weeks>
| # | Step | Owner | Deps | Acceptance check |
|-------|----------------|-------|------|--------------------------|
| S1.1 | <verb + obj> | self | — | <how you know it's done> |
| S1.2 | ... | agent | S1.1 | ... |
**Slice deliverable:** <what you can demo / measure / show after S1 done>
### S2 — <slice name>
**User-observable outcome:** ...
**Serves success criteria:** ...
**Estimated cycle:** ...
| # | Step | Owner | Deps | Acceptance check |
|-------|------|-------|-----------|------------------|
| S2.1 | ... | ... | S1 | ... |
| S2.2 | ... | ... | S2.1 | ... |
**Slice deliverable:** ...
### S3 — ...
[repeat shape for each slice; 2–5 slices total]
## Why these slices in this order
<2–4 sentences. Why is S1 first? What does shipping S1 alone teach you / prove / unlock for S2? If S3 is risky, why is it last?>
## Recovery move
**If this goes sideways at step <N>:** <fallback action — undo, escalate, pause, switch to alternate option from `approaches.md`>
## Success criteria
(carried from `real.md`)
- <criterion 1>
- <criterion 2>
## Live open questions
These don't block step 1 — flag if any escalate to blockers:
- <question, plus what would resolve it>
## Out of scope
- <thing this plan does NOT do>
- <forward link to a future wazzap or ticket if applicable>
## Issue / ticket mapping
When filing tickets (GitHub Issues, Linear, Jira, etc.) — **one slice = one issue.** Never split a slice across multiple issues; never bundle multiple slices into one issue. The slice handle is the ticket key.
| Slice | Issue title | Tracking link |
|-------|-------------|---------------|
| S1 | <name> | <#123 / URL — fill when filed> |
| S2 | <name> | — |
| S3 | <name> | — |
Each issue body should be the slice's section copied from this doc, plus a back-link to `<wazzap-folder>/go.md`. That's the audit trail: anyone reading the issue knows which decision it came from.
## Execution handoff
**Path chosen:** <inline | superpowers:executing-plans | GSD | BMAD | external | close-as-decided>
**Started:** <ISO timestamp, or "—" if close-as-decided>
**Notes:**
<e.g. "Handed off to executing-plans in fresh session 2026-04-28 16:00", or "Closed as decided — will execute when bandwidth allows", or "External: filed S1 as GH#123, S2 as GH#124">
Revisits (re-running :go later)
Common reason: the plan didn't survive contact with reality and needs a redo. Append, don't overwrite:
---
## Revisited <ISO timestamp>
**Trigger:** <what made the original plan stop working>
### Plan (this round)
[new table]
### What changed since last round
- ...
### Execution handoff (this round)
...
Manifest: append to revisits[], keep current_phase: go, optionally update status.
Done state — closing out
When execution genuinely completes (not when the plan is written — when the work is done):
Update manifest: status: done, fill notes with the outcome (1–3 sentences).
Optionally fill linked_commits, linked_prs, linked_pm_state.
If user explicitly walked away mid-execution: status: abandoned, set status_reason (required).
If the user invokes /wazzap:go on a done decision, treat as a revisit (probably needed a follow-up).
Output to user (after writing the plan, before handoff)
✓ go.md written.
Plan: <one-line summary, e.g. "5 steps, 2 owners, ~3 days">
How do you want to execute?
1. Inline (right now, step-by-step)
2. <other available paths>
3. External (you'll handle it)
4. Close as decided (no execution here)
Output after handoff
For inline:
Starting step 1: <step description>.
Owner: <owner>. Acceptance: <check>.
[proceeds to do step 1]
For handoff to another skill:
✓ Manifest updated: status=executing, path=<skill-name>.
Hand off to <skill> by running: <suggested command, e.g. "/executing-plans .wazzap/<slug>/go.md">
For external:
✓ Manifest updated: status=executing (external).
Recorded that execution is happening outside this chat. When done, run /wazzap:resume <slug> and tell me how it went.
For close as decided:
✓ Manifest updated: status=decided.
Plan saved. When you're ready to execute, /wazzap:resume <slug>.
Why vertical slices
Vertical slice = a thin top-to-bottom cut that delivers a real, observable outcome. The opposite is horizontal slicing — building all the schema, then all the API, then all the UI, then integrating at the end.
Why vertical wins:
Surfaces risk early. Integration problems show up in S1, not after the budget is gone.
Keeps the audit trail honest. Each slice ships → each slice teaches you something → revisits in :real/:approaches happen with real evidence, not assumptions.
Enables clean handoff. One slice = one issue = one PR = one reviewable unit.
Survives interruption. If the work pauses after S1, S1 still has standalone value.
For non-software decisions, the same logic: "Don't plan all the conversations, then all the decisions, then all the announcements. Have one small end-to-end conversation, learn from it, then plan the next."
Anti-patterns to avoid in :go
❌ Horizontal slicing. "Set up the database, then build the API, then build the UI." Hides risk, forces big-bang integration, and breaks the audit trail. Always slice vertically.
❌ Slices that don't trace to success criteria. Every slice must move at least one criterion from real.md. If it doesn't, ask why it's in the plan.
❌ Slices that aren't independently shippable. If S2 can't be deployed/demoed without S3, it's not actually a slice — it's a step that belongs inside S1 or merged with S2.
❌ Vague steps ("set up the thing"). Every step inside a slice needs a verb and an acceptance check.
❌ Skipping the recovery move. "What if this goes wrong?" is part of the audit trail.
❌ Listing every possible execution path regardless of availability. Detect first, offer second.
❌ Forcing inline execution. The user gets to choose how to execute.
❌ Marking status: done when the plan is written but the work isn't. done means the work is finished.
❌ Bundling multiple slices into one issue or splitting one slice across multiple issues. Breaks 1:1 traceability.
❌ Throwing away the chosen approach's nuances. The plan should reflect why this approach — call out the conservative/adjacent/bold flavor when relevant.
Self-check before finishing
Plan is organized as 2–5 vertical slices with stable handles (S1, S2, ...).
Each slice has: name, user-observable outcome, success-criteria links, estimated cycle, steps with verbs+acceptance checks, slice deliverable.
Every slice traces to ≥1 success criterion from real.md.
Each slice would still have value if execution stopped after it (independently shippable).
"Why these slices in this order" is filled.
Recovery move is named.
Issue/ticket mapping table is present (filled later when issues are filed).
Out-of-scope is filled (or explicitly "—").
Execution handoff section is filled with the chosen path.
Manifest updated: current_phase: go, completed_phases includes go, status reflects handoff choice, updated_at bumped.
If inline execution started: first slice's first step's acceptance check verified before moving on.
1---2name: wazzap-go3description: Phase 4 of /wazzap — write a concrete execution plan and offer handoff to an available executor (inline, executing-plans, GSD, BMAD, or close as decided). Use when the user invokes /wazzap:go or 'let's go'.4---56# `/wazzap:go` — "Let's go!"78Phase 4 of 4. **Mode: plan one-shot, then offer execution handoff.** Turn the chosen approach into a concrete plan that any executor (you, an agent, a teammate, future-you) can pick up. Then ask how it should be executed.910## Goal1112Produce `go.md` — a complete, executor-agnostic plan — and update the manifest. Optionally hand off to an available execution path. Never force inline execution.1314## Preconditions15161. Read parent `SKILL.md`.172. Resolve active decision; read `up.md`, `real.md`, `approaches.md`.183. **Soft-gate check:** if no `chosen_approach` in manifest, warn ("No approach chosen yet. `:go` typically follows `:approaches`. Continue with the user's instruction anyway?"). Allow override.1920## Steps21221. **Read context.** Pull the chosen approach from `approaches.md` and the success criteria from `real.md`.23242. **Draft the plan as vertical slices, not flat steps.** Each slice is a self-contained deliverable that:25 - **Cuts top-to-bottom** — exercises every layer the slice touches (data → logic → interface; or for non-software decisions: stakeholder → action → feedback). Never "all schema then all API then all UI then integrate."26 - Has a **user-observable outcome** — something you (or a stakeholder) can see, measure, or learn from when the slice lands.27 - Is **shippable / verifiable / learnable independently** — if you stopped after this slice, the work-to-date still has integrity and produced learning.28 - Aim for **2–5 slices**. 1 slice = not actually sliced. 8+ = slices too small or padded.2930 **Each slice has:**31 - A **stable handle** — `S1`, `S2`, `S3`... (used as the ticket key during handoff).32 - A **name** — short and outcome-shaped ("Auth lands on staging", not "Build login form").33 - A **user-observable outcome** — what's true after this slice that wasn't before.34 - **Serves success criteria** — which criteria from `real.md` (by name or quoted snippet) this slice moves the needle on. **Every slice must trace to ≥1 success criterion.** If it can't, ask why it's in the plan.35 - **Estimated cycle** — hours / days / weeks in plain language.36 - **Steps inside the slice** — verbs + acceptance checks + owner + dependencies, numbered `S1.1`, `S1.2`, etc.37 - **Slice deliverable** — the thing you can demo / point at / learn from when the slice is done.3839 **For non-software decisions** (career, relationship, business strategy): a "slice" is the smallest end-to-end thing you can do *this week* to learn something real. Same principle, different vocabulary.40413. **Write the rest of the plan doc:**42 - **Recovery move** — if this goes wrong mid-execution, what's the fallback?43 - **Success criteria** — copied from `real.md` for traceability.44 - **Live open questions** — only the ones that DON'T block step 1 from starting (block-the-start questions belong back in `:real`).45 - **Out of scope** — what this plan deliberately does not handle (forward links to follow-up wazzaps, tickets, etc).46474. **Show the plan to the user.** Ask: *"Plan looks good? Edit, or ready to execute?"*. Apply edits.48495. **Detect available execution paths.** Check what's available in the current session:50 - **Inline** — agent executes step-by-step in this same chat. Always available.51 - **`superpowers:executing-plans`** — if the skill is listed in `available_skills`. Best for multi-step coding work with review checkpoints.52 - **GSD** — if `.planning/gsd/` exists in the repo, or skills like `gsd-executor` are available. Best for phased engineering work.53 - **BMAD** — if `.claude/skills/bmad-*` exist or `bmad-dev-story` is in `available_skills`. Best for spec-driven development cycles.54 - **External / manual** — user will execute outside this session (write a ticket, talk to someone, etc.). Always available.55 - **Close as decided** — no execution will happen here; just close the manifest.56576. **Write `go.md`.** (See template.)58597. **Offer handoff** — show only paths that are actually available:6061 ```62 Plan written: <N> slices.63 How do you want to execute?64 1. Inline — I'll start S1 step-by-step and check in after each acceptance check.65 2. superpowers:executing-plans — hand the plan (or a single slice) to that skill in a fresh session.66 3. GSD — kick off /gsd:plan-phase per slice (1 slice = 1 phase).67 4. External — you'll handle execution; I can draft GH/Linear issues per slice if you want.68 5. Close as decided — record the plan but don't execute.69 ```7071 Skip lines for paths that aren't available. If user picks **External**, offer to draft 1 issue body per slice (title + body lifted from the slice section + back-link to go.md).72738. **Update manifest** based on user's handoff choice:74 - **Inline / executing-plans / GSD / BMAD** → `status: executing`75 - **External** → `status: executing`, `notes` adds "executing externally"76 - **Close as decided** → `status: decided`7778 In all cases: `current_phase: go`, append `go` to `completed_phases`, bump `updated_at`.79809. **Execute or hand off** per user's choice. If inline: start step 1 and check in after each step's acceptance check.8182## `go.md` template8384```markdown85# Plan (Phase 4)8687**Slug:** `<slug>`88**Drafted:** <ISO timestamp>8990## Chosen approach9192**<option name>** (from `approaches.md` — Option <N>)9394> <one-line pitch from approaches.md>9596## Plan — vertical slices9798The plan is organized into shippable slices. Each slice cuts top-to-bottom and produces an observable outcome. Steps live inside slices, never outside them.99100### S1 — <slice name (outcome-shaped, e.g. "Auth lands on staging")>101102**User-observable outcome:** <what's true after this slice that wasn't before>103**Serves success criteria** (from `real.md`): <criterion 1>, <criterion 3>104**Estimated cycle:** <hours / days / weeks>105106| # | Step | Owner | Deps | Acceptance check |107|-------|----------------|-------|------|--------------------------|108| S1.1 | <verb + obj> | self | — | <how you know it's done> |109| S1.2 | ... | agent | S1.1 | ... |110111**Slice deliverable:** <what you can demo / measure / show after S1 done>112113### S2 — <slice name>114115**User-observable outcome:** ...116**Serves success criteria:** ...117**Estimated cycle:** ...118119| # | Step | Owner | Deps | Acceptance check |120|-------|------|-------|-----------|------------------|121| S2.1 | ... | ... | S1 | ... |122| S2.2 | ... | ... | S2.1 | ... |123124**Slice deliverable:** ...125126### S3 — ...127128[repeat shape for each slice; 2–5 slices total]129130## Why these slices in this order131132<2–4 sentences. Why is S1 first? What does shipping S1 alone teach you / prove / unlock for S2? If S3 is risky, why is it last?>133134## Recovery move135136**If this goes sideways at step <N>:** <fallback action — undo, escalate, pause, switch to alternate option from `approaches.md`>137138## Success criteria139140(carried from `real.md`)141142- <criterion 1>143- <criterion 2>144145## Live open questions146147These don't block step 1 — flag if any escalate to blockers:148149- <question, plus what would resolve it>150151## Out of scope152153- <thing this plan does NOT do>154- <forward link to a future wazzap or ticket if applicable>155156## Issue / ticket mapping157158When filing tickets (GitHub Issues, Linear, Jira, etc.) — **one slice = one issue.** Never split a slice across multiple issues; never bundle multiple slices into one issue. The slice handle is the ticket key.159160| Slice | Issue title | Tracking link |161|-------|-------------|---------------|162| S1 | <name> | <#123 / URL — fill when filed> |163| S2 | <name> | — |164| S3 | <name> | — |165166Each issue body should be the slice's section copied from this doc, plus a back-link to `<wazzap-folder>/go.md`. That's the audit trail: anyone reading the issue knows which decision it came from.167168## Execution handoff169170**Path chosen:** <inline | superpowers:executing-plans | GSD | BMAD | external | close-as-decided>171172**Started:** <ISO timestamp, or "—" if close-as-decided>173174**Notes:**175<e.g. "Handed off to executing-plans in fresh session 2026-04-28 16:00", or "Closed as decided — will execute when bandwidth allows", or "External: filed S1 as GH#123, S2 as GH#124">176```177178## Revisits (re-running `:go` later)179180Common reason: the plan didn't survive contact with reality and needs a redo. Append, don't overwrite:181182```markdown183---184## Revisited <ISO timestamp>185186**Trigger:** <what made the original plan stop working>187188### Plan (this round)189[new table]190191### What changed since last round192- ...193194### Execution handoff (this round)195...196```197198Manifest: append to `revisits[]`, keep `current_phase: go`, optionally update `status`.199200## Done state — closing out201202When execution genuinely completes (not when the plan is written — when the work is done):2032041. Update manifest: `status: done`, fill `notes` with the outcome (1–3 sentences).2052. Optionally fill `linked_commits`, `linked_prs`, `linked_pm_state`.2063. If user explicitly walked away mid-execution: `status: abandoned`, set `status_reason` (required).207208If the user invokes `/wazzap:go` on a `done` decision, treat as a revisit (probably needed a follow-up).209210## Output to user (after writing the plan, before handoff)211212```213✓ go.md written.214215Plan: <one-line summary, e.g. "5 steps, 2 owners, ~3 days">216217How do you want to execute?218 1. Inline (right now, step-by-step)219 2. <other available paths>220 3. External (you'll handle it)221 4. Close as decided (no execution here)222```223224## Output after handoff225226For **inline**:227```228Starting step 1: <step description>.229Owner: <owner>. Acceptance: <check>.230[proceeds to do step 1]231```232233For **handoff to another skill**:234```235✓ Manifest updated: status=executing, path=<skill-name>.236237Hand off to <skill> by running: <suggested command, e.g. "/executing-plans .wazzap/<slug>/go.md">238```239240For **external**:241```242✓ Manifest updated: status=executing (external).243Recorded that execution is happening outside this chat. When done, run /wazzap:resume <slug> and tell me how it went.244```245246For **close as decided**:247```248✓ Manifest updated: status=decided.249Plan saved. When you're ready to execute, /wazzap:resume <slug>.250```251252## Why vertical slices253254**Vertical slice =** a thin top-to-bottom cut that delivers a real, observable outcome. The opposite is **horizontal slicing** — building all the schema, then all the API, then all the UI, then integrating at the end.255256Why vertical wins:257- **Surfaces risk early.** Integration problems show up in S1, not after the budget is gone.258- **Keeps the audit trail honest.** Each slice ships → each slice teaches you something → revisits in `:real`/`:approaches` happen with real evidence, not assumptions.259- **Enables clean handoff.** One slice = one issue = one PR = one reviewable unit.260- **Survives interruption.** If the work pauses after S1, S1 still has standalone value.261262For non-software decisions, the same logic: "Don't plan all the conversations, then all the decisions, then all the announcements. Have *one* small end-to-end conversation, learn from it, then plan the next."263264## Anti-patterns to avoid in `:go`265266- ❌ **Horizontal slicing.** "Set up the database, then build the API, then build the UI." Hides risk, forces big-bang integration, and breaks the audit trail. Always slice vertically.267- ❌ **Slices that don't trace to success criteria.** Every slice must move at least one criterion from `real.md`. If it doesn't, ask why it's in the plan.268- ❌ **Slices that aren't independently shippable.** If S2 can't be deployed/demoed without S3, it's not actually a slice — it's a step that belongs inside S1 or merged with S2.269- ❌ Vague steps ("set up the thing"). Every step inside a slice needs a verb and an acceptance check.270- ❌ Skipping the recovery move. "What if this goes wrong?" is part of the audit trail.271- ❌ Listing every possible execution path regardless of availability. Detect first, offer second.272- ❌ Forcing inline execution. The user gets to choose how to execute.273- ❌ Marking `status: done` when the plan is written but the work isn't. `done` means the work is finished.274- ❌ Bundling multiple slices into one issue or splitting one slice across multiple issues. Breaks 1:1 traceability.275- ❌ Throwing away the chosen approach's nuances. The plan should reflect *why this approach* — call out the conservative/adjacent/bold flavor when relevant.276277## Self-check before finishing278279- [ ] Plan is organized as 2–5 vertical slices with stable handles (`S1`, `S2`, ...).280- [ ] Each slice has: name, user-observable outcome, success-criteria links, estimated cycle, steps with verbs+acceptance checks, slice deliverable.281- [ ] **Every slice traces to ≥1 success criterion** from `real.md`.282- [ ] Each slice would still have value if execution stopped after it (independently shippable).283- [ ] "Why these slices in this order" is filled.284- [ ] Recovery move is named.285- [ ] Issue/ticket mapping table is present (filled later when issues are filed).286- [ ] Out-of-scope is filled (or explicitly "—").287- [ ] Execution handoff section is filled with the chosen path.288- [ ] Manifest updated: `current_phase: go`, `completed_phases` includes `go`, `status` reflects handoff choice, `updated_at` bumped.289- [ ] If inline execution started: first slice's first step's acceptance check verified before moving on.
Run npx skillmds@latest add enw/wazzap-go in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Phase 4 of /wazzap — write a concrete execution plan and offer handoff to an available executor (inline, executing-plans, GSD, BMAD, or close as decided). Use when the user invokes /wazzap:go or 'let's go'. It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
enw (@enw) published this skill. Their other Agent Skills are listed on their SkillMD profile.