horizon-facts-eval-sweep
Skill14 starsChanged 8 months agoMITView on GitHub
Run and analyze the horizon-facts cross-model evaluation sweep (graph-grounded vs parametric+web closed-QA), sweeping harvester × query × judge models into a 3×3×3 score tensor with an LLM-generated bias-aware report. Use when collecting fresh sweep results, re-running a subset of cells, changing the model set, or interpreting judge bias.
- Reads credentials
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 8
Use this skill when the user wants to measure whether the harvested knowledge graph actually improves answer quality — and to do it across …
- Very specific: line 42
Verify the target models resolve against the Copilot SDK before a long run (a trivial createSession + "say OK" per model id).
- Very specific: line 60
Read this skill and eval/sweep/sweep.config.json.
- Distinctive: line 86
If the graph wins everywhere, do not celebrate — scrutinize these controls and state plainly whether any of them inflate the result.
- Very specific: line 91
Do not hand-edit generated artifacts (REPORT.md, summary.json, scores/*, transcripts/*).
- Distinctive: line 92
Do not weaken the eval to make the graph win (no custom system prompts to compensate, no retries, no assertion softening).
- Distinctive: line 93
Keep harvests consistent: same corpus, same embedding config across all harvester models, or the comparison is not apples-to-apples.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Horizon-Facts Eval Sweep
Use this skill when the user wants to measure whether the harvested knowledge graph actually improves answer quality — and to do it across multiple models so the result is not an artifact of one model or one biased judge.
The sweep fills a 3×3×3 tensor over three independent axes:
- harvester model — built the knowledge graph from the corpus
- query model — answered the questions (both arms: graph vs parametric+web)
- judge model — graded the blinded answers against corpus ground truth
Judging is split from answering so the same answers are graded by every judge model — that is how judge bias is measured.
Canonical Files
- Config:
incubator/horizon-facts/eval/sweep/sweep.config.json - Driver:
incubator/horizon-facts/eval/sweep/run-sweep.mjs - Report generator (LLM):
incubator/horizon-facts/eval/sweep/generate-report.mjs - Per-cell eval primitive:
incubator/horizon-facts/eval/graph-quality.mjs(modes:gen|answer|judge|run) - Question set (generated once):
incubator/horizon-facts/eval/sweep/questions.json - Transcripts (per harvester×query):
incubator/horizon-facts/eval/sweep/transcripts/<H>__<Q>.json - Scores (per harvester×query×judge):
incubator/horizon-facts/eval/sweep/scores/<H>__<Q>__<J>.json - Numeric summary:
incubator/horizon-facts/eval/sweep/summary.json - Generated report:
incubator/horizon-facts/eval/sweep/REPORT.md - Per-cell logs (gitignored):
incubator/horizon-facts/eval/sweep/logs/
Prerequisites
HORIZON_DATABASE_URL(HorizonDB) and a GitHub token (GITHUB_TOKENenv → repo.env→gh auth token).- Embeddings (
HORIZON_EMBED_*) should be configured before harvesting so each graph is built embedded (semantic search + similarity refinement). The driver warns if they are absent. Keepsweep.config.json embedDimmatching the embed dim. - Build first:
cd incubator/horizon-facts && npm run build. - Verify the target models resolve against the Copilot SDK before a long run (a
trivial
createSession+ "say OK" per model id).claude-opus-4.8,claude-sonnet-4.6, andgpt-5.5were verified working on 2026-06-11.
Cost Model (set expectations first)
The sweep is LLM-bound and long-running. Per axis:
- harvests are the most expensive (minutes per fact × corpus size); opus/gpt-5.5 are slower and pricier than haiku/sonnet
- answer cells = harvesters × queries (e.g. 9), each running both arms over all questions
- judge cells = harvesters × queries × judges (e.g. 27), but cheap (no DB/web)
Bound cost via the corpus size and questionCount in the config. Reuse the existing
pgsql-hackers-recent.json corpus rather than pulling more unless asked.
Workflow
- Read this skill and
eval/sweep/sweep.config.json. Confirm the model set + corpus + question count with the user if changing them. node eval/sweep/run-sweep.mjs status— see what's done/pending (resumable).node eval/sweep/run-sweep.mjs gen— build the shared question set once (fixedgenModel).- Harvest each model:
node eval/sweep/run-sweep.mjs harvest <H>→hz_sw_<H>/hzg_sw_<H>. - Answer each harvester×query cell:
node eval/sweep/run-sweep.mjs answer <H> <Q>(persists a transcript; no judging). - Judge each cell with each judge model:
node eval/sweep/run-sweep.mjs judge <H> <Q> <J>(DB-free, parallel-safe). node eval/sweep/run-sweep.mjs report— compute the deterministic tensor + bias aggregates and havereportModelwriteREPORT.md.- Or run the whole thing sequentially + resumably:
node eval/sweep/run-sweep.mjs all.
For a fully parallel run, dispatch one subagent per answer cell (each owns a
<H>×<Q> transcript); harvests fan out as one subagent per harvester model. Judge
cells are cheap and can be batched. Because every step is file-backed and skips
existing outputs, partial failures resume cleanly.
Interpreting the Report — Bias Controls
The report and summary.json are built to answer "is the graph really better, or is
the judge biased / are answers just longer?":
- Marginals by harvester / query / judge — isolate each axis.
- Judge leniency — mean graph score each judge awards.
- Same-family favoritism — does a judge score answers from its own model family higher? (
sameFamilyQueryGraphMeanvsdiffFamilyQueryGraphMean). - Inter-judge agreement — score spread across judges on the same answer; unanimous vs split decisions. If conclusions hold across all three judges, judge bias is not driving the result.
- Verbosity — Pearson correlation of score vs answer length. A high correlation means length may be buying score.
- Abstention — baseline low-score / web-use rates. A graph win driven by baseline punting is real but must be visible.
If the graph wins everywhere, do not celebrate — scrutinize these controls and state plainly whether any of them inflate the result.
Constraints
- Do not hand-edit generated artifacts (
REPORT.md,summary.json,scores/*,transcripts/*). Regenerate via the driver. - Do not weaken the eval to make the graph win (no custom system prompts to compensate, no retries, no assertion softening). If an arm fails, investigate.
- Keep harvests consistent: same corpus, same embedding config across all harvester models, or the comparison is not apples-to-apples.
- One graph per harvester model (
hz_sw_<H>). Query/judge runs READ the shared graphs (reads do not mutate) — never re-harvest per query. - Record findings + the model compatibility result in repo memory after a sweep.
- Clean up sweep schemas when done if the user asks: for each
<H>,DROP SCHEMA IF EXISTS "hz_sw_<H>" CASCADE;+SELECT drop_graph('hzg_sw_<H>', true);.
In this repository50 other files it gives its agents.
- packages/sdk/examples/repo-workspaces/seed/home/AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- agent-repair-loopSkill
- duroxide-orchestration-versioningSkill
- editorial-standardsSkill
- finance-research-standardsSkill
- valuation-methodsSkill
- pilotswarm-architectureSkill
- deployment-safetySkill
- incident-responseSkill
- add-activitySkill
- add-eventSkill
- add-testSkill
- add-toolSkill
- agent-versioningSkill
- azure-ps-test-runner-vmSkill
- debug-orchestrationSkill
- debug-testSkill
- horizondb-idiosyncrasiesSkill
- investigate-duroxide-runtimeSkill
- pilotswarm-aks-deploySkill
- pilotswarm-aks-resetSkill
- pilotswarm-new-env-deploySkill
- pilotswarm-perfSkill
- pilotswarm-portal-app-regSkill
- pilotswarm-portal-auth-assignmentsSkill
- pilotswarm-releaseSkill
- pilotswarm-tuiSkill
- pilotswarm-vpn-client-profileSkill
- schema-migrationSkill
- notesSkill
- share-a-fileSkill
- cost-latency-analysisSkill
- graph-debugSkill
- orchestration-session-lifecycleSkill
- resourcemgrSkill
- sweeperSkill
- canvas-appsSkill
- html-visualsSkill
- pilotswarm-agent-versioningSkill
- pilotswarm-aks-identitySkill
- pilotswarm-azure-deployerSkill
- pilotswarm-azure-lessonsSkill
- pilotswarm-cli-builderSkill
- pilotswarm-duroxide-versioningSkill
- pilotswarm-hybrid-datastoreSkill
- pilotswarm-knowledge-harvesterSkill
- pilotswarm-portal-builderSkill
- pilotswarm-sdk-builderSkill
- pilotswarm-three-tierSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

