/wish and Codex as $wish. Other agents take its name or a plain request such as "deliver this".wish, and every admitted run goes through the same stages:| Stage | What happens |
| Admit | A read-only scout reads the task and the repository and estimates the change. The script checks the estimate against a fixed size band, and a judge that never sees the repository picks the route and freezes the contract: the outcome, the declared files and the acceptance criteria, written before any code exists |
| Work | One executor cuts a worktree on wish/<slug> from the base branch, edits only the declared files and makes one conventional commit |
| Gate | A mechanical check of that commit, described below |
| Review | A different, read-only agent scores the exact commit against the frozen criteria. A diff that leaves the declared files is blocked |
| Repair | While the gate is red or the verdict is FIX-FIRST, and the repair budget holds, a fixer edits the declared files again, and the gate and the review run on the new commit |
| Publish | One agent with an allowlist of commands pushes the branch, opens the pull request and reads the remote back. Without the GitHub CLI it stops before pushing anything |
| Read-back | The script compares the remote head, the pull request's base, head and files, and the checks with what the run set out to deliver |
check script in package.json, make check, just check, task check, a test script (not the default placeholder that always fails), or make test. A command found in the repository runs only when it is exactly one of those forms; anything else counts as not found. The workflow's check and install args replace them.pre-push or pre-commit in the hooks directory git resolves, which must sit inside the worktree or the repository's git directory. That covers husky, lefthook, the pre-commit framework and core.hooksPath; husky's .husky/_ directory also needs its pre-push. Dead hooks end the run blocked with nothing pushed. Then the gate runs the check once. With no hook system, or no check to find, it runs the validation command frozen in the contract instead, and CI is the authority: merge-ready needs the pull request's checks to pass./wish runs the repository's own install and check commands, so point it only at repositories you trust. The Quickstart lists what the gate asks of your repository.plan when the task is too big or touches a trust boundary, brainstorm when a product decision is still open, and report when the cause is unknown. The Quickstart lists the trust boundaries at v6.261003.1.| State | Meaning |
merge-ready | The checks pass, the remote head equals the local commit, the pull request's base, head and files match the contract, and the review says SHIP |
pr-open | The pull request exists but its checks had not finished; read them again with gh pr checks |
refused | Admission chose another route; nothing was created |
blocked | Something stopped the run before, during or after publishing; the report names which |
missed | The repair budget ran out or a stage returned nothing; the branch, commit, worktree and any pull request are kept |
genie wish report <runId> --append, which prints the run's tokens and time per stage.missed or blocked, run wish again with the same task and slug. It adopts the worktree it left behind when that worktree is clean and nothing has diverged from the remote. wish never deletes a worktree or a branch; after you merge, the report ends with the command that removes both, and that command refuses a branch that is not merged..genie/wishes/<slug>/WISH.md from its bundled template: scope in and out, decisions, success criteria, and execution groups, each with its deliverables, acceptance criteria, validation and dependencies. A group that would not fit the admission band becomes a sibling wish. A plan that links a brainstorm design needs that design's SHIP evidence to match its content.genie wish lint checks the structure of every plan in the repository and writes nothing.genie task create --title "<group title>" --wish <slug> --group <group-name> adds a card for each group, and genie context --wish <slug> records the base commit.| Agent | How it runs |
| Claude Code | /wish <task> runs the saved workflow wish in the background. /workflows shows its progress. See Workflows |
| Codex | $wish <task> runs the same stages by hand, as subagents, with the same briefs |
| Other agents | Its name, or a plain request such as "deliver this", runs the same stages by hand |
dev unless you name another; main and master are refused. The skill passes the repair budget genie config get budgets.maxEscalationsPerGroup prints, and the workflow caps it.genie wish report output.