Skip to content
Back to skills

Autonomous Experiments

ASecurity

Launch, configure, steer, and safely stop a PROJECT_BRIEF.md-driven THINK→EXECUTE→REFLECT experiment loop.

  • 247 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 8, 2026
researchpythongobashapibackend

Works with

  • terminal
  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill autonomous-experiments --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Autonomous Experiments?

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

Security grade badge for Autonomous Experiments
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-autonomous-experiments/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-autonomous-experiments)

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: autonomous-experiments
description: "Launch, configure, steer, and safely stop a PROJECT_BRIEF.md-driven THINK→EXECUTE→REFLECT experiment loop."
disable-model-invocation: true
metadata:
  disco-role: operating
license: Apache 2.0
---

# Autonomous experiments

Use this sub-skill when a Researcher needs to operate the repository's long-running
experiment controller around a project containing `PROJECT_BRIEF.md`: validate a
project, choose local versus scheduler execution, start a bounded trial, steer a
future cycle, interpret state, or recover from a stale/repeating loop.

This is an orchestration skill, not a backend, GPU, provider, tool-protocol, or
memory-manual. Route backend transport and scheduler/job semantics to
`execution-and-monitoring`; route GPU selection to `gpu-and-resource-operations`;
route provider/tool details to `agent-tools-and-providers`; route ledger, journal,
state-inspection, and progress-export APIs to `memory-safety-and-progress`.

## Non-negotiable operating rules

1. Inspect the project and run the bundled read-only validator before starting.
2. Keep `PROJECT_BRIEF.md` frozen. Treat it as the stable goal, constraints,
   search space, and success criteria; use a directive for temporary steering.
3. Require `experiment.mandatory_dry_run: true` and a worker dry-run before any
   real training launch. A failed dry-run is a stop-and-fix event, never a launch.
4. Prefer a finite `--max-cycles` during a first run or recovery. Confirm the
   resulting cycle count and log/state outputs before removing the cap.
5. Only one worker runs at a time. A worker must return the PID/job identifier,
   log file, expected duration, and dry-run result when it launches an experiment.
6. Monitoring while training is intended to be zero-LLM-cost; do not turn a
   polling or status check into an extra planning cycle.
7. A controller stop is not the same as stopping a child training job. After
   SIGINT/SIGTERM, verify the child using the selected backend before re-launching.

## Project contract

Minimum layout:

```text
project/
├── PROJECT_BRIEF.md             # required, human-owned and frozen
├── config.yaml                  # optional; defaults apply when absent
└── workspace/                   # created by the controller when it starts
    ├── MEMORY_LOG.md            # rolling decisions and milestones
    ├── state.json               # current observable controller/experiment state
    └── HUMAN_DIRECTIVE.md       # optional one-cycle steering input
```

The toy example is a useful shape: goal and target metric, code/data entry points,
resource and run limits, candidate variations, and explicit success criteria. Keep
the brief concise (the default context cap is 3,000 characters) and make every
worker task self-contained because workers are stateless between dispatches. The
layout above assumes the default workspace name. If `project.workspace` is
changed, state/directives/ledger use that configured directory, while the current
memory manager still stores `MEMORY_LOG.md` under the literal project
`workspace/`; validate this split before using a non-default workspace.

## Novice workflow: bounded first run

1. Put the goal, metric/threshold, codebase location, constraints, and stop rules
   in `PROJECT_BRIEF.md`; do not put secrets in it.
2. Run `python scripts/check_project.py --project PROJECT_DIR --config config.yaml`.
   Fix errors. A missing default `config.yaml` is acceptable; an explicitly named
   missing config is not.
3. Start a short run with the exact public entry point:

   ```bash
   python -m core.loop --project PROJECT_DIR --config config.yaml \
     --gpu 0 --max-cycles 1
   ```

   `--project` is required. `--config` is resolved under the project directory
   and defaults to `config.yaml`; `--gpu` is optional; `--max-cycles` overrides
   the YAML value for this process. Use `--check` with `--project` to print the
   installation check and exit without entering the loop.
4. Watch `autoresearcher.log`, `workspace/state.json`, and the latest training log.
   Expect `planning`, then `running` or `waiting`, then a terminal status and
   reflection fields. Do not infer success from a PID alone.
5. After the bounded cycle, inspect the result and memory/ledger handoff. Extend
   the cap only after the dry-run, launch, monitor, and reflection are credible.

## Expert workflow: operate one cycle deliberately

**Prepare.** Validate the project, choose `execution.mode`, and set a finite cycle
cap. For `local`, `--gpu` may set `CUDA_VISIBLE_DEVICES`; for `ssh` or `slurm`,
route transport configuration to the backend skill first. In `slurm`, the value
stored in `state.json.pid` is a scheduler job id, not a local PID, and the CLI
`--gpu` value is ignored.

**THINK.** The leader receives the brief, rolling memory, cycle number, and an
optional human directive. It should emit JSON with `action` (`experiment`,
`wait`, or `report`), worker type, task, hypothesis, success criteria, milestone,
and decision. Keep the task minimal and testable; do not dispatch multiple
workers concurrently.

**EXECUTE.** The selected worker explores before editing, changes only allowed
files, performs the mandatory tiny dry-run, and launches only after it passes.
The authoritative launch result is the structured tool result; capture its PID
(or scheduler job id) and log path. The controller then monitors without LLM
calls until completion or a bounded terminal outcome.

**REFLECT and hand off.** Reflection compares metrics with the brief and prior
results, records a milestone/decision, and chooses the next direction. Treat
`completed`, `failed`, `timeout`, or scheduler terminal states as evidence, not
as a generic “launched” result. Check `state.json`, `MEMORY_LOG.md`, and (when
enabled) the append-only experiment/journal records before reporting to the user.
If the leader says `report`, note that the current controller has a special
control-flow branch only for `wait`; `report` is not a guaranteed stop/report
primitive. Verify what the worker and reflection actually produced.

## Steering and stopping

For temporary steering, write a non-empty `workspace/HUMAN_DIRECTIVE.md` and let
the next cycle consume it. The directive is presented as highest-priority leader
context, then renamed into `workspace/directive_archive/directive_YYYYmmdd_HHMMSS.md`.
A directive also bypasses repeated-plan fallback for that cycle. Keep stable rules
in `PROJECT_BRIEF.md`; do not edit protected state or memory files to steer.

The current parser supports only `--project`, `--config`, `--max-cycles`, `--gpu`,
and `--check`. Some README examples advertise `--directive`, but that flag is
not implemented; use the directive file instead. Send SIGINT or SIGTERM to stop
the controller. Then separately verify or cancel the child training job through
its backend before restarting; there is no universal `--stop` command.

## Safe recovery signals

- `planning`: a cycle has started and a directive has been consumed if present.
- `waiting`: leader chose `wait` (or repeated no-progress fallback); inspect
  `suggested_next_step` and allow cooldown rather than launching blindly.
- `running`: `pid`, `log_file`, and `started_at` identify the active run. Under
  Slurm, `pid` is a job id and scheduler state is authoritative.
- terminal status: `status`, `terminal_state`, `last_training_logs`, `last_metrics`,
  and `elapsed_hours` describe the finished/failed run.
- `error`: `last_error` is the bounded failure detail; use error backoff and fix
  the cause before retrying.
- `.cycle_counter` survives controller restarts; `max_cycles` stops when the
  persisted count reaches the configured cap. A stale `running` state is a
  warning, not proof that training is alive.

For a stale state plus repeated identical no-progress plans: stop/refrain from a
new launch, verify the child with the selected backend, inspect the latest log,
place a clear directive if a human decision is needed, and restart with a finite
cap. The fallback changes a repeated `experiment` plan to `wait` after the
configured threshold (default 3) when there is no directive and no progress.

## Bundled operating references

- [Workflows](references/workflows.md): novice, expert, steering, stop, recovery,
  and observable handoff procedures.
- [CLI and loop contract](references/cli-and-loop.md): exact flags, defaults,
  actions, state transitions, and scheduler caveat.
- [Troubleshooting](references/troubleshooting.md): predictable failures and safe
  decisions, including stale state, archive collisions, and `report` semantics.
- [Project validator](scripts/check_project.py): read-only brief/config checker;
  it never imports the controller, launches a process, writes files, or contacts
  a network service.

Files in this skill

  • SKILL.md8.6 KB
  • references/cli-and-loop.md9.3 KB
  • references/troubleshooting.md6.9 KB
  • references/workflows.md8.8 KB
  • scripts/check_project.py12.4 KB

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.