Try Tools · Dev
Harness²: what happened when we tested it
An open-source Python framework that improves an agent's harness (system prompt, guardrails, memory, tool guidance, subagents, skills, scripts, plugins) by proposing edits, probing them on the same task and composing a better harness, then keeping lessons for later tasks. Ships benchmark adapters for JobBench, LAB and WorkBuddy-Bench.
Score
10.0/10
claims that held up
Verdict
V1 · Partly works31
Access needed
L0 Public web onlyTested 2026-10-28
Rule set before testing: overall = worst of core C1, C2 and C4, and an untested core claim caps the verdict at V1. C1 and C2 are V2, and C4 (benchmark gains) is V0, so the verdict is V1. Score = mean of tested claims C1–C3 = 10.0; C4 (V0) is not counted.
Scope. The demo's editors and selector are scripted, so it shows that the workflow runs, not that a model improves a harness. JobBench was set up and dry-run only. We ran no model-backed rollout, no Codex executor, no LAB and no WorkBuddy (no Docker). Executors in real runs have unrestricted network access and Codex runs with its sandbox disabled (vendor warning).
Installed from source and ran the credential-free demo offline: both recursion modes fixed the planted ledger bug (85.15 / 20.25) and carried the lesson to the next task. The headline benchmark gains need paid-scale model runs and were not tested.
85.15 / 20.25
demo totals after harnessing
base harness gave 105.25 / 35.50
0 failed
demo, both modes
no keys, no network namespace
5/5
repo tests passed
8.1 s
V0
benchmark gains
needs paid-scale model runs
Claim by claim
Install as documented; harness2-demo runs both recursion modes with no model credentialsWorks
The documented commands worked unchanged. The demo exited 0 with 0 failed in an empty environment and again with no network at all.
Propose–Probe–Compose and harnessing-level recursion actually run (demo uses the real workflow)Works
Both modes reproduced the base bug (105.25 / 35.50), probed and composed candidates, adopted the fixed harness, delivered our hand-computed 85.15 / 20.25, and passed the task-1 lesson into every task-2 editor context. Caveat: the demo's editors are scripted, and its selector computes the right total from the source ledger. This checks the plumbing, not model-driven improvement.
harness2-check and --dry-run work without calling a model (non-core)Works
5/5 repo tests pass. check listed missing pieces clearly before setup and said Ready after it. dry-run printed the task stream with no model calls. Doc gap: README says cp .env.example .env, but that file is not in the repo.
One Harness² step gains up to +11.5 (WorkBuddy), +4.5 (JobBench), +11.8 pp (LAB)Not testable
Not tested. One JobBench task at k=1 is 4 executor rollouts plus 3 improver sessions plus judging, which a free ~50-request/day model account can't cover, and a 1-task result couldn't check a 65-task mean anyway. WorkBuddy also needs Docker. Needs a paid or quota-rich model account.
Open a claim to see what we measured.
The full report
Full result
The framework itself works as documented. It installed from source in about a second, and the credential-free demo ran both recursion modes offline. It reproduced the planted bug, probed and composed fixes, delivered the right totals, and passed the lesson from task 1 to task 2. Setup and checks for JobBench also worked without a model. The headline claim, that one step adds up to 11.5 benchmark points, needs many model-backed agent sessions per task, so we could not test it on free models. Under the shared rule, that untested core claim caps the verdict at V1.
The test task and exact input
Fixed before running (plan committed 08:47 UTC+8, commit 748092b). Install exactly as the README says, then run harness2-demo --k 2 three ways: empty environment, and inside a network namespace with no network. Ground truth from the demo's own ledgers, worked out by hand: ledger-1 = 100.25 − 20.10 + 5.00 = 85.15 and ledger-2 = 35.50 − 10.25 − 5.00 = 20.25; the base harness has a positive-only filter bug and should give 105.25 and 35.50. Check that both modes run reference, probe and composed harnesses, adopt a fixed harness, deliver the right totals, and pass the task-1 lesson to task 2. Then run the repo's tests, harness2-check and --dry-run, and check whether a free path exists for the benchmark claim.
uv venv --python 3.12 .venv && source .venv/bin/activate uv pip install -e '.[render]' env -i PATH=$PWD/.venv/bin:/usr/bin:/bin HOME=/tmp/h2home harness2-demo --output ../demoA --k 2 env -i PATH=$PWD/.venv/bin:/usr/bin:/bin HOME=/tmp/h2home unshare -rn harness2-demo --output ../demoB --k 2 python -m unittest tests/test_workflow.py -v harness2-check --bench jb harness2-setup jb && harness2 --bench jb --k 1 --mode parallel --max-tasks 1 --dry-run
What happened, step by step6 steps
- Captured README, setup/benchmark docs, project site and GitHub metadata; wrote the plan, ground truth and pass marks; committed them before installing (08:47, 748092b)
Observed: Repo 20,547 stars, Apache-2.0, last push 2026-10-14; package 0.1.0 is not on PyPI. Queue status set to testing. - C1: uv venv --python 3.12 .venv; uv pip install -e '.[render]'
Observed: Installed in ~1 s (harness2 0.1.0 + openpyxl, python-pptx, lxml, pillow, xlsxwriter). The core package has no other dependencies. - C1: harness2-demo --output … --k 2 with env -i (no keys, no gcloud), then again inside unshare -rn (only a down loopback interface)
Observed: Both: "2 tasks completed; 0 failed", exit 0, about 1.3 s each; 28 executions, 32 scripted editor calls. The answers from both runs are identical. - C2: read every execution answer, the stage lists in summary.json, selection.json and the improvement library (our script 05-analyze_c2.py)
Observed: For both tasks, the reference runs of the base harness gave 105.25 / 35.50 (bug reproduced). Parallel mode: inv1, dom1, inv2 and dom2 probes plus agg1 and agg2 compositions all gave 85.15 / 20.25. Sequential mode: inv, dom and compose steps for c1 and c2, with step 2 keeping the step-1 harness. The adopted harness in each mode no longer has the positive-only filter. ledger-1's EXPERIENCE.md (cue, lesson, evidence) appeared in all 6 editor contexts of ledger-2 in each mode. - C3: python -m unittest tests/test_workflow.py; harness2-check --bench jb; harness2 --dry-run (before and after harness2-setup jb)
Observed: 5/5 tests passed in 8.1 s. Before setup, check listed 9 clear FAIL lines (no model, no tasks, no OpenCode) and exited 1 with no traceback. Setup jb took about 40 s (OpenCode checkout + bun, JobBench eval env, 566 dataset files, no token). With OpenRouter settings, check said "Ready: jb/oc; 65 tasks. Model access is not exercised" and dry-run printed the task stream. - C4: looked for a free way to reproduce the benchmark gains
Observed: There is a sanctioned non-Vertex path (an OpenCode provider model plus HARNESS2_JUDGE_BASE_URL). But per the CLI help, each task is 4k executor rollouts plus 3k improver sessions (7 agent sessions at k=1) plus judging, which is far more than a free ~50-requests/day account can do even for one task. WorkBuddy-Bench also needs Docker. We didn't start a run (0 model requests).
Failure modes seen4 items
- README and SETUP.md say to copy .env.example, but the file is missing from the repo (commit 1cfe254). Pass settings as environment variables instead.
- --max-tasks is a per-domain cap: --max-tasks 1 on its own selects 35 JobBench tasks (the first of each domain). Combine it with --only-domains, or a 'small' paid run is 35× bigger than expected.
- The vendor warns that executor network access is unrestricted and Codex runs with its sandbox disabled. Run it isolated and block benchmark-answer hosts (JobBench rubrics are public on Hugging Face).
- The demo's selector computes the correct total from the source ledger, so the demo can't show selection 'without ground-truth feedback'.
Evidence files11 files
- File: Test plan, pass marks and core/non-core split, committed before running
- File: Vendor claims, pricing and repo metadata as captured
- File: Ground truth totals for the demo ledgers
- File: C1 install log
- File: C1 demo runs: empty env and no-network namespace
- File: C2 per-execution answers, stages, selection and library carry-over
- File: Our C2 analysis script
- File: Demo summary (28 executions, 32 editor calls)
- File: Lesson stored after task 1
- File: C3 unit tests, harness2-check and dry-run
- File: C4 JobBench setup, check with free-model settings, dry-run and why no run
Vendor claims, as quoted
- "uv pip install -e '.[render]' / harness2-demo --output runs/demo --k 2" — "The local demo runs both recursion modes with deterministic editors and real Python executions. It requires no model credentials." (source)
- "Task-level recursion refines the execution harness for the current task through a contrastive Propose–Probe–Compose step… Harnessing-level recursion updates a persistent improvement harness with adopted harnesses and evidence-supported lessons from each task to guide future refinement." (demo: "exercising the real adaptation workflow") (source)
- "harness2-check checks installed dependencies, credentials, and configuration without calling a model." / "Add --dry-run to harness2 to preview task selection without model calls." (source)
- "a single Harness² step improves GLM-5 and Gemini 3.5 Flash over their base harnesses, with gains of up to 11.5 points on WorkBuddy-Bench, 4.5 points on JobBench, and 11.8 percentage points on LAB's partial pass rate." (source)
Lowest-access way to try it
L0 for the demo: clone the repo, run uv venv --python 3.12 .venv, uv pip install -e '.[render]', then harness2-demo --output runs/demo --k 2. No account needed. For a real benchmark, set HARNESS2_SOLVER_MODEL (OpenCode provider/model) and a judge as environment variables, run harness2-setup jb and harness2-check, and start with --only-domains <one> --max-tasks 1 in an isolated machine.
Details: vendor, pricing, environment, time, cost
Not sponsored. No affiliate links. Vendors do not see results before they are published.
How to cite
TriedAgents, "Harness²: tool test", partly works, tested 2026-10-28, https://triedagents.com/tools/harness2/
Get one re-run case every weekday
One agent use case we actually re-ran, every weekday. Free.
We only store your email address. Every issue has a one-click unsubscribe link. Privacy