Skip to content

Ideas to specs

The agentic loop builds exactly what a spec asks for, no more and no less. The quality of what comes out is set long before the loop starts: by how well the idea was understood, and how clearly the spec says what "done" means. This section is about that half of the work.

flowchart LR
    T(("a thought")) --> C["<b>Capture</b><br/>seconds, no friction<br/><code>nw idea …</code>"]
    C --> X["<b>Explore</b><br/>Summary · open questions · log<br/><code>/nw-explore</code>"]
    X --> D{"Ready?"}
    D -- "not yet" --> X
    D -- "no — drop or<br/>park as researched" --> Z(["closed"])
    D -- "yes" --> S["<b>Write the spec</b><br/>decision · ACs · test plan<br/><code>/nw-new-work</code>"]
    S --> R["<b>Review</b><br/><code>nw spec review</code>"]
    R -- revise --> S
    R -- approve --> Q["<b>Queue it</b><br/><code>nw queue add</code>"]
    Q --> L(["the agentic loop"])
Step You end up with Read
Capture A one-line idea with an id, a project, and maybe an epic Capture ideas
Explore A Summary someone else could act on, resolved questions, a log of findings Explore until it's ready
Write the spec A spec with a decision, objective acceptance criteria and a test plan Write a spec the loop can build
Review and queue An approved spec in the queue Write a spec…

The life of an idea

Ideas live in an org file (plain text you own), each with a stable IDEA-NNN id. Their state tells you, and nw next, what to do next.

stateDiagram-v2
    direction LR
    [*] --> IDEA: nw idea "…"
    IDEA --> INCUBATE: start exploring
    INCUBATE --> INCUBATE: log · summary · questions
    INCUBATE --> SPECCED: nw spec new / /nw-new-work
    IDEA --> SPECCED: (small, obvious ideas)
    SPECCED --> PROMOTED: spec done, or tasks generated
    SPECCED --> EXPORTED: outbound: handed to another repo
    EXPORTED --> SHIPPED: target repo reports done
    INCUBATE --> RESEARCHED: explored, no build
    IDEA --> DROPPED: won't do
    INCUBATE --> DROPPED: won't do
    PROMOTED --> [*]
    SHIPPED --> [*]
    RESEARCHED --> [*]
    DROPPED --> [*]

nw next reads these states and prints the next command for every open idea. It's the quickest way to see what's waiting on you.

nw next

Why the ideas half matters for the loop

  • The loop can't fix a vague goal. If the acceptance criteria are fuzzy, the reviewer can't check them, the implementer guesses, and the loop either "passes" the wrong thing or never converges.
  • Exploration is cheap; loops are not. A few minutes resolving an open question in the idea saves a failed campaign.
  • One idea, one buildable slice. Ideas that turn out to be several pieces of work become an epic with child specs, each small enough for one campaign.

You can queue the idea itself

nw queue add IDEA-NNN queues an explored idea directly. Its campaign writes the spec from the idea (state SPEC_WRITING), has it reviewed (SPEC_REVIEW), revises and accepts it, and then builds it, all on one branch. Exploring the idea well matters even more here, because it's the only input that campaign gets.