A tiny edit
A process requirement becomes a direct-output requirement.
instructions.md
− Delegate summary to reporter
+ Give a one-line summary
diff0 compares how your Eve agent behaves across two committed refs—so captured behavioral changes can show up before you merge them.
source change
agent/instructions.md
− After computing a figure, delegate a one-line executive summary to the
− `reporter` subagent before replying.
+ After computing a figure, give a one-line executive summary before replying.
behavioral comparison
Drift detected
One instruction simplified · 20 real-model suites · automated in GitHub Actions
Eve-native
Reads captured Eve eval JSON and events
Two refs
Base behavior vs. head behavior
N runs
Evidence, not anecdotes
One comment
The result lives in your PR
The gap after evals
A scorer tells you whether the answer was acceptable. diff0 shows captured evidence about how the agent got there—and whether that behavior moved with your code.
A process requirement becomes a direct-output requirement.
instructions.md
− Delegate summary to reporter
+ Give a one-line summary
The head clears every eval observation. Repetition can reveal what one green run misses.
total-revenuepass
no-failed-actionspass
uses-sql-toolpass
Repeated runs reveal that delegation vanished completely.
reporter subagent
How it works
diff0 checks out both committed refs, runs each ref's Eve eval suite, and flags evaluator changes that would make the outcomes incomparable.
Base and head run in isolated git worktrees. A dirty local HEAD is rejected so edits are never silently omitted.
Existing Eve evals run N times per ref in counterbalanced AB/BA order.
Tool calls, subagents, skills, tokens, available cost, and duration come from Eve's own artifacts.
Statistical changes and stable behavioral drift land in the terminal and one sticky PR comment.
Captured real-model evidence
GitHub Actions called Claude Haiku 4.5 for 10 runs per ref. The 2026-09-04 snapshot below preserves that run. The live PR is refreshed separately and may show different results.
Source-linked evidence
The head passed all 30 eval observations while confirmed reporter delegation was 10/10 on base and 0/10 on head in each of 3 evals. The yellow verdict asks a human to review the captured evidence.
Read the archived reportOriginal workflow attempt · Captured source diff · Latest live comparison (updated separately)
Base cost is unavailable because subagent usage was not fully attributed. A savings percentage cannot be calculated for this captured run.
Evidence, with limits
diff0 separates regression, inconclusive movement, and behavioral drift. It shows uncertainty instead of painting every change red.
N=10
runs per ref
60 / 60
eval observations passed
1
source file changed
1
sticky PR comment
One-sided Fisher exact tests compare differing proportions across runs.
Holm adjustment keeps a suite full of evals from manufacturing confidence.
Changed eval harness, authored sandbox configuration, model, run count, or scorer validity caps the verdict at yellow.
Drift is not automatically bad. diff0 reports only what Eve captured; it does not prove semantic equivalence or decide whether a change is desirable. In the showcase, removing delegation coincided with 34% fewer median output tokens and 41% lower median duration. Base cost stayed unavailable because delegated base usage was not fully attributed, so diff0 makes no savings claim.
In your pull request
One comment updates in place on every push. No dashboard to remember, no second review loop.
Comparing 84cb96d → fc5efb9 · 10 runs per ref · model anthropic/claude-haiku-4.5
| Signal | Base | Head | Change |
|---|---|---|---|
| Evals passing every run | 3/3 | 3/3 | unchanged |
| Cost / session (median) | unavailable | $0.0076 | n/a |
| Tool calls / run (agents excluded) | 6 (6–10) | 6 | +0% |
| Output tokens / run | 1,017 (941–1,481) | 675 (654–714) | -34% |
| Duration / run | 20.2s (19.0s–27.2s) | 11.8s (10.8s–12.5s) | -41% |
| Signal | Base | Head | Scope |
|---|---|---|---|
Subagent reporter | 10/10 runs | 0/10 runs | 3 evals · confirmed |
2 additional inconclusive signals are available in the full comparison details.
| Eval | Base | Head | Result |
|---|---|---|---|
revenue/total-revenue | 10/10 | 10/10 | ✅ pass |
revenue/no-failed-actions | 10/10 | 10/10 | ✅ pass |
revenue/uses-sql-tool | 10/10 | 10/10 | ✅ pass |
eve 0.47.5 · actual sandbox unknown · host default candidate microsandbox · comparison cost unavailable
Subagent evidence: Fisher raw p=<0.0001; Holm p=<0.0001 in each of 3 evals.
Cost note: Comparison cost unavailable because delegated base usage was not fully attributed.
Changed file: fixtures/demo-agent/agent/instructions.md (+1 −2)
1 file changed, 1 insertion(+), 2 deletions(-). File attribution is correlational, not causal.
Captured 2026-09-04 · diff0 v0.1.3. Statistical comparison across 10 runs per ref — LLM runs are nondeterministic; treat proportions, not absolutes. Read the archived console report.
Run it on your agent
From a repository with an Eve eval suite, compare the branch you plan to merge against its base. Commit both refs, install your app’s dependencies, and configure its model credentials. No global diff0 install is required.
$ npx @knowbody/diff0 run --base mainWant to inspect or develop diff0 itself?
$ git clone https://github.com/knowbody/diff0 && cd diff0Run the comparison on pull requests and post one self-updating comment. The default blocks red regressions but reports yellow drift without failing; granular policies can gate eval, score, performance, behavioral, and validity findings independently. Fork PRs stay refused by default.
name: diff0
on:
pull_request:
paths:
- "agent/**"
- "evals/**"
- "src/**"
- "package.json"
- "pnpm-lock.yaml"
- ".github/workflows/diff0.yml"
permissions:
contents: read
pull-requests: write # required for the sticky PR comment
jobs:
diff0:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0 # required: diff0 checks the base ref out locally
persist-credentials: false # do not expose the job token to evaluated head code
- uses: actions/setup-node@v7
with:
node-version: 24
# Pin a release version.
- uses: knowbody/diff0/action@v0.1.4
with:
working-directory: .
runs: "3"
install-mode: scripts-off
fail-on: regression # yellow drift reports but does not block; use drift to gate it
Library API preview
Compare records collected by your own host, or use the Node.js runner to compare Git refs through Eve. Separate comparison, adapter, and reporting entrypoints let you own the workflow and where the results go.
The package includes a library API preview. See the guide for installation and examples.
Explore the library API preview