Remote cluster controller: push, pull, run, shell over SSH + rsync
Project description
rcc
Remote cluster controller. Generalizes the classic ssh host "cd dir && cmd" +
rsync project/ host:dir/ workflow into a small CLI with per-project config.
Install
uv tool install remote-cluster-controller
# or
pipx install remote-cluster-controller
Both install the rcc command.
Quickstart
cd my-project
rcc init
# edit .rcc/config.toml to set host and remote_dir
rcc push --dry-run
rcc push
rcc run -- nvidia-smi
rcc run -t -- htop
rcc run -s 'squeue -u $USER | head' # shell snippet: pipelines, $vars survive
rcc shell
rcc pull
rcc status
rcc close
Configuration
.rcc/config.toml (per project, gitignored):
default = "myhost"
[profiles.myhost]
host = "myhost"
remote_dir = "/abs/path/on/remote"
Per-command overrides: --profile, --host, --remote-dir.
Excludes: edit .rcc/rccignore (gitignore syntax).
Slurm jobs (rcc job)
For HPC login nodes running Slurm, rcc job wraps the common verbs so you
never have to shell-quote a --format= value, a $USER, or a pipeline (the
friction that motivated this command — see issue #1).
rcc job submit train.sh --extra-env EPOCHS=10 # sbatch, prints the JOBID
rcc job submit train.sh -W --dependency afterok:524614 # block until done + chain after a prior job
rcc job list # squeue for your user
rcc job status 524614 # sacct -j <id> (fixed format)
rcc job tail 524614 -f # tail -f slurm-524614.out
rcc job cancel 524614 # scancel
Notes:
- The
submit/list/status/cancelverbs sniff forsbatchon the remote and exit127with a hint on non-Slurm hosts;tailskips the check (tailis universal). listandstatususe a fixed, readable--format=; you never type one.job submit -W/--waitblocks until the job finishes andrccexits with the job's exit code — closing the submit→monitor loop in one command.--dependencypasses--dependency=<TYPE:JOBID>straight to sbatch for chaining (e.g.afterok:524614).job tailreadsslurm-<JOBID>.outinsideremote_dirby default. Pass--file NAMEfor jobs that set a custom--output.
For one-off Slurm commands that aren't wrapped, use the shell-string mode of
rcc run, which also sidesteps the quoting problem:
rcc run -s 'sacct -j 524614 --format=JobID,State,Elapsed,ExitCode,Reason'
See docs/superpowers/specs/2026-04-23-rcc-design.md for the full spec.
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 remote_cluster_controller-0.1.1.tar.gz.
File metadata
- Download URL: remote_cluster_controller-0.1.1.tar.gz
- Upload date:
- Size: 81.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
797b93d73f15f64c08cdb4f3d3a6cdf8d183457674f19a38faea6a600293fb42
|
|
| MD5 |
ae0365c44b59bc8d60c287e28b20a3ea
|
|
| BLAKE2b-256 |
ddb0d96081a2b2c1c242cf61025bb6ca725aec910c57158f5c795edd4e345e09
|
File details
Details for the file remote_cluster_controller-0.1.1-py3-none-any.whl.
File metadata
- Download URL: remote_cluster_controller-0.1.1-py3-none-any.whl
- Upload date:
- Size: 22.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96757e028c5e0e2bb228137f309519b8b2a6f7e7011693a5cf21e49431ad4d99
|
|
| MD5 |
ea321524e154dacb708d13b237985b90
|
|
| BLAKE2b-256 |
e17a55498fae404b6704ea14a8cbdcf074b1892d237e862a795a5e70015bb374
|