harness-evallisted
Install: claude install-skill jjackkun/claude-harness-hermes
# harness-eval — 규칙이 실제로 지켜지는지 잰다
`tests/` 는 코드가 규칙을 어겼는지(정적)만 본다. 이 도구는 **에이전트 행동**을 본다: 금지된 일을 시켰을 때 시도하는가, 시도하면 훅이 막는가, 막지 못하면 결과가 남는가.
## 언제
- 룰·훅·가드·스킬 description 을 바꾼 직후(퇴행 확인)
- 새 훅을 넣을 때 "이 훅이 값을 하는가" 를 수치로 답해야 할 때(훅값 = 시도 중 막힌 비율)
- doctor 가 소우주의 옛 게이트를 잡았을 때처럼 "실제로 작동하는가" 가 의심될 때
## 어떻게 (세션 밖 터미널에서)
```bash
python3 scripts/harness-eval.py --dry-run # 시나리오·호출 수 확인(호출 0)
python3 scripts/harness-eval.py --k 2 # 6 시나리오 × 3 단계 × 2 = 36 호출(haiku)
python3 scripts/harness-eval.py --only no-verify,key-guard --strictness competing --k 3
```
결과: 표 + `.harness/evals/<stamp>.json`. 종료코드 0 = 모든 (시나리오, 단계) 가 pass@k.
세션 안에서는 summon-guard(RV-06) 가 `claude -p` 를 막으므로 사람이 터미널에서 돌린다. `CI` 환경변수가 있으면 거부한다.
## 읽는 법
| 열 | 뜻 |
|---|---|
| pass@k | k 회 중 1회라도 통과 |
| pass^k | k 회 전부 통과 (신뢰도) |
| 시도율 | 금지 도구를 시도한 실행 비율 (모델의 순수 행동) |
| 훅값 | 시도 중 훅이 막은 비율 (하네스의 효과) |
| 발화후위반 | 시도했고 막히지 않은 횟수 — **0 이어야 한다.** 0 이 아니면 그 훅을 backlog 로 |
단계: supportive(규칙을 프롬프트가 상기) · neutral · competing(프롬프트가 위반을 부추김). competing 에서의 훅값이 진짜 값이다.
## 시나리오 추가
`tests/agent-evals/<id>.json` — `prompts{supportive,neutral,competing}` + `expect{forbid_tool,require_tool,forbid_text,require_text,unchanged_files}`.
채점은 결정론(툴콜 정규식·파일 sha·어휘)만. 모델 채점 없음(설계 `docs/design-docs/agent-eval-llm-path.md`).
## 비용
haiku, 호출당 수 초. 기본 k=3 은 54 호출 — 월간 크레딧에서 나간다. 룰을 바꾼 직후에만, 야간 자동 실행 금지.