Skip to content

Workflows

Workflows

A workflow is the state machine that governs every task in a project. It defines which states exist, what transitions are valid, who is responsible at each step, and how Forge dispatches work automatically. Every project uses either the built-in default workflow or a custom one defined in JSON.

If you’re new to Forge, you don’t need to read these pages to use it — the default workflow is a sensible end-to-end pipeline. Come back here when you want to know exactly what’s happening at each step, customize the flow for your team, or build a workflow from scratch.

In this section

  • How workflows work — State kinds, roles, dispatch, board columns, manual advance.
  • Gates and retries — How gate states approve, reject, and apply retry budgets.
  • Defining a workflow — The JSON schema, validation rules, and how to apply a custom workflow or template to a project.

The default workflow at a glance

Out of the box, every project uses this workflow:

StateKindWhat it means
backlogbacklogParking lot. Agents cannot claim tasks here.
todoinitialReady for work. Tasks start here.
planninggateOptional planning gate before implementation.
in_progressactiveThe coder agent is working.
reviewgateCI runs and, if configured, a reviewer agent or human inspects the work.
merginggateForge runs the git merge.
doneterminalWork is complete. The worktree is cleaned up immediately.
blockedHolding state requiring human intervention (retry budget exhausted, merge conflict unresolvable, etc.).
merge_failedMerge produced a conflict. Forge may dispatch the coder to resolve it, within the retry budget.
cancelledterminalTask was cancelled.

The happy path is backlog → todo → planning → in_progress → review → merging → done. Tasks that don’t need a plan skip straight from todo to in_progress when no planner role is assigned. blocked, merge_failed, and cancelled are auxiliary states that handle error recovery and cancellation.

The default workflow defines three roles — planner, coder, reviewer — plus the engine-reserved assignee identity. See How workflows work for details.

When to customize

Stick with the default workflow if:

  • A pipeline of plan → code → review → merge fits your work.
  • You’re happy with the built-in retry budgets and gate behavior.
  • You want all projects on this server to look the same on the board.

Define a custom workflow if:

  • You want extra gates (e.g. design review before coding, QA after merge).
  • You want a different terminal state (e.g. released vs done).
  • You’re modeling something other than code — a research pipeline, a writing pipeline, a triage queue. The engine doesn’t assume the work is code.

Start with Defining a workflow when you’re ready.