autoresearch
Skill49 starsChanged 9 months agoMITView on GitHub
Autonomous experiment loop that iteratively improves a measurable metric. Given a goal, a verify command, and an optional guard, the agent branches, makes one change, measures the result, and keeps or discards the experiment -- repeating indefinitely. Use this skill when the user wants to optimize something measurable through automated experimentation, autonomous improvement loops, or when they mention "autoresearch". Works for any domain with a quantifiable metric (code performance, ML training, build size, test scores, content quality metrics, etc.).
- Commits and pushes
We split this skill into the rules it gives an agent
17 rules. 0 are common, 13 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 90 edited versions we read keep these.
13
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 19
Before the loop starts, gather the configuration through a short conversation.
- Distinctive: line 23
Ask: "What are you trying to optimize?"
- Distinctive: line 29
Ask: "What command should I run to measure the metric?
- Distinctive: line 42
Ask: "Is there a command that must always pass?
- Distinctive: line 48
Ask: "Do you want to restrict which files I can modify, or is everything fair game?"
- Distinctive: line 50
If the user provides a list of files or directories, only modify those.
- Very specific: line 54
Create and push a dedicated autoresearch branch from the current branch (typically main).
- Distinctive: line 63
Before starting the loop, run both the verify command and the guard command (if set) once.
- Distinctive: line 67
If either fails, ask the user to fix the command before proceeding.
- Distinctive: line 77
Read the current state to inform your next experiment:
- Distinctive: line 91
When stuck, don't just make tiny variations of the same idea.
- Very specific: line 95
Create a new branch from the autoresearch branch with a descriptive name:
- Distinctive: line 109
Commit with a descriptive message and push the branch:
- Distinctive: line 118
Run the verify command and extract the metric value from the output.
- Distinctive: line 122
Run the guard command. It either passes (exit code 0) or fails.
- Very specific: line 129
Metric did not improve, OR guard failed: check out the autoresearch branch.
- Very specific: line 148
Commit and push this file to the autoresearch branch after each iteration so the log is always up to date.
“Common” is measured: kept by at least 6 in 10 of the 90 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Autoresearch
An autonomous experiment loop. You make a change, measure it, keep it if it's better, discard it if it's not, and repeat. The idea is simple: given a clear metric and a way to measure it, you can run experiments indefinitely while the user sleeps, eats, or touches grass.
This works for anything with a measurable outcome: code performance, ML model quality, bundle size, test coverage, response latency -- if you can extract a number from a command, you can optimize it.
How it works
There are two phases: plan (interactive setup with the user) and loop (autonomous experimentation).
Phase 1: Plan
Before the loop starts, gather the configuration through a short conversation. Ask these questions one at a time, waiting for the user's answer before proceeding.
1. Goal
Ask: "What are you trying to optimize?"
This is a free-text description of the objective. Examples: "Reduce API p95 response time", "Lower validation loss on the language model", "Minimize Docker image size".
2. Verify command
Ask: "What command should I run to measure the metric? The output should contain the metric value as a number."
This is a shell command whose output contains the metric. Examples:
npm run bench | grep "p95"uv run train.py 2>&1 | grep "val_bpb"du -sh dist/ | awk '{print $1}'
3. Metric direction
Based on the goal description, infer whether lower or higher is better, then confirm with the user. For example: "From your goal, I'm assuming lower is better -- is that right?"
4. Guard command (optional)
Ask: "Is there a command that must always pass? For example, a test suite. Leave blank if not needed."
A guard is a safety net: a command that must exit with code 0 for an experiment to be kept. The guard prevents the optimization from breaking things. For example, if you're optimizing response time, npm test as a guard ensures you don't accidentally break functionality in the process.
5. Scope (optional)
Ask: "Do you want to restrict which files I can modify, or is everything fair game?"
If the user provides a list of files or directories, only modify those. If they say everything is fair game, use your judgment based on the goal.
6. Set up the autoresearch branch
Create and push a dedicated autoresearch branch from the current branch (typically main). All experimentation happens on or from this branch -- main stays clean.
git checkout -b autoresearch
git push -u origin autoresearch7. Dry run
Before starting the loop, run both the verify command and the guard command (if set) once. Confirm that:
- The verify command succeeds and you can extract a numeric metric from its output
- The guard command succeeds (exit code 0)
If either fails, ask the user to fix the command before proceeding. This catches misconfigurations before the loop wastes time on them.
Record the metric value from the dry run as the baseline.
Phase 2: Loop
Once the plan is confirmed, the loop runs autonomously. Never stop. Never ask. Each iteration follows these steps:
1. Review
Read the current state to inform your next experiment:
- The in-scope files (or the relevant project files if no scope was set)
- The results log (
autoresearch-results.tsv) to see what's been tried - The experiment branches (
git branch -a | grep autoresearch-) to recall past attempts
This is your memory. The TSV tells you what worked and what didn't. The branches tell you what approaches have been explored. Use this to avoid repeating failed ideas and to build on successful ones.
2. Ideate
Pick one idea to try. Favor approaches that:
- Haven't been tried before (check the TSV and branch names)
- Build on changes that previously improved the metric
- Are meaningfully different from recent failed attempts
When stuck, don't just make tiny variations of the same idea. Try something radically different -- a different algorithm, a different data structure, a completely different approach to the problem.
3. Branch
Create a new branch from the autoresearch branch with a descriptive name:
autoresearch-<short-description>Examples: autoresearch-increase-batch-size, autoresearch-inline-hot-path, autoresearch-switch-to-radix-sort
4. Modify
Make one atomic change. One idea, one experiment. Keep changes small and focused so the metric delta is clearly attributable to the change. If equal results can be achieved with less code, prefer the simpler version.
Respect the scope if one was defined. Never modify the guard command's test files or the verify command's evaluation harness -- the measurement infrastructure is sacred.
5. Commit and push
Commit with a descriptive message and push the branch:
git add <specific files>
git commit -m "autoresearch: <description of the change>"
git push -u origin autoresearch-<short-description>6. Verify
Run the verify command and extract the metric value from the output. If the command crashes or fails, read the error output, note it in the log, and treat it as a failed experiment.
7. Guard (if configured)
Run the guard command. It either passes (exit code 0) or fails. Only run this if a guard was configured.
8. Decide
Compare the metric to the current best (starting from the baseline established in the dry run):
- Metric improved AND guard passed (or no guard): check out the
autoresearchbranch, merge the experiment branch, and pushautoresearch. This is now the new baseline. - Metric did not improve, OR guard failed: check out the
autoresearchbranch. Leave the experiment branch as-is -- it serves as a record of what was tried.
9. Log
Append a row to autoresearch-results.tsv in the project root. Create the file with headers on the first iteration if it doesn't exist.
Columns:
iteration branch metric delta guard status description- iteration: sequential number starting at 1
- branch: the experiment branch name
- metric: the extracted metric value
- delta: change from the current best metric (e.g.,
-0.03or+12.5) - guard:
pass,fail, or-(no guard configured) - status:
kept(merged toautoresearch) ordiscarded(branch left as-is) - description: one-line summary of what the experiment tried
Commit and push this file to the autoresearch branch after each iteration so the log is always up to date.
10. Repeat
Go back to step 1. Do not stop. Do not ask for confirmation. Keep running experiments until the user interrupts.
Other versions95 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 95
- github/awesome-copilot★ 41ksame name
- Yeachan-Heo/oh-my-claudecode★ 40ksame name
- Yeachan-Heo/oh-my-claude-sisyphus★ 40ksame name
- Yeachan-Heo/oh-my-codex★ 34ksame name
- AgriciDaniel/claude-obsidian★ 16ksame name
- Orchestra-Research/AI-research-SKILLs★ 13ksame name
- zechenzhangAGI/AI-research-SKILLs★ 13ksame name
- Orchestra-Research/AI-Research-SKILLs★ 12ksame name
- getcompanion-ai/feynman★ 10ksame name
- advaitpaliwal/feynman★ 10ksame name
85 more not listed
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.
Used alongsideProjects with it also use aeon-update, auto-workflow and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
aaronjmarsSkillaeon-update
Pull framework updates from the upstream Aeon repo into this instance - 3-way merges canon's new commits into a PR, never clobbering operator config.
Also in 4 projects that use this
aaronjmarsSkillauto-workflow
Two-mode aeon.yml workflow builder - analyze inspects URLs and emits a tiered, signal-verified skill-enablement plan plus an aeon.yml diff; enable flips slugs to enabled:true and opens a PR.
Also in 4 projects that use this
- +10 more from aaronjmars
In this repository20 other files it gives its agents.
- AGENTS.mdAGENTS.md
- address-code-reviewSkill
- blueskySkill
- brainstormSkill
- code-reviewSkill
- collaborationSkill
- datastarSkill
- decisionsSkill
- design-docSkill
- diarySkill
- gardenSkill
- gitSkill
- gomponentsSkill
- goSkill
- marimoSkill
- nanobananaSkill
- observable-plotSkill
- save-web-pageSkill
- sqlSkill
- worktreesSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
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.

