Skip to specification

Teardowns

The Harness pillar names eleven primitives every coding agent needs an answer for. This register examines shipping harnesses as prior art: each unit is walked down the same eleven slots, and every slot is marked — built into the core, filled by config or extension, or deliberately left empty with an argument. No new vocabulary; the point is recognition. The two units so far sit at opposite poles of the design space, which is exactly why they teach.

Reference units — one sheet per harness

  1. OpenCode — the harness as a serverThe most starred open-source coding agent answers every one of the eleven slots, and answers them the same way: put it in the server. The agent loop is a headless HTTP service with a published OpenAPI contract; the terminal UI, the desktop app, the web viewer, the IDE extension, and the CI job are all thin clients watching one event stream.Read it as: a power plant with many outlets920
  2. pi — the harness by subtractionMario Zechner's coding agent keeps the loop small enough to hold in your head — a system prompt under a thousand tokens, a handful of tools — and answers most of the eleven slots by refusing them, with a published argument for each refusal. The empty cells on this sheet are not gaps; they are the design.Read it as: a hand tool632

Side by side — same eleven slots, opposite fills

  1. 01Instructions

    Built in

    AGENTS.md · agents as markdown

    Built in

    <1k-token prompt · AGENTS.md

  2. 02Context Delivery

    Built in

    ripgrep · glob · LSP diagnostics

    Built in

    grep · find · read — no index

  3. 03Context Management

    Built in

    buffer 20k · keep 8k · checkpoints

    Built in

    reserve 16,384 · keep 20k · /compact

  4. 04Tool Interfaces

    Built in

    Zod schemas over the API · MCP + OAuth

    Built in

    TypeBox · no MCP · CLI + README

  5. 05Execution Environment

    Via config or extension

    allow / ask / deny · per-agent overrides

    Deliberately omitted

    no gates — run it in a container

  6. 06Durable State

    Built in

    SQLite via Drizzle · git snapshots · /undo

    Built in

    JSONL session trees · /tree · PLAN.md

  7. 07Orchestration

    Built in

    session loop · /event SSE bus

    Via config or extension

    TUI · JSON · RPC · SDK — tmux for long work

  8. 08Sub-agents

    Built in

    child sessions · @mention · explore/scout

    Deliberately omitted

    pi spawns pi, via bash

  9. 09Skills & Procedures

    Built in

    SKILL.md · plugins · lifecycle hooks

    Built in

    SKILL.md · templates · extensions

  10. 10Verification & Observability

    Built in

    28+ LSPs · live session share

    Via config or extension

    nothing hidden · tool_result hooks

  11. 11Evolution

    Via config or extension

    config as code · versioned rules

    Via config or extension

    ~/.pi and .pi/ · pi.dev/packages

Built in
Ships in the core; works with no configuration.
Via config or extension
The slot is real but you fill it — config, extension, or convention.
Deliberately omitted
Left out on purpose, with a stated argument for the gap.

Neither column is the right answer. OpenCode answers every slot in the core and pays in surface area; pi refuses half the slots and hands you the safety gear. What the table teaches is that the eleven slots are real — every harness must decide each one, and even an empty cell is a decision with an argument attached.

11The lens these sheets look throughThe Harness — eleven primitives