Skip to content
Conduit

skill

preregister

Claude Code skill: interrogate the researcher and freeze a preregistration before an experiment, shown inside an example research repo

reinthal/preregistercommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/reinthal/preregister itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 26, 2026

preregister

-- Preregistering your hypothesis --

This skill aims to solve two problems:

Problem 1: Tacit Knowledge: Researchers and engineers have a lot of tacit knowledge that is not available to your agent. This makes them make mistakes.

Problem 2: Insufficient thinking: When coding up experiments has become this cheap we need to think harder about what experiments are worth our time.

This skill de-risks the above problems by having the agent interrogate the you and freeze a preregistration before a new experiment, then hold the analysis and the report to what was written.

Flow: preregister → hypothesis → test → analyze → report with conclusion.

The agent asks in rounds (question and stakes, hypothesis, test design, analysis plan, de-risking, pre-agreed conclusions), records the researcher's answers verbatim, writes experiments/<date>/PREREGISTRATION.md from the form in experiments/_template/, and refuses to start a non-pilot run until it is committed. After the run it runs the preregistered analysis first, appends changes under "Deviations" instead of editing frozen sections, and reports prediction and outcome side by side using the pre-agreed conclusion sentence.

Also here: gpu-lock

.claude/skills/gpu-lock/ holds GPUs on a shared multi-user machine with visible locks: /tmp/gpu-locks/ records which GPUs an experiment holds, which process, and a symlink to its log. gpu_lock.py run starts the job with CUDA_VISIBLE_DEVICES set and, when it ends, kills leftovers, verifies with nvidia-smi that the GPU memory is freed, writes a [gpu-lock] DONE line (exit code, memory check) to the log and removes the locks; status shows every GPU, its lock owner and whether that process is alive. Stdlib only — see its SKILL.md.

Repo layout (the illustration)

.claude/skills/preregister/SKILL.md      the skill
.claude/skills/gpu-lock/                 GPU locks + automatic cleanup on shared machines
AGENTS.md  (CLAUDE.md -> AGENTS.md)      agent instructions wiring the skill into the workflow
experiments/_template/                   skeleton: PREREGISTRATION.md form, config.json, run.py, README
experiments/2026-10-12-example/          a filled-in preregistration (toy experiment) + matching config
research-log/log.md, template.md         the log the skill quotes predictions into
primitives/config.py                     ExperimentConfig: config.json in, cfg.save() on run start
pyproject.toml, uv.lock                  the uv project the scripts run under

Read AGENTS.md, then experiments/_template/README.md, then the example folder. research-log/log.md shows how a preregistered experiment is logged: Expected Outcome quotes the prediction, Actual Outcome is the researcher's.

Install the skill in your own repo

With the skills CLI:

npx skills add reinthal/preregister                      # preregister
npx skills add reinthal/preregister --skill gpu-lock      # gpu-lock

Or copy by hand:

git clone https://github.com/reinthal/preregister
mkdir -p .claude/skills experiments/_template research-log
cp -r preregister/.claude/skills/preregister .claude/skills/
cp -r preregister/.claude/skills/gpu-lock .claude/skills/        # optional
cp preregister/experiments/_template/PREREGISTRATION.md experiments/_template/
cp preregister/research-log/template.md research-log/

Then add the "Preregister before running" convention from AGENTS.md to your own agent instructions, and /preregister in Claude Code (it also triggers when you propose an experiment, ask to scaffold a run, or try to launch a non-pilot run with no PREREGISTRATION.md).

Try it here

uv sync
uv run python experiments/_template/run.py --stage pilot
uv run python experiments/2026-10-12-example/run.py --stage run

Adapting

The skill assumes experiments live in experiments/<date>/ with a config.json holding every hyperparameter, and a research log with Expected/Actual Outcome fields owned by the researcher. Edit the paths in SKILL.md if your project differs. The pre-mortem list in section 5 is a prompt, not a checklist: replace the examples with your own project's past failures.

Origin

Extracted from reinthal/downstream-environment (deception-probe research).

↑↓ navigate openesc close