Wishes
A wish is Genie’s unit of work. It’s a structured document (WISH.md) that defines what to build, how to validate it, and how to break it into parallelizable execution groups.
The Workflow
Every wish flows through a five-stage workflow:Anatomy of a WISH.md
Every wish contains these sections:Header
Scope
Defines clear boundaries — what’s in and what’s out:Success Criteria
Checkboxes that define “done”. These are what/review validates against:
Execution Groups
Parallelizable work units. Each group is assigned to an agent:depends-on run sequentially. Independent groups run in parallel — this is how Genie achieves speed.
Wish State
Genie tracks execution state in PostgreSQL via the task system. A wish becomes a parent task, and each execution group becomes a child task with dependency edges. The task system records:- Which groups are complete
- Which agents are assigned
- Current workflow stage
- Timestamps and error states
tasks and task_dependencies tables — no file locks needed, and concurrency is handled natively by PostgreSQL.
Drift Detection
When state is first created, Genie stashes a SHA-256 signature of the wish’s group structure (group names + sorteddepends-on per group) on the parent task. Any later dispatch recomputes that signature from the current WISH.md and compares. If they diverge, Genie fails loud instead of silently dispatching against a stale plan.
The error you’ll see:
1
Confirm the edit was intentional
If the WISH.md change was accidental, revert it — the error will clear on the next dispatch.
2
Reset the wish state
If the edit was intentional, wipe the cached state and recreate it from the current In non-interactive contexts (CI, agent shells), add
WISH.md:--yes to skip the confirmation prompt. See genie reset for the full flag list.3
Re-dispatch
Any previously in-progress groups are lost with the reset — re-run
/work (or re-dispatch manually) against the refreshed plan.Pre-existing state from before this feature landed has no stored signature and is treated as “valid, never validated” — it won’t false-alarm on the next dispatch, but the first
genie reset <slug> will enrol it into drift tracking.File Locations
CLI Commands
Wishes become tasks in the database — see the Task CLI reference for full task management commands.Best Practices
Keep wishes small
Keep wishes small
A wish should be completable in one session. If it has more than 6 execution groups, consider splitting into multiple wishes.
Write testable criteria
Write testable criteria
Each success criterion should be verifiable by a command or assertion. Avoid subjective criteria like “code is clean.”
Declare dependencies explicitly
Declare dependencies explicitly
If Group 3 needs Group 1’s output, say
depends-on: Group 1. Genie uses this to schedule execution order.Scope aggressively
Scope aggressively
The OUT section is as important as IN. Explicitly listing what you won’t do prevents scope creep.