Eval
SkillDev toolsRun the context fitness-function probe suite (.agro/evals/probes/*.sh) against real state and write the .agro/evals/RESULTS.md benchmark. Each probe is a deterministic 3-state oracle (PASS/REGRESSION/SKIPPED); a green→red transition is surfaced as a REGRESSION naming the lesson it closes. Tier-B behavioral evals are out of scope. TRIGGER when: asked to run evals, check the probe suite, "run /eval", verify a lesson's probe is green, benchmark the harness, or before/after editing a rule/skill that a probe guards.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Eval skill
What this skill tells your AI
The instructions your AI receives, as published by mifunedev/agro in .agro/skills/eval/SKILL.md and read by ahel’s review.
The runner for the harness fitness function. It discovers .agro/evals/probes/*.sh,
runs each against real state, and writes the .agro/evals/RESULTS.md scoreboard. A
rectification is provably "done" when its probe is green; a recurrence shows up as
a REGRESSION (was-PASS, now-fail) naming the # source: lesson. The full
contract — 3-state exit oracle, header convention, correction-surface triage — is
in .agro/evals/README.md.
Usage
bash .claude/skills/eval/run.sh # run the whole suite, rewrite RESULTS.md
bash .claude/skills/eval/run.sh --probe <id> # run one probe, update only its row
bash .claude/skills/eval/run.sh --tier A # run only Tier-A probes
Exit-code oracle (per probe): 0=PASS, 1=REGRESSION, 2=SKIPPED (not
applicable — excluded from pass-rate), 124=TIMEOUT, other=ERROR. Each probe is
wrapped in timeout 30s. Runner aggregate exit (the process $? of run.sh
itself): 0 when no new green→red regression occurred this run, 1 when one or
more new regressions were detected (${#regressions[@]} > 0). When invoked via the
Bash tool as bash .claude/skills/eval/run.sh, the agent caller reads $? directly
to gate on success — the printed REGRESSIONS (...) stdout block and per-probe stderr
lines remain the human-readable signal. Note: the eval-weekly cron is an intentional
legacy caller that appends || true then greps stdout; it does not consume the exit
code by design — this is not a bug.
What the runner does
- Discover + run every probe matching the filters; extract
# tier:/# source:via the exact header grep. - Compute the delta vs the prior
RESULTS.mdrow. First run (no prior row) emitsnew-pass/new-failand raises NO regression without prior state. - Surface regressions — any
PASS → (REGRESSION|TIMEOUT|ERROR)transition is printed first, naming the probe'ssource. - Rewrite
RESULTS.mdatomically — build the full scoreboard into a temp sibling file (RESULTS.md.tmp.$$) and replace the live file in onemv -f(never truncate-then-append in place), so a crash or concurrent run can't leave a partial scoreboard. Overwrite the row for each probe run; carry prior rows for probes not run this invocation from a pre-write snapshot (RESULTS_ORIG) captured before the rewrite — not the live file — so a filtered run never erases untouched rows and the scoreboard stays complete.
When NOT to use
- Tier-B behavioral evals (sub-agent + LLM-judge of judgment-call behavior)
are deferred —
/evalis deterministic only. Never hard-gate on a noisy metric. - For scoring context files for staleness/budget, that is
/audit contextand/audit skills—/evalchecks behavior/state, not prose quality.
Signals
- GitHub stars
- 38
- Forks
- 3
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
eval-mifunedev- Source
- github.com/mifunedev/agro