| name | autoresearch |
| description | Apply Karpathy's autoresearch pattern to autonomously improve any measurable artifact — prompts, skills, code, configs — using a modify → measure → keep/discard loop. |
| author | mager |
| version | 1.0.0 |
autoresearch — Autonomous Improvement Loop
Teach your agent to improve itself (or your code, prompts, configs) using the pattern open-sourced by Andrej Karpathy. The agent modifies one file, measures one metric, and keeps only what improves the score. Repeat until you wake up to a better system.
"You're not touching any of the Python files. Instead, you are programming the program.md Markdown files that provide context to the AI agents." — Karpathy
The Pattern (3 Constraints)
Before running any loop, define these three things:
FILE_TO_MODIFY = the ONE file the agent can edit
METRIC = the ONE number that defines "better"
BUDGET = the fixed time/compute per experiment
Then loop:
LOOP:
1. Read current state of FILE_TO_MODIFY
2. Form a hypothesis: "changing X might improve METRIC because Y"
3. Make one targeted change
4. Run evaluation (within BUDGET)
5. Measure METRIC
6. If improved → keep (git commit)
7. If not → discard (git reset or revert)
8. Log hypothesis + result
GOTO LOOP
Activation Triggers
Start this skill when the user says:
- "run autoresearch on X"
- "improve X autonomously / overnight / while I sleep"
- "set up the Karpathy loop for X"
- "agent loop to optimize X"
- "autoresearch pattern"
Setup Protocol
Step 1: Identify the target
Ask the user what they want to improve:
- A skill / prompt / instruction file?
- A config file?
- A piece of code?
- A UI component?
Step 2: Confirm the 3 constraints
FILE_TO_MODIFY: [single file path]
METRIC: [what number are we optimizing? lower or higher?]
BUDGET: [how long per experiment? e.g. 30s eval, 5min build]
If the metric isn't obvious, help them define one. Common patterns:
| Target | Metric | Measurement |
|---|
| Claude skill / prompt | Eval score (0-100) | Run eval script |
| Lighthouse-auditable UI | Composite score | npx lighthouse --output=json |
| Sports prediction prompt | Backtested accuracy | Run against historical data |
| API endpoint | p95 latency | Load test (k6/wrk) |
| Classifier prompt | F1 score | Run against labeled test set |
Step 3: Check for evaluation infrastructure
Ask: "Do you have a script that returns the metric, or do we need to build one?"
If they have one → use it directly.
If not → help them write a eval.sh or eval.py that:
- Runs the artifact against a fixed test set
- Returns a single number to stdout
Running the Loop
Once the 3 constraints are confirmed and evaluation works:
Iteration Format
For each iteration, produce:
## Iteration N
**Hypothesis:** [What change might help and why]
**Change:** [Exact diff — what changed in FILE_TO_MODIFY]
**Evaluation:** [Running BUDGET evaluation...]
**Result:** METRIC = [X] (prev: [Y])
**Decision:** ✅ KEEP / ❌ DISCARD
**Notes:** [What this tells us]
Loop Discipline
- One change per iteration. No compound changes.
- Always measure before and after.
- Log everything — even failures are signal.
- Never modify the eval script or test set mid-run.
- Stop after N iterations OR when metric plateaus for 3+ rounds.
For Loooom Skill Improvement
The autoresearch pattern maps perfectly to Loooom skill files:
FILE_TO_MODIFY = skills/[name]/SKILL.md
METRIC = eval score from eval-scores.json (0-100)
BUDGET = single eval run (~30 seconds)
Setup:
cd ~/Code/loooom-catalog
cat eval-scores.json
Each iteration:
- Make one targeted improvement to
SKILL.md (clearer triggers, better examples, tighter constraints, improved format)
- Run eval:
npm run eval -- skills/[name] (or equivalent)
- Compare score to baseline
- Keep if score improved, revert if not
- Log result
Meta-skill note: You are an agent improving agent instructions. The quality of the hypothesis matters as much as the change. Think like a researcher, not a guesser.
Applying to Other Projects
prxps (Sports Predictions)
FILE_TO_MODIFY = sentiment extraction prompt or scoring weights
METRIC = prediction accuracy on historical games (%)
BUDGET = backtest run against last 30 days of games
magerblog (Performance)
FILE_TO_MODIFY = CSS or layout component
METRIC = Lighthouse composite score (perf + a11y + seo)
BUDGET = npm run build + Lighthouse audit (~60s)
BeatBrain (Discovery)
FILE_TO_MODIFY = recommendation algorithm or scoring weights
METRIC = diversity index or relevance score
BUDGET = run against fixed seed set of 50 tracks
Session End
When the run completes (N iterations or plateau), produce a summary:
## autoresearch Run Complete
**Target:** [FILE_TO_MODIFY]
**Iterations:** [N]
**Baseline METRIC:** [X]
**Final METRIC:** [Y]
**Delta:** [+Z] improvement
### Accepted Changes (N)
- Iteration 2: [change] → +3.2 points
- Iteration 5: [change] → +1.8 points
### Rejected Changes (N)
- Iteration 1: [change] → no improvement (-0.4)
- Iteration 3: [change] → regression (-2.1)
### Recommended Next Steps
- [What to try next based on what worked]
- [What hypotheses were NOT tested yet]
Reference