Skip to content
Back to skills

Harness Eval

ASecurity

Measure and tune the AI SDLC harness so the pipeline delivers on a cheap model — run scenario × model evals against the sandbox fixture, then fix the failing instruction rather than raising the model tier. Use when a task only works on the expensive model, when adding or changing a playbook or rule, when per-PR cost is climbing, or when writing a new eval scenario.

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 21, 2026
ai-agentsgobashgitapidatabase

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned October 21, 2026

npx -y skills add emgiezet/aisdlc --skill harness-eval --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Harness Eval?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Harness Eval
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/emgiezet-harness-eval/badge)](https://www.skillsdirectory.com/skills/emgiezet-harness-eval)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: harness-eval
description: >
  Measure and tune the AI SDLC harness so the pipeline delivers on a cheap model — run
  scenario × model evals against the sandbox fixture, then fix the failing instruction rather
  than raising the model tier. Use when a task only works on the expensive model, when adding
  or changing a playbook or rule, when per-PR cost is climbing, or when writing a new eval
  scenario.
---

# Harness Eval

The economic argument for the whole pipeline: if a well-described harness lets Haiku or Sonnet
produce the same PR as Opus, mass code production becomes affordable and the team stops being
hostage to one provider's top model. If it only works on the best model, the harness is
carrying none of the weight — the model is.

So the eval question is never "is this model good enough". It is **"is our harness explicit
enough for a weaker model to follow"**. Every failure has a fix in a file we control.

## Running it

```bash
make harness-eval MODEL=haiku            # or: evals/harness/run.sh --model haiku
evals/harness/run.sh --model haiku,sonnet
evals/harness/run.sh --model haiku --scenario go-endpoint --keep
```

Each run: fresh sandbox copy of `evals/fixtures/sandbox` in the temp dir → the scenario's
approved spec → `aisdlc add` + `run --once` → assertions scored against the produced branch.
`--keep` leaves the sandbox in place so you can read what the agent actually did.

Acceptance bar for a harness change: **Sonnet passes every scenario, Haiku passes all but one.**
Below that, the harness is not ready — not the model.

## Diagnosing a failure

Work down this list. The answer is almost always in the first three.

| Symptom | Where the defect is |
|---------|--------------------|
| Read the wrong playbook, or several | Router row wording, or the missing closed-world rule (`task-router`) |
| Invented a convention that exists in the repo | The rule file implies it instead of stating it — add the explicit line, with an example |
| Missed a requirement entirely | The UC is not observable enough (`spec-authoring`) — it had nothing to assert on |
| Wrote code with no test, or a test with no UC id | The playbook's test requirements are not imperative enough |
| Weakened or deleted a test to get green | Expected — check the `Stop` guard hook fired; if it did not, the pattern list needs the case |
| Overstepped into unrelated code | The spec's `Out:` scope is thin |
| Ran out of budget mid-run | Too many UCs for one task — split the spec, do not raise the cap |
| Passes on Opus, fails on Haiku | The instruction relies on inference. Replace prose with a command, a table, or an example |

## Writing for the weakest model

What separates instructions a weak model follows from ones it does not:

- **Exact commands, not intentions.** `go test -race ./...`, not "run the tests".
- **One way to do each thing.** Two acceptable patterns in a rule file means a coin flip, and
  the weak model flips it differently each run.
- **Examples over descriptions.** A five-line code sample outperforms a paragraph describing
  the same shape, at a similar token cost.
- **Tables over prose** for anything with cases. Prose lets a model satisfy the clause it
  noticed; a table makes the omission visible.
- **Imperative and unhedged.** "Never delete a test" survives; "tests should generally be
  preserved" does not.
- **Say what not to do**, explicitly. Weak models pattern-match toward the average repo, so
  the local exception has to be stated.
- **Name the file to read.** "Follow the existing conventions" assumes a search the model may
  not run.

## Adding a scenario

`evals/harness/scenarios/<name>/` with `spec.md` (`status: approved`, a real use-case table) and
`scenario.json`:

```json
{
  "name": "go-endpoint", "ticket": "SBX-1", "phases": "implement qa",
  "assert": {
    "commands": ["make verify"],
    "uc_ids": ["UC-1", "UC-2"],
    "test_paths": ["services/ledger"],
    "diff_contains": ["/v1/accounts/\\{id\\}/balance"],
    "diff_absent": ["float64\\(.*Balance"],
    "files_changed": ["api/openapi/ledger.yaml"],
    "min_test_funcs": 7, "no_skips": true, "qa_verdict": "PASS"
  }
}
```

Assert on **behaviour and traceability**, not on filenames or internal structure — an agent
choosing a different-but-valid file layout is not a failure, and a brittle assertion trains you
to ignore red. Good scenarios cover a distinct risk each: a new surface, a contract change that
breaks an existing test, a second stack, a spec whose UCs span both.

Keep the fixture hermetic: no network, no `npm install`, no database. An eval that fails because
a registry was unreachable teaches nothing about the harness.

## When a scenario legitimately cannot pass

Some work genuinely needs the strongest model — dense algorithmic reasoning, a wide refactor,
an ambiguous domain call. Record that in the scenario description and set the model per task
(`aisdlc add --model opus`). What is not acceptable is defaulting everything to the top model
because one class of task needs it.

Files in this skill

  • SKILL.md4.9 KB
  • agents/eval-set.json1.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.