The system at a glance
What runs where, what Laufwerk records, and how a request becomes a result.
Laufwerk coordinates a process you write in TypeScript. Your code decides when to ask an agent, run a check, request a person's input or finish. The runtime records progress at durable boundaries so that later execution can reuse completed work.
Five pieces to picture
| Piece | In a research-and-draft workflow |
|---|---|
| Workflow | Research → write → review → accept or revise |
| Run | One execution for the request brief-42 |
| Agent | Reusable researcher or writer configuration |
| Session | One agent conversation and its execution environment |
| Workspace | Optional managed files shared with sessions |
Studio and the CLI are ways to operate these pieces. They do not define a second workflow language.
You / application
↓ start a workflow with input
Laufwerk runtime ↔ SQLite: recorded work and pending decisions
↓ runs your TypeScript
Code checks → agent sessions → human review → result
↓
Local or Docker execution
↔ model providerFollow one run
- You submit a topic with a stable request ID.
- The runtime finds an existing run or starts new work.
- The workflow asks a researcher and validates its structured answer.
- A writer receives the research your code passes to it.
- The workflow records a review question and waits for a person.
- The answer becomes input to the next branch: accept, revise or decline.
Human review and agents are optional. Hello World is still a workflow: it simply returns a greeting.
Where the boundaries are
Your workflow source stays in the project. SQLite stores operational records and Effect's durable execution state in separate databases. Model requests go to the configured provider. A JavaScript custom tool runs on the host unless its code explicitly delegates work elsewhere; placing the agent in Docker does not move that handler into the container.
Closing a browser does not delete recorded work. Continuing execution still needs a running worker or a later command. Durability saves results and pending work, not a suspended JavaScript stack.
Try it: run Hello World, then find the same run using both the CLI and Studio.