Write the workflow.
Keep the record.

Typed calls, recorded observations,
replay without external calls.

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

pub flow main() -> Result<Int, ToolProblem<Text>> = ask()
{"Ok":42}
Example binding
Browser fixture
Recorded replay
matched
External calls during replay
0

From source to replay

Follow the answer from a typed call into its recorded history.

1 Write source

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

ask()
→ Result<Int, Text>

2 Call a Tool

The browser fixture supplies an answer. Local applications supply real implementations.

Call ./main.ask

3 Keep the answer

The observation becomes part of the run's semantic history.

Reply {"Ok":42}
End

4 Replay the record

Use the recorded answer. No Tool implementation is called.

verdict: matched
external calls: 0
Inspect the example yourself →

Catch mistakes before running

pub flow main() -> Int = "forty-two"

A Text value cannot satisfy an Int return type.

Make the type agree

pub flow main() -> Int = 42
Learn types and functions →

A local workflow,
from note to signoff

Record a note once. Wait for a reply. Continue the same execution and inspect the evidence.

  1. RecordThe application supplies the implementation.
  2. PauseAn ordinary Tool call waits for its answer.
  3. ResumeSupply a reply to the declared call.
  4. ReplayRead the completed record without repeating the effect.
Build the local workflow →

Local Flow source

use "./tools"

/// Record once, then wait for a decision without repeating the first effect.
pub flow main(note: Text) -> Result<Int, ToolProblem<Text>> = {
    let receipt = tools.record(note)?
    let approved = tools.signoff()?
    if approved { Ok(receipt) } else { Ok(0) }
}

Inspect in your terminal

Use CLI history filters or the optional TUI to inspect recorded calls, exact values and source. Replay verifies the record without repeating Tool effects.

Use the local developer tools →

Get started

Build the CLI, set up your editor, and follow the learning path.

Editor and terminal setup

Install the coherent local development bundle for macOS or Linux. Configure VS Code or Zed with its matching server and std.

Editor setup →

Flow is pre-release. The browser uses deterministic Tool fixtures; local applications bind real implementations. Language and tooling may change before the first public release.