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.2.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.2-py3-none-any.whl (133.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: researchloop-0.3.2.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.2.tar.gz
Algorithm Hash digest
SHA256 8f5cfa0e35d9f8d0ab6036db133777763ef5916874ac8ee6750a20b11ef2a10f
MD5 443be01f7bd46ed9462a51767a47b22e
BLAKE2b-256 88e1c45f91e2befc81da1234a7d4092cf3f78666aa3805fb9e21d857cf0ea720

See more details on using hashes here.

Provenance

The following attestation bundles were made for researchloop-0.3.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: researchloop-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 133.1 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 98722c96aeae011243c6e1efbe022c5a3090aece7235bdef2bb2310e5e9ad6ed
MD5 4ed846009f246a91736fb736c687a6db
BLAKE2b-256 c650d7fa89f0a20504aafacc7840b9d8d3328443d28c3c2fac9929c2392ef0d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for researchloop-0.3.2-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