In one paragraph
An agent harness is the code around a model that runs one agent: the loop, the tools, the state and the place it runs. The projects here start from different parts. Some ship a ready coding agent with extension points. Some treat state as an event log or as plain conversation history. Others tune the harness for each task or study how to compose components safely.
What counts here: frameworks, harness designs and reference stacks for building one agent: its loop, tools, state and runtime.
The main approaches
Harness frameworks
These give you a working agent loop with tools and state, and a way to extend or host it. They differ in where the weight sits.
- Ready agents with extension points. goose is a Rust agent with a desktop app, a CLI and an embeddable API, 15+ model providers and MCP extensions. pi is a monorepo with a unified LLM API, an agent runtime and a TUI coding agent. It leaves out sub-agents and plan mode on purpose and expects you to add them through extensions, skills and packages.
- State as data. tardigrade folds an immutable event log into agent state with atoms, on Cloudflare Workers or Celld. infinity keeps a waiting agent as only its conversation history, so an idle agent costs nothing. Its tool protocol delivers results to agents with no running process.
- Layered stacks and platforms. ecosystem-overview is a README map of a stack: Chronicle storage, Membrane for LLM calls, a context manager and an agent framework. equin pairs an agent manager with a shared plugin system for building large apps. singularity is a Bun plugin monorepo with Claude memory and skills directories at its root.
- Harness as a training and tuning target. feather-train has one harness with prod and train profiles, plus packages for rollouts and Harbor evaluation. harness2 edits a harness’s prompts, skills and tool guidance per task while model weights stay fixed.
Composition research
This work asks how harness and plugin components can be added and removed without breaking each other. paper is a preprint that uses effect and coeffect theory to define temporal and spatial composability. It proves that components can interleave without disturbing each other. Its implementation target is the Cordis meta-framework.
Map of the theme
flowchart LR t["Agent harnesses and frameworks"] t --> f1["Harness frameworks"] t --> f2["Composition research"] f1 --> r1["aaif-goose/goose"] f1 --> r2["earendil-works/pi"] f1 --> r3["anima-research/ecosystem-overview"] f1 --> r4["Conchylicultor/equin"] f1 --> r5["Conchylicultor/singularity"] f1 --> r6["hydro-project/infinity"] f1 --> r7["clavia-labs/tardigrade"] f1 --> r8["paper-instruments/feather-train"] f1 --> r9["google-research/harness2"] f2 --> r10["cordiverse/paper"]
Where the new ideas are
- infinity: an agent between turns is pure data, and tools reach it through a protocol that needs no open connection.
- tardigrade: durable state derived from an event log through composable atoms.
- harness2: the harness itself is optimized per task, by proposing edits, probing them and composing the result.
- feather-train: the same loop and tools serve live work and training rollouts through two profiles.
- pi: strong defaults with deliberate gaps, filled by packages shared over npm or git.
- paper: a formal account of removing a component and cleanly reverting its effects.
Side by side
| Repo | Approach | State | Interface or hosting | Extension or tooling |
|---|---|---|---|---|
| aaif-goose/goose | Harness frameworks | Not stated | Desktop app, CLI, embeddable API | 70+ MCP extensions, 15+ providers |
| earendil-works/pi | Harness frameworks | Agent runtime with state management | TUI CLI, print and JSON modes, RPC, SDK | Extensions, skills, prompt templates, packages over npm or git |
| anima-research/ecosystem-overview | Harness frameworks | Chronicle append-only store with branches and time travel | Modules for Discord, files, API and MCPL | Context strategies: passthrough, autobiographical, knowledge |
| Conchylicultor/equin | Harness frameworks | Not stated | Agent manager running dozens of sessions in parallel | Plugin system for reusable pieces |
| Conchylicultor/singularity | Harness frameworks | Claude memory directories at the root | Bun workspace monorepo | Plugins under plugins/ |
| hydro-project/infinity | Harness frameworks | Idle agent is its conversation history | Resident process or serverless such as AWS Lambda | Reactive Agent Protocol, MCP compatibility layer |
| clavia-labs/tardigrade | Harness frameworks | Immutable event log folded by atoms | Cloudflare Workers or Celld | Atoms wired with defineActor |
| paper-instruments/feather-train | Harness frameworks | Context compaction | Local CLI, E2B sandboxes for rollouts | prod and train profiles, Harbor ATIF export |
| google-research/harness2 | Harness frameworks | Memory is one of eight editable components | Not stated | Propose, Probe, Compose refinement per task |
| cordiverse/paper | Composition research | Not stated | Cordis meta-framework as implementation target | Declarative component loader with hot module replacement |
How the idea moved
flowchart LR n1["started Aug 2024<br/>aaif-goose/goose"] n2["started Aug 2025<br/>earendil-works/pi"] n3["started Feb 2026<br/>anima-research/ecosystem-overview"] n4["started Apr 2026<br/>Conchylicultor/equin"] n5["started Apr 2026<br/>Conchylicultor/singularity"] n6["started Apr 2026<br/>hydro-project/infinity"] n7["started Aug 2026<br/>clavia-labs/tardigrade"] n8["started Aug 2026<br/>cordiverse/paper"] n9["started Sep 2026<br/>paper-instruments/feather-train"] n10["started Oct 2026<br/>google-research/harness2"] n1 --> n2 --> n3 --> n4 --> n5 --> n6 --> n7 --> n8 --> n9 --> n10
- started Aug 2024 · goose · Adds: a local general-purpose agent offered as a desktop app, a CLI and an embeddable API, with 15+ model providers and 70+ MCP extensions.
- started Aug 2025 · pi · Adds: a separable toolkit of unified LLM API, agent runtime and TUI, with deliberate gaps filled by extensions, skills and packages shared over npm or git.
- started Feb 2026 · ecosystem-overview · Adds: a layered map of a research stack, from a branchable event store through LLM middleware and context management to an agent framework, showing which app sits on which layer.
- started Apr 2026 · equin · Adds: an agent manager for parallel sessions plus a shared plugin system, so apps built on it reuse the same pieces.
- started Apr 2026 · singularity · Adds: a personal computing environment laid out as a Bun plugin workspace, with Claude memory, skills and MCP configuration beside the app plugins.
- started Apr 2026 · infinity · Adds: a Rust runtime where waiting agents are plain conversation history, with a tool protocol that delivers results to agents that have no running process.
- started Aug 2026 · tardigrade · Adds: durable agent state derived from an immutable event log through composable atoms, hosted on Cloudflare Workers or Celld.
- started Aug 2026 · paper · Adds: a formal calculus of revertible effects and reactive coeffects for composing components, with a proof that components interleave without disturbing each other.
- started Sep 2026 · feather-train · Adds: one knowledge-work harness with prod and train profiles, plus packages for sandboxed rollouts, grading and Harbor evaluation.
- started Oct 2026 · harness2 · Adds: per-task refinement of an agent’s prompts, skills and tool guidance by proposing, probing and composing edits, with model weights fixed.
Easily confused
- An LLM SDK or provider library. A harness includes the loop, tools and state around the model, not just the call to it. Some projects here bundle a provider layer, but it is one part.
- A coding assistant product. Goose and Pi are usable coding agents, but the theme also covers the runtime and state design underneath an agent, such as event logs or hibernating conversation history.
- Multi-agent orchestration. The focus is building one agent well. Some stacks do coordinate several agents, but the theme is about a single agent’s loop, tools, state and runtime.
- Prompt tuning. Harness2 edits prompts, but also skills, guardrails, memory, subagents, scripts and plugins, and it does so per task with the model weights unchanged.
Gaps nobody has filled
- A shared state format is missing, so event logs, conversation histories and branching record stores cannot be moved between harnesses.
- Per-run cost or token budgets are not part of the harness design.
- The formal composition work is not tied to a measured effect on a working coding or knowledge-work agent.
- Skills, prompt templates and packages written for one harness have no described way to load into another, beyond MCP servers.