Agent skill

Tournament Autoresearch

by gaasher in gaasher/Agent-Loop-Skills

A skill your agent uses when the user wants an autonomous ML research loop that pressure-tests competing ideas before spending compute — several research subagents each propose one architecture…

MITAuto-check passedAgent Workflows

Install Tournament Autoresearch

skills CLI
$ npx skills add gaasher/Agent-Loop-Skills --skill tournament-autoresearch -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install gaasher/Agent-Loop-Skills tournament-autoresearch --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/loops/tournament-autoresearch .claude/skills/tournament-autoresearch && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tournament-autoresearch
GitHub stars
174
Token cost
~3k tokens
SKILL.md length
1,228 words
Files
7
Skills in repo
20
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when the user wants an autonomous ML research loop that pressure-tests competing ideas before spending compute — several research subagents each propose one architecture…

  • Works in 10 steps: State. branches: git log --oneline -5.… → Tournament (iter 2+). As the Judge… → Snapshot/commit, then apply the winning… → …
  • A self-calibrating Judge critiques them against a rubric
  • SKILL.md covers When to use, Setup, The loop and Ledger, plus 1 more section
  • Calls git

What it does

Tournament Autoresearch is an agent skill from gaasher/Agent-Loop-Skills. Use when the user wants an autonomous ML research loop that pressure-tests competing ideas before spending compute — several research subagents each propose one architecture change, a self-calibrating Judge critiques them against a rubric, the proposers refine, and the Judge picks the single change to run. The Judge learns to pick better over time by scoring its own predictions against realized metric deltas, recording predicted-vs-realized in a calibration ledger and refining its working rubric. The result is an…

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files (for example `examples/run.example.yaml`, `roles/Judge.md` and `roles/ResearchAgent.md`). Compatibility notes: Requires Python 3.9+

It sits in Agent Workflows, covering Autonomous loops and Quizzes and assessments. The repository describes itself as: Loop until it's better — drop-in agentic loops (autoresearch, scientific writing, data analysis, code/SQL/prompt optimization, red-teaming) as open-standard Agent Skills… The licence is MIT.

When your agent uses it

  • A self-calibrating Judge critiques them against a rubric
  • The proposers refine
  • The Judge picks the single change to run

Example prompts

  • “/tournament-autoresearch”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Requires Python 3.9+

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. State. branches: git log --oneline -5. snapshots: confirm iter/ is new.
  2. Tournament (iter 2+). As the Judge (roles/Judge.md): spawn ResearchAgents
  3. Snapshot/commit, then apply the winning change. snapshots: copy →
  4. Analysis plan → iter/analysis/plan.md: a deliverables table including the winner's
  5. Run (redirect to , never tee) → read the metric (grep '^:' `;
  6. Analyse — mandatory, real artifacts. Execute every plan.md row → files in iter/results/;
  7. Log. Append the results.tsv row (0.000000 on crash). Append the realized delta + hit to
  8. Keep or revert. Improved → keep, update best. Equal/worse/crash → discard/crash
  9. Self-calibrate (roles/Judge.md): update judge_lessons.md, refine rubric.active.md
  10. Go to step 1.

What it can do on your machine

Read from SKILL.md and the folder at commit f1169e6. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires Python 3.9+

    From compatibility in the SKILL.md frontmatter.

Context cost

Tournament Autoresearch loads about 3k tokens when it runs. Until then it costs about 204 tokens; SKILL.md has 1,228 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~204
When it runs · the whole SKILL.md, loaded when a task matches
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from gaasher/Agent-Loop-Skills at commit f1169e6, republished under its MIT licence (© gaasher). 1,228 words, ~2,982 tokens.

Download SKILL.mdSave it as .claude/skills/tournament-autoresearch/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
tournament-autoresearch
description
Use when the user wants an autonomous ML research loop that pressure-tests competing ideas before spending compute — several research subagents each propose one architecture change, a self-calibrating Judge critiques them against a rubric, the proposers refine, and the Judge picks the single change to run. The Judge learns to pick better over time by scoring its own predictions against realized metric deltas, recording predicted-vs-realized in a calibration ledger and refining its working rubric. The result is an experiment ledger where each iteration's change won a de-biased tournament. Not for running a single pre-decided experiment, and not for analysis-only exploration — for one hypothesis proposed and run per iteration without competition, use the sibling ml-autoresearch loop.
compatibility
Requires Python 3.9+
metadata.version
0.1.0

Tournament Autoresearch Loop

An ML autoresearch loop whose single "form a hypothesis" step is replaced by an idea tournament. The artifact is an experiment ledger; the feedback signal is the realized <metric> delta of the change that won the tournament. Each iteration <n> ResearchAgents propose competing architecture changes, a Judge critiques and ranks them, the proposers refine, and the Judge selects one change to run. The Judge is the orchestrator and self-calibrates: it scores its predictions against realized results, so it learns which kinds of ideas actually pay off. The experiment mechanics (snapshot → run → mandatory analysis → keep/revert) match the sibling ml-autoresearch loop.

When to use

Use this for open-ended ML experimentation where competing ideas should be vetted before compute is spent and the picker should improve over time. You are the Judge: adopt roles/Judge.md and spawn the proposers with roles/ResearchAgent.md. Default to <n> competing proposers with one refine round; widen <n> or add rounds when ideas are converging too fast. Not for running a single pre-decided experiment, and not for analysis-only exploration over a dataset — for one uncompeted hypothesis per iteration use the sibling ml-autoresearch loop.

The cast and files (all in this folder):

  • roles/Judge.md — your behavior: critique, rank, decide, self-calibrate.
  • roles/ResearchAgent.md — the proposer role, spawned <n> times each round.
  • rubrics/rubric.md — the scoring criteria (shipped defaults; copied to a working copy at setup).
  • schemas/idea.schema.json — what a proposer returns (one proposed change).
  • schemas/verdict.schema.json — what the Judge records per idea (scores, rank, decision).

Setup

Resolve bindings interactively. If loop.run.yaml exists in the working dir, load it, confirm the values in one line, and skip to the loop. Otherwise: on Claude Code (the AskUserQuestion tool is available) infer a likely value for each binding and present it as the recommended option; on other hosts ask each as a quoted plain-text prompt. Then write loop.run.yaml (format: examples/run.example.yaml) and confirm the values before creating any other files.

Record <host> (claude-code or other) once — it also decides spawn-or-degrade: on Claude Code spawn real Agent subagents for the proposers, all in one turn; otherwise adopt the ResearchAgent role inline, one proposal at a time.

bindingmeaningdefaulthow to infer
<metric>scalar metric to optimize—infer from code/README; ask direction
<metric_direction>minimize or maximize—infer from the metric's meaning
<run_cmd> / <entrypoint>command that runs one experiment end to end—pyproject.toml/.venv/README
<editable_files>model/config/training files the loop may edit; never the eval harness—scan for the model + training script
<sandbox_root>where snapshots + ledgers live./sandbox—
<iter_strategy>branches or snapshotssnapshotsgit present → offer branches
<gate> / <budget>time (minutes) or epochs, plus the capepochs / —infer epoch arg from the script
<n>proposers competing each round3recommend 3 — competition without a crowd
<refine_rounds>propose→critique→refine rounds before the Judge decides1—

If <iter_strategy> is branches, create git checkout -b autoresearch/<run_tag> (must not exist). If <gate> is time, write <sandbox_root>/run_with_timeout.sh (timeout $(( <budget> * 60 )) <entrypoint> "$@") and hard-kill at 2 × <budget> min; if epochs, cap the epoch count in an editable file.

Initialize the sandbox (after confirmation):

<sandbox_root>/
├── loop.run.yaml       ← resolved bindings (written now)
├── results.tsv         ← experiment ledger, header only
├── calibration.tsv     ← Judge predicted-vs-realized ledger, header only
├── judge_lessons.md    ← append-only Judge lessons (header only)
├── rubric.active.md    ← copy of rubrics/rubric.md; the Judge self-refines THIS, never the shipped one
└── iter1/              ← created at loop start

Copy rubrics/rubric.md → <sandbox_root>/rubric.active.md. Write the headers (see Ledger).

The loop

<run_log> = the file capturing training output for an iteration (default <sandbox_root>/iter<N>/run.log). Everything in <editable_files> is fair game; code must run and finish within <budget>. Simplicity criterion: equal metric but simpler code is a keep. The tournament yields exactly one change per iteration. Iteration 1 is the unmodified baseline — skip the tournament; just run + analyse to seed the first analysis summary.

Copy this checklist and tick items off, looping until interrupted:

  • State. branches: git log --oneline -5. snapshots: confirm iter<N>/ is new.
  • Tournament (iter 2+) — run it as the Judge (roles/Judge.md): propose (spawn <n> ResearchAgents) → critique & score against rubric.active.md → refine <refine_rounds>× → select the single top-ranked change.
  • Snapshot/commit, then apply the winning change.
  • Analysis plan → iter<N>/analysis/plan.md: deliverables table covering the winner's prediction plus useful steps from losing ideas; ≥1 row on a not-yet-measured dimension.
  • Run (redirect, never tee) → read metric.
  • Analyse — execute every plan.md row → iter<N>/results/; check the winner's prediction; write a 3–8 bullet summary ending in the empirical anchor for next round.
  • Log the results.tsv row and the realized delta + hit to calibration.tsv.
  • Keep or revert (simplicity criterion before logging discard).
  • Self-calibrate (roles/Judge.md): update judge_lessons.md, refine rubric.active.md, update the hit-rate.

In detail, each iteration:

  1. State. branches: git log --oneline -5. snapshots: confirm iter<N>/ is new.
  2. Tournament (iter 2+). As the Judge (roles/Judge.md): spawn <n> ResearchAgents (spawn-or-degrade by <host>) with roles/ResearchAgent.md, the latest analysis summary, and schemas/idea.schema.json. Critique & score each against rubric.active.md — gate (reject ideas with no testable prediction, unscored) → pointwise 0–5 per axis as the learning signal → de-biased pairwise to rank (compare each pair in both orders, keep only consistent verdicts). Refine <refine_rounds>×, re-score, then select the single rank == 1 change (no merging). Write ideas to iter<N>/ideas/, one verdict per idea to iter<N>/verdicts/, and log the Judge's predicted outcome for the winner to calibration.tsv.
  3. Snapshot/commit, then apply the winning change. snapshots: copy <editable_files> → iter<N>/code_snapshot/, copy loop.run.yaml → iter<N>/, apply the change. branches: apply, git commit -am "<idea_id>: <short description>".
  4. Analysis plan → iter<N>/analysis/plan.md: a deliverables table including the winner's prediction and any useful analysis steps from the losing ideas. ≥1 row must cover a not-yet-measured dimension.
  5. Run (redirect to <run_log>, never tee) → read the metric (grep '^<metric>:' <run_log>; on empty, tail -n 50, one trivial fix, else log crash).
  6. Analyse — mandatory, real artifacts. Execute every plan.md row → files in iter<N>/results/; verify none missing; interpret; check the winner's prediction; write a 3–8 bullet analysis summary ending in the empirical anchor for the next round.
  7. Log. Append the results.tsv row (0.000000 on crash). Append the realized delta + hit to calibration.tsv against the prediction.
  8. Keep or revert. Improved → keep, update best. Equal/worse/crash → discard/crash (branches git reset --hard HEAD~1; snapshots restore from code_snapshot/). Apply the simplicity criterion before logging discard.
  9. Self-calibrate (roles/Judge.md): update judge_lessons.md, refine rubric.active.md (weights + anchors, bounded, from realized outcomes), update the selection hit-rate.
  10. Go to step 1.
Show full SKILL.md (251 more words)Show less

Never stop. Once running, do not pause to ask "should I continue?" — the loop runs until manually interrupted. If ideas run dry: push proposal diversity, mine results.tsv/calibration.tsv for under-explored directions, go deeper on analysis.

Ledger

Three append-only files under <sandbox_root>, all tab-separated, never commas in free text.

results.tsv — the experiment ledger (same format as ml-autoresearch). Header:

iter	<metric>	status	analysis_summary	description

status ∈ {keep, discard, crash}. Example:

iter	val_acc	status	analysis_summary	description
1	0.6320	keep	baseline; grad norms even, no pathologies	baseline
2	0.6890	keep	layer-2 activations near-saturated; BN helped	iter2-a1: add BatchNorm after conv2

calibration.tsv — the Judge's track record (predicted vs realized). Header:

iter	idea_id	grounding	impact	feasibility	pred_direction	pred_magnitude	confidence	realized_delta	hit

Example:

iter	idea_id	grounding	impact	feasibility	pred_direction	pred_magnitude	confidence	realized_delta	hit
2	iter2-a1	5	4	4	improve	+2%	high	+0.057	1

judge_lessons.md — append-only prose, 1–3 bullets per iteration: which axis tracked gains, what kind of idea was over/under-rated, and the reason for each rubric.active.md refinement. Example:

## iter 2
- grounding tracked the gain (BN tied to the dead-unit finding hit +0.057, as predicted).
- bumped grounding weight 0.40 → 0.45; tightened the impact anchor (impact=5 picks over-promised).

Report the best iteration (highest keep metric), not necessarily the last, plus the running selection hit-rate. Leave results.tsv, calibration.tsv, judge_lessons.md, rubric.active.md, and iter*/ untracked.

Constraints

  • Only edit files in <editable_files> — confirm before every edit, because everything else (especially the eval harness) is read-only ground truth defining <metric>.
  • Exactly one change per iteration (the tournament winner) — no merging ideas — so each metric delta is attributable to one change.
  • An idea with no testable prediction is rejected before scoring; the rank is decided by de-biased pairwise comparison, never by the pointwise scores (which only feed calibration).
  • The Judge edits only rubric.active.md (the working copy), never the shipped rubrics/rubric.md.
  • Always redirect training output to <run_log>; never tee (it floods your context).
  • Do not install packages or add dependencies the project lacks; helper code stays stdlib-only.
  • Do not modify the evaluation harness, and do not pause the loop to ask for direction.
  • The sandbox must be self-contained — no ../ escapes.

© gaasher, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files in loops/tournament-autoresearch of gaasher/Agent-Loop-Skills.

  • SKILL.md
  • examples/run.example.yaml
  • roles/Judge.md
  • roles/ResearchAgent.md
  • rubrics/rubric.md
  • schemas/idea.schema.json
  • schemas/verdict.schema.json

Open the folder on GitHubat commit f1169e6

Compare with similar skills

Tournament Autoresearch next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tournament Autoresearch compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tournament Autoresearch this skillgaasher/Agent-Loop-Skills174—~3kAutomated safety check: PassMIT
Darwin SkillHHU3637kr/skills1451 repos~2.2kAutomated safety check: PassNone
Clawpathy AutoresearchClawBio/ClawBio1.2k—~1.4kAutomated safety check: PassMIT
Aeon AutoresearchBankrBot/skills1.2k—~604Automated safety check: PassNone
Author Skillericrisco/rsc-harness180—~4.3kAutomated safety check: PassMIT
ArenaJakeschincariol/arena-skill402—~4.8kAutomated safety check: PassMIT

Similar skills

  • Darwin Skill

    HHU3637kr/skills

    Darwin Skill (达尔文.skill): autonomous skill optimizer inspired by Karpathy's autoresearch.

    145 GitHub starsUsed in 1 repo~2.2k tokens
    Agent WorkflowsAuto-check passed
  • Clawpathy Autoresearch

    ClawBio/ClawBio

    Eval-driven skill tuning. An agent skill from ClawBio/ClawBio.

    1.2k GitHub stars~1.4k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Aeon Autoresearch

    BankrBot/skills

    Evolve any installed skill by generating four variations along separate theses (better inputs / sharper output / more robust / rethink), scoring them on a weighted rubric, and applying the winner.

    1.2k GitHub stars~604 tokensUpdated yesterday
    EducationAuto-check passed
  • Author Skill

    ericrisco/rsc-harness

    A skill your agent uses when authoring a NEW rsc skill or editing an existing one — scoping it to one job, writing the description that decides whether it ever loads, splitting the body into…

    180 GitHub stars~4.3k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Arena

    Jakeschincariol/arena-skill

    Make 100 versions of Claude fight to the death over one task.

    402 GitHub stars~4.8k tokensUpdated 13 days ago
    Agent WorkflowsAuto-check passed
  • Abide Compile

    coldteadotai/abide

    Compile a repository's instruction files (AGENTS.md, CLAUDE.md and friends) into an Abide rubric, then validate and calibrate it.

    575 GitHub stars~3.3k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from gaasher/Agent-Loop-Skills

All 20 skills in this repo
  • Alpha Evolve

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants to evolve an ML model/program through population-based search rather than a single sequential refine loop — a generational evolution where parallel…

    174 GitHub stars~3.4k tokensUpdated 3 mo ago
    Auto-check passed
  • Anomaly Investigation

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user has a known, already-observed anomaly in their data — a metric spike or drop, an outlier, an unexpected number — and wants its root cause diagnosed, not guessed.

    174 GitHub stars~2.1k tokensUpdated 3 mo ago
    Auto-check passed
  • Blue Team

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user has concrete failing cases in code or a guardrail/classifier/filter/prompt/API they own — a red-team failure catalogue OR a CI/CD test-failure report (failing…

    174 GitHub stars~3.6k tokensUpdated 3 mo ago
    Auto-check passed
  • Data Analysis

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants an iterative, self-checking exploratory analysis of a dataset — surfacing findings that are each verified by re-running the computation, not asserted.

    174 GitHub stars~1.9k tokensUpdated 3 mo ago
    Auto-check passed
  • Hypothesis Gen

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants to generate and literature-vet a pool of novel, testable research hypotheses for a question or domain.

    174 GitHub stars~2.6k tokensUpdated 3 mo ago
    Auto-check passed
  • Karpathy

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants the LLM to do its own ML research: a fully-autonomous loop that hacks the training code, runs it, and keeps changes that lower a single scalar metric (e.g.

    174 GitHub stars~2.6k tokensUpdated 3 mo ago
    Auto-check passed

Questions about Tournament Autoresearch

What does Tournament Autoresearch do?

A skill your agent uses when the user wants an autonomous ML research loop that pressure-tests competing ideas before spending compute — several research subagents each propose one architecture…. Tournament Autoresearch is an agent skill from gaasher/Agent-Loop-Skills. Use when the user wants an autonomous ML research loop that pressure-tests competing ideas before spending compute — several research subagents each propose one architecture change, a self-calibrating Judge critiques them against a rubric, the proposers refine, and the Judge picks the single change to run.

When should I use Tournament Autoresearch?

Tournament Autoresearch fits situations like: A self-calibrating Judge critiques them against a rubric; the proposers refine; the Judge picks the single change to run.

How do I install Tournament Autoresearch in Claude Code?

Run `npx skills add gaasher/Agent-Loop-Skills --skill tournament-autoresearch -a claude-code`. Or copy the skill folder (loops/tournament-autoresearch in gaasher/Agent-Loop-Skills) into .claude/skills/tournament-autoresearch in your project. Claude Code loads it when a task matches its description.

How do I install Tournament Autoresearch in Codex?

Run `npx skills add gaasher/Agent-Loop-Skills --skill tournament-autoresearch -a codex`. Or copy the skill folder (loops/tournament-autoresearch in gaasher/Agent-Loop-Skills) into .agents/skills/tournament-autoresearch in your project. Codex loads it when a task matches its description.

Can I use Tournament Autoresearch in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gaasher/Agent-Loop-Skills --skill tournament-autoresearch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tournament-autoresearch, .gemini/skills/tournament-autoresearch, .github/skills/tournament-autoresearch and .opencode/skills/tournament-autoresearch in your project.

What does Tournament Autoresearch need to run?

Going by SKILL.md and its folder, Tournament Autoresearch needs the command-line tools its instructions call (git). Our summary lists: Python 3. Compatibility (from SKILL.md): Requires Python 3.9+.

Does Tournament Autoresearch access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Tournament Autoresearch safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Tournament Autoresearch use?

Tournament Autoresearch is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tournament Autoresearch use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Tournament Autoresearch?

Skills that share tags, products or a category with Tournament Autoresearch: Darwin Skill (HHU3637kr/skills, 145 stars), Clawpathy Autoresearch (ClawBio/ClawBio, 1.2k stars), Aeon Autoresearch (BankrBot/skills, 1.2k stars) and Author Skill (ericrisco/rsc-harness, 180 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tournament Autoresearch?

gaasher (a GitHub user) maintains it in gaasher/Agent-Loop-Skills, which has 174 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on June 30, 2026.

Source: gaasher/Agent-Loop-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.