Profiles

Each [profiles.<name>] block defines one cluster connection. Profiles are independent: each has its own SSH client, refresh worker, sacct/sinfo caches, and filter/sort state.

Single profile

[profiles.mycluster]
host = "mycluster"   # resolved via ~/.ssh/config

With a single profile, the UI shows no tab bar — the connection status header and the job table take up the full screen.

Multiple profiles — tabs

[defaults]
refresh_interval = 5

[profiles.dei]
host = "dei.login"

[profiles.cineca]
host         = "login.cineca.it"
ssh.username = "auser"
ssh.key_filename = "~/.ssh/id_cineca"
refresh_interval = 10              # poll less often on remote/slow clusters

[profiles.hpc]
host          = "hpc.university.edu"
ssh.jump_host = "bastion.university.edu"

When more than one profile is configured, the UI grows a tab bar. Press h / l to switch tabs without leaving the keyboard. Per-tab state that is preserved when switching:

  • State filter (1/2/3/4/0)

  • Name / ID search (/)

  • Sort mode (s)

  • Cursor position

Running a subset of configured profiles

slurmhub --profile dei            # only the 'dei' profile
slurmhub --list-profiles          # list and exit

Ad-hoc profile without a config

slurmhub --host login.cluster.example.org

This creates an in-memory profile named default and starts the app against it. No file on disk is created or modified.

Overrides via [defaults]

Anything under [defaults] is treated as the base layer. Individual profiles selectively override fields:

[defaults]
ssh_timeout = 15
[defaults.ssh]
username = "shared-user"
key_filename = "~/.ssh/id_shared"

[profiles.alpha]
host = "alpha.cluster.example.edu"
# inherits username, key_filename, ssh_timeout

[profiles.beta]
host = "beta.cluster.example.edu"
ssh.username = "beta-user"   # overrides 'shared-user' just for this profile
ssh_timeout = 30             # overrides 15

The merge is shallow per section, except for log.specific_projects (which is deep-merged so per-profile entries are added to the defaults rather than replacing them).