Named Phases

August 28, 2026 ยท View on GitHub

Named phases are focused prompts for one interactive turn. Neo ships with design, plan, build, and review; users invoke them with slash commands:

/review current branch

Ordinary prose never activates a phase. For example, Run the review phase is sent to the model unchanged and does not receive the configured review prompt or phase label.

The phase prompt is sent to the model with the user's arguments. The TUI shows the phase name before normal workflow and tool activity, then leaves a concise completion receipt. Phase state is not persisted and does not enforce an order or replace the generic workflow checklist.

Defaults

PhasePurpose
designGround a proposed product change, feature, or bug fix in the current system and define acceptance criteria.
planBreak accepted work into small, ordered tasks with checks.
buildImplement, test, self-review, simplify, and verify a complete change.
reviewReview and improve code, PR feedback, and CI results with fresh context.

Configuration

The phases map in neo.yaml adds a named prompt or overrides a default by name. Names use lowercase letters, numbers, hyphens, or underscores. Native commands such as help, clear, model, quit, and exit are reserved.

phases:
  security:
    description: Review authentication and trust boundaries
    prompt: |
      Inspect the requested security boundary.
      Report and fix actionable findings, then rerun relevant checks.

  review:
    prompt: |
      Apply this project's review policy to the requested scope.

Configured fields overlay the matching default, so overriding only prompt retains the built-in description. Additional phases appear after the four defaults in the slash picker.

Named-phase slash commands take precedence over skills with the same name. A same-named skill remains available through its $name reference.

Boundaries

internal/phase owns definitions, default prompts, config overlay, slash invocation expansion, and display labels. The TUI owns slash routing and the active turn label. internal/workflow remains the only visible checklist model. The core agent loop does not interpret phase names or transitions.

Full prompt bodies are injected only when invoked. The saved message keeps a separate display value, so resume, session titles, and transcript search show the user's /review invocation instead of the expanded prompt body.