From seahorse
Run a disciplined autonomous refinement loop — one hypothesis, one file edit, one fixed-budget experiment, one metric, keep-or-revert — until the metric hits its target or the budget runs out. Auto-invoke when the user says "iteratively refine X to match Y", "optimize until <metric>", "autoresearch loop", "tune X overnight", or asks to keep improving something against a single measurable score.
How this skill is triggered — by the user, by Claude, or both
Slash command
/seahorse:autoresearchThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Origin of the pattern: **github.com/karpathy/autoresearch** (Andrej Karpathy). Karpathy built it to grind ML
Origin of the pattern: github.com/karpathy/autoresearch (Andrej Karpathy). Karpathy built it to grind ML training runs overnight; this skill generalizes it to any task with one measurable metric — visual diffs, latency, bundle size, test pass-rate, benchmark score, token cost.
The power is discipline, not cleverness: one variable per iteration, a hard budget, a single comparable metric, honest keep/revert. No batching "while I'm in here" edits — that destroys attribution.
Everything lives in .claude/autoresearch/. Two files, both required.
program.md — the goal + the ONE metric. Never let the metric drift silently mid-run.
# GOAL
<one sentence: the end state you're grinding toward>
metric: <name> — <exact command/observation that reads it> — <lower|higher is better> — target: <value>
target_files: <glob or list — the ONLY surface edits may touch>
budget: <N iters OR wall-clock> — per_iter: <e.g. "5 min">
invariants: <constraints that must hold every iteration; blank if none>
scoreboard.md — append-only history. Every iteration adds a row (kept OR reverted). The next iteration reads
it, so this file IS the loop's memory.
# scoreboard — <goal>
metric: <name> (<direction>) · best-so-far: <value @ iter N>
| iter | hypothesis (1 sentence) | file | metric | Δ | decision | note |
|------|-------------------------|------|--------|---|----------|------|
| 1 | tighten card padding | Card.tsx | 7.1% diff | -0.8 | keep | closer to ref |
| 2 | swap font-weight 400→800| Card.tsx | 7.4% diff | +0.3 | revert | regressed |
program.md (goal + metric) and scoreboard.md (best-so-far = your baseline).target_files. One file. Not two.per_iter budget (build / test / measure).
Honor every invariant.git checkout -- <file>), no exceptions, no "but it's cleaner".scoreboard.md — kept or reverted, with the reason. Then loop.Stop when: the metric reaches target, the budget is exhausted, or the last K iterations yield no
improvement (plateau). Report best-so-far, the kept diffs, and the scoreboard tail.
per_iter.program.md, never silently redefined. No metric defined → do not start;
say what's missing.If the run is long and scoreboard.md grows past ~200 lines, rotate: summarize the closed phase in one line,
move the old rows to .claude/autoresearch/archive/<date>_<phase>.md, reset the active board to header + the
running best-so-far. Keep the hot board lean so each iteration reads cheap context.
Invoke via the /autoresearch <goal> command, or dispatch to a Seahorse autoresearch agent when present.
npx claudepluginhub archit3115/seahorse --plugin seahorseRoutes gstack requests to the correct skill (planning, review, QA, shipping, debugging, docs, security, design). Invokes when user types /gstack or asks which skill to use.
Provides UI/UX design intelligence with 50+ styles, 161 color palettes, 57 font pairings, 99 UX guidelines, and 25 chart types across 10 stacks. Use for designing pages, components, or reviewing visual quality.