A minimal, CLI-agnostic agent harness.
Convention + skills + sub-agents + distilled best-practice docs — with only thin shell glue as code. Drop it into any project; any agent that can run a shell can use it.
The harness is the environment, not a program.
$ git clone https://github.com/harness-mini/harness-mini.git$ bash harness-mini/init.sh /path/to/your/projectWhat's new in v0.10.0: Session ops for cold resume: `harness.sh status` now ends with a single `ready: <ready|warning|blocked> — <next>` verdict (plan-scoped, so foreign checkpoints no longer lie). Checkpoint gains an additive `## Task state` block; stage-viewer documents a plan-stage write ban for intake/prd/issues. Assumptions A6/A7 registered. Changelog →
- skills
- 16
- sub-agents
- 5
- runtime deps
- 0
- the one rule
- 40%
skills
sub-agents
runtime deps
the one rule
Convention, not code
The harness is a structure of Markdown + thin shell glue. There is no program to run — the repository is the system of record, and any shell-capable agent can read it.
Context firewalls
Heavy reads and broad searches are delegated to disposable sub-agents that burn their own window and return a small distillate. The caller never leaves the smart zone.
CLI-agnostic
Skills and agents install to .claude/ for Claude Code; a neutral manifest points other CLIs — codex, cursor — at the same files. One harness, any agent.
The 40% line
Context occupancy below 40% is the smart zone — comfortable headroom to reason and hold the whole task in view. 40% is a conservative checkpoint line, not a hard cliff: our own CIB benchmark found that what degrades quality is interference — competing content in the window — not how full it is. So the mechanisms below earn their keep by keeping that content out.
configurable via HARNESS_CTX_THRESHOLD · estimate with bin/ctx.sh <used> [window]
Delegate heavy work
Any operation that would read more than ~2k tokens goes to the explorer sub-agent — the load-bearing mechanism that doesn't depend on an agent measuring itself.
Checkpoint at 40%
Crossing the line means checkpoint now, while still sharp: write a handoff, update the plan, reset. Waiting until 90% is fatal — the handoff itself would be degraded.
Progressive disclosure
AGENTS.md is a ~100-line map of pointers, never an encyclopedia. Start near-empty; pull a file only when you need it. Most headroom for the least effort.
A lifecycle you live inside
Every requirement is a file with a stage: field. Work flows through a fixed FSM — and only the main agent may advance it.
- intake
- prd
- issues
- implement
- evaluate
- checkpoint
- done
implement ⇄ evaluate loops until acceptance criteria pass. garden runs orthogonally, periodically — across the whole lifecycle.
Anti-self-praise firewall
No worker promotes its own work to done. The evaluator grades from a separate window, and only the main agent advances the stage.
Garden runs orthogonally
Technical debt is paid in small, continuous installments. The gardener periodically demotes stale context and opens small, green, one-move fixes.
16 skills, by stage
Skills install to .claude/skills/ and encode how to do a task — invoked at the right point in the lifecycle.
Orchestrate
5Intake
1Plan
2Implement
5Evaluate
1Maintain
25 sub-agents
Separate context windows are firewalls. Each agent has a role, a model sized to it, and a strict boundary it never crosses.
planner
sonnetgoal → exec-plan + issuesExpands a goal into a committed PRD and atomic issues. Runs the founder funnel on new projects. Writes no production code.
generator
sonnetbuild one slice via TDDImplements one issue at a time, test-first, under the layering contract. Hands the slice to the evaluator — never grades its own work.
evaluator
opusgrade vs criteriaGrades work from a separate context window — the firewall. Evaluation scales with risk (L0/L1/L2); the L2 Opus pass is reserved for high-stakes work. Verifies by running tests/app; returns pass/fail with evidence.
explorer
haikudisposable read/search → distillateRead-only fan-out. Burns its own context on heavy searches, returns a short distillate, and dies. The context firewall.
gardener
haikuentropy GC / doc-gardeningPeriodically scans for drift and opens small, green, one-move fixes. Keeps the repo coherent and the smart zone smart.
Installs like a skill
Tell your agent “install harness-mini here”, or clone and run the installer. init.sh is additive (never overwrites your files) and idempotent (safe to re-run).
New / empty project
Generative bootstrap — seeds an intake plan and runs the founder funnel: founder-check → five-step → to-prd → to-issues.
Existing project
Recon graft — installs additively and seeds a recon plan; the explorer maps your codebase into ARCHITECTURE.md.
$ git clone https://github.com/harness-mini/harness-mini.git$ bash harness-mini/init.sh /path/to/your/projectSkills install to .claude/skills/ and agents to .claude/agents/ (auto-loaded by Claude Code); harness/manifest.md is a neutral pointer list for other CLIs.