Skip to content

feat(evals): harness qualification bench#6

Merged
vaderyang merged 1 commit into
mainfrom
feat/harness-evals
Jun 8, 2026
Merged

feat(evals): harness qualification bench#6
vaderyang merged 1 commit into
mainfrom
feat/harness-evals

Conversation

@vaderyang

Copy link
Copy Markdown
Contributor

What

Part B — a maintainer bench to qualify a candidate agent CLI before integrating it (codex now; pi agent, kilo cli, … later). Reuses Part A's agent_run adapter, so a candidate is benchmarked exactly how the live loop invokes it. Scoring is objective binary — no judge.

  • evals/run.sh — per task: throwaway sandbox → agent_run (configured harness) → the task's check → JSONL. --harness/--command/--model/--repeat/--label/--list. On-demand (needs the model endpoint + the CLI installed); not in CI.
  • evals/score.py — per-task pass-rate (over --repeat), per-surface, overall, latency → table + scorecard.json.
  • evals/tasks/ — 4 starter tasks, all objectively scored:
    • triage/do-issue → JSON verdict ∈ {do,try}; triage/skip-issue → {skip,needs_info}
    • implement/failing-test → the agent's edit makes a fixture python test pass
    • review/planted-bug → the review flags a hardcoded secret in a diff
  • evals/tests/test_checks.py — feeds canned outputs to the real checks + aggregate(), validating the scoring logic deterministically, no agents. Wired into ci (+ shellcheck of run.sh).

Qualify a new CLI: write a custom template → evals/run.sh --harness custom --command "<tmpl>" → read the scorecard → decide.

Proof

self-guard + ci (shellcheck run.sh + test_checks.py) on this PR. The live bench runs on demand.

🤖 Generated with Claude Code

A maintainer tool to benchmark a candidate agent CLI BEFORE wiring it into the
live loop — so the roster (codex now; pi agent, kilo cli, … later) gets qualified,
not just plugged in. Reuses Part A's agent_run adapter, so a candidate is invoked
exactly how the loop would invoke it (harness.kind=custom + a command template).

- evals/run.sh — per task: throwaway sandbox → agent_run (the configured harness)
  → the task's objective check → record JSONL. --harness/--command/--model/--repeat/
  --label/--list. Runs on demand (needs the model endpoint + the CLI); NOT in CI.
- evals/score.py — aggregate results → per-task pass-rate (over --repeat), per-surface,
  overall, latency; prints a table + writes a scorecard.json. aggregate() is unit-tested.
- evals/tasks/ — 4 starter tasks, objective binary scoring (no judge):
    triage/do-issue   → JSON verdict ∈ {do,try}
    triage/skip-issue → verdict ∈ {skip,needs_info}
    implement/failing-test → agent's edit makes a fixture's python test pass
    review/planted-bug → review flags a hardcoded secret in a diff
- evals/checks_lib.py — shared, dependency-free check helpers (JSON extract, verdict
  + must_contain matching).
- evals/tests/test_checks.py — feeds canned outputs to the real checks + score,
  validating the scoring logic deterministically (no agents). Wired into ci.yml
  alongside shellcheck of run.sh.

Qualifying a new CLI: write a custom template → evals/run.sh --harness custom
--command "<tmpl>" → read the scorecard → decide.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vaderyang
vaderyang merged commit cb6522f into main Jun 8, 2026
2 checks passed
@vaderyang
vaderyang deleted the feat/harness-evals branch June 8, 2026 04:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant