Meta-Harness (native)
What this is
Meta-Harness optimizes the harness, not the model. The harness is the code around a
fixed base model that decides what to store, retrieve, compress, and show while the model
works. You hold the model frozen and search over that scaffolding: propose candidate variants,
score each on a cheap deterministic eval, keep a Pareto frontier (quality up, cost down),
and iterate. The proposer is an LLM agent writing code; the inner loop is a cheap scorer.
The Stanford repo (stanford-iris-lab/meta-harness) ships a Python driver —
claude_wrapper.py (720 lines) + meta_harness.py (540 lines) — that reimplements an
agent runtime to drive a headless Claude: spawn a session, parse stream-json, track tool
calls, log everything, loop. You already are that runtime. So you run the same loop with
native tools (Agent, Workflow, /loop) and keep only the irreducible domain logic — a $0
scorer. The orchestration was never the hard part; your harness provides it.
This skill is the method, reusable for any harness-optimization task. A fully worked
example (optimizing proteus's campaign-memory summarizer) lives at ~/mh-proteus/ and is
walked through in references/proteus-example.md.
When to use this
Strong fit when several of these hold (full criteria in references/method.md):
- The base model is fixed and the opportunity is better retrieval / memory / context /
prompting / tool scaffolding. (This is the whole premise — if the gain must come from the
model weights, this is the wrong tool: do RL/fine-tuning instead.)
- There are repeated episodes / tasks, not a one-off.
- There is a cheap, deterministic eval with a real success signal — or you can build one.
- The search set is large enough to expose failure modes, small enough to iterate.
- There are recurring error patterns a harness could fix systematically.
Poor fit: no stable eval loop, or purely subjective quality with no measurable criterion.
The loop (mental model)
seed frontier with the incumbent harness (the thing to beat)
repeat until budget/convergence:
PROPOSE k candidate harness variants (proposer agents write code)
VALIDATE each imports / type-checks (cheap reject of broken candidates)
SCORE each on the held-out-protected eval set ($0 deterministic scorer)
FRONTIER Pareto-merge (quality up, cost down), floor-respecting
FINAL: score the frontier once on the untouched TEST split
The proposer is the mutation+crossover operator. The frontier is the persistent search memory.
The held-out test split is touched exactly once, at the end — never during the search.
The five things YOU supply (everything else is native)
The orchestration is native; the domain is yours. Build these five — templates in assets/,
how-to in references/building-blocks.md:
- Candidate interface — one clean, swappable boundary (an ABC / Protocol). A candidate is a
drop-in implementation. If your harness logic is tangled into one big function, extract the
boundary first. →
assets/candidate_base-template.py
- A $0 deterministic scorer + rubric — the inner loop. It must vary with the candidate
(see the frozen-replay trap below) and run with no LLM / no network so you can call it
hundreds of times for free. →
assets/scorer-template.py
- An eval corpus with a held-out split — the tasks/records candidates are graded on, split
so the test set shares no leaky structure with the search set.
- A proposer prior — a short mini-SKILL the proposer agents load that steers them toward
mechanism-level changes (not constant-tuning) and enforces anti-leakage.
→
assets/proposer-prior-template.md
- A frontier + run log — the state carried across iterations (a JSON/JSONL pair, or just
workflow variables). →
scripts/pareto.py computes the frontier deterministically.
Non-negotiable guardrails — read before you run
These are where naive harness searches silently fail. Full treatment in references/method.md.
- The frozen-replay defect (the #1 trap). If your eval replays cached outputs (a recorded
run, a frozen trace), then a scaffolding candidate cannot change the recorded result —
only the cost axis moves. A naive Pareto search then "wins" by emptying the context while the
frozen quality score never drops, producing a confident, meaningless frontier. Fix: grade
a quantity that genuinely varies with the candidate (retrieval relevance, compression
fidelity, decision counterfactuals), and/or run quality as a one-sided do-no-harm floor
rather than a maximize axis.
- Held-out discipline. The proposer must see only the search-set results and the frontier —
never the test split. Score test once, at the end.
- Anti-Goodhart floor. The proposer is the most capable optimizer you have; it will exploit
a soft metric. Put a hard floor on quality (and fix any known reward bugs) so it cannot win by
degrading the thing you actually care about.
- Anti-leakage. Forbid candidates from hardcoding any value from the eval set. Candidates
must generalize to unseen tasks.
How to run it natively — pick a mode
| Mode |
Use when |
How |
| Workflow (default) |
a real search; want parallel proposers, journaled + resumable |
assets/workflow-template.js via the Workflow tool |
skill + /loop |
leanest; you act as the proposer yourself, serially |
a mini-skill body looped with /loop |
| Team |
rarely — durable, long-lived proposer/scorer/curator roles |
TeamCreate + tasks + messaging |
Default to Workflow — it is the closest 1:1 to the Python harness and the best for an actual
search. The mapping from each Meta-Harness piece to its native equivalent, and full mode details,
are in references/native-execution.md.
Procedure
- Frame the search. Name the fixed model, the harness surface to optimize, the eval, the
two Pareto axes (quality, cost), and the budget. Confirm fit against
references/method.md.
If you cannot name a cheap eval that varies with the candidate, stop and build one first.
- Build the five blocks from
assets/ templates (or reuse an existing scaffold like
~/mh-proteus/). Validate the scorer runs at $0 on the incumbent before going further.
- Baseline. Score the incumbent harness + a trivial anchor; seed the frontier.
- Choose a mode (default Workflow). Copy
assets/workflow-template.js, set the working
dir, candidate count k, rounds/budget, and the floor.
- Run the search. Proposers write candidates; the $0 scorer ranks them; Pareto-merge each
round. Watch the frontier move (quality held at/above floor, cost dropping).
- Inspect the frontier, not just the best point — the cost/quality tradeoff curve is the
product.
- Promote with re-validation. A frontier winner is a proposal. Before it ships, score it
once on the untouched test split, and (if the search used a proxy eval) validate the proxy
ranking against the real metric. Never let an unvalidated candidate become the new incumbent.
Files in this skill
references/method.md — theory, full fit criteria, the frozen-replay defect, all guardrails,
how to choose the objective. Read when framing a new search or unsure about fit.
references/native-execution.md — the Meta-Harness→native mapping table and all three
execution modes in depth (Workflow / loop / Team), including how scoring runs inside a Workflow.
references/building-blocks.md — how to build each of the five blocks, with worked patterns.
references/proteus-example.md — the end-to-end worked example at ~/mh-proteus/.
assets/workflow-template.js — the native search loop (the default mode). Parameterized.
assets/scorer-template.py, assets/candidate_base-template.py,
assets/proposer-prior-template.md — templates for the domain blocks you supply.
scripts/pareto.py — deterministic Pareto-frontier computation over a results JSONL.
1---2name: meta-harness3description: Run a Meta-Harness-style optimization loop NATIVELY — automatically search over the scaffolding around a FIXED base model (memory, retrieval, context construction, prompt templates, summarization, tool-selection logic) by proposing candidate variants, scoring each on a cheap deterministic eval, and keeping a Pareto frontier of quality vs cost — using native Agent / Workflow / loop tools instead of a standalone Python harness. Use this whenever the user wants to optimize, evolve, tune, distill, or search over a harness, scaffold, prompt system, memory or retrieval policy, context-assembly code, or summarizer while keeping the model fixed; whenever they mention Meta-Harness, harness optimization, scaffold evolution, automatic prompt/memory optimization, an evolutionary or Pareto search over candidate implementations, or "make the harness/agent better without retraining"; and whenever the gain must come from the code AROUND the model rather than the model weights. Reproduces the Meta-Harness paper's method nativ4---5
6# Meta-Harness (native)
7
8## What this is
9
10**Meta-Harness optimizes the *harness*, not the model.** The harness is the code around a
11fixed base model that decides what to store, retrieve, compress, and show while the model
12works. You hold the model frozen and search over that scaffolding: propose candidate variants,
13score each on a cheap deterministic eval, keep a **Pareto frontier** (quality up, cost down),
14and iterate. The proposer is an LLM agent writing code; the inner loop is a cheap scorer.
15
16The Stanford repo (`stanford-iris-lab/meta-harness`) ships a Python driver —
17`claude_wrapper.py` (~720 lines) + `meta_harness.py` (~540 lines) — that **reimplements an
18agent runtime to drive a headless Claude**: spawn a session, parse stream-json, track tool
19calls, log everything, loop. **You already are that runtime.** So you run the same loop with
20native tools (`Agent`, `Workflow`, `/loop`) and keep only the irreducible domain logic — a $0
21scorer. The orchestration was never the hard part; your harness provides it.
22
23This skill is the **method**, reusable for any harness-optimization task. A fully worked
24example (optimizing proteus's campaign-memory summarizer) lives at `~/mh-proteus/` and is
25walked through in `references/proteus-example.md`.
26
27## When to use this
28
29Strong fit when **several** of these hold (full criteria in `references/method.md`):
30
31- The base model is **fixed** and the opportunity is better retrieval / memory / context /
32 prompting / tool scaffolding. (This is the whole premise — if the gain must come from the
33 model weights, this is the *wrong* tool: do RL/fine-tuning instead.)
34- There are **repeated episodes / tasks**, not a one-off.
35- There is a **cheap, deterministic eval** with a real success signal — or you can build one.
36- The search set is **large enough to expose failure modes, small enough to iterate**.
37- There are **recurring error patterns** a harness could fix systematically.
38
39Poor fit: no stable eval loop, or purely subjective quality with no measurable criterion.
40
41## The loop (mental model)
42
43```
44seed frontier with the incumbent harness (the thing to beat)
45repeat until budget/convergence:
46 PROPOSE k candidate harness variants (proposer agents write code)
47 VALIDATE each imports / type-checks (cheap reject of broken candidates)
48 SCORE each on the held-out-protected eval set ($0 deterministic scorer)
49 FRONTIER Pareto-merge (quality up, cost down), floor-respecting
50FINAL: score the frontier once on the untouched TEST split
51```
52
53The proposer is the mutation+crossover operator. The frontier is the persistent search memory.
54The held-out test split is touched exactly once, at the end — never during the search.
55
56## The five things YOU supply (everything else is native)
57
58The orchestration is native; the **domain** is yours. Build these five — templates in `assets/`,
59how-to in `references/building-blocks.md`:
60
611. **Candidate interface** — one clean, swappable boundary (an ABC / Protocol). A candidate is a
62 drop-in implementation. If your harness logic is tangled into one big function, extract the
63 boundary first. → `assets/candidate_base-template.py`
642. **A $0 deterministic scorer + rubric** — the inner loop. It **must vary with the candidate**
65 (see the frozen-replay trap below) and run with no LLM / no network so you can call it
66 hundreds of times for free. → `assets/scorer-template.py`
673. **An eval corpus with a held-out split** — the tasks/records candidates are graded on, split
68 so the test set shares no leaky structure with the search set.
694. **A proposer prior** — a short mini-SKILL the proposer agents load that steers them toward
70 *mechanism-level* changes (not constant-tuning) and enforces anti-leakage.
71 → `assets/proposer-prior-template.md`
725. **A frontier + run log** — the state carried across iterations (a JSON/JSONL pair, or just
73 workflow variables). → `scripts/pareto.py` computes the frontier deterministically.
74
75## Non-negotiable guardrails — read before you run
76
77These are where naive harness searches silently fail. Full treatment in `references/method.md`.
78
79- **The frozen-replay defect (the #1 trap).** If your eval *replays cached outputs* (a recorded
80 run, a frozen trace), then a scaffolding candidate **cannot change the recorded result** —
81 only the cost axis moves. A naive Pareto search then "wins" by emptying the context while the
82 frozen quality score never drops, producing a confident, meaningless frontier. **Fix:** grade
83 a quantity that genuinely varies with the candidate (retrieval relevance, compression
84 fidelity, decision *counterfactuals*), and/or run quality as a **one-sided do-no-harm floor**
85 rather than a maximize axis.
86- **Held-out discipline.** The proposer must see only the search-set results and the frontier —
87 never the test split. Score test once, at the end.
88- **Anti-Goodhart floor.** The proposer is the most capable optimizer you have; it *will* exploit
89 a soft metric. Put a hard floor on quality (and fix any known reward bugs) so it cannot win by
90 degrading the thing you actually care about.
91- **Anti-leakage.** Forbid candidates from hardcoding any value from the eval set. Candidates
92 must generalize to unseen tasks.
93
94## How to run it natively — pick a mode
95
96| Mode | Use when | How |
97|---|---|---|
98| **Workflow** (default) | a real search; want parallel proposers, journaled + resumable | `assets/workflow-template.js` via the `Workflow` tool |
99| **skill + `/loop`** | leanest; you act as the proposer yourself, serially | a mini-skill body looped with `/loop` |
100| **Team** | rarely — durable, long-lived proposer/scorer/curator roles | `TeamCreate` + tasks + messaging |
101
102Default to **Workflow** — it is the closest 1:1 to the Python harness and the best for an actual
103search. The mapping from each Meta-Harness piece to its native equivalent, and full mode details,
104are in `references/native-execution.md`.
105
106## Procedure
107
1081. **Frame the search.** Name the fixed model, the harness surface to optimize, the eval, the
109 two Pareto axes (quality, cost), and the budget. Confirm fit against `references/method.md`.
110 If you cannot name a cheap eval that *varies with the candidate*, stop and build one first.
1112. **Build the five blocks** from `assets/` templates (or reuse an existing scaffold like
112 `~/mh-proteus/`). Validate the scorer runs at $0 on the incumbent before going further.
1133. **Baseline.** Score the incumbent harness + a trivial anchor; seed the frontier.
1144. **Choose a mode** (default Workflow). Copy `assets/workflow-template.js`, set the working
115 dir, candidate count `k`, rounds/budget, and the floor.
1165. **Run the search.** Proposers write candidates; the $0 scorer ranks them; Pareto-merge each
117 round. Watch the frontier move (quality held at/above floor, cost dropping).
1186. **Inspect the frontier**, not just the best point — the cost/quality tradeoff curve is the
119 product.
1207. **Promote with re-validation.** A frontier winner is a *proposal*. Before it ships, score it
121 once on the untouched test split, and (if the search used a proxy eval) validate the proxy
122 ranking against the real metric. Never let an unvalidated candidate become the new incumbent.
123
124## Files in this skill
125
126- `references/method.md` — theory, full fit criteria, the frozen-replay defect, all guardrails,
127 how to choose the objective. Read when framing a new search or unsure about fit.
128- `references/native-execution.md` — the Meta-Harness→native mapping table and all three
129 execution modes in depth (Workflow / loop / Team), including how scoring runs inside a Workflow.
130- `references/building-blocks.md` — how to build each of the five blocks, with worked patterns.
131- `references/proteus-example.md` — the end-to-end worked example at `~/mh-proteus/`.
132- `assets/workflow-template.js` — the native search loop (the default mode). Parameterized.
133- `assets/scorer-template.py`, `assets/candidate_base-template.py`,
134 `assets/proposer-prior-template.md` — templates for the domain blocks you supply.
135- `scripts/pareto.py` — deterministic Pareto-frontier computation over a results JSONL.