Skip to main content

Automated research sprint platform for HPC clusters

Project description

ResearchLoop

Run AI-automated research experiments on your HPC cluster. Monitor from anywhere.

CI PyPI Python 3.10+ License: MIT

mmlu-combined

ResearchLoop submits AI-powered research experiments to your SLURM or SGE cluster, then reports back the results. You describe a research idea in natural language, it handles the rest: submitting the job, running a multi-step pipeline with Claude Code, red-teaming the results, generating a report, and notifying you when it's done.

pip install researchloop

# Submit an experiment to your cluster
researchloop sprint run "Investigate whether batch normalization improves convergence" --study my-project

# Start an auto-loop: 5 experiments, each building on the last
researchloop loop start --study my-project --count 5 --context "Focus on improving F1 score"

Monitor everything from a web dashboard, Slack, or the CLI -- no need to SSH in and check on jobs.

Why ResearchLoop?

If you run experiments on shared HPC clusters, you know the pain: SSH in, write a script, submit with sbatch, wait, check logs, repeat. ResearchLoop automates this loop:

  1. You describe what to investigate (via CLI, dashboard, or Slack)
  2. ResearchLoop submits a job to your cluster via SSH
  3. Claude runs the full experiment -- writes code, runs it, analyzes results
  4. A red-team step critiques the work and Claude fixes any issues
  5. You get a report with a summary, PDF, and all artifacts

The auto-loop feature takes this further: after each experiment, Claude analyzes the results and proposes the next one. You set how many iterations, and walk away.

Get started in 5 minutes

Prerequisites: Python 3.10+, SSH access to an HPC cluster, Claude Code installed on the cluster.

1. Install and initialize

pip install researchloop
researchloop init

2. Edit researchloop.toml

shared_secret = "pick-a-secret"
orchestrator_url = "http://localhost:8080"

[[cluster]]
name = "my-cluster"
host = "login.cluster.example.com"
user = "researcher"
key_path = "~/.ssh/id_ed25519"
scheduler_type = "slurm"
working_dir = "/scratch/researcher/researchloop"

[cluster.job_options]
gres = "gpu:1"
mem = "64G"
cpus-per-task = "8"

[[study]]
name = "my-project"
cluster = "my-cluster"
description = "Investigating X"

3. Start the server and run your first sprint

researchloop serve &
researchloop connect http://localhost:8080
researchloop sprint run "Try approach X on dataset Y" --study my-project

That's it. ResearchLoop SSHes to your cluster, submits the job, and you can monitor progress from the dashboard at http://localhost:8080/dashboard/.

Three ways to interact

Web dashboard

Browse to /dashboard/ to see all your studies, sprints, and loops. Submit new sprints, start loops with custom GPU/memory settings, refresh live status from the cluster, and read reports -- all from the browser.

Slack bot

Get sprint notifications in your Slack channel and run commands from a thread:

sprint run my-project "investigate feature X under condition Y"
sprint list
loop start my-project 5
help

See the Slack setup guide for configuration.

CLI

researchloop sprint run "idea" --study my-project   # Submit a sprint
researchloop sprint list                             # List recent sprints
researchloop sprint show sp-a3f7b2                   # View details
researchloop loop start --study my-project --count 5 # Auto-loop
researchloop loop stop loop-b4e1c9                   # Stop a loop

Customizing your studies

Each study can have its own context, cluster settings, and configuration:

[[study]]
name = "sae-research"
cluster = "my-cluster"
max_sprint_duration_hours = 12
red_team_max_rounds = 2
allow_loop = true

# Tell Claude what this study is about and how to approach it
context = """
You are researching sparse autoencoder architectures.
Always train for 200M samples. Use batch size 1024.
Validate on the variation models listed in ~/reference/models.txt.
"""

# Or point to a file with detailed instructions
claude_md_path = "./studies/sae-research/CLAUDE.md"

# Override GPU/memory for this study
[study.job_options]
gres = "gpu:a100:2"
mem = "128G"

The context hierarchy is: global > cluster > study. All levels are merged and included in every sprint's prompt.

Deployment

For production, deploy the orchestrator as a Docker container on Fly.io, Railway, or any platform that supports persistent volumes:

pip install researchloop
# See deployment guide for Docker/Fly.io setup

Full deployment guide: researchloop.github.io/researchloop/deployment

Documentation

Full docs at researchloop.github.io/researchloop, including:

Contributing

git clone https://github.com/researchloop/researchloop.git
cd researchloop
uv sync
uv run pytest tests/ -m "not integration"   # Unit tests
uv run ruff check . && uv run pyright researchloop/  # Lint + type check

Integration tests run against a real SLURM scheduler in Docker -- see development guide.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

researchloop-0.3.1.tar.gz (8.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

researchloop-0.3.1-py3-none-any.whl (130.3 kB view details)

Uploaded Python 3

File details

Details for the file researchloop-0.3.1.tar.gz.

File metadata

  • Download URL: researchloop-0.3.1.tar.gz
  • Upload date:
  • Size: 8.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for researchloop-0.3.1.tar.gz
Algorithm Hash digest
SHA256 61b3612c68fb0f4b045bf4fc6e9d52f56b68dc69a579d0fb0b32d8c83e4c0704
MD5 689084945adf5836cd559c01cbdb1e75
BLAKE2b-256 c58752fcb81456d8e6e92c4ee18d8ad9c13c5c1c94f34fddff3af3e6e43fd962

See more details on using hashes here.

Provenance

The following attestation bundles were made for researchloop-0.3.1.tar.gz:

Publisher: release.yml on researchloop/researchloop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file researchloop-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: researchloop-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 130.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for researchloop-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 77300e25a33a37f5d5345b6c800215f624f0dca84a589447d106b12cacb0054e
MD5 e01783fa4a491defbddfd1aae70752a9
BLAKE2b-256 70a1b8fbcc80c6df76e5f339353b08457fa98ba8dc2ce45a9ba847969a1bab79

See more details on using hashes here.

Provenance

The following attestation bundles were made for researchloop-0.3.1-py3-none-any.whl:

Publisher: release.yml on researchloop/researchloop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page