run-experiment
Execute an experiment's notebook end-to-end and report results back to its GitHub issue. Use when the user points you at an experiment issue ("run
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Execute an experiment's notebook end-to-end and report results back to its GitHub issue. Use when the user points you at an experiment issue ("run
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | run-experiment |
| description | Execute an experiment's notebook end-to-end and report results back to its GitHub issue. Use when the user points you at an experiment issue ("run |
Execute an experiment's notebook on Modal, then post results back to the issue. Runs in whatever environment Claude is currently in (local laptop, CI runner, etc.) — no assumption of being in GitHub Actions.
experiment and has an associated
experiments/exp<N>_<slug>/README.md notebook. If not, use
scripts/pm/scaffold_experiment.py --issue <N> to create the skeleton,
edit the body from the issue text, then run.modal token new has been run).HF_TOKEN env var (or hf auth login) for helico-publish..github/experiments.yaml defines the cost gate.Identify the notebook. From the issue number, locate
experiments/exp<N>_<slug>/. Read its frontmatter for the branch.
If the branch in frontmatter is not main, git checkout <branch>.
Dry run + cost gate.
HELICO_DRY_RUN=1 uv run python scripts/pm/run_experiment.py \
experiments/exp<N>_<slug>/
Read the [helico.experiment] ensure_* — dry-run (~$X) lines. Sum
them; compare against cost_gate_usd in .github/experiments.yaml.
Gate decision.
Run.
uv run python scripts/pm/run_experiment.py experiments/exp<N>_<slug>/
This blocks until Modal completes. If wall clock exceeds what the
user is willing to wait, use run_in_background on the tool call
and report when done.
Publish. After a successful run (unless the notebook already used
ensure_bench_run(..., publish=True)):
uv run helico-publish bench --experiment exp<N>_<slug> --name <step-name>
Commit committed artifacts (CSVs under data/, PNGs under plots/)
to the experiment's branch. Open a PR back to main if the branch is
not main.
Post results to the issue. Use gh issue comment <N> with a
headline-numbers + links body. Prefix with 🤖 so the convention is
consistent. Example:
🤖 Bench complete (~$actual_cost).
Headline:
- monomer_protein.mean_lddt = 0.734
- interface_protein_protein.mean_lddt = 0.487
(full table in the notebook)
HF: <bucket url>
Notebook: experiments/exp<N>_<slug>/README.md
.cache/benches/<name>/ exists,
the library returns cached results — don't delete to force a rerun.
If the researcher wants a rerun, either add force=True to the
specific call or bump the step name.gh issue comment --edit-last <N>. Don't spam multiple
updates.branch: exp/N-slug,
operate on that branch. Don't commit to main implicitly.modal token new.cuDNN Frontend error during inference → usually a cuequivariance
version drift. Check pyproject.toml pins and modal/bench.py's image
spec. See commits 4d23f5e, ec58b03 for history.ModuleNotFoundError: No module named 'numpy._core.numeric' →
numpy version skew between local and Modal; both must be >=2.0. See
commits 6f8e152, 0d521d3.ensure_* cache still has
partial artifacts. Inspect .cache/benches/<name>/ and meta.json to
decide whether to rerun with force=True or bump the step name.