| name | wish |
| description | Convert an idea into a structured wish plan with scope, acceptance criteria, and execution groups for work. |
wish — Plan Before You Build
Runtime syntax: invoke the plugin copy through the active runtime's owner-qualified skill selector; use a bare selector only when intentionally selecting a user-tier copy (a separately installed personal copy; Genie no longer seeds this tier). Cross-skill prose below uses bare names as portable semantic routes; the orchestrator resolves the selector for the active runtime.
Convert a validated idea into an executable wish document at .genie/wishes/<slug>/WISH.md.
When to Use
- Non-trivial work needs planning before implementation.
- User wants to scope, decompose, or formalize a feature/change.
- Prior
brainstorm output exists and needs to become actionable.
Wish artifacts live in .genie/wishes/ in the shared worktree. Execution-group definitions go in WISH.md (git) so other agents and skills can read them; per-group execution state lives in the state DB via genie task (see the work skill for how groups are claimed and completed). When spawned as a native subagent, use the curated context from your dispatch prompt directly.
Design link pre-flight
Before writing the wish, check the design exists and, when present, verify the
review evidence with the helper shipped in this skill:
test -f .genie/brainstorms/<slug>/DESIGN.md
node "<wish-skill-dir>/references/design-review-evidence.mjs" verify ".genie/brainstorms/<slug>/DESIGN.md"
- Present and verification exits 0: consume the reviewer-bound evidence and emit
| **Design** | [DESIGN.md](../../brainstorms/<slug>/DESIGN.md) |.
- Present but verification fails: stop and return to design review. Missing evidence, a non-SHIP verdict, or a content-digest mismatch cannot be waived; editing DESIGN.md invalidates its prior review. Never repair the failure with a locally recomputed digest — only a new design review may return the
reviewed-sha256 passed to stamping.
- Absent: emit
| **Design** | _No brainstorm — direct wish_ | (no link) — valid for hotfixes, trivial changes, or plans obvious enough that a brainstorm adds no value. The linter (scripts/wishes-lint.ts) accepts the literal stub text; a bracket-link to a non-existent brainstorm file fails lint.
Flow
-
Gate check: if the request is fuzzy (no prior design, unclear scope, vague requirements), run brainstorm first and say so. If a design exists, do not scaffold until its digest-bound design-review evidence verifies as SHIP.
-
Align intent: clarify until success criteria are testable.
-
Pass the simplicity gate: state the simplest complete design, justify every mechanism beyond it with a present requirement or measurement, and defer plausible future complexity behind a concrete trigger. A wish cannot outsource this decision to implementation.
-
Define scope: explicit IN and OUT lists. OUT cannot be empty.
-
Decompose: small, loosely coupled execution groups.
-
Scaffold — always copy the template, never hand-write WISH.md. Resolve
the absolute directory containing this loaded SKILL.md, replace only the
two placeholder assignments below, and run the complete command from the
repository root:
WISH_SKILL_DIR='<absolute directory containing this SKILL.md>'
WISH_SLUG='<slug>'
case "$WISH_SLUG" in
''|*[!a-z0-9-]*|-*|*-) printf 'invalid wish slug: %s\n' "$WISH_SLUG" >&2; exit 2 ;;
esac
WISH_DEST=".genie/wishes/$WISH_SLUG/WISH.md"
test -f "$WISH_SKILL_DIR/templates/wish-template.md"
test ! -e "$WISH_DEST"
mkdir -p "$(dirname "$WISH_DEST")"
cp "$WISH_SKILL_DIR/templates/wish-template.md"
Wish Document Sections
| Section | Required | Notes |
|---|
| Status / Slug / Date | Yes | Status: DRAFT on creation |
| Summary | Yes | 2-3 sentences: what and why |
| Scope IN / OUT | Yes | OUT cannot be empty |
| Decisions | Yes | Key choices with rationale |
| Simplicity Case | Yes | Simplest complete design, justified additions, and measurable deferrals |
| Success Criteria | Yes | Checkboxes, each testable |
| Execution Strategy | Yes | Wave-based plan — mandatory even if a single sequential wave; forces ordering, parallelism, and dependency thinking upfront |
| Execution Groups | Yes | Goal, deliverables, acceptance criteria, validation command |
| Dependencies | Yes | Wish-level depends-on / blocks using slug or repo/slug; use none when empty |
| QA Criteria | No | What to verify on dev after merge |
| Assumptions / Risks | No | What could invalidate the plan |
Rules
- Never write WISH.md from scratch — always copy the in-skill template, then edit.
- Lint before handoff: the genie repo's wish linter must pass before
review sees the wish.
- Never emit a bracket-link to a non-existent brainstorm — use the
_No brainstorm — direct wish_ stub.
- Never consume a linked design whose persisted review evidence is missing, non-SHIP, or stale; the wish linter independently enforces this for new wishes.
- No implementation during
wish — planning only.
- On APPROVED, record the wave base with the non-
--plan genie context --wish <slug> (warn and continue on failure; never --plan).
- No speculative optimization: caches, deltas, sharding, background coordination, and configuration surfaces require a current criterion or measurement in the Simplicity Case.
- Every group testable, bite-sized, and independently shippable; no vague tasks ("improve everything").
- Every group has non-zero, risk-proportional validation with its scope explained; aggregate integration and release
gates remain intact.
- OUT scope must contain at least one concrete exclusion.
- Declare cross-wish dependencies early.