Developers New to Kontour? Start with Flow Agents.

v3.10.0npm install -D @kontourai/flow

Flow

the agent said it was done — this is the part it skipped

Your agent reports the task complete. It ran the tests — but did it ever open the page? Did the review happen, or did it get summarized away when the session ran out of room?

Flow puts the answer in plain files next to your code. Every step has a gate — a checkpoint that names what the step has to hand over before the work moves on. Flow records what each gate asked for, what actually arrived, and anything a person waived on purpose. Nothing becomes "done" because an agent said so.

flow status — a run that stopped
$ npx flow status demo --format summary
flow run: agent-dev-flow / demo-checkout-banner
current step: implement

PASS  plan gate: Acceptance criteria are ready for implementation. satisfied
BLOCK implementation gate: The implementation diff is scoped to the
      planned change. missing
      expected: The implementation diff is scoped to the planned change.
      transition diagnostics: transition.gate.block
WAIT  verify gate: verify gate waiting

status: blocked
next action: attach scoped files before continuing
continuation: resume from implement, not chat memory
report: .kontourai/flow/runs/demo/report.md
ready steps: implement

Real output from the demo inside @kontourai/flow 3.10.0, captured after npx flow init --demo and then npx flow evaluate demo --exit-code, which exits 1 and leaves the run exactly here. Nothing is added or reworded; the one over-long line is wrapped onto the indented line beneath it, and nothing else is changed. The gate that stopped the run is the demo's own implement gate — we did not pick it, and the run id, the step names and the gate descriptions are all the demo's.

Quickstart

flow quickstart
$ npm install -D @kontourai/flow
$ npx @kontourai/flow init --demo
initialized .flow
demo run ready: demo
try:
  flow status demo
  flow resume demo
  flow console --run demo

Real output from @kontourai/flow 3.10.0 in an empty directory. npm's own install output is trimmed; the six lines printed by init --demo are unedited, and the three commands it suggests are the ones the rest of this page runs.

See it

Terminal recording: flow init --demo, status, a blocked evaluate --exit-code, and resume
Watch the third command. flow evaluate --exit-code exits non-zero and names the piece of proof that never showed up — the run does not become "done" because the agent said so. The fourth command picks the work back up from exactly that point. Full walkthrough in the docs →

What Flow answers

The status questions that should not depend on a transcript.

01What was this run supposed to do?
02Where did it stop?
03What is it waiting for?
04What proof did that step need?
05What proof actually showed up?
06Why did it move on — or why did it not?
07Did someone sign off on a gap, and who?
08Can a fresh session pick this up?

Example use case

A release path that waits for evidence.

A team asks an agent to ship a pricing-page change. The flow they declare names the required path — plan, implementation, code review, rendered-page verification, release readiness — and what each step has to hand over. The work can only advance when each gate has the evidence it asked for.

The demo that ships with the package is that idea in four steps, and the capture beside this is what it actually does. The run has cleared plan and implementation and reached verify, where the gate asked for test results that were never attached. The run does not become "done." It routes back to the step that can fix it, carrying the reason and the attempt count with it.

flow evaluate — the gate that was not satisfied
$ npx flow evaluate demo --exit-code
route-back verify-gate: Test results are ready for verification. missing
current step: verify
next action: return to verify and replace failing evidence attempt 1/3

Real output from the same demo run as the hero, after attaching the demo's own scoped-diff evidence to clear the implement gate. Unedited; the command exits 1. This is the demo's verify gate, not the release path described on the left — that path is an illustration, and we do not have a capture of it.

Works the way the work actually happens

The conversation can wander.
The gate still asks for proof.

Real sessions do not run in order. The agent grabs the screenshots first, the test run lands three messages later, and the review comes back the next morning from someone else. Tools that audit by insisting on a fixed sequence spend all their time fighting that.

Flow does not care what order the proof arrived in. At each gate it asks one question: is everything this step needs here, recent enough, and from a source you trust? Same answer whether it all landed in one go or in pieces across three sessions. And when something does not hold up, the work routes back — it returns to the step that caused the problem, with the reason attached. The run is not broken. It just is not finished.

The difference

A trace says what happened.
Flow says whether it was enough.

Observability is necessary, but a trace alone does not know whether the right verification happened, whether approval had enough context, or whether the agent skipped a required handoff.

Flow turns required paths into evidence-gated transitions. If the evidence is missing, the run blocks or routes back. If the user accepts the gap, the exception becomes part of the record.

Flow Definition
The required path — linear or a dependency DAG — and gate expectations
Flow Run
One concrete execution with state and history
Gate Evidence
Tests, CI, traces, approvals, Veritas reports
Flow Report
Current state, blocked gates, next action

Authority over a run

Pausing a run is a decision, and it says who decided.

Stopping a run is not something that just happens to it. flow pause, flow resume-run, and flow cancel each take a small request file saying who asked and why, and that lands in the run's history alongside everything else. A whole process can travel the same way: flow kit validate, install, and inspect turn a way of working into something a teammate can install and check, instead of a wiki page nobody reads.

run lifecycle
$ npx flow pause demo --request pause-request.json
pause: demo
status: paused
request: kontourai.io#231

$ npx flow resume-run demo --request resume-request.json
resume: demo
status: blocked
request: kontourai.io#231

$ npx flow kit validate ./release-kit
valid Flow Kit container: ./release-kit

Real output from the same demo run, unedited except for the blank line inserted between commands. Two lines are worth reading literally. The echoed request: value is the file's own authority.request_ref — here an issue on this site's repo — not the file name. And resume-run reports status: blocked because pause captured the status it interrupted and then put it back. The kit is a two-file container we built for this capture.

Fits your stack

Give the tools you already use one visible definition of done.

Durable workflow engines

Keep Camunda, Temporal, Dapr, Inngest, or Trigger.dev running the work while Flow makes required gates and their evidence inspectable.

Agent frameworks

Run LangGraph, CrewAI, OpenAI Agents, Microsoft Agent Framework, or your SDK of choice and give every loop the same visible completion criteria.

Observability stacks

Turn Phoenix, LangSmith, AgentOps, and OpenTelemetry traces into evidence evaluated against a declared gate.

Policy and security tools

Carry OPA, security scanners, and Veritas decisions into the run history so reviewers can see what passed and what was waived.

Flow Console

See the run
where the work happens.

flow console --run <id> opens a page on your own machine that reads the run straight out of .kontourai/flow/runs/<id>/ — the path the work took, every gate it cleared or stopped at, and the evidence behind each one. It updates while the run does. It picks a free port unless you name one with --port, and it only ever listens on your own machine: no account, no upload, nothing hosted.

Process graph
See the required path and where the run sits on it right now.
Transition timeline
Walk every gate the run cleared, blocked on, or routed back from.
Gate detail
Inspect the evidence a gate expected and what was actually collected.
Evidence links
Jump from a gate to the tests, CI, traces, or readiness reports behind it.
flow console
$ npx flow console --run demo --port 4317
Flow Console: http://127.0.0.1:4317/
run: demo
Press Ctrl+C to stop.

Real output from the same demo run, unedited. Three lines is all that flow console prints; it then holds the terminal until you stop it. Everything else the console has to show is in the page it serves.

Where Flow fits

Flow is the record.
Flow Agents is what puts it in your editor.

Flow on its own is a CLI and a library — you point it at whatever is already running your work. If you would rather not wire anything up, Flow Agents ships these checkpoints into your coding agent already set up: blocking in Claude Code and Codex, advisory everywhere else.