Autoresearch
Turns a planning conversation into a durable, resumable autonomous loop — and a finished
loop into evidence its successor can trust. Every loop's output includes a Summary
in FINDINGS.md: a detailed, easy-to-follow TL;DR any human can read instead of combing
through the full artifact set — never instead of it.
What This Skill Does
Three workflows, selected by where the conversation is:
- Init (default) — the user has been planning; they say go. You generate the loop's
artifact set:
GOAL.md, ADVISORY.md (optional — see Modes), STATE.template.md,
and a placeholder STATE.md. The loop is then executable by any agent, including a
fresh-context one, without re-reading this conversation.
- Close (
--close) — the loop's tasks are done. You verify the artifact set is
complete and consistent (STATE all-terminal, CLAIMS covers reported numbers, FINDINGS
exists with its spot-check), then surface closure to the user. You do not write
FINDINGS for the agent — you check it and report gaps.
- Reset (
--reset) — the loop is closed and you are about to plan the next one.
You move the finished loop's pointer into AGENTS.md's Prior loops table and clear the
Current loop section, so the next init starts from a clean pointer. The only workflow
that writes to AGENTS.md outside of init.
All three are file operations plus reading. None launches training, touches databases,
or executes the loop's tasks.
When to Use
- "Start/init a new loop for X" / "set up the loop artifacts"
- "Write the GOAL/ADVISORY for what we just planned"
- "Spin up loop N with the tasks we discussed"
- "Close out this loop" / "check the loop is complete"
- "Reset the loop pointer" / "we're starting the next loop, clear the current one"
- "What does the loop need before an agent can run it unattended?"
Modes
Two loop styles exist. Ask the user which, or infer from what they hand you:
|
Goal loop |
Advisory loop |
| Trigger |
user has a goal, no task breakdown |
user has a goal and a task DAG |
| Artifacts |
GOAL.md, STATE.template.md |
GOAL.md, ADVISORY.md, STATE.template.md |
| Plan lives in |
GOAL.md itself (mission + constraints + done-when) |
ADVISORY.md (task table, per-task acceptance, prohibitions) |
| STATE board |
filled from GOAL's done-when criteria |
filled from ADVISORY's task table |
| Use when |
work is exploratory, tasks can't be enumerated up front |
work is known, tasks are orderable, acceptance is checkable |
If unsure, ask. Advisory loops are stronger when they fit; goal loops are stronger when
the work is genuinely open.
Init Workflow
Step 1 — Resolve the loop name
If the user passed <loopName>, use it. Otherwise infer from the conversation (a phase
name, a research question short-name) and confirm with the user before writing.
Convention: short, lowercase, no spaces — rl_p7, fidelity_audit, retrieval_probe.
Step 2 — Read the current AGENTS.md pointers
AGENTS.md at repo root carries the universal rules and a Current loop pointer
section. Read it. If it doesn't exist, STOP and create it first from
references/agents-template.md, filling the repo-specific
bits (loop root, output root, evidence rules) with the user — do not guess.
The pointer section in AGENTS.md must name this loop. If it names a different (older)
loop, that loop was never reset — offer --reset for it first (its outcome row belongs
in Prior loops), then proceed. If the user declines, overwrite the pointer and say so.
Step 3 — Harvest the planning conversation
Extract from the conversation (or ask the user for):
- Mission — one paragraph, what this loop is for and why now.
- Done-when — the conditions under which the loop stops. These become GOAL's done-when
and, in advisory mode, the last task's acceptance criteria.
- Known facts — measured numbers, verified paths, prior-loop conclusions the loop
builds on. Each must carry its artifact (file path) or be marked unverified.
- Prohibitions — what the loop must not do (no training, no DB writes, read-only
paths, out-of-scope axes).
- Environment — venv paths, model paths, GPU constraints, DB DSNs the loop needs.
Only include what's verified this session.
Step 4 — Generate artifacts
Write to the loop root (default temp/<loopName>/; confirm if the repo uses a different
convention):
GOAL.md — from references/goal-template.md. Mission,
read-first order, per-iteration ritual, the contract (evidence rules pointer + the
non-negotiables restated in one paragraph), do-not list, done-when.
ADVISORY.md (advisory mode only) — from
references/advisory-template.md. The task DAG with
per-task: id, what/why, GPU cost, dependencies, acceptance criteria, expected artifact
paths. The final task is always the findings-and-closure task, which writes
FINDINGS.md. Include the failure-modes section — it is the highest-leverage part of the
document and the most often skipped.
STATE.template.md — from
references/state-template.md. Task board matching the
ADVISORY task table (or GOAL's done-when criteria in goal mode), key-values table,
checklist section, iteration log (whose per-task Headline lines are the raw material
the closure summary is written from), blocked-items table, questions-for-operator
section, deviations section, and a closure-summary-feed table filled at loop end.
FINDINGS structure — references/findings-template.md,
referenced by the closure task in ADVISORY.md (advisory mode) or the done-when in
GOAL.md (goal mode). The loop agent writes FINDINGS.md at closure following it; the
skill does not write the file itself.
Step 5 — Verify the set is self-sufficient
Read back what you wrote and answer, honestly:
- Could an agent with no memory of this conversation pick up STATE.md and make
progress? If any task depends on context that lives only in this chat, it's not written
down yet — fix that before finishing.
- Does every task have an acceptance check? (Not "looks good" — a command, a file
existence check, a number with a denominator.)
- Does every measured number the loop builds on carry its artifact path?
- Are the prohibitions explicit? (Absence of a prohibition is not a prohibition.)
- Does the artifact set carry the summary requirement? — the closure task (or
goal-mode done-when) names the FINDINGS Summary section, and STATE's iteration-log
headline guidance + closure-summary-feed table exist so the summary can be written
from evidence rather than memory at loop end.
If any answer is no, fix it or flag it to the user — do not ship a half-specified loop.
Close Workflow (--close)
Run only when the user says the loop's work is done. You are auditing, not finishing:
- STATE.md terminal check — every task is
DONE or BLOCKED — <reason>. No
IN_PROGRESS (a wake-completion that wasn't logged), no PENDING (a task that was
silently dropped).
- CLAIMS.md coverage — every number in FINDINGS.md (if it exists) or the final
report traces to a CLAIMS row with artifact + recompute command.
- FINDINGS.md exists with a human-readable Summary — the file opens with a Summary
section (the question, what we did, what we found, what it means, what did not work)
that a person who reads nothing else can follow; every summary claim exists in more
detail in the body; the five-claim spot-check is appended (five claims, re-run
commands, results). If missing or hollow — a summary that names no numbers, or body
claims absent from the summary — report it as a gap; do not write it yourself.
- Blocked items resolved or escalated — every BLOCKED task either has a follow-up
owner or is a question the user still owes an answer on.
- Questions-for-operator answered — STATE.md's questions-for-operator items either
answered in the conversation or carried forward explicitly.
Report: what's complete, what's gapped, what carries forward. Do not edit the loop's
artifacts — the loop owns them; you audit them.
--close does not reset AGENTS.md. The Close audit reads the loop's artifacts and
reports; it never writes. Resetting the pointer for the next loop is a separate step —
see the Reset workflow below — because the two have different preconditions: close can
run on a messy loop (that is when it is most useful), reset runs only on a finished one.
Reset Workflow (--reset)
Run when a loop is finished and you are about to plan the next one. This is the only
workflow that writes to AGENTS.md outside of init.
Precondition: the loop is actually closed. Run --close first (or satisfy yourself
the loop is done). Resetting a half-finished loop orphans its state — the next agent
reads AGENTS.md, finds no pointer to the running loop, and starts over. If --close
was not run, ask whether to run it first.
What it does:
- Move the finished loop's pointer into Prior loops. Append one row to AGENTS.md's
Prior loops table: loop name, one-sentence outcome (from FINDINGS.md's Summary if it
exists — that is what it is for), and the path to its FINDINGS.md. Append-only; the
table is the program's memory across loops.
- Clear the Current loop section. Replace the pointer with the unset placeholder:
loop name
<none>, mission <none>, artifacts/run-state/outputs/claims pointing at
the placeholder shapes, style <none>, started <none>.
- Leave everything else untouched. Universal rules stay. Prior loops stay. The
finished loop's artifacts under
temp/ stay exactly where they are — reset changes
the pointer, never the artifacts.
After reset: AGENTS.md shows no active loop. The next autoresearch <loopName>
init fills the Current loop section fresh.
What reset does NOT do:
- Delete or archive anything. The finished loop's artifacts stay on disk. Cleanup
(tarballs, S3, deletion) is the operator's call, made explicitly, never a side effect.
- Modify the finished loop's artifacts. FINDINGS.md, STATE.md, CLAIMS.md are
read-only to this workflow — same rule as
--close.
- Start the next loop. Reset is preparation; init is a separate, user-driven step.
What This Skill Does NOT Do
- Execute the loop. Running tasks, training models, querying databases — that's the
loop agent's job, not this skill's.
- Write FINDINGS.md. The loop agent writes it; this skill audits it.
- Set research direction. The user plans; this skill crystallizes the plan into
artifacts. If the plan is unclear or has not been stress-tested, suggest
plan-autoresearch (or ask) — do not invent tasks.
- Commit anything. Artifacts under
temp/ are typically gitignored; AGENTS.md is
never committed (it's the operator's local pointer file). Leave VCS state alone unless
the user explicitly asks.
Failure Modes to Avoid
- Inventing tasks the user didn't plan. The skill crystallizes; it doesn't design.
If the DAG has a hole, ask.
- Unverified environment facts. Every path, venv, model path in the generated
artifacts either was verified this session or is marked unverified. Carry-forward from
a prior loop counts only if the prior loop's artifact is cited.
- Skipping the prohibitions section. Every loop needs an explicit do-not list. The
failure mode it prevents (silent scope creep, DB writes, training without a gate) is
the most expensive one.
- Acceptance criteria that can't be checked. "Report looks good" is not acceptance.
Force a command, a file, or a number with a denominator.
- Losing the failure-modes section. ADVISORY's failure-modes section is what
makes loop N+1 better than loop N. Generate it from the planning conversation's
known risks, or from the prior loop's FINDINGS "what went wrong" section.
- Resetting an unreset pointer at init. If init finds AGENTS.md pointing at an
old loop, that loop's outcome row never made it into Prior loops — offer
--reset
first, so the program's memory table stays complete. Overwriting the pointer without
asking loses that row permanently.
1---2name: autoresearch3description: Run long-horizon autonomous research/agent loops with durable memory and evidence discipline. Use when the user wants to: initialize a research loop, start a new loop, generate loop artifacts (GOAL.md, ADVISORY.md, STATE.md), draft a GOAL for a phase, write an advisory/task-DAG for a loop, close out a loop, write FINDINGS from CLAIMS, spot-check loop claims, or asks about agent loop mechanics. Not for executing the loop's tasks themselves.4---56# Autoresearch78Turns a planning conversation into a durable, resumable autonomous loop — and a finished9loop into evidence its successor can trust. Every loop's output includes a **Summary**10in FINDINGS.md: a detailed, easy-to-follow TL;DR any human can read instead of combing11through the full artifact set — never instead of it.1213## What This Skill Does1415Three workflows, selected by where the conversation is:16171. **Init** (default) — the user has been planning; they say go. You generate the loop's18 artifact set: `GOAL.md`, `ADVISORY.md` (optional — see Modes), `STATE.template.md`,19 and a placeholder `STATE.md`. The loop is then executable by any agent, including a20 fresh-context one, without re-reading this conversation.212. **Close** (`--close`) — the loop's tasks are done. You verify the artifact set is22 complete and consistent (STATE all-terminal, CLAIMS covers reported numbers, FINDINGS23 exists with its spot-check), then surface closure to the user. You do not write24 FINDINGS for the agent — you check it and report gaps.253. **Reset** (`--reset`) — the loop is closed and you are about to plan the next one.26 You move the finished loop's pointer into AGENTS.md's Prior loops table and clear the27 Current loop section, so the next init starts from a clean pointer. The only workflow28 that writes to AGENTS.md outside of init.2930All three are file operations plus reading. None launches training, touches databases,31or executes the loop's tasks.3233## When to Use3435- "Start/init a new loop for X" / "set up the loop artifacts"36- "Write the GOAL/ADVISORY for what we just planned"37- "Spin up loop N with the tasks we discussed"38- "Close out this loop" / "check the loop is complete"39- "Reset the loop pointer" / "we're starting the next loop, clear the current one"40- "What does the loop need before an agent can run it unattended?"4142## Modes4344Two loop styles exist. Ask the user which, or infer from what they hand you:4546| | Goal loop | Advisory loop |47|---|---|---|48| Trigger | user has a goal, no task breakdown | user has a goal *and* a task DAG |49| Artifacts | `GOAL.md`, `STATE.template.md` | `GOAL.md`, `ADVISORY.md`, `STATE.template.md` |50| Plan lives in | GOAL.md itself (mission + constraints + done-when) | ADVISORY.md (task table, per-task acceptance, prohibitions) |51| STATE board | filled from GOAL's done-when criteria | filled from ADVISORY's task table |52| Use when | work is exploratory, tasks can't be enumerated up front | work is known, tasks are orderable, acceptance is checkable |5354If unsure, ask. Advisory loops are stronger when they fit; goal loops are stronger when55the work is genuinely open.5657---5859## Init Workflow6061### Step 1 — Resolve the loop name6263If the user passed `<loopName>`, use it. Otherwise infer from the conversation (a phase64name, a research question short-name) and **confirm with the user before writing**.6566Convention: short, lowercase, no spaces — `rl_p7`, `fidelity_audit`, `retrieval_probe`.6768### Step 2 — Read the current AGENTS.md pointers6970`AGENTS.md` at repo root carries the universal rules and a **Current loop** pointer71section. Read it. If it doesn't exist, STOP and create it first from72[references/agents-template.md](./references/agents-template.md), filling the repo-specific73bits (loop root, output root, evidence rules) with the user — do not guess.7475The pointer section in AGENTS.md must name this loop. If it names a different (older)76loop, that loop was never reset — offer `--reset` for it first (its outcome row belongs77in Prior loops), then proceed. If the user declines, overwrite the pointer and say so.7879### Step 3 — Harvest the planning conversation8081Extract from the conversation (or ask the user for):8283- **Mission** — one paragraph, what this loop is for and why now.84- **Done-when** — the conditions under which the loop stops. These become GOAL's done-when85 and, in advisory mode, the last task's acceptance criteria.86- **Known facts** — measured numbers, verified paths, prior-loop conclusions the loop87 builds on. Each must carry its artifact (file path) or be marked unverified.88- **Prohibitions** — what the loop must not do (no training, no DB writes, read-only89 paths, out-of-scope axes).90- **Environment** — venv paths, model paths, GPU constraints, DB DSNs the loop needs.91 Only include what's verified this session.9293### Step 4 — Generate artifacts9495Write to the loop root (default `temp/<loopName>/`; confirm if the repo uses a different96convention):9798**GOAL.md** — from [references/goal-template.md](./references/goal-template.md). Mission,99read-first order, per-iteration ritual, the contract (evidence rules pointer + the100non-negotiables restated in one paragraph), do-not list, done-when.101102**ADVISORY.md** (advisory mode only) — from103[references/advisory-template.md](./references/advisory-template.md). The task DAG with104per-task: id, what/why, GPU cost, dependencies, acceptance criteria, expected artifact105paths. The **final task is always the findings-and-closure task**, which writes106FINDINGS.md. Include the failure-modes section — it is the highest-leverage part of the107document and the most often skipped.108109**STATE.template.md** — from110[references/state-template.md](./references/state-template.md). Task board matching the111ADVISORY task table (or GOAL's done-when criteria in goal mode), key-values table,112checklist section, iteration log (whose per-task Headline lines are the raw material113the closure summary is written from), blocked-items table, questions-for-operator114section, deviations section, and a closure-summary-feed table filled at loop end.115116**FINDINGS structure** — [references/findings-template.md](./references/findings-template.md),117referenced by the closure task in ADVISORY.md (advisory mode) or the done-when in118GOAL.md (goal mode). The loop agent writes FINDINGS.md at closure following it; the119skill does not write the file itself.120121### Step 5 — Verify the set is self-sufficient122123Read back what you wrote and answer, honestly:124125- Could an agent with **no memory of this conversation** pick up STATE.md and make126 progress? If any task depends on context that lives only in this chat, it's not written127 down yet — fix that before finishing.128- Does every task have an acceptance check? (Not "looks good" — a command, a file129 existence check, a number with a denominator.)130- Does every measured number the loop builds on carry its artifact path?131- Are the prohibitions explicit? (Absence of a prohibition is not a prohibition.)132- Does the artifact set carry the summary requirement? — the closure task (or133 goal-mode done-when) names the FINDINGS Summary section, and STATE's iteration-log134 headline guidance + closure-summary-feed table exist so the summary can be written135 from evidence rather than memory at loop end.136137If any answer is no, fix it or flag it to the user — do not ship a half-specified loop.138139---140141## Close Workflow (`--close`)142143Run only when the user says the loop's work is done. You are auditing, not finishing:1441451. **STATE.md terminal check** — every task is `DONE` or `BLOCKED — <reason>`. No146 `IN_PROGRESS` (a wake-completion that wasn't logged), no `PENDING` (a task that was147 silently dropped).1482. **CLAIMS.md coverage** — every number in FINDINGS.md (if it exists) or the final149 report traces to a CLAIMS row with artifact + recompute command.1503. **FINDINGS.md exists with a human-readable Summary** — the file opens with a Summary151 section (the question, what we did, what we found, what it means, what did not work)152 that a person who reads nothing else can follow; every summary claim exists in more153 detail in the body; the five-claim spot-check is appended (five claims, re-run154 commands, results). If missing or hollow — a summary that names no numbers, or body155 claims absent from the summary — report it as a gap; do not write it yourself.1564. **Blocked items resolved or escalated** — every BLOCKED task either has a follow-up157 owner or is a question the user still owes an answer on.1585. **Questions-for-operator answered** — STATE.md's questions-for-operator items either159 answered in the conversation or carried forward explicitly.160161Report: what's complete, what's gapped, what carries forward. Do not edit the loop's162artifacts — the loop owns them; you audit them.163164**`--close` does not reset AGENTS.md.** The Close audit reads the loop's artifacts and165reports; it never writes. Resetting the pointer for the next loop is a separate step —166see the Reset workflow below — because the two have different preconditions: close can167run on a messy loop (that is when it is most useful), reset runs only on a finished one.168169---170171## Reset Workflow (`--reset`)172173Run when a loop is finished and you are about to plan the next one. This is the only174workflow that writes to AGENTS.md outside of init.175176**Precondition: the loop is actually closed.** Run `--close` first (or satisfy yourself177the loop is done). Resetting a half-finished loop orphans its state — the next agent178reads AGENTS.md, finds no pointer to the running loop, and starts over. If `--close`179was not run, ask whether to run it first.180181**What it does:**1821831. **Move the finished loop's pointer into Prior loops.** Append one row to AGENTS.md's184 Prior loops table: loop name, one-sentence outcome (from FINDINGS.md's Summary if it185 exists — that is what it is for), and the path to its FINDINGS.md. Append-only; the186 table is the program's memory across loops.1872. **Clear the Current loop section.** Replace the pointer with the unset placeholder:188 loop name `<none>`, mission `<none>`, artifacts/run-state/outputs/claims pointing at189 the placeholder shapes, style `<none>`, started `<none>`.1903. **Leave everything else untouched.** Universal rules stay. Prior loops stay. The191 finished loop's artifacts under `temp/` stay exactly where they are — reset changes192 the pointer, never the artifacts.193194**After reset:** AGENTS.md shows no active loop. The next `autoresearch <loopName>`195init fills the Current loop section fresh.196197**What reset does NOT do:**198199- **Delete or archive anything.** The finished loop's artifacts stay on disk. Cleanup200 (tarballs, S3, deletion) is the operator's call, made explicitly, never a side effect.201- **Modify the finished loop's artifacts.** FINDINGS.md, STATE.md, CLAIMS.md are202 read-only to this workflow — same rule as `--close`.203- **Start the next loop.** Reset is preparation; init is a separate, user-driven step.204205---206207## What This Skill Does NOT Do208209- **Execute the loop.** Running tasks, training models, querying databases — that's the210 loop agent's job, not this skill's.211- **Write FINDINGS.md.** The loop agent writes it; this skill audits it.212- **Set research direction.** The user plans; this skill crystallizes the plan into213 artifacts. If the plan is unclear or has not been stress-tested, suggest214 `plan-autoresearch` (or ask) — do not invent tasks.215- **Commit anything.** Artifacts under `temp/` are typically gitignored; AGENTS.md is216 never committed (it's the operator's local pointer file). Leave VCS state alone unless217 the user explicitly asks.218219## Failure Modes to Avoid2202211. **Inventing tasks the user didn't plan.** The skill crystallizes; it doesn't design.222 If the DAG has a hole, ask.2232. **Unverified environment facts.** Every path, venv, model path in the generated224 artifacts either was verified this session or is marked unverified. Carry-forward from225 a prior loop counts only if the prior loop's artifact is cited.2263. **Skipping the prohibitions section.** Every loop needs an explicit do-not list. The227 failure mode it prevents (silent scope creep, DB writes, training without a gate) is228 the most expensive one.2294. **Acceptance criteria that can't be checked.** "Report looks good" is not acceptance.230 Force a command, a file, or a number with a denominator.2315. **Losing the failure-modes section.** ADVISORY's failure-modes section is what232 makes loop N+1 better than loop N. Generate it from the planning conversation's233 known risks, or from the prior loop's FINDINGS "what went wrong" section.2346. **Resetting an unreset pointer at init.** If init finds AGENTS.md pointing at an235 old loop, that loop's outcome row never made it into Prior loops — offer `--reset`236 first, so the program's memory table stays complete. Overwriting the pointer without237 asking loses that row permanently.