HarnessNet: Feedback-driven Hierarchical Joint Harness Evolution for Multi-agent Systems
Organizations: University of Melbourne, Melbourne, Australia
Abstract
AI agents can evolve by using environment feedback to revise their harnesses, the software managing model inputs, tool use, memory, and execution, while keeping foundation models frozen. Existing studies focus on single agents, leaving joint harness evolution in multi-agent systems (MAS) underexplored. A single global optimizer faces growing context and workload as the system scales, while access restrictions may prevent sharing agent internals or system-wide feedback. We propose HarnessNet, a framework for hierarchical harness evolution in MAS. Its basic unit, Agentron, comprises an evolvable forward harness, a foundation model, and a local optimizer that can observe and modify only that harness. Agentrons form a layered graph through which environment feedback propagates backward, with upstream optimizers receiving node-specific feedback from the downstream layer. This decomposes joint harness evolution into smaller, coordinated tasks with separate contexts, reducing individual optimizers' context and workload while keeping access local. Optimizers need not access all agent trajectories or raw environment feedback. Experiments on AgentBench with multiple foundation models demonstrate the feasibility of training HarnessNet. Compared with a single global optimizer, HarnessNet achieves comparable performance gains while respecting local privacy and requiring fewer tokens and less time per optimizer call. A migration study shows that the evolved harnesses remain jointly effective after replacing the foundation models, suggesting transferability across models.
Figures & tables
| Benchmark | ALFWorld | WebShop | ||||
|---|---|---|---|---|---|---|
| Split | Train | Validation | Test | Train | Validation | Test |
| Case Num | 168 | 42 | 109 | 320 | 80 | 200 |
| Benchmark Domain | Test | Score (↑) | Harness Gain | Training Gain |
|---|---|---|---|---|
| ALF-World | Model-only | 0.5688 | - | - |
| FH0 | 0.2202 | -61.29% | - | |
| FH_starred | 0.7798 | +37.10% | +254.13% | |
| WebShop | Model-only | 0.5670 | - | - |
| FH0 | 0.5559 | -1.96% | - | |
| FH_starred | 0.6950 | +22.57% | +25.02% |
| Benchmark Domain | Test | Score (↑) | Harness Gain | Training Gain |
|---|---|---|---|---|
| ALF-World | Model-only | 0.5688 | - | - |
| FH0 | 0.6239 | +9.69% | - | |
| FH_starred | 0.8532 | +50.00% | +36.75% | |
| WebShop | Model-only | 0.5670 | - | - |
| FH0 | 0.5523 | -2.59% | - | |
| FH_starred | 0.5892 | +3.92% | +6.68% |
| Benchmark Domain | Test | Score (↑) | Harness Gain | Training Gain |
|---|---|---|---|---|
| ALF-World | Model-only | 0.1193 | - | - |
| FH0 | 0.1651 | +38.39% | - | |
| FH_starred | 0.6972 | +484.41% | +322.29% | |
| WebShop | Model-only | 0.4083 | - | - |
| FH0 | 0.0624 | -84.72% | - | |
| FH_starred | 0.5875 | +43.89% | +841.51% |
Appendix figures & tables21 assets
Supplementary material from the paper’s appendix.
Appendix
| Profile field | ALFWorld | WebShop |
|---|---|---|
| Objective | Complete a household manipulation goal through a sequence of environment actions. | Find and purchase a product satisfying the stated attributes and budget. |
| Observation | Raw text containing the task goal, environment feedback, and current admissible actions. | Raw text containing the shopping instruction or current page and the currently available actions. |
| Action interface | Exactly one required take_action call with a nonempty action string selected from the admissible actions. | Exactly one published search_action(keywords) or click_action(value) call valid for the current page. |
| Last-node output | One admissible action string; the adapter wraps it as take_action . | One object containing tool_name and arguments ; the adapter validates and submits the native tool-call envelope. |
| Step limit | 15 | 20 |
| Primary metric | Success rate, with success iff result.result == 1 . | Mean final reward, with per-case reward in and full success at result.result == 1.0 . |
| File | Initializer treatment | Purpose |
|---|---|---|
| harness.json | Controller-owned; scoped metadata editable | Declares node identity, topology neighbors, entry point, contract versions, template revision, and path/field allowlists. The materializer writes the identity fields; the builder may change only the allowed role metadata. |
| pyproject.toml | Fixed | Defines the self-contained Python package, supported interpreter version, dependencies, and test discovery settings. |
| README.md | Fixed | Records the neutral Contract 1.2 baseline, invocation command, and editing boundary for the repository. |
| ROLE.md | Builder-owned | Provides the auditable, node-specific role description derived from the accepted initialization plan. |
| prompts/system.md | Builder-owned | Supplies the node’s runtime system instruction and its plan-derived inductive bias. |
| prompts/forward.md | Fixed | Retains a future trainable prompt extension point; the neutral FH0 strategy does not inject this file into the model request. |
| Parameter | Qwen3.8-27b | Qwen3.5-9b | Gemma4-8b-e4b | Ornith-1.5-9B |
|---|---|---|---|---|
| Resource | Hugging Face | Hugging Face | Hugging Face | Hugging Face |
| Quantization | Q4 | Q4 | Q8 | Q4 |
| Backend | Ollama | Ollama | Ollama | Ollama |
| num_ctx | 32,768 | 20,480 | 20,480 | 20,480 |
| num_predict | 4,096 | 2,048 | 2,048 | 2,048 |
| temperature | 0 | 0 | 0 | 0 |
| Field | Value |
|---|---|
| Forward model | Qwen3.8-27b |
| Benchmark domain | ALFWorld |
| Topology | Agentron |
| Train dataset | alfworld-env_train ( ) |
| Validation dataset | alfworld-env_train ( ) |
| Test dataset | alfworld-std , new_std split ( ) |
| Checkpoint | Train Score | Validation Score | Selected | Test Score |
|---|---|---|---|---|
| Model-only | 56.88% | |||
| FH0 | 59.18% | 40.48% | 22.02% | |
| FH1 | 39.39% | 52.38% | ||
| FH2 | 55.56% | 66.67% | ||
| FH3 | 58.54% | 66.67% | ||
| FH4 | 76.47% | 83.33% |
| Field | Value |
|---|---|
| Forward model | Qwen3.8-27b |
| Benchmark domain | WebShop |
| Topology | Agentron |
| Train dataset | webshop-env_train ( ) |
| Validation dataset | webshop-env_train ( ) |
| Test dataset | webshop-std , standard split ( ) |
| Checkpoint | Train Score | Validation Score | Selected | Test Score |
|---|---|---|---|---|
| Model-only | 0.5670 | |||
| FH0 | 0.4789 | 0.5357 | 0.5559 | |
| FH1 | 0.5047 | 0.6384 | ||
| FH2 | 0.6691 | 0.6615 | ||
| FH3 | 0.7078 | 0.7223 | ||
| FH4 | 0.6863 | 0.7010 |
| Field | Value |
|---|---|
| Forward model | Qwen3.8-27b |
| Benchmark domain | ALFWorld |
| Topology | 2Node HarnessNet |
| Train dataset | alfworld-env_train ( ) |
| Validation dataset | alfworld-env_train ( ) |
| Test dataset | alfworld-std , new_std split ( ) |
| Checkpoint | Train Score | Validation Score | Selected | Test Score |
|---|---|---|---|---|
| Model-only | 56.88% | |||
| FH0 | 44.44% | 57.14% | 62.39% | |
| FH1 | 60.42% | 71.43% | ||
| FH2 | 45.21% | 47.62% | ||
| FH3 | 89.47% | 85.71% | ||
| FH4 | 91.67% | 85.71% |
| Field | Value |
|---|---|
| Forward model | Qwen3.8-27b |
| Benchmark domain | WebShop |
| Topology | 2Node HarnessNet |
| Train dataset | webshop-env_train ( ) |
| Validation dataset | webshop-env_train ( ) |
| Test dataset | webshop-std , standard split ( ) |
| Checkpoint | Train Score | Validation Score | Selected | Test Score |
|---|---|---|---|---|
| Model-only | 0.5670 | |||
| FH0 | 0.4807 | 0.5852 | 0.5523 | |
| FH1 | 0.6021 | 0.5998 | ||
| FH2 | 0.5814 | 0.6450 | ||
| FH3 | 0.5429 | 0.5885 | ||
| FH4 | 0.6282 | 0.6054 |
| Field | Value |
|---|---|
| Forward model | Qwen3.5-9b |
| Benchmark domain | ALFWorld |
| Topology | 4Node HarnessNet |
| Train dataset | alfworld-env_train ( ) |
| Validation dataset | alfworld-env_train ( ) |
| Test dataset | alfworld-std , new_std split ( ) |
| Checkpoint | Train Score | Validation Score | Selected | Test Score |
|---|---|---|---|---|
| Model-only | 11.93% | |||
| FH0 | 9.09% | 19.05% | 16.51% | |
| FH1 | 34.43% | 33.33% | ||
| FH2 | 33.33% | 28.57% | ||
| FH3 | 39.39% | 38.10% | ||
| FH4 | 42.86% | 38.10% |
| Field | Value |
|---|---|
| Forward model | Gemma4-8b-e4b |
| Benchmark domain | WebShop |
| Topology | 4Node HarnessNet |
| Train dataset | webshop-env_train ( ) |
| Validation dataset | webshop-env_train ( ) |
| Test dataset | webshop-std , standard split ( ) |
| Checkpoint | Train Score | Validation Score | Selected | Test Score |
|---|---|---|---|---|
| Model-only | 0.4083 | |||
| FH0 | 0.1210 | 0.0963 | 0.0624 | |
| FH1 | 0.4755 | 0.5298 | ||
| FH2 | 0.5984 | 0.6167 | 0.5875 | |
| FH3 | 0.4837 | 0.5379 | ||
| FH4 | 0.5710 | 0.4727 |
| Field | Value |
|---|---|
| Forward models | Qwen3.5-9B; Ornith1.5-9B; gemma4-8B-E4B |
| Benchmark domain | ALFWorld |
| Topology | 4Node HarnessNet |
| Validation dataset | alfworld-env_train ( ) |
| Test dataset | alfworld-std , new_std split ( ) |
| Checkpoint/Model | Qwen3.5-9B | Ornith1.5-9B | gemma4-8B-E4B |
|---|---|---|---|
| FH0 | 19.05% | 16.67% | 16.67% |
| FH1 | 33.33% | 19.05% | 16.67% |
| FH2 | 28.57% | 23.81% | 7.14% |
| FH3 | 38.10% | 28.57% | 30.95% |
| FH4 | 38.10% | 33.33% | 38.10% |
| FH5 | 76.19% | 57.14% | 78.57% |
| Hierarchical Optimizer | Global Optimizer | |||||
|---|---|---|---|---|---|---|
| Checkpoint | Train Score | Validation Score | Test Score | Train Score | Validation Score | Test Score |
| Model-only | 11.93% | 11.93% | ||||
| FH0 | 9.09% | 19.05% | 16.51% | 9.09% | 19.05% | 16.51% |
| FH1 | 34.43% | 33.33% | 32.20% | 28.57% | ||
| FH2 | 33.33% | 28.57% | 23.08% | 30.95% | ||
| FH3 | 39.39% | 38.10% | 32.20% | 45.24% | ||
| Hierarchical Optimizer | Global Optimizer | |||||
|---|---|---|---|---|---|---|
| Checkpoint | Train Score | Validation Score | Test Score | Train Score | Validation Score | Test Score |
| Model-only | 0.4083 | 0.4083 | ||||
| FH0 | 0.1210 | 0.0963 | 0.0624 | 0.1210 | 0.0963 | 0.0624 |
| FH1 | 0.4755 | 0.5298 | 0.3883 | 0.3802 | ||
| FH2 | 0.5984 | 0.6167 | 0.5875 | 0.4811 | 0.4730 | |
| FH3 | 0.4837 | 0.5379 | 0.4837 | 0.5554 | ||
| Hierarchical Optimizer | Global Optimizer | ||||||
|---|---|---|---|---|---|---|---|
| Backward | Node | Input Token | Output Token | Optimizer Time (s) | Input Token | Output Token | Optimizer Time (s) |
| 1 | l2-last | 4,557,381 | 31,320 | 1,427 | 10,467,460 | 40,902 | 1,719 |
| l1-hidden_a | 4,440,628 | 24,540 | 1,304 | ||||
| l1-hidden_b | 6,460,733 | 25,899 | 1,366 | ||||
| l0-first | 7,133,103 | 25,820 | 1,467 | ||||
| 2 | l2-last | 7,027,571 | 46,165 | 1,912 | 13,542,625 | 42,660 | 2,056 |
| Hierarchical Optimizer | Global Optimizer | ||||||
|---|---|---|---|---|---|---|---|
| Backward | Node | Input Token | Output Token | Optimizer Time (s) | Input Token | Output Token | Optimizer Time (s) |
| 1 | l2-last | 3,971,824 | 18,694 | 707 | 20,197,746 | 44,424 | 2,378 |
| l1-hidden_a | 4,240,691 | 18,872 | 776 | ||||
| l1-hidden_b | 2,977,722 | 14,114 | 603 | ||||
| l0-first | 5,586,749 | 22,601 | 870 | ||||
| 2 | l2-last | 2,659,254 | 15,242 | 627 | 9,745,839 | 25,382 | 1,373 |
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