Skill · pattern · harness-design
Design a harness
Build or adopt a harness — the opinionated runtime around the loop: filesystem workspace, progressive-disclosure skills, planner, subagents, sandbox, verifier, permissions. Use for coding or long-horizon research products. Do not start from a blank ReAct loop.
GET /api/canon/skills/harness-design?format=md
A harness is not a framework. It is the missing outer loop: files as truth, skills as cache, plan/act as permissions, verify as done.
When
The product is a desk, not a chat wrapper. Claude Code, Codex, OpenHands, Cline, Goose, Deep Agents converge here.
Do
- 01
Start from a harness
Replace pieces. Do not rebuild Claude Code poorly on a blank graph.
- 02
Workspace on disk
Disk is source of truth; the window is a cache. Repo map + apply_patch.
- 03
Skills + subagents + sandbox + verifier
Progressive disclosure. Isolated children. Allow/ask/deny. Test command in the loop.
Don't
- Start from a blank LangGraph and reinvent the desk.
- Make computer-use the first tool for a git repo.
Hard rules
- Harness quality: workspace, skills, plan/act, subagents, sandbox, verifier.
- Done = reviewable diff + tests + human gate.
Refuse
- Unsandboxed exec — A shell or code-act tool on the host with production credentials.
- No verifier in the loop — The agent writes code and declares victory. Tests, typecheck, and build are optional.
- Computer-use as the first tool — A browser or desktop agent used where an API, a workflow, or a grep would do.
Load with this
Load next
- Coding agentThe product is software engineering — PRs, tests, and a desk, not a chat wrapper.
- Write a skillExpertise should load sometimes, not always. The constitution (AGENTS.md) is too coarse; a prompt dump is too fat.
- Plan / actSide effects need a human-agreed shape. Plan is a file, not a thought.
- Spawn subagentsProtect the parent window, parallelize, or apply a different skill set.
Trigger tests
Should fire
- “We need a coding harness”
- “What's the difference between a framework and a harness?”
Should not
- “A single-shot summarizer”