
After studying this material, you should be able to:
Imagine you hire a new employee. They complete a task, make mistakes, and learn lessons. The question is: how do they carry those lessons forward?
LLM agents face the same challenge. A capable agent should:
Task 1 → Execute → Learn Something →
Task 2 → Execute → Learn Something →
Task N → Execute → (Agent is now smarter than at Task 1)
Prior methods extract knowledge through:
| Method | What It Does | Limitation |
|---|---|---|
| Reflection | Agent writes notes about what went wrong | Often too vague or task-specific |
| Memory | Stores past experiences for retrieval | Hard to generalize across domains |
| Rules | Extracts explicit if-then guidelines | Brittle, doesn't capture nuance |
| Skills | Packages reusable procedures | Closest to Evo-Harness, but less structured |
Key Insight: All these methods struggle when the agent only gets one shot at a task before moving on.
In realistic environments, agents often encounter a task once. There is no:
Real World Timeline:
[Novel Task A] → [Novel Task B] → [Novel Task C] → ...
↑ ↑ ↑
Never seen Never seen Never seen
again again again
When an agent executes a one-shot task, the resulting execution context contains:
Execution Context =
[Useful General Lessons] ← We WANT this
+ [Task-Specific Artifacts] ← We DON'T want this
+ [Noise and Irrelevant Steps] ← We DON'T want this
Example:
An agent debugging a Python web scraper might learn:
- ✅ "Always check for rate limiting headers" (broadly useful)
- ❌ "The target URL was example.com/data" (task-specific artifact)
- ❌ "Retry step 3 because of a typo" (noise)
The challenge is separating signal from noise in a single execution.
A harness is a structured wrapper or scaffolding around an agent that shapes how it behaves, reasons, and acts.
Think of it like this:
Without Harness: With Harness:
┌─────────────┐ ┌─────────────────────────┐
│ Raw Agent │ │ Harness │
│ (frozen) │ │ ┌─────────────────┐ │
│ │ │ │ Skill: Debug │ │
│ Receives │ │ │ Skill: Search │ │
│ task → │ │ │ Skill: Verify │ │
│ responds │ │ └─────────────────┘ │
└─────────────┘ │ ↓ │
│ Raw Agent (frozen) │
│ ↓ │
│ Better Response │
└─────────────────────────┘
Critical Point: The agent itself never changes. Only the harness evolves. This is important because it avoids expensive retraining.
┌──────────────────────────────────────────────────────┐
│ EVO-HARNESS │
│ │
│ Task arrives │
│ ↓ │
│ [Current Harness] + [Frozen Agent] → Execute Task │
│ ↓ │
│ Noisy Execution Context │
│ ↓ │
│ CONTEXT-TO-HARNESS SKILL COMPILATION │
│ ↓ │
│ Updated/New Skill Harness │
│ ↓ │
│ Ready for Next Task (improved agent) │
└──────────────────────────────────────────────────────┘
Evo-Harness supports skills at two levels:
| Level | Description | Example |
|---|---|---|
| Cross-Domain | Skills useful across completely different task types | "Always verify outputs before submitting" |
| Topic-Level | Skills specific to a domain or topic cluster | "When working with bash, check exit codes" |
In programming, a compiler transforms raw source code into efficient, executable machine code.
Evo-Harness does something analogous:
Compiler Analogy:
Source Code (messy, human-readable) → Compiler → Machine Code (efficient, reusable)
Evo-Harness:
Noisy Execution Context → Skill Compiler → Structured Skill Harness
Step 5.1 — Context Capture
Agent executes task → Full trajectory recorded
(every action, observation, error, success)
Step 5.2 — Signal Extraction
Compiler analyzes trajectory:
- What worked? Why?
- What failed? Why?
- What patterns appeared?
Step 5.3 — Generalization Filter
Remove task-specific artifacts:
- Specific URLs, file names, IDs → REMOVED
- General strategies, patterns → KEPT
Step 5.4 — Skill Structuring
Package into harness format:
{
skill_name: "handle_rate_limiting",
trigger: "when making repeated API calls",
action: "check response headers for Retry-After",
domain: "web_interaction",
confidence: 0.85
}
Step 5.5 — Harness Integration
New skill merged into existing harness
Conflicts resolved, redundancies removed
Harness ready for next task
| Type | When Learning Happens | Agent State |
|---|---|---|
| Offline Learning | Before deployment, on collected data | Static during use |
| Online Learning | During deployment, on live tasks | Continuously improving |
Time →
T1: [Task] → Execute → Compile → Harness v1.0
T2: [Task] → Execute → Compile → Harness v1.1 ← slightly better
T3: [Task] → Execute → Compile → Harness v1.2 ← better still
...
Tn: [Task] → Execute → Compile → Harness v1.n ← much better
Why this matters: The agent improves while working, without needing to stop, collect data, and retrain.
Evo-Harness was tested on five realistic benchmarks:
| Benchmark | Domain | Why It's Challenging |
|---|---|---|
| TerminalBench2 | Terminal/CLI tasks | Requires precise command knowledge |
| SWE-bench | Software engineering | Real GitHub issues, complex reasoning |
| CL-Bench | Continual learning | Sequential, evolving tasks |
| τ-bench | Tool use | Multi-step tool interactions |
| WebArena-Infinity | Web navigation | Open-ended, dynamic web tasks |
The paper emphasizes two things prior work often missed:
Prior Work: Evo-Harness:
"It works! ✓" → "It works, AND here's exactly why ✓"
PROBLEM:
Agents encounter novel tasks once → noisy contexts → hard to learn
SOLUTION (Evo-Harness):
1. Keep agent frozen (no retraining)
2. Build a structured harness around it
3. After each task, compile noisy context → clean skills
4. Update harness with new skills
5. Agent performs better on next task
KEY INNOVATION:
Context-to-Harness Skill Compilation
= turning messy one-shot experience into reusable structured knowledge
| Property | Benefit |
|---|---|
| Frozen agent | No expensive retraining needed |
| Structured harness | Skills are organized and retrievable |
| One-shot compilation | Works even without repeated exposure |
| Online updating | Continuous improvement during deployment |
| Cross-domain skills | Knowledge transfers across task types |
Test your understanding:
What problem does Evo-Harness solve? (Hint: noisy, one-shot executions)
Why is the base agent kept frozen? (Hint: think about cost and practicality)
What is the difference between cross-domain and topic-level skills?
What does "compilation" mean in the context of skill compilation?
Why is online learning important for realistic agent deployment?
| Term | Definition |
|---|---|
| Harness | Structured scaffolding around a frozen agent containing reusable skills |
| Skill Compilation | Process of distilling noisy execution contexts into structured skills |
| One-Shot Execution | A single, non-repeated opportunity to complete and learn from a task |
| Online Learning | Learning that occurs continuously during task execution, not before |
| Frozen Agent | Base LLM that remains unchanged; only the harness evolves |
| Execution Context | Full record of an agent's actions, observations, and outcomes on a task |
| Cross-Domain Skill | A skill applicable across fundamentally different task types |
| Topic-Level Skill | A skill specific to a particular domain or subject area |