Skip to content

The pipeline

Every feature gets its own conversation, which walks six phases: ideation, spec, tickets, build, review, shipped. The phase is not a label you set to feel organised. It decides which context gets injected, which agents launch, and what the app tells you to do next.

The shape of it

You get grilled on an idea until a spec and a set of tickets fall out. Sandboxed agents burn those tickets on a branch. You test drive the result and merge. You are needed at the two ends and nowhere in between.

The six phases are those four sentences made concrete enough for software to act on. A chat window cannot tell whether you are arguing about an idea or waiting on a build. runcastle can, so it runs the middle without you.

Where a feature comes from

There are three doors, and they all land in the same place.

The six phases

Phase What happens
ideation A real Claude Code terminal opens with the feature brief, the phase rules, and runcastle's skill pack already loaded, and argues with you until the idea is concrete.
spec The decisions get written down as a spec, committed into your repo under docs/features/<slug>/.
tickets The spec is split into atomic tickets with a dependency order. You review them and click burn.
build Agents burn each ticket inside a container, committing to the feature branch. You can close the tab.
review Checks land, then you test drive the branch on its own port. You click merge.
shipped The branch is merged. The spec, decisions, and run history stay queryable.

Ideation: why the spec is worth the argument

Ideation is not a form. runcastle opens a real Claude Code terminal, not a rebuilt chat UI, with the feature's brief in the system prompt, the phase's rules injected each turn, and a phase-scoped skill pack loaded. Its job is to keep asking until the idea is concrete enough for the next phases to bite on.

What comes out goes into your repository, not a database you cannot read. Spec, decisions, research, and notes land as plain markdown under docs/features/<slug>/: versioned, diffable, readable by any agent later, and still there if you stop using runcastle.

Tickets: the spec, cut into work

The spec becomes a set of small tickets in dependency order. Each names its goal, its acceptance criteria, and the seams to test at, and knows what blocks it. That order is what makes the build parallel: everything unblocked starts at once.

The spec and the tickets come out of one unbroken conversation, so nothing is rebuilt from a summary of a summary. Then the pipeline stops and waits for you. Skimming a ticket list takes a minute. Finding out after a long build that the plan was wrong does not.

Build: sandboxed agents on one branch

Click burn and the tickets go to agents running headless in a Docker or Podman container on your machine. Each picks up an unblocked ticket and commits to the feature's branch. They already know your setup and verify commands, and which tests were red before they started, because preparation told them.

The git layout underneath is deliberate:

Review, then shipped

When every ticket finishes, the feature moves to review. runcastle sets your work aside, checks out the finished branch, starts it on its own port so you can click through the feature, then puts your work back. Review findings feed fix cycles inside the build agents, and only hard blockers reach you.

Review has three ways out:

Shipped keeps the spec, the decisions, and the run history queryable, including from the project session later on.

Several features, same loop

Nothing above assumes one live feature. A feature mid-build wants nothing from you, which is the point: while agents burn tickets on one branch you can grill the next idea, and the sidebar flags the features that are actually waiting on you.

Between every pair of phases sits a gate, a check that has to pass before the next phase starts. Two of them are where the pipeline hands the decision back to you. How gates work →