gflow 0.4.14

A lightweight, single-node job scheduler written in Rust.
Documentation
# gctl Reference

`gctl` changes scheduler behavior at runtime.

## Usage

```bash
gctl <command> [args]
gctl completion <shell>
```

## Commands

### `gctl show-gpus`

Show per-GPU status, including whether a GPU is restricted.

```bash
gctl show-gpus
```

### `gctl set-gpus <gpu_spec>`

Restrict which GPUs the scheduler can allocate for **new** jobs.

`<gpu_spec>` examples:

- `all`
- `0,2,4`
- `0-3`
- `0-1,3,5-6`

```bash
gctl set-gpus 0,2
gctl set-gpus all
```

### `gctl set-limit <job_or_group_id> <limit>`

Set max concurrency for a job group.

```bash
gctl set-limit <job_id> 2
gctl set-limit <group_id> 2
```

### `gctl reserve create`

Create a GPU reservation for a specific user.

**By GPU count** (scheduler allocates dynamically):
```bash
gctl reserve create --user alice --gpus 2 --start '2026-01-28 14:00' --duration 2h
```

**By specific GPU indices** (reserve exact GPUs):
```bash
gctl reserve create --user alice --gpu-spec 0,2 --start '2026-01-28 14:00' --duration 2h
gctl reserve create --user bob --gpu-spec 0-3 --start '2026-01-28 16:00' --duration 1h
```

`--start` supports ISO8601 (e.g. `2026-01-28T14:00:00Z`) or `YYYY-MM-DD HH:MM` (local time). Times must be on `:00` or `:30`; durations are multiples of 30 minutes.

### `gctl reserve list`

List reservations.

```bash
gctl reserve list
gctl reserve list --active
gctl reserve list --user alice --status active
gctl reserve list --timeline --range 48h
```

### `gctl reserve get <reservation_id>`

Show details for a reservation.

```bash
gctl reserve get <reservation_id>
```

### `gctl reserve cancel <reservation_id>`

Cancel a reservation.

```bash
gctl reserve cancel <reservation_id>
```