Skip to main content
A harness is the loop that drives an agent: reads messages, calls the model, executes tools, emits events. You pick one in dari.yml with harness: <name>.

Distributed by design

Most harnesses run as a long-lived process on a sandbox — it stays pinned for the whole conversation, and if it dies the session dies with it. Dari pulls the loop out of the sandbox and drives it from the control plane, touching the sandbox only when a step needs it.
Traditional sandbox-bound harness vs Dari's control-plane-driven harness, where the loop runs in the control plane and dispatches per-step tasks to many sandboxes
Each step is a discrete task, so sessions are:
  • Durable: a restarted worker picks up where the previous one left off.
  • Resumable: sessions can idle between messages without a worker holding memory.
  • Replayable: every step is recorded as an event.
  • Scalable: a single agent can drive many sandboxes in parallel, and workers scale independently of session count.
The Pi fork is how we adapt Pi to this model; future harnesses plug in behind the same step protocol.

Available harnesses

Pi

Supported today. We maintain a distributed fork of Pi so sessions can be driven one step at a time from the control plane.

More harnesses

In progress. Dari is designed so additional harnesses can plug in behind the same public API.