Interactive TUI wizard for generating and submitting Slurm sbatch scripts
Project description
███████╗██╗ ██╗ ██╗██████╗ ███╗ ███╗ █████╗ ████████╗███████╗
██╔════╝██║ ██║ ██║██╔══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝
███████╗██║ ██║ ██║██████╔╝██╔████╔██║███████║ ██║ █████╗
╚════██║██║ ██║ ██║██╔══██╗██║╚██╔╝██║██╔══██║ ██║ ██╔══╝
███████║███████╗╚██████╔╝██║ ██║██║ ╚═╝ ██║██║ ██║ ██║ ███████╗
╚══════╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
⚡ Stop hand-writing sbatch scripts. Let the wizard do it.
A fast, friendly TUI wizard + CLI that builds and submits Slurm batch jobs —
on any cluster, as long as sbatch is on your PATH.
✨ Why Slurmate?
Writing #SBATCH headers by hand is fiddly and error-prone: which partition has
H100s? what's the memory limit? did I get the --gres syntax right for this
cluster? Slurmate turns that into a guided conversation — it reads your cluster
live, validates as you go, and hands you a clean, ready-to-submit script.
slurmate
That's it. Answer a few prompts, watch the script build itself in a live preview, and submit — or save it for later.
🚀 Quick start
# Recommended: isolated install
pipx install slurmate
# or plain pip
pip install slurmate
Install from source / for development
git clone https://github.com/PursuitOfDataScience/slurmate.git
cd slurmate
pip install -e ".[dev]" # editable + dev tools (pytest, ruff, mypy)
Interactive mode (the TUI)
slurmate
A full-screen wizard walks you through name → resources → environment → command. The generated script grows live in a preview pane as you answer, and when you're done you get a single menu: Submit · Edit · Save · Show · Quit.
💡 You can leave any step blank and come back to it — anything still missing is flagged before you submit.
Esc/Shift+Tabgo back;F1opens help.
Batch mode (scriptable, no TUI)
slurmate \
--job-name train_job \
--partition gpu \
--cpus 8 --memory 32G --time 04:00:00 \
--gpus 1 --gpu-type h100 \
--command "python train.py"
Submit immediately, no prompts:
slurmate --partition gpu --command "python train.py" --yes
Just want the script? Print it (great for piping or CI):
slurmate --partition gpu --command "python train.py" --print > job.sbatch
Run slurmate --help for the full flag list.
🎯 Features
| 🧠 Live cluster awareness | Pulls real partitions, GPU types, QoS, accounts, conda envs, and modules from sinfo / scontrol / sacctmgr / conda. |
| 👀 Live preview | The #SBATCH script builds incrementally as you answer — what you see is exactly what gets submitted. |
| 🛡️ Partition-aware validation | Inline warnings when CPU / memory / time / GPU requests exceed the selected partition's limits. |
| 📁 Path autocomplete | Tab-complete file paths while typing your command, virtualenv path, or output files — no more retyping long project paths. |
| ↩️ Skip & come back | Leave steps blank, navigate freely with Esc, and get reminded of anything missing before submit. |
| 📋 Copy-friendly | Mouse capture is off by default so you can select/copy the preview natively (F2 toggles mouse nav). |
| 🧩 Cluster-agnostic GPU syntax | Choose --gres=gpu:type:N, --gres + --constraint, or --gpus to match your site. |
| 🐍 Env activation | Conda, Mamba, virtualenv, or none — generated automatically. |
| 🗂️ Smart output paths | Set a custom log name/pattern (%j = job ID); error path is derived and log dirs are auto-created. |
| ♻️ Reproducible | Save the script, edit it in $EDITOR, or keep a copy of every submission. |
| 🧪 Safe to explore | No Slurm? It falls back to realistic mock data so you can try the whole flow anywhere. |
⚙️ Configuration file
Stop retyping the same account and partition every run. Slurmate reads defaults from a TOML file (first match wins):
.slurmate.tomlin the current directory~/.config/slurmate/config.toml
These prefill the wizard and act as fallbacks in batch mode. Explicit CLI flags always win.
# .slurmate.toml — keys may be top-level or under a [defaults] table
account = "my_lab"
partition = "gpu-shared"
cpus = 8
memory = "32G"
time_limit = "04:00:00"
gpu_format = "gres_type" # gres_type | constraint | gpus
env_type = "conda" # conda | mamba | venv | none
modules = ["cuda/12.1", "gcc/9.3.0"]
output_dir = "logs"
Recognized keys: job_name, account, partition, qos, cpus, memory,
time_limit, nodes, ntasks_per_node, gpus, gpu_type, gpu_format,
array_spec, modules, env_type, env_name, output_dir, output_file,
command, custom_sbatch.
Real TOML is used when available (
tomllibon 3.11+,tomliotherwise); without either, a minimal flatkey = valuereader is used as a fallback.
🔧 Environment variables
| Variable | Effect |
|---|---|
SLURMATE_MOCK=1 |
Force mock mode even when Slurm is installed (great for demos/tests). |
SLURMATE_GPU_FORMAT |
Default GPU syntax: gres_type (default) · constraint · gpus. |
SLURMATE_LOG_DIR=… |
Save a copy of every submitted script there for reproducibility. |
SLURMATE_NO_BANNER=1 |
Hide the startup banner. |
SLURMATE_BANNER_ANIMATE=1 |
Force the animated banner even when not a TTY. |
SLURMATE_DEBUG=1 |
Verbose debug logging. |
NO_COLOR and non-TTY output are respected automatically.
🛠️ How it works
- Gather — query the cluster (or fall back to mock data) for partitions, limits, GPU types, environments, and modules.
- Guide — a keyboard-first wizard collects name, resources, dependencies, and the command, validating against the chosen partition as you go.
- Generate & submit — produce a clean
#SBATCHscript, optionally edit it in$EDITOR, then pipe it straight tosbatch(or save / print it).
🧪 Status
Slurmate is experimental and pre-1.0 — the CLI, config keys, and defaults may change between releases. It's already useful day-to-day; pin a version if you script around it. Bug reports and cluster-specific quirks are very welcome.
🤝 Contributing
Issues and PRs are welcome! For local development:
pip install -e ".[dev]"
ruff check src/ # lint
mypy src/ # types (strict)
pytest # tests
CI runs the same three checks on Python 3.10–3.12 for every push and PR.
📄 License
Released under the MIT License.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slurmate-0.2.0.tar.gz.
File metadata
- Download URL: slurmate-0.2.0.tar.gz
- Upload date:
- Size: 50.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c2de01c82c9ea3752380b25545211b2564edf4be13da963af908f9d28cf40f8
|
|
| MD5 |
f6d91e62d74fd885c66606012fa29110
|
|
| BLAKE2b-256 |
9ef73dd138664797f919bceed6aa5f30e480be5ab7dc624a3c370705719e0054
|
Provenance
The following attestation bundles were made for slurmate-0.2.0.tar.gz:
Publisher:
release.yml on PursuitOfDataScience/slurmate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slurmate-0.2.0.tar.gz -
Subject digest:
5c2de01c82c9ea3752380b25545211b2564edf4be13da963af908f9d28cf40f8 - Sigstore transparency entry: 1913942488
- Sigstore integration time:
-
Permalink:
PursuitOfDataScience/slurmate@2525ac93d72ea80f45e1f598480845d92a793302 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/PursuitOfDataScience
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2525ac93d72ea80f45e1f598480845d92a793302 -
Trigger Event:
push
-
Statement type:
File details
Details for the file slurmate-0.2.0-py3-none-any.whl.
File metadata
- Download URL: slurmate-0.2.0-py3-none-any.whl
- Upload date:
- Size: 38.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf9b14b2c8284ad41b0fb23421750da53c11fe5ff3955f8889df264b804b1b32
|
|
| MD5 |
a02ad985f58084dc81cc73c403f419d5
|
|
| BLAKE2b-256 |
f0fad8041fe9c2593643a7dc03a4543cee32697412f4b7aec161688b04675f52
|
Provenance
The following attestation bundles were made for slurmate-0.2.0-py3-none-any.whl:
Publisher:
release.yml on PursuitOfDataScience/slurmate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slurmate-0.2.0-py3-none-any.whl -
Subject digest:
cf9b14b2c8284ad41b0fb23421750da53c11fe5ff3955f8889df264b804b1b32 - Sigstore transparency entry: 1913942669
- Sigstore integration time:
-
Permalink:
PursuitOfDataScience/slurmate@2525ac93d72ea80f45e1f598480845d92a793302 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/PursuitOfDataScience
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2525ac93d72ea80f45e1f598480845d92a793302 -
Trigger Event:
push
-
Statement type: