Typed orchestration.
Perfect memory.

Write deterministic programs. Make typed Tool calls.
Inspect and replay what happened.

flow/main.flow ▶ Run
// A first Flow program.

pub flow main() -> Int = {
    21 * 2
}
$ flow run
42

Typed calls

Declare what each Tool accepts and returns. Check the program before running it.

Recorded decisions

Inspect the observations and choices that a run could not compute for itself.

Replay without effects

Reproduce a recorded run without calling its external implementations.

Read it. Run it. Understand it.

A small example, from a typed call to recorded replay.

1 Write a flow

Declare a Tool and compose it in a checked program.

@tool flow ask() -> Result<Int, Text>

pub flow main()
  -> Result<Int, ToolProblem<Text>> !tool
  = ask()

2 Run it

Let the browser fixture answer the declared Tool.

Start
Call ./main.ask
Reply {"Ok":42}
End

{"Ok":42}

3 Replay it

Read the recorded reply. No implementation is invoked.

Replay recorded run

verdict: matched

Tool calls during replay: 0
Explore the playground →