Skip to content
Back to skills

Aster Research Loop

ASecurity

Run a budgeted, autonomous experiment loop in an Aster research project — hypothesis, run, result, decision — with every step recorded in its loop ledger and every run launched through the Aster harness. Use when the user asks to keep iterating, tune, sweep, search, optimize a metric, run experiments until a target, or work autonomously or overnight on an experiment in a project with .aster/project.json (or an older research/project.json). Do not use for a single run (use aster-research-track...

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 26, 2026
ai-agentsgobashnode

Works with

  • cli

Security analysis

A100/100

Scanned October 26, 2026

npx -y skills add rkdrn79/aster --skill aster-research-loop --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Aster Research Loop?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Aster Research Loop
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rkdrn79-aster-research-loop/badge)](https://www.skillsdirectory.com/skills/rkdrn79-aster-research-loop)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: aster-research-loop
description: Run a budgeted, autonomous experiment loop in an Aster research project — hypothesis, run, result, decision — with every step recorded in its loop ledger and every run launched through the Aster harness. Use when the user asks to keep iterating, tune, sweep, search, optimize a metric, run experiments until a target, or work autonomously or overnight on an experiment in a project with .aster/project.json (or an older research/project.json). Do not use for a single run (use aster-research-track) or for coding without experiments.
---

# Autonomous experiment loop in Aster

This skill adds a loop protocol on top of `aster-research-track`; follow that skill too. Every launch goes through `run exec`, and every number you put in the paper goes through `claim add`.

Run `aster research harness-path` on the machine that holds the project; it prints the
version-matched absolute path to `cli.mjs`. `H` below means its parent directory. An installed
skill's parent is not necessarily the harness. In a source checkout without the Aster CLI, the
parent of this **resolved** skill directory contains `cli.mjs`. Add `--json` when you parse
output.

## 1. Set the contract before any run

Take these from the request or ask the user. Never start an unbounded loop.

- Objective, primary metric, split, and direction.
- Budget: maximum Runs, maximum wall-clock hours, maximum parallel Runs, and a GPU policy (hosts, partitions, GPU count; on SLURM use the user's `aster gpu` budget).
- Stop rules: a target value, no improvement in K consecutive Runs, budget exhausted, or a failure that needs a human.
- What stays fixed: dataset, evaluation code, and metric definition.

Record it as the loop's objective:

```bash
node H/cli.mjs loop note --experiment <slug> --kind objective --text "Minimize val loss of LoRA on X" \
  --data '{"metric":"loss","split":"val","direction":"minimize","maxRuns":12,"maxHours":8,"maxParallel":2,"gpuPolicy":"my-cluster a6000, at most 2 GPUs","stopWhen":"loss < 0.30 or 3 Runs without improvement"}'
```

`maxRuns` and `maxHours` drive the budget that `loop show` reports. A new objective note starts a new budget.

Then read `node H/cli.mjs brief show --experiment <slug> --json`. Its `agentPolicy.proposals` decides who starts each Run:

Run `node H/cli.mjs preflight --experiment <slug> --loop --json` before the first launch and
again before each later launch. A blocker means stop and resolve the recorded contract or
budget first. A warning is a limitation to carry into the result, not a value to guess. The
check does not reserve a GPU or count a Run until a `loop note --kind run` records it, so keep
the ledger current and apply the user's compute policy at the actual launcher too.

- `budgeted`: you launch within the budget, as below.
- `approval` (the default): for each hypothesis, record `proposal add` with the exact `run exec` command (see aster-research-track) instead of launching, end your turn, and wait for Aster's approval message. Launch only an approved proposal, then record `proposal launched` and the `run` note. Record a rejection as a `decision` note with the user's reason.
- `off`: launch nothing; record a checkpoint and ask the user.

## 2. Iterate

1. Read state with `node H/cli.mjs loop show --experiment <slug> --json` (budget, open hypotheses, recent entries) and `node H/cli.mjs context --experiment <slug>` (best Runs so far). If `budget.exhausted` is true, go to the checkpoint.
2. State one falsifiable hypothesis that changes one thing: `loop note --kind hypothesis --text "<change> lowers <metric> because <reason>"`. It returns an ID such as `hypothesis-4`.
3. Launch it (under `approval`, only once its proposal is approved): `run exec --loop-preflight --experiment <slug> --name "<change>" --metric-def <metric>:<direction> -- <command>`. As soon as the harness prints the Run ref, record `loop note --kind run --run <ref> --hypothesis hypothesis-4 --text "<exact change>"` before starting another Run, even when this one is still running.
4. Wait without burning turns. If `aster research --help` lists `watch`, use `aster research watch --run <ref> --on exit --notify self` (or `--on failed`, `--on metric:<name><op><value>`, `--on stall:<minutes>`). Otherwise check `run show <ref>` at intervals that fit the expected duration.
5. When it ends, follow "When a Run ends" in aster-research-track (`organize`, `check`, `run show`, `media`, evidence-backed `quality add`, `rate add --by agent` under a rubric, one `run annotate`). Then record the result from those files, never from memory: `loop note --kind result --run <ref> --hypothesis hypothesis-4 --text "val loss 0.41 (best so far 0.39, <ref>)"`. A failed Run is a result. Read `run show <ref> --log-lines 50` before retrying anything.
6. Decide: `loop note --kind decision --hypothesis hypothesis-4 --text "<keep|discard|refine>: <why>; next: <plan>"`.
7. Check every stop rule before the next iteration.

## 3. Human checkpoints

Stop, record `loop note --kind checkpoint --text "<what you need>"`, report, and end your turn before you:

- spend beyond `maxRuns`, `maxHours`, `maxParallel`, or the GPU policy;
- change the objective, metric, dataset, or evaluation code;
- continue after three consecutive failed Runs;
- delete results, rewrite history, or change the paper's conclusions.

Continue only after the user answers, and record their answer as a `decision` note.

## 4. Parallel hypotheses

Independent hypotheses may run at once through Aster's orchestration. Load its guide first (`aster skills get aster-orchestration`) and follow it as the coordinator:

```text
aster orchestration run-create --objective "<loop objective>" --json
aster orchestration worker-start --spec "<worker spec>" --worktree new-child --name <slug>-h4 --agent claude --setup run --json
aster orchestration check --wait --types "worker_done,escalation,question" --timeout-ms 900000 --json
```

A folder workspace has no worktrees; use `--worktree current` there and keep the hypotheses' edits in separate files. Each worker spec must be self-contained and name:

- the one change to make and the files it may edit;
- the exact launch command, `node <absolute H>/cli.mjs run exec --loop-preflight --project <absolute main project path> --experiment <slug> --name "<change>" -- <command>`, so the Run lands in the shared catalog while code provenance comes from the worker's worktree;
- the follow-up note, `loop note --project <absolute main project path> --experiment <slug> --kind run --run <ref> --hypothesis <id> --text "<change>"`;
- acceptance: `worker_done` reports the Run reference and its final state.

The coordinator records results and decisions. Count running workers against `maxParallel` and the GPU budget.

## 5. As an Experiment agent

If Aster started you as an Experiment's research agent ("Experiment agent" in aster-research-track), the loop changes configuration only. Launch config-only hypotheses within the budget. For a hypothesis that needs a code change, record `proposal add --needs-code` and a `checkpoint` note, then continue with the other hypotheses or stop; the user hands that proposal to a Workbench chat, which launches it into this Experiment. Record each comparison you draw across Runs with `analysis add` and cite its ID in the `result` or `decision` note.

## 6. Finish

When a stop rule fires, record `loop note --kind decision --text "stop: <rule>; best <ref> <metric>=<value>"`. If you touched the manuscript, run `claim audit` and `claim scan`. Report the best Run and its metric, Runs and hours used against the budget, failed Runs, open hypotheses, and the next step you recommend.

## Rules

- Report every Run, including failures; never cherry-pick.
- Keep the evaluation fixed within one objective.
- Never hand-edit `loop.jsonl`, `run.json`, `metrics.jsonl`, or `summary.json`.
- Never exceed the budget silently, cancel the user's jobs, or retry a failure without a diagnosed cause.
- Never run `proposal decide`; only the user approves proposals, in Aster.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.