diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 286a4c1..0540cb1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,10 +20,10 @@ jobs: # Gate at warning+ (errors + warnings — real bugs). info/style nits in # the ported heron-origin linters are below threshold; .shellcheckrc # additionally silences SC1091 (dynamically-pathed sibling sources). - shellcheck --severity=warning scripts/agent-bot/*.sh scripts/lib/*.sh scripts/lint/*.sh + shellcheck --severity=warning scripts/agent-bot/*.sh scripts/lib/*.sh scripts/lint/*.sh evals/*.sh - name: bash -n (syntax) - run: for f in scripts/agent-bot/*.sh scripts/lib/*.sh scripts/lint/*.sh; do bash -n "$f"; done + run: for f in scripts/agent-bot/*.sh scripts/lib/*.sh scripts/lint/*.sh evals/*.sh; do bash -n "$f"; done - name: triage composer tests run: python3 scripts/agent-bot/tests/test_triage.py @@ -37,6 +37,9 @@ jobs: - name: harness adapter tests run: python3 scripts/agent-bot/tests/test_harness.py + - name: eval bench check/score tests + run: python3 evals/tests/test_checks.py + - name: reviewer post-logic tests run: python3 scripts/pr-review/test_post_review.py diff --git a/evals/README.md b/evals/README.md new file mode 100644 index 0000000..b94cbb0 --- /dev/null +++ b/evals/README.md @@ -0,0 +1,76 @@ +# evals/ — harness qualification bench + +Benchmark a candidate agent CLI on standard tasks **before** wiring it into the +live loop. New CLIs (codex now; pi agent, kilo cli, … later) get *qualified*, +not just plugged in. + +It reuses Part A's `agent_run` adapter — so a candidate is invoked **exactly how +the loop would invoke it** (`harness.kind=custom` + your command template). +Scoring is **objective binary** (no judge): build passes / bug caught / valid +JSON verdict. + +## Run it + +```bash +# baseline: the built-in claude harness (needs ANTHROPIC_BASE_URL/API_KEY in env) +evals/run.sh + +# a candidate CLI (codex shown). --repeat N for pass-rate over stochastic runs. +evals/run.sh --harness custom \ + --command 'codex exec --model {model} --full-auto < {prompt_file} > {out}' \ + --model gpt-5 --repeat 3 --label codex + +evals/run.sh --list # list task ids +``` + +Each run writes `runs/