---
title: process
description: Cross-platform child-process runtime. Required on Windows.
---

<div style={{ display: "flex", alignItems: "center", gap: "0.75rem", margin: "0.5rem 0 1.25rem" }}>
  <Logo name="windows" size={28} color />
  <span style={{ fontSize: "0.8125rem", color: "var(--color-fd-muted-foreground)" }}>Slot: <code>runtime</code> · Name: <code>process</code></span>
</div>

Spawns agents as plain child processes — no tmux involved. Use this on Windows (where tmux isn't available) and in any environment where you'd rather not depend on tmux.

<PlatformSupport macos="full" linux="full" windows="full" />

## Use

```yaml title="agent-orchestrator.yaml"
runtime: process
```

No plugin-level config.

## How it works

- AO spawns the agent via Node's `child_process.spawn` with `shell: true`.
- Stdout + stderr are captured in a rolling 1000-line buffer.
- The dashboard reads from that buffer over the same WebSocket the tmux runtime uses — you won't notice a difference in the UI.
- `isProcessRunning` uses a PID-based signal-0 check.

## What you lose vs tmux

- **No tmux attach.** `ao session attach` doesn't work. Use the dashboard terminal instead.
- **No reconnecting to the agent's TTY.** If you `ao stop` the orchestrator, the child process goes with it. The agent's own session-resume features (Claude `--resume`, Codex `resume`, etc.) still work — that's a different layer.

## When to pick it

- **Windows** — this is the only runtime that works.
- **Docker / CI-like environments** — fewer moving parts, no tmux install.
- **You never attach interactively** — the dashboard terminal covers all your attach needs anyway.
