Let the prompt-only run expose the gaps
Aha: repeated human rescue is system evidence.
Trap: immediately rewriting the prompt before recording the failure.
Prove: classify at least three interventions.
Keep: harness-audit.md
Do not ask the model to remember your project. Engineer the environment so a fresh agent can enter, work, verify, hand off and continue.
Operationalise persistent instructions, context delivery, tools, environment, durable state, verification and deterministic controls around a delegated AI responsibility.
One Git repository, an AI coding/task agent, shell access and one bounded task that can be checked objectively.
Run the task once with prompt-only instructions, then improve the system one harness layer at a time.
A minimal harness pack you can reuse in other repositories, plus evidence showing which parts actually improved reliability.
Use the shared Field Guide Lab Method. Harness structures should be earned by observed failures and measured against the weaker baseline.
You may be thinking: “My agent keeps missing things, so I need a better prompt or a bigger AGENTS.md.” Sometimes that helps. Very often it only makes the instructions longer while the underlying system stays fragile.
The harness is not the prompt. It is the system around the model that makes the work understandable, bounded, resumable and testable. If a human must repeatedly retell context, decide what “done” means or reconstruct the previous session, the harness is still depending on the human.
Open a completely fresh session with no chat history. It should be able to explain the project, locate the relevant code, name the hard constraints, identify the current task and run the correct verification path using repository artifacts only. Anything you still need to explain manually is evidence of the next harness gap.
| Subsystem | What it answers | Typical artifact |
|---|---|---|
| Instructions | What matters, what is forbidden, where should the agent look? | AGENTS.md + linked docs |
| Context delivery | How does the delegated agent reliably find the right context every run? | context-delivery map |
| Tools | What can the agent inspect, run and change? | capability registry |
| Environment | Can a fresh session start from a known state? | bootstrap/init script |
| State | What is done, active, blocked and next? | feature list + progress/handoff |
| Feedback | How does the agent know whether work is correct? | tests + evaluators + evidence |
| Controls | Which critical rules should not depend on model memory? | hooks / gates / protected commands |
| Maintenance | Which harness pieces still earn their complexity? | pruning + ablation log |
A harness does not replace Prompt or Context Engineering. Those belong to Work With AI. The harness operationalises them so a delegated agent can reliably discover instructions and context, act with bounded tools, preserve state and verify work without a human rebuilding the setup every session.
Each lab starts from a failure, changes one structural element and asks you to prove that the change mattered.
Aha: repeated human rescue is system evidence.
Trap: immediately rewriting the prompt before recording the failure.
Prove: classify at least three interventions.
Keep: harness-audit.md
Aha: root instructions should point, not explain everything.
Trap: giant AGENTS.md.
Prove: fresh session finds project, constraints and verification alone.
Keep: AGENTS.md
Prerequisite: Context Engineering in Work With AI decides what context matters and which source wins.
Aha: a delegated agent should find the right context without a human rebuilding the context pack every run.
Trap: duplicate/stale copies of the same source.
Prove: a fresh run finds the correct context and source precedence alone.
Keep: context-delivery map
Aha: unknown starting state wastes intelligence on plumbing.
Trap: every agent rediscovers setup.
Prove: one command reports readiness.
Keep: scripts/agent-init.sh
Aha: a backlog is not a work plan. Default to WIP=1 unless parallel work is intentional and isolated.
Trap: every nearby task becomes eligible.
Prove: fresh session identifies the active responsibility, exclusions and required evidence without guessing.
Keep: feature-list.json + active-work contract
Aha: a handoff is operational state.
Trap: chat summary as the only record.
Prove: a fresh session resumes without reconstruction.
Keep: progress + NEXT.md
Aha: task evidence, full-pipeline evidence and clean-state evidence are different claims.
Trap: one green unit test becomes permission to stop.
Prove: requested behavior works, the relevant end-to-end path still works, and the state is safe to hand off.
Keep: verification / termination map
Aha: “always do X” in prose is not a guardrail.
Trap: fake determinism.
Prove: one critical rule is enforced without model memory.
Keep: deterministic-control map
Aha: asking “are you sure?” is not independence.
Trap: maker controls its own evidence.
Prove: checker can reject a plausible completion claim.
Keep: evaluator rubric
Aha: capability is authority.
Trap: every tool, everywhere.
Prove: each capability has purpose, boundary and failure route.
Keep: capability registry
Aha: observability is easier when the run began with explicit goal, scope, exclusions, authority and verification.
Trap: stronger prompt after every failure.
Prove: identify which contract clause failed before retry.
Keep: working contract + run record
Aha: dirty exits become hidden context, and hidden debt becomes the next agent’s surprise.
Trap: code compiles, so cleanup is “done.”
Prove: blockers, debt, temporary artifacts and task state are explicit; cleanup is safe to repeat where possible.
Keep: lifecycle checklist + quality / known-debt record
Aha: harnesses accumulate debt too.
Trap: measuring maturity by file count.
Prove: remove one component and compare behavior.
Keep: pruning / ablation log
Repeat the baseline with a fresh session, then deliberately remove a component.
Prove: keep only structures whose value you can demonstrate.
Keep: reusable harness starter pack
| Layer | Question | Example evidence |
|---|---|---|
| Task | Did the requested behavior actually appear? | Acceptance test, expected output, behavior check |
| System | Does the relevant full path still work? | E2E run, integration path, architectural invariant |
| Clean state | Can another session safely continue? | Known debt recorded, temp state cleaned, active task updated, handoff written |
Stopping is a harness decision, not a mood. A capable agent can be locally correct and still leave the system or the next session in a broken state.
Goal:
Scope:
Exclusions:
Authority:
Verification:
Expected evidence:
Stop when:
Escalate when:
The contract makes observability useful: after a failure you can ask which promise broke instead of staring at a pile of logs.
Do not create a new file, hook, agent or rule merely because the concept sounds mature. Add structure when an observed failure justifies it.
A mature harness is not the one with the most structure. It is the smallest structure you can defend with observed behavior.
Start small. Four files can already change agent behavior substantially:
AGENTS.md
feature-list.json
docs/working/progress.md
scripts/agent-init.sh
# AGENTS.md
## Mission
What this repository does and who it serves.
## Start here
1. Run: ./scripts/agent-init.sh
2. Read: docs/architecture.md
3. Read current work: docs/working/NEXT.md
## Non-negotiables
- Do not change ...
- Preserve ...
- Never mark work complete without ...
## Verification
- Unit: ...
- Integration: ...
- End-to-end: ...
## Deeper docs
- Product rules: docs/product.md
- Architecture: docs/architecture.md
- Operations: docs/operations.md
{
"id": "F03",
"behavior": "User can export the report as CSV",
"verification": "npm test -- export-report",
"state": "not_started",
"evidence": null
}
For every important task, write the definition of done before implementation. The strongest completion criteria are observable behaviors and executable checks, not vague phrases such as “works correctly” or “looks good”.
Open a new agent session with no chat history. Can it explain the project, find the relevant code, identify hard constraints, run verification and state what it should do next using only repository artifacts? If not, the harness is still depending on you.
| Observed failure | Likely layer to inspect first |
|---|---|
| Agent repeatedly asks what the project does | Instructions / repository map |
| Works in one session, forgets everything in the next | Durable state / handoff |
| Changes too much unrelated code | Scope representation / constraints |
| Says “done” while UI/API behavior is broken | Feedback / definition of done |
| Cannot run or reproduce the app | Environment / bootstrap |
| Keeps retrying the same wrong fix | Observability / failure attribution / routing |
Your agent can now enter, work, verify and hand off more reliably. But if you are still manually starting every cycle and deciding what happens after success or failure, you have built a harness — not yet an autonomous loop. That is the next Give AI Work builder problem.
Next: Loop Engineering — stop being the person who presses Continue →