elo-tournament
Skill53 starsChanged 55 days agoApache-2.0View on GitHub
Rating math, pairing policies, match format, and elo CLI usage for hypothesis tournaments.
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
Every match uses one of two tiers, selected based on the contestants' current ratings.
- Very specific: line 29
Read both hypotheses from hypotheses/.
- Very specific: line 30
Read the latest review for each from reviews/ (if available).
- Distinctive: line 36
No transcript file is needed — the rationale is captured in the match record.
- Very specific: line 48
Format: Follow the adversarial match format defined in the debate-protocol skill.
- Very specific: line 81
Every match produces a JSON record conforming to schemas/match.schema.json.
- Very specific: line 82
Write it to matches/M-NNNN.json using atomic writes (temp file + rename).
- Very specific: line 267
All match record files must be written atomically and validated against the match schema.
≈ “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
Elo Tournament
This skill teaches you how to run tournament matches between hypotheses and
maintain Elo ratings using the elo CLI. You compare hypotheses head-to-head,
write match records, and trigger rating recomputation.
This protocol contributes records to a run that the supervisor ultimately
publishes with oase hypex analyze; workers do not publish a separate result.
Match Tiers
Every match uses one of two tiers, selected based on the contestants' current ratings.
Tier 1 — Single-Turn Comparison
A quick structured comparison. Used for:
- Placement matches — when one or both hypotheses are unrated.
- Large rating gaps — when the rating difference exceeds 50 points.
Format:
- Read both hypotheses from
hypotheses/. - Read the latest review for each from
reviews/(if available). - Score each hypothesis on three criteria (1–5 scale each):
- Novelty — Does it propose something genuinely new?
- Plausibility — Is the mechanism well-supported by evidence?
- Testability — Are predictions specific and experiments feasible?
- Declare a winner with margin (
decisiveornarrow) and rationale. - No transcript file is needed — the rationale is captured in the match record.
Tier 2 — Multi-Turn Adversarial Debate
An in-depth adversarial debate. Used for:
- Top-quartile matches — when both hypotheses are in the top 25% by rating.
- Close matches — when the rating difference is ≤ 50 points.
Either condition triggers Tier 2. This ensures that closely-rated and high-performing hypotheses receive the most thorough evaluation.
Format: Follow the adversarial match format defined in the debate-protocol
skill. The full multi-turn debate produces a transcript saved alongside the
match record.
Tier Selection Logic
if either hypothesis is unrated:
→ Tier 1 (placement match)
elif abs(rating_a - rating_b) > 50:
→ Tier 1 (large gap — likely a mismatch)
else:
→ Tier 2 (close or high-stakes match)Note: once the first two branches are evaluated, the remaining hypotheses are all rated with a gap ≤ 50 — exactly the population where Tier 2 applies. Top-quartile matches are a subset of this group (they are rated and typically close together).
Randomization Rule
Always randomize which hypothesis is presented as "Hypothesis A" vs "Hypothesis B". Position bias — the tendency to favor whichever hypothesis is read first — is a well-documented cognitive bias. Before each match, flip a coin (use any random method) to decide presentation order.
The match record fields a and b always reflect the original hypothesis
IDs from the pairing, regardless of presentation order. The randomization
affects only which hypothesis you read and evaluate first.
Match Record Format
Every match produces a JSON record conforming to schemas/match.schema.json.
Write it to matches/M-NNNN.json using atomic writes (temp file + rename).
{
"id": "M-0001",
"epoch": 0,
"a": "H-0001",
"b": "H-0002",
"format": "single-turn",
"winner": "H-0001",
"margin": "decisive",
"criterion_scores": {
"novelty": {"a": 4, "b": 3},
"plausibility": {"a": 5, "b": 4},
"testability": {"a": 3, "b": 4}
},
"rationale": "H-0001 proposes a more specific and novel mechanism...",
"judge": "ranking-agent-1",
"created_at": "2026-09-05T12:00:00Z"
}For Tier 2 matches, add the transcript_path field:
{
"id": "M-0002",
"epoch": 0,
"a": "H-0003",
"b": "H-0004",
"format": "multi-turn-debate",
"winner": "H-0004",
"margin": "narrow",
"criterion_scores": {
"novelty": {"a": 3, "b": 4},
"plausibility": {"a": 4, "b": 4},
"testability": {"a": 3, "b": 5}
},
"rationale": "After multi-turn debate, H-0004 demonstrated stronger...",
"transcript_path": "matches/M-0002.transcript.md",
"judge": "ranking-agent-1",
"created_at": "2026-09-05T12:30:00Z"
}Required Fields
| Field | Type | Description |
id | string | M-NNNN — allocated automatically by hypex add-match (or hypex next-id --run <run-id> match) |
epoch | integer | Current epoch number |
a | string | First contestant hypothesis ID (H-NNNN) |
b | string | Second contestant hypothesis ID (H-NNNN) |
format | string | "single-turn" or "multi-turn-debate" |
winner | string | Winning hypothesis ID (H-NNNN) or "draw" |
margin | string | "decisive" or "narrow" (for draws, use "narrow") |
criterion_scores | object | Per-criterion scores (see below) |
rationale | string | Judge's reasoning for the verdict |
judge | string | Name of the judging agent |
created_at | string | ISO 8601 timestamp of match completion |
Optional Fields
| Field | Type | Description |
transcript_path | string | Path to debate transcript (Tier 2 only) |
Criterion Scores
Each criterion is scored 1–5 for both contestants:
- novelty — Originality of the hypothesis beyond existing literature.
- plausibility — Strength of the proposed causal mechanism and evidence.
- testability — Specificity of predictions and feasibility of experiments.
Scores in criterion_scores use a and b keys matching the a and b
fields in the match record (the original hypothesis IDs, not the randomized
presentation order).
Margin Guidelines
- decisive — Winner is clearly stronger across multiple criteria; score gap ≥ 3 total points.
- narrow — Close contest; score gap ≤ 2 total points or winner is stronger on some criteria but weaker on others.
Margin Multipliers (Rating Impact)
The margin field is not just a label — it directly affects the Elo rating
calculation. The elo recompute engine applies a margin multiplier to the
rating delta (the K × (S − E) term):
| Margin | Multiplier | Effect |
decisive | 1.0× | Full rating change applied |
narrow | 0.75× | Rating change reduced by 25% |
A narrow win moves ratings less than a decisive win. This means close matches
have a smaller impact on rankings than clear-cut victories, reflecting the
lower confidence in the outcome. For draws, use "narrow" as the margin
(per the required fields table above); the draw itself already halves the
actual score (0.5 instead of 1.0), and the 0.75× multiplier further dampens
the rating exchange between unevenly-rated contestants.
elo CLI Usage
The elo CLI is the interface to the Elo rating engine. All commands require
--run-dir <path> pointing to the run directory.
Generate Pairings
elo pair --run-dir <path> --epoch N --budget NOutputs a JSON array of pairings to stdout. Each pairing is an object with
a and b fields (hypothesis IDs).
Options:
| Flag | Default | Description |
--epoch | 0 | Epoch number to read ratings from |
--budget | 10 | Maximum number of pairings to emit |
--strategy | default | Pairing strategy: default (proximity-guided) or swiss |
Recompute Ratings
elo recompute --run-dir <path> --epoch NReplays the full match ledger (matches/M-*.json) in chronological order and
writes updated ratings to ratings/epoch-N.json. The output is deterministic:
the same match ledger always produces byte-identical ratings.
Options:
| Flag | Default | Description |
--epoch | 0 | Epoch number for the output ratings file |
View Standings
elo standings --run-dir <path>Reads the latest ratings file and prints sorted standings (highest Elo first).
Options:
| Flag | Default | Description |
--composite | false | Compute Elo_comp, add composite columns/fields, sort by Elo_comp descending |
--preset | unset | Named preset (balanced, disable_novelty, focus_on_breakthroughs, strict_constraints, pure_tournament). Requires --composite |
--weights | unset | Comma-separated axis=value overrides (e.g. goal=50,constraint=50,novelty=20). Requires --composite |
--explain | false | Add per-component breakdown to table or JSON output. Requires --composite |
--format | table | Output format: table (human-readable) or json |
Pairing Policies
The elo pair command applies pairing policies in order, filling the budget:
- Placement — Unrated hypotheses are paired against high-rated, median-rated, and low-rated anchors (3 matches each). This calibrates new entrants quickly.
- Refinement — Among top-quartile rated hypotheses, pair nearest-rated within the same proximity cluster. This produces the most informative matches — close contests between the strongest related hypotheses.
- Exploration — 15% of the remaining budget is allocated to cross-cluster pairings. This prevents clusters from becoming rating silos where hypotheses are only compared to their neighbors.
- Rematch constraint — No two hypotheses can be paired more than once within an epoch, unless one has undergone evolution (producing a new hypothesis variant) since the last match.
These policies are implemented in the elo tool. You do not need to implement
them — just call elo pair and use the pairings it returns.
Atomic Writes & Match Creation
All match record files must be written atomically and validated against the match schema. Use hypex add-match:
cat <<'EOF' | hypex add-match --run <run-id> -
{
"epoch": 0,
"a": "H-0001",
"b": "H-0002",
"format": "single-turn",
"winner": "H-0001",
"margin": "decisive",
"criterion_scores": {
"novelty": {"a": 4, "b": 3},
"plausibility": {"a": 5, "b": 4},
"testability": {"a": 4, "b": 3}
},
"rationale": "Contestant A proposed a more testable and plausible mechanism.",
"judge": "ranking-agent-1",
"created_at": "2026-09-06T12:00:00Z"
}
EOFhypex add-match handles sequential M-NNNN ID allocation, schema validation against match.schema.json, and atomic write to matches/M-NNNN.json in one command.
Concurrency
Multiple ranking agents can run in parallel against different pairings. Safety is ensured by:
- Unique IDs — Each match gets a unique
M-NNNNID fromhypex add-match(which callshypex next-idinternally), using filesystem locking (flock) to serialize ID allocation across concurrent processes. - One-writer-per-file — Each match record is a separate file. No two agents write to the same match file.
- Deferred recomputation — Ratings are recomputed after all matches complete by replaying the full match ledger. No agent writes to ratings files during matches.
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- terravic/pde-agent-plugin★ 098% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository82 other files it gives its agents.
- applications/open-agentic-science-engine/templates/admet-dmpk-scientist/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/bootstrapper/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/computational-biologist/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/computational-chemist/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/experimental-biologist/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/finding-validator/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/head-of-discovery/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/hypex-evolution/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/hypex-generation/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/hypex-meta-review/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/hypex-proximity/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/hypex-reflection/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/hypex-supervisor/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/hypex-tournament/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/medicinal-chemist/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/preclinical-toxicologist/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/project-curator/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/regulatory-scientist/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/research-operations-controller/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/science-program-lead/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/scientific-reviewer/agents.mdAGENTS.md
- applications/open-agentic-science-engine/templates/structural-biologist/agents.mdAGENTS.md
- cost-estimationSkill
- database-queriesSkill
- job-managementSkill
- job-submissionSkill
- results-analysisSkill
- storage-managementSkill
- visualizationSkill
- admet-property-predictionSkill
- artifact-conventionsSkill
- binding-mode-analysisSkill
- bioactivity-landscapeSkill
- brain-atlasSkill
- citation-resolutionSkill
- citation-verificationSkill
- competitive-differentiationSkill
- compound-identity-resolutionSkill
- compound-property-profileSkill
- debate-protocolSkill
- disease-transcriptomicsSkill
- evolution-operatorsSkill
- hypex-tool-setupSkill
- hypothesis-entrySkill
- hypothesis-run-corpusSkill
- hypothesis-schemaSkill
- in-vivo-pk-analysisSkill
- literature-searchSkill
- manufacturing-feasibilitySkill
- meta-review-protocolSkill
- model-organism-phenotypeSkill
- pocket-druggabilitySkill
- preclinical-safety-assessmentSkill
- program-state-managementSkill
- protein-structure-confidenceSkill
- proximity-protocolSkill
- regulatory-variant-effectSkill
- review-rubricSkill
- run-protocolSkill
- safety-screenSkill
- The first 60 shown.
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.

