Skip to content

feat: run-evals skill + pin the sim-use binary under test in agent evals#65

Open
onevcat wants to merge 1 commit into
mainfrom
feat/run-evals-skill
Open

feat: run-evals skill + pin the sim-use binary under test in agent evals#65
onevcat wants to merge 1 commit into
mainfrom
feat/run-evals-skill

Conversation

@onevcat

@onevcat onevcat commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Summary

The agent-eval suite resolves bare sim-use from PATH at every layer (device probing, the eval agent's commands, the verification checks), so a run could silently evaluate whatever binary happened to be installed. This PR makes the binary under test explicit, controllable, and recorded, and packages the whole workflow as a repo skill so future agents and contributors can prepare the environment and run the LLM-driven evals reproducibly.

Changes

  • run.py --sim-use <path> — validates the target, prepends a shim directory (sim-use symlink) to PATH so every layer of the run resolves the same binary, prints sim-use under test: <real path> (<version>) before touching a device, and records the same line in the report header. Default behavior (PATH resolution) is unchanged, but now always announced.
  • scripts/eval.sh -b/--sim-use (env: SIM_USE_BIN) — same shim applied before the wrapper's own reachability probing; the env check now always names the resolved real path + version it will test. Enables make eval ARGS="-b .build/out/Products/Debug/sim-use" to eval a development build directly.
  • New repo skill .agents/skills/run-evals/ (exposed as /run-evals via the .claude/skills symlink) — orchestration only, execution stays delegated to eval.sh/run.py: which-binary confirmation, per-platform environment prep (Device Hub closed on Xcode 27 — a poisoned boot now fails loudly per fix: guard every HID verb against Device-Hub-poisoned simulators #61 and would red every case; fixture installation checks), cost confirmation rules, and FAIL triage (skill-prose drift vs CLI regression vs fixture noise, fragile tagging).
  • Docse2e/agent-evals/README.md gains the Device Hub prereq and the binary-selection section; the release skill's eval step references /run-evals.

Verification

  • bash -n on eval.sh; py_compile on run.py.
  • No-cost smoke: -b with a bogus path is rejected with a clear error; with a real binary the sim-use under test: banner prints and the run exits at "0 cases selected" without spending.
  • run.py override exercised in-process: shim lands first on PATH, the banner resolves the real path (not the shim symlink), and subprocess sim-use --version returns the pinned binary's version.
  • Baseline for the harness itself: yesterday's quick-tag run on v0.11.0 was 3/3 PASS on both platforms.

🤖 Generated with Claude Code

Everything in an agent-eval run — device probing, the eval agent's
commands, the deterministic verification layer — resolves bare
`sim-use` from PATH, so a run could silently evaluate whatever
happened to be installed. Make the binary under test explicit and
controllable:

- run.py gains --sim-use <path>: validates the file, prepends a shim
  directory (with a `sim-use` symlink) to PATH so every layer of the
  run resolves the same binary, prints `sim-use under test: <real
  path> (<version>)` before touching a device, and records the same
  line in the report header via RunReport meta.
- scripts/eval.sh gains -b/--sim-use (env: SIM_USE_BIN) with the same
  shim applied before its own reachability probing, and its env check
  now always names the resolved real path + version it will test.
- New repo skill .claude/skills/run-evals/ orchestrates the flow for
  agents and contributors: which-binary confirmation, per-platform
  environment prep (Device Hub closed on Xcode 27, fixtures
  installed), cost confirmation, and FAIL triage (skill-prose drift
  vs CLI regression vs fixture noise). Execution stays delegated to
  eval.sh/run.py.
- e2e/agent-evals/README.md documents the Device Hub prereq and the
  binary-selection flags; the release skill's eval step references
  the new skill.

Verified: eval.sh syntax + no-cost smoke (-b with a bogus path is
rejected; with a real binary the banner prints and the run exits at
"0 cases" without spending); run.py override exercised in-process
(shim first on PATH, banner resolves the real path, subprocess
resolution returns the pinned version).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Signed-off-by: onevcat <onevcat@gmail.com>
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