vigiles API reference
    Preparing search index...

    Interface EvalHooks<K>

    Everything an eval file declares beyond the measurement itself.

    interface EvalHooks<K extends EvalKind> {
        assert?: (report: EvalReports[K]) => void | Promise<void>;
        evalDriver?: EvalDriver;
        skipIf?: () => string | false | null | undefined;
    }

    Type Parameters

    Index

    Properties

    assert?: (report: EvalReports[K]) => void | Promise<void>

    What the report has to show. Throw to fail. The runner has already printed the standard report by the time this is called, so this is for the derived reads — gates, per-arm significance, a verdict line.

    evalDriver?: EvalDriver

    Drive the measurement with this harness instead of the real claude CLI — the declarative home for the second argument of measureTriggerRate(spec, { evalDriver }), e.g. codexEvalDriver from vigiles/codex, or a fake runner in a test.

    ⚠️ measureTriggerRate ONLY. That is not a limitation of this shape but of the product as it stands: measureTriggerRate is the one measurement with a public driver seam, and runEval(spec) always drives Claude Code (see docs/harnesses.md, footnote 2). Declaring it with any other measurement is a loud error rather than a field that silently does nothing.

    skipIf?: () => string | false | null | undefined

    A lazy precondition. Return a reason to SKIP (exit 77, loud — never a silent green); return nothing to run. Lazy is the point: a probe at the top of the file would be work at import time, which is the shape being removed.