LiteEvo: Automated, Cost-Efficient Harness Evolution for Generalization to Unseen Tasks
Organizations: Seoul National University
Abstract
An LLM agent is defined by two things: the weights inside its model and the harness of components assembled around it. Harnesses are still handcrafted, and HarnessX, which evolves them automatically, starts each benchmark from a handcrafted harness, reports gains on the tasks it evolved on, and budgets 100 to 175 million meta-agent tokens per benchmark. We propose LiteEvo, a lightweight harness-evolution algorithm whose tool-free meta-agents mine agent trajectories for reusable components, curate them into a versioned library, and compose each round's harness from it, starting every benchmark from the same neutral harness and never naming the benchmark. Evolving on the graded tasks of five agentic benchmarks with a frozen Qwen3.5-9B, LiteEvo lifts pass@2 by 10.5 to 67.7pp and reaches comparable or higher pass@2 than a reproduction of HarnessX (71.0 against 67.3 on average) at 13.0 lower mean API cost. Harnesses evolved on train tasks keep their gains on unseen test tasks of four benchmarks, and LiteEvo also lifts Claude Code with Sonnet 4.6 by 1.2 to 71.4pp.
Figures & tables
| Benchmark | Mode | Method | Initialization | pass@2 (%) | Best Round | API cost ($) | ||
|---|---|---|---|---|---|---|---|---|
| Initial | Evolved | |||||||
| ALFWorld | Bare | – | Task only | 37.1 | – | – | – | |
| Transductive | HarnessX | +Seed | 64.2 | 92.3 | +28.1 | 6 | 118.47 | |
| LiteEvo | +Neutral | 60.9 | 96.3 | +35.3 | 5 | 8.24 | ||
| Inductive | LiteEvo | +Neutral | 60.9 | 94.8 | +33.8 | 4 | 9.17 | |
| WebShop | Bare | – | Task only | 24.0 | – | – | – | |
| ALFWorld | WebShop | AppWorld | GAIA | SWE-bench Verified | ||||||
| Harness | P@1 | P@2 | P@1 | P@2 | P@1 | P@2 | P@1 | P@2 | P@1 | P@2 |
| Bare | 25.1 | 37.1 | 14.5 | 24.0 | 0.0 | 0.0 | 0.0 | 0.0 | 9.1 | 16.4 |
| Bare + format | 46.8 | 56.7 | 9.3 | 13.8 | 0.0 | 0.0 | 29.1 | 44.3 | 50.9 | 61.2 |
| +Processor | 49.3 | 57.7 | 41.3 | 53.0 | 0.0 | 0.0 | 44.6 | 59.2 | 51.0 | 63.1 |
| +Prompt | 92.8 | 95.5 | 51.0 | 59.0 | 46.1 | 63.1 | 41.9 | 49.5 | 49.4 | 58.2 |
| Full | 92.6 | 96.3 | 54.0 | 62.7 | 51.9 | 67.7 | 53.6 | 65.2 | 54.2 | 63.2 |
| Benchmark | Mode | Method | pass@2 (%) | Best Round | API cost ($) | ||
| Initial | Evolved | ||||||
| ALFWorld | Transductive | LiteEvo | 88.8 | 96.3 | +7.5 | 2 | 8.21 |
| Inductive | LiteEvo | 88.8 | 95.5 | +6.7 | 7 | 12.92 | |
| WebShop | Transductive | LiteEvo | 77.0 | 81.0 | +4.0 | 6 | 9.84 |
| Inductive | LiteEvo | 77.0 | 81.0 | +4.0 | 5 | 12.57 | |
| AppWorld | Transductive | LiteEvo | 0.0 | 66.1 | +66.1 | 7 | 11.09 |
| Round | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Total | |
|---|---|---|---|---|---|---|---|---|---|---|
| Librarian | Add | 19 | 11 | 12 | 10 | 6 | 11 | 8 | 8 | 85 |
| Update | 0 | 4 | 4 | 2 | 5 | 0 | 3 | 7 | 25 | |
| Merge | 0 | 1 | 3 | 2 | 0 | 1 | 0 | 0 | 7 | |
| Drop | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 2 | |
| Library | Removed | 0 | 2 | 4 | 2 | 0 | 0 | 0 | 1 | 9 |
| Size | 3.8 | 5.8 | 8.0 | 10.0 | 11.2 | 13.4 | 15.0 | 16.4 | – | |
| AppWorld | GAIA | |||
|---|---|---|---|---|
| Initial harness | P@1 | P@2 | P@1 | P@2 |
| Neutral (default) | 51.9 | 67.7 | 53.6 | 65.2 |
| HarnessX seed | 49.1 | 64.9 | 48.4 | 59.9 |
Appendix figures & tables26 assets
Supplementary material from the paper’s appendix.
Appendix
| Method | Starting harness | What the optimizer is told about the benchmark | Evaluation | Cost reported |
|---|---|---|---|---|
| HarnessX | handcrafted for each benchmark | its benchmark-specific seeds | L0 | token budget |
| Meta-Harness | per-domain seeds | a skill written by hand for each domain | L0 on its agentic benchmark; held-out and new datasets for classification | iterations, hours |
| AutoHarness | one template | the game’s name and description | new random instances of each game | iterations |
| AHE | a single shell tool | an explore agent aimed at the benchmark | L0, plus one other benchmark without re-evolution | hours |
| HarnessCompass | a single shell tool | software-repair hints in the meta prompt | L1 on one benchmark, plus a second model | iterations |
| ACE | the benchmark’s official agent | a reflector named after the benchmark | L1 offline; online on the test stream | latency, rollouts |
| Knob | Neutral | Effect |
|---|---|---|
| Protocol | tagged | tagged text replies, or one generic act tool call |
| Available actions | shown | append the environment’s list of legal actions to each observation |
| Observation cap | off | truncate long observations (command actions only) |
| Action fallback | on | without a tag, take the reply’s last line as the action (command actions only) |
| Remaining turns | hidden | prefix each observation with the number of turns left |
| Kind | Body | Placed | Acts |
|---|---|---|---|
| Prompt fragment | an instruction or a worked example | system prompt, after the frame, in its order | every model call |
| Knowledge | facts observed in trajectories | system prompt, after the fragments | every model call |
| Processor | a Python function advise(ctx) | one runner hook | each turn it returns a key |
| Knob | runner settings | read by the composer only | never directly |
| Strategy | advice on composing | the composer’s and librarian’s input | never reaches the agent |
| Meta-agent (model) | Reads | Returns |
|---|---|---|
| Analyst (Sonnet 5) | the running harness’s settings and full system prompt; outcome statistics over the round; 13 task groups with all trajectories each | a task signature; failure modes with their share, evidence and mechanism; candidate components, with a cited step for each fact |
| Editor (Opus 4.6) | the analyst’s output with its citation checks; a journal of earlier rounds (scores, decisions, library edits, rejected processors) | the selected candidates, rewritten or merged; dropped candidates with reasons; then the processor check |
| Librarian (Opus 4.6) | the library index with usage statistics and all bodies; the editor’s selections and drops | operations: add, update or merge a complete component, or drop one, each with a reason |
| Composer (Opus 4.6) | the task signature; this round’s score and the best harness’s; the strategies; the library; the journal; the best harness’s selection, knobs and size (not its frame); the editor’s picks; a 4,000-character excerpt of failed trajectories | a selection of components, a frame and five knob values |
| Setting | Value |
|---|---|
| Agent | Qwen3.5-9B in thinking mode; temperature 1.0, top- 0.95, top- 20, presence penalty 1.5 |
| Generation and context | 4,096 tokens per reply; context window 40,960 tokens; prompt budget 32,768 tokens |
| Turn caps | 20, 20, 40, 20 and 200 (ALFWorld, WebShop, AppWorld, GAIA, SWE-bench Verified) |
| Rounds and workers | (round 0 and seven evolution rounds), |
| Val rollouts | 4 per task (inductive); the train rollouts (transductive) |
| Analyst sample | 10 mixed and 3 all-fail task groups, each with all trajectories |
| Benchmark | Turn cap | Train | Val | Test |
|---|---|---|---|---|
| ALFWorld | 20 | 134 (train) | 140 (valid-seen) | 134 (valid-unseen) |
| WebShop | 20 | 100 | 100 | 100 |
| AppWorld | 40 | 90 (train) | 57 (dev) | 168 (test-normal) |
| GAIA | 20 | – | – | 103 (transductive only) |
| SWE-bench Verified | 200 | 55 | 55 | 55 |
| Benchmark | Seed harness | Evolution recipe | Meta-agent reasoning | Other deviations |
|---|---|---|---|---|
| ALFWorld | ours | ours | thinking off | task seeds cover 88 of the 134 test games |
| WebShop | ours | ours | thinking off | BM25 search |
| AppWorld | ours | ours | thinking off | not in the HarnessX paper; no early stopping |
| GAIA | official | official, patched (pass@2) | official (extended thinking) | a different search API; answer judge off |
| SWE-bench Verified | official | ours | thinking off | 200 turns (release: 60); our grader |
| Benchmark | Mode | pass@2 (%) | Best Round | API cost ($) | ||
| Initial | Evolved | |||||
| ALFWorld | Transductive | 44.8 | 88.3 | +43.5 | 7 | 7.78 |
| Inductive | 44.8 | 87.3 | +42.5 | 7 | 7.86 | |
| WebShop | Transductive | 15.2 | 65.0 | +49.8 | 4 | 9.06 |
| Inductive | 15.2 | 62.3 | +47.2 | 2 | 11.39 | |
| AppWorld | Transductive | 0.0 | 33.9 | +33.9 | 6 | 11.32 |
| Harness | Mode | P@1 | P@2 | API cost ($) |
|---|---|---|---|---|
| Bare | – | 0.0 | 0.0 | – |
| Bare + format | – | 0.0 | 0.0 | – |
| HarnessX-Seed | – | 21.7 | 32.8 | – |
| HarnessX | Transductive | 36.0 | 50.5 | 190.32 |
| Neutral | – | 0.0 | 0.0 | – |
| LiteEvo | Inductive | 34.5 | 48.6 | 14.56 |
| Benchmark | Mode | Analyst setup | # Analysts | pass@1 (%) | pass@2 (%) | Best Round | API cost ($) |
|---|---|---|---|---|---|---|---|
| ALFWorld | Transductive | Per-worker | 4 | 96.6 | 98.0 | 7 | 19.26 |
| GRP | 1 | 92.6 | 96.3 | 5 | 8.24 | ||
| Inductive | Per-worker | 4 | 92.5 | 96.3 | 6 | 20.05 | |
| GRP | 1 | 90.3 | 94.8 | 4 | 9.17 | ||
| WebShop | Transductive | Per-worker | 4 | 51.8 | 62.7 | 1 | 24.78 |
| GRP | 1 | 54.0 | 62.7 | 5 | 9.00 |
| Benchmark | Sampling | pass@1 (%) | pass@2 (%) | Best Round |
|---|---|---|---|---|
| ALFWorld | Default | 92.6 | 96.3 | 5 |
| All-success | 79.9 | 86.6 | 3 | |
| All-fail | 84.7 | 89.3 | 7 | |
| Random | 90.1 | 94.3 | 7 | |
| WebShop | Default | 54.0 | 62.7 | 5 |
| All-success | 49.5 | 62.0 | 7 |
| Benchmark | Round | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Total |
| ALFWorld | Add | 4 | 4 | 3 | 2 | 1 | 2 | 1 | 2 | 19 |
| Update | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 2 | |
| Merge | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 2 | |
| Drop | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | |
| Picked / Size | 4/4 | 8/8 | 10/10 | 12/12 | 13/13 | 15/15 | 14/16 | 16/18 | – | |
| WebShop | Add | 3 | 2 | 2 | 1 | 1 | 3 | 2 | 0 | 14 |
| Benchmark | Enforced Memory | pass@1 (%) | pass@2 (%) | Best Round |
|---|---|---|---|---|
| GAIA | None (default) | 53.6 | 65.2 | 7 |
| Action book | 45.1 | 55.8 | 5 | |
| URL blacklist | 46.1 | 58.4 | 7 | |
| AppWorld | None (default) | 51.9 | 67.7 | 6 |
| Login recipes | 13.2 | 15.4 | 6 |
| Benchmark | Merge | pass@1 (%) | pass@2 (%) |
|---|---|---|---|
| GAIA | None (default) | 53.6 | 65.2 |
| Editor + Librarian | 48.1 | 59.9 | |
| ALFWorld | None (default) | 92.5 | 96.3 |
| Editor + Librarian | 91.0 | 92.5 | |
| WebShop | None (default) | 56.0 | 66.0 |
| Editor + Librarian | 52.5 | 61.0 |
| ALFWorld | WebShop | AppWorld | GAIA | SWE-bench Verified | Avg. | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Regime | Mode | P@1 | P@2 | P@1 | P@2 | P@1 | P@2 | P@1 | P@2 | P@1 | P@2 | P@1 | P@2 |
| Transductive | Refine | 88.3 | 93.9 | 58.6 | 67.8 | 27.4 | 41.6 | 48.0 | 58.8 | 50.7 | 59.4 | 54.6 | 64.3 |
| Compose | 96.6 | 98.0 | 51.8 | 62.7 | 40.3 | 54.6 | 49.8 | 63.4 | 54.4 | 61.8 | 58.6 | 68.1 | |
| Inductive | Refine | 93.1 | 95.5 | 52.0 | 59.2 | 31.4 | 45.6 | – | – | 53.9 | 63.1 | 57.6 | 65.8 |
| Compose | 92.5 | 96.3 | 56.0 | 66.0 | 49.4 | 65.3 | – | – | 52.7 | 61.8 | 62.7 | 72.4 | |
Agent Harness Optimization
Agent harness optimization improves the prompts, tools, memory, workflows, and control code that shape how AI agents act.
See all 185 papers