Agent Cockpit

An AI agent orchestrator running on my own machine: a task queue, one isolated git worktree per task, and nothing sensitive executed without my approval.

TauriReactTypeScript Nodegit worktreelocal-first

The problem

Running several coding agents in parallel creates three very concrete problems: they collide inside the same repository, they burn a quota nobody can see, and when one of them half-fails, nothing says so. Launching them by hand in separate terminals stops working past two or three tasks.

Architecture

Agent Cockpit architecture Local Tauri application. The UI reads and writes a file store; the runner takes tasks from the queue and starts each agent in its own git worktree. Plans from the ceo agent create nothing without human approval. Tauri · macOS — no data leaves the machine plan creates tasks starts writes UI React Decide · Tasks Agents · Projects Store local files COCKPIT_DATA Runner queue · locks auto recovery Approval human, mandatory ceo plan ≤ 8 tasks Coding agent explicit scope git worktree 1 tree / task
Everything runs on the Mac: no server, no API token in transit.
Text version
Tauri app (macOS) — no data leaves the machine
  ├── React UI    To decide · Tasks · Agents · Projects · Search
  ├── Runner      pulls tasks off the queue, runs the agent, releases the lock
  ├── Store       plain files under COCKPIT_DATA, no remote service
  └── worktree    one isolated git worktree per task

"ceo" agent: goal → YAML plan (8 tasks max) → human approval → queue

The decisions that matter

The lesson

A tool that fails silently is worse than a tool that crashes. Four incidents in a row all came from an invisible defect, never a severe one: a React crash with no error boundary (black screen), a runner quietly running old code, a "Validate" button live on an unusable plan, a task frozen by an orphaned lock. Every fix amounts to making the degraded state visible — error boundary, schema fingerprint, explicit blocking, automatic recovery. Since then, every feature is designed by first asking what it looks like when it only half succeeds.

Status

A personal tool in daily use, not a product: it is not deployed on the cluster and is not distributed. Figures read from the repository on 2026-09-21.