Reproducibility bundle for NousResearch/hermes-agent PR #49252 (background-review: aux-model routing + context digest + adaptive cadence).
All numbers in the PR come from these files. Benchmarks ran live against the
Anthropic API; token usage is the real wire usage read off each
messages.stream().get_final_message().usage, split into the four
non-overlapping Anthropic buckets (fresh input_tokens,
cache_read_input_tokens, cache_creation_input_tokens, output_tokens) and
priced each at its own published rate.
Isolates the digest: model price is out of the equation, so cost delta is purely structural. Result: ~2.0× cheaper, capture 1.00 = 1.00, blind fidelity judge full-preferred 3 / digest-preferred 0 / tie 15 (the 3 were presentation/scaffolding of already-captured content, never a missed signal).
hard_scenarios.py— 7 hard scenarios (signals buried early/mid, a retracted distractor, multi-signal, durable-vs-trivia memory, long no-op), each with ground-truth signals + must_contain / must_not_contain oracleshard_harness.py— runs the REALagent.background_reviewfork in full vs digest (and an optional pre-pass arm), captures real usage + saved artifactshard_judge.py— blind pairwise judge (order-randomized, fidelity-only rubric) + objective capture / distractor / no-op aggregationhard_results.json— raw per-run output (42 forks: usage, cost, saved memory/skill, capture)hard_summary.json— aggregated cost / capture / pairwisehard_judge.out— pairwise with the early length-biased rubric (full 9 / digest 4 / tie 5)hard_judge2.out— pairwise with the corrected fidelity-only rubric (full 3 / digest 0 / tie 15)
16–18× cheaper (18.5× cold cache, 16.0× warm steady-state; both arms equally cached, fair ratio).
scenarios.py— 8 fixture scenarios (mixed save-worthy / no-op)harness.py— full (opus) vs routed-digest (haiku) A/Bjudge.py— per-run LLM-judge edit gradinganalyze.py— precision/recall + cost aggregationresults.json— raw per-run output (48 forks)summary.json/quality.json— aggregatesdigest_bench.py/digest_results.json— isolated large-session digest test (same model both arms)
Re-runs the routing arm through the corrected same-model harness so Haiku gets the SAME rigorous, per-kind oracle (skill-capture vs memory-capture scored separately, correct memory-path read). Result: ~44× cheaper (cold cache), memory capture 9/9 = 9/9, skill capture 11/12 vs 12/12, distractor false-saves 0/6 vs 3/6 (Haiku cleaner).
routing_quality.py— opus-review vs haiku-review A/B on the hard scenarios, per-kind scoringrouting_quality_results.json— raw per-run output + aggregated skill/memory/distractor/noop summary
- An earlier harness built the review fork's parent with
skip_memory=True, so memory writes (to~/.hermes/memories/) had nowhere to land and were scored as misses — this produced a spurious "recall 1.00 → 0.87" that does NOT reflect the product. Fixed (parentskip_memory=False, harness reads the correct path); corrected capture is 1.00 = 1.00. Thepilot*.outfiles capture that debugging arc. - The blind pairwise judge was first run with a rubric that rewarded longer/more
polished saves (
hard_judge.out); re-run fidelity-only (hard_judge2.out), which is the reported result. - Synthetic scenarios only; no real user data. Scenarios top out ~127K tokens — behavior at multi-hundred-K (where attention dilution might favor the digest/pre-pass) is untested and stated as conjecture in the PR.
# from a hermes-agent checkout with the PR branch + anthropic extra installed
export ANTHROPIC_API_KEY=...
# point WORKTREE in the harness at your checkout, then:
python3 hard_harness.py # same-model A/B -> hard_results.json
python3 hard_judge.py # judge + aggregate
python3 harness.py # routing A/B -> results.jsonPrices used (USD / 1M tokens, Anthropic, mid-2026): opus-4.8 in 15 / out 75 / cache_read 1.50 / cache_write 18.75; haiku-4.5 in 1 / out 5 / cache_read 0.10 / cache_write 1.25.