->assert(...), per sample, before any judge. The closure receives an assertion proxy, the row, and the full response:
Anatomy
$this->assert*() methods (e.g. $a->toolCalled(...) ⇢ $this->assertToolCalled(...)).
Content
Structure
Agent behavior
These inspect the realAgentResponse — actual tool calls with their arguments, actual steps — not text parsing:
Usage & cost
Safety pre-filters
Named honestly — these are wordlist and regex checks, useful as cheap gates, not classifiers:Scalars
equals($expected, $actual), true($condition), false($condition), greaterThan($threshold, $actual), lessThan($threshold, $actual) — for checks you compute yourself from $row and $response.
Custom assertions
Implement the contract once, use it everywhere:app/Evals/Assertions/MentionsOrderNumber.php
Using it