Reference CLI Reference .env.common Architecture

CLI Reference

llmux ships a single console script (pyproject.toml[project.scripts] llmux = "tui.cli:main"). Running it with no arguments launches the TUI; every subcommand is a headless, scriptable equivalent of a TUI action.

llmux                      # launch the interactive TUI (default)
llmux tui                  # launch the TUI explicitly
llmux top <profile>        # btop-style monitor in a plain terminal (no TUI)
llmux <group> <command>    # headless control
llmux <alias>              # top-level shortcut (see below)
llmux --version            # print the installed version and exit

All commands accept -h / --help, and --version / -V prints the installed llmux version. The CLI is built with Typer; the option tables below are extracted directly from the typer.Option / typer.Argument definitions in tui/cli/.

How to run it

Examples use uv run llmux … (the project's standard uv workflow). If you installed the tool globally with uv tool install, drop the uv run prefix and call llmux … directly.

Command map

Group Commands Module
container up · down · logs · ps · benchmark · stats · render-env tui/cli/container.py
profile list · show · new · edit · delete · quick-setup tui/cli/profile.py
config list · show · new · edit · clone · from-recipe · delete tui/cli/config.py
image list · pull · remove · build-dev tui/cli/image.py
system gpu · mem-estimate · disk · env-check tui/cli/system.py
(top-level) tui · top · gpu · env-check · up · down · logs · ps · bench · stats · render-env tui/cli/__init__.py

Common concepts

top

The btop-style system monitor, rendered in a plain terminal without the Textual TUI. Good for low-bandwidth SSH or dumb terminals. Every GPU is shown always — util, memory, temperature, power, PCIe rx/tx — whether or not anything is running, plus a panel per running model (throughput and KV-cache braille graphs, cache-hit, requests, latency percentiles: TTFT/E2E p50/p95/p99 and phases). With no argument it shows every running model; pass a profile name to narrow it to that one. Press q or Ctrl+C to exit. The same monitor is reachable inside the TUI with the t key.

llmux top <profile>

Backend detection

Most commands take a profile name and resolve its backend (vllm or llamacpp) automatically by scanning profiles.yaml:

--backend always wins when supplied.

JSON output

Commands that produce structured data accept --json to emit a JSON payload (UTF-8, 2-space indent) instead of the default padded table or text. Commands with --json support:

Command Table/text default --json
container psstatus tablelist of rows
profile listprofile tablelist of rows
profile showkey: value textobject
config listconfig tablelist of rows
config showYAML dumpobject
image listimage tablelist of rows
system gpuGPU tablelist of rows
system env-checkreport textfindings object

Exit codes

Lifecycle commands propagate the underlying docker / docker compose exit code. Ctrl-C while streaming (up, logs, build-dev) exits with 130. system env-check exits 1 when .env.common is missing or has issues.

container — container lifecycle

llmux container up|down|logs|ps|render-env …

Start, stop, inspect, and re-render profile containers. up, down, logs, ps, and render-env are also exposed as top-level aliases.

container up

Start a profile's container. Streams docker compose output to stdout.

llmux container up PROFILE [OPTIONS]
ArgumentDescription
PROFILEProfile name (from profiles.yaml). Required.
OptionDefaultBackendDescription
--backend, -bauto-detectbothForce backend (vllm, llamacpp); auto-detect if omitted.
--tag, -t""bothImage tag override. vLLM: vllm/vllm-openai:<tag> or vllm-dev:<tag> with --dev. llama.cpp: full image ref (e.g. ghcr.io/foo/bar:v1) or llamacpp-dev:<tag> with --dev. Empty = profile's pinned image_tag or backend default.
--devFalsebothUse the locally-built dev image (vllm-dev:<tag> for vLLM, llamacpp-dev:<tag> for llama.cpp). Triggers a one-off build if the tag is missing locally or was built from a different repo/branch.
--default-imageFalsebothMirrors the TUI's "Default Image" selection — explicitly drop the profile's pinned image_tag for this run only and fall back to the compose default. Useful when a profile has a stale dev tag pinned. Mutually exclusive with --dev.
--pullFalsevLLMForce --pull always when bringing the container up. (Ignored for llama.cpp with a warning.)
--repo-urlfrom .env.commonboth--dev only: override the source repo URL (default from VLLM_REPO_URL / LLAMACPP_REPO_URL).
--branchfrom .env.commonboth--dev only: override the source branch (default from VLLM_BRANCH / LLAMACPP_BRANCH).
--forceFalsebothSkip the cross-backend port/GPU conflict pre-flight. Required to start a container when llmux detects a conflict (matches the TUI dashboard's pre-start gate).
# Start a vLLM profile (official image, highest local versioned tag)
uv run llmux container up qwen3-0-6b

# Start it from a locally-built dev image
uv run llmux container up qwen3-0-6b --dev --tag main-20260515

# One-off: ignore a stale pinned image_tag and use the compose default
uv run llmux up qwen3-0-6b --default-image

# Start a llama.cpp profile, disambiguating an ambiguous name
uv run llmux up gemma-3-4b --backend llamacpp

# llama.cpp dev image from a personal fork
uv run llmux up gemma-3-4b --dev \
    --repo-url https://github.com/me/llama.cpp.git --branch master

Pinning a dev image to a profile

To persist a dev image choice, edit the profile with llmux profile edit <name> --image-tag llamacpp-dev:<tag> (or vllm-dev:<tag>). container up then layers the appropriate compose override automatically. Use --default-image to bypass the pin for a single run.

container down

Stop a profile's container.

llmux container down PROFILE [OPTIONS]
ArgumentDescription
PROFILEProfile name (from profiles.yaml). Required.
OptionDefaultDescription
--backend, -bauto-detectForce backend; auto-detect if omitted.
uv run llmux container down qwen3-0-6b

container logs

Stream container logs (Ctrl-C to stop following).

llmux container logs PROFILE [OPTIONS]
ArgumentDescription
PROFILEProfile name (from profiles.yaml). Required.
OptionDefaultDescription
--backend, -bauto-detectForce backend; auto-detect if omitted.
--tail, -n200Number of recent lines to show before following.
--follow / --no-follow, -f / -F--followFollow log output (default). Use --no-follow to print recent lines and exit.
# Follow live logs
uv run llmux logs qwen3-0-6b

# Print the last 50 lines and exit
uv run llmux container logs qwen3-0-6b -n 50 --no-follow

container ps

List profiles and their container status across backends.

llmux container ps [OPTIONS]
OptionDefaultDescription
--backend, -ballLimit to one backend (vllm, llamacpp); show all if omitted.
--jsonFalseEmit JSON instead of a table.
--running, -rFalseOnly show running containers.

Table columns: backend, profile, status, port, gpu, container, model. JSON rows additionally include a boolean running field.

uv run llmux ps
uv run llmux ps --running --json
uv run llmux container ps -b vllm

container render-env

Re-render .runtime/<backend>/<profile>.env from profiles.yaml. Useful after editing profiles.yaml by hand. Prints the rendered path(s).

llmux container render-env [PROFILE] [OPTIONS]
ArgumentDescription
PROFILEProfile name to render. Omit to re-render all profiles.
OptionDefaultDescription
--backend, -ballLimit when rendering all (no PROFILE given).
# Re-render a single profile
uv run llmux render-env qwen3-0-6b

# Re-render every llama.cpp profile
uv run llmux container render-env --backend llamacpp

container benchmark · bench

Benchmark a running container's generation speed via /v1/chat/completions. A warmup call is discarded, then --runs measured calls report the median tok/s (a single cold call conflates model warmup with steady-state decode).

llmux bench PROFILE [OPTIONS]
OptionDefaultDescription
--backend, -bautoForce backend; auto-detect if omitted.
--prompt(built-in)Prompt sent to the chat endpoint.
--max-tokens200max_tokens for the request.
--runs3Measured runs; the reported figure is their median.
--warmup1Warmup runs discarded before measuring.
--jsonFalseEmit a JSON record (per-run + median/min/max) instead of a human line.
uv run llmux bench qwen3-0-6b --runs 5
uv run llmux bench qwen3-0-6b --json

container stats · stats

Live token throughput (tok/s) for every running container, polled from its Prometheus /metrics endpoint. Rates are deltas between successive samples, so the first line appears one interval in. A server that's down or was started without metrics exposed shows n/a and keeps being polled.

llmux stats [OPTIONS]
OptionDefaultDescription
--backend, -ballLimit to one backend; show all if omitted.
--interval, -i2.0Seconds between /metrics samples.
--onceFalseTake two samples one interval apart, print one tick, then exit.
--jsonFalseEmit one compact JSON line per tick (NDJSON).
uv run llmux stats                 # live, Ctrl-C to stop
uv run llmux stats --once --json   # one machine-readable sample

llama.cpp needs --metrics

vLLM exposes /metrics by default; llama.cpp does not, so llmux injects --metrics into every llama-server command it renders. The same figures drive the live tok/s column on the TUI dashboard.

profile — profile CRUD + quick-setup

llmux profile list|show|new|edit|delete|quick-setup …

Profiles live in profiles.yaml at the repo root — the single source of truth for both backends. Fields not applicable to a backend stay at their defaults.

profile list

List all profiles across (or within) backends.

llmux profile list [OPTIONS]
OptionDefaultDescription
--backend, -ballLimit to one backend (vllm, llamacpp).
--jsonFalseEmit JSON instead of a table.

Columns: backend, name, port, gpu_id, config, model.

uv run llmux profile list
uv run llmux profile list -b vllm --json

profile show

Show a profile's full record.

llmux profile show NAME [OPTIONS]
ArgumentDescription
NAMEProfile name. Required.
OptionDefaultDescription
--backend, -bauto-detectForce backend; auto-detect if omitted.
--jsonFalseEmit JSON instead of YAML-ish key: value text.
uv run llmux profile show qwen3-0-6b --json

profile new

Create a new profile entry in profiles.yaml. The name must match ^[a-z0-9][a-z0-9_-]*$lowercase only, because docker compose project names are lowercase-only and a cross-backend profile must validate on both sides. Creation fails if the name already exists in the chosen backend.

llmux profile new NAME [OPTIONS]
ArgumentDescription
NAMEProfile name (lowercase: [a-z0-9_-]). Required.
OptionDefaultBackendDescription
--backend, -bvllmbothBackend (vllm, llamacpp).
--port, -p0bothHost port (0 = backend default: 8000 vLLM / 8080 llama.cpp).
--gpu-id, -g"0"bothGPU id(s), comma-separated. (vLLM: tensor_parallel_size is derived from the count.)
--model, -m""vLLMHugging Face model id.
--config, -cprofile namebothLinked config name.
--containerprofile namebothContainer name.
--lora / --no-lora--no-loravLLMEnable LoRA.
--extra-pip""vLLMExtra pip packages installed before serve. (First-class profile field — do not pass via --set EXTRA_PIP_PACKAGES=….)
--set(none)bothRepeatable: KEY=VALUE entries appended to env_vars. Key must be a valid env-var name and cannot shadow a reserved profile field (GPU_ID, VLLM_PORT, LLAMA_PORT, CONFIG_NAME, CONTAINER_NAME, EXTRA_PIP_PACKAGES, …). Use the dedicated profile option instead.
--model-file""llama.cppGGUF filename.
--hf-repo""llama.cppHugging Face repo for download.
--hf-file""llama.cppHF file for download.
# vLLM profile
uv run llmux profile new qwen3-8b --backend vllm --model Qwen/Qwen3-8B \
    --gpu-id 0,1 --port 8000 --set VLLM_USE_FLASHINFER_MOE_MXFP4_MXFP8=1

# llama.cpp profile
uv run llmux profile new gemma-3-4b --backend llamacpp --port 8080 \
    --model-file gemma-3-4b-it-q4_k_m.gguf \
    --hf-repo unsloth/gemma-3-4b-it-GGUF --hf-file gemma-3-4b-it-q4_k_m.gguf

profile edit

Edit fields of an existing profile. Only the options you pass change; everything else is left untouched.

llmux profile edit NAME [OPTIONS]
ArgumentDescription
NAMEProfile name. Required.
OptionBackendDescription
--backend, -bbothForce backend; auto-detect if omitted.
--port, -pbothNew host port.
--gpu-id, -gbothNew GPU id(s); also re-derives tensor_parallel_size.
--model, -mvLLMNew Hugging Face model id.
--config, -cbothNew linked config name.
--containerbothNew container name.
--lora / --no-loravLLMToggle LoRA.
--extra-pipvLLMExtra pip packages.
--setvLLMRepeatable: KEY=VALUE to add/override in env_vars.
--unsetvLLMRepeatable: KEY to remove from env_vars.
--model-filellama.cppNew GGUF filename.
--hf-repollama.cppNew HF download repo.
--hf-filellama.cppNew HF download file.
--image-tagbothDocker image override (e.g. llamacpp-dev:mtp_main). Pass an empty string to clear.
# Pin a llama.cpp profile to a locally-built dev image
uv run llmux profile edit gemma-3-4b --image-tag llamacpp-dev:mtp_main

# Add an env var, remove another
uv run llmux profile edit qwen3-8b --set VLLM_ATTENTION_BACKEND=FLASHINFER --unset OLD_VAR

profile rename

Rename a profile. The profile's container must be stopped — it is named after the profile, so renaming under a running container would orphan it.

An unset config link is pinned to the old name, so the profile keeps resolving to the config file it already used. An unset container name follows the new profile name.

llmux profile rename OLD NEW [OPTIONS]
ArgumentDescription
OLDExisting profile name. Required.
NEWNew profile name. Required. Must be unique across both backends.
OptionDefaultDescription
--backend, -bauto-detectForce backend; auto-detect if omitted.
uv run llmux profile rename qwen3-8b qwen3-8b-fp8

profile clone

Copy a profile to a new name, keeping the same linked config. The clone reuses the source's port — change it before running both.

llmux profile clone SRC DST [OPTIONS]
ArgumentDescription
SRCProfile to copy from. Required.
DSTNew profile name. Required.
OptionDefaultDescription
--backend, -bauto-detectForce backend; auto-detect if omitted.
uv run llmux profile clone qwen3-8b qwen3-8b-tuned

profile delete

Delete a profile (and optionally its linked config YAML).

llmux profile delete NAME [OPTIONS]
ArgumentDescription
NAMEProfile name. Required.
OptionDefaultDescription
--backend, -bauto-detectForce backend; auto-detect if omitted.
--with-configFalseAlso delete the linked config YAML.
--yes, -yFalseSkip the interactive confirmation prompt.
uv run llmux profile delete old-profile --with-config --yes

profile quick-setup

Create a profile and a config from a model id in one step — mirrors the TUI's "Quick Setup". If --name is omitted, a name is derived from the model id (lowercased, non-alphanumerics replaced with -); collisions get a numeric suffix.

vLLM only

quick-setup currently supports --backend vllm only. For llama.cpp use profile new --backend llamacpp directly (it needs hf_repo / hf_file).

llmux profile quick-setup MODEL [OPTIONS]
ArgumentDescription
MODELHF model id, e.g. Qwen/Qwen3-8B. Required.
OptionDefaultDescription
--backend, -bvllmBackend (vLLM only is currently accepted).
--name, -nderived from modelProfile name.
--port, -p8000Host port.
--gpu-id, -g"0"GPU id(s), comma-separated.
--gpu-mem"0.9"vLLM gpu-memory-utilization (0.0–1.0).
--lora / --no-lora--no-loraEnable LoRA.
--copy-from""Copy extra_params from an existing config name.
uv run llmux profile quick-setup Qwen/Qwen3-8B --gpu-id 0,1 --gpu-mem 0.92

config — config (YAML) CRUD

llmux config list|show|new|edit|clone|delete …

Per-model engine configs live in config/<backend>/<name>.yaml:

Config names are validated against ^[a-zA-Z0-9][a-zA-Z0-9._-]*$ to prevent path traversal. For show / edit / delete, if the same name exists in both backends you must disambiguate with --backend.

config list

List config files.

llmux config list [OPTIONS]
OptionDefaultDescription
--backend, -ballLimit to one backend.
--jsonFalseEmit JSON instead of a table.

Columns: backend, name, model, params (number of keys in the YAML).

config show

Print a config YAML.

llmux config show NAME [OPTIONS]
ArgumentDescription
NAMEConfig name. Required.
OptionDefaultDescription
--backend, -bauto-resolveForce backend (resolved from existing files if omitted).
--jsonFalseEmit JSON instead of a YAML dump.

config new

Create a new config YAML. For vLLM, the file is seeded with model: and gpu-memory-utilization:; for llama.cpp it starts empty. --set values are YAML-parsed, so --set foo=2 stores an int and a bare --set bar stores true.

llmux config new NAME [OPTIONS]
ArgumentDescription
NAMEConfig name (becomes <name>.yaml). Required.
OptionDefaultBackendDescription
--backend, -bvllmbothBackend.
--model, -m""vLLMmodel: field.
--gpu-mem"0.9"vLLMgpu-memory-utilization:.
--set(none)bothRepeatable: KEY=VALUE entries (YAML-typed values).
--overwriteFalsebothOverwrite if the file already exists.
# vLLM config
uv run llmux config new qwen3-8b --model Qwen/Qwen3-8B --gpu-mem 0.9 \
    --set max-model-len=8192 --set enable-prefix-caching

# llama.cpp config
uv run llmux config new gemma-3-4b --backend llamacpp \
    --set ctx-size=8192 --set n-gpu-layers=999 --set flash-attn

config edit

Patch fields in an existing config.

llmux config edit NAME [OPTIONS]
ArgumentDescription
NAMEConfig name. Required.
OptionBackendDescription
--backend, -bbothForce backend; auto-resolved otherwise.
--setbothRepeatable: KEY=VALUE (YAML-typed values). Re-enables a disabled key automatically.
--unsetbothRepeatable: KEY to remove (from active or disabled).
--disablebothRepeatable: park KEY as an inert comment marker without deleting its value.
--enablebothRepeatable: restore a previously disabled KEY.
--model, -mvLLMSet the model: field.
--gpu-memvLLMSet gpu-memory-utilization:.
uv run llmux config edit qwen3-8b --set max-model-len=16384 --unset enable-prefix-caching

# Toggle a flag off without losing its value, then back on
uv run llmux config edit qwen3-8b --disable enforce-eager
uv run llmux config edit qwen3-8b --enable enforce-eager

A disabled parameter is stored as a # llmux:disabled <key>: <value> comment marker — inert to the server, visible to llmux. Hand-written # comments in the file are preserved across edits. See Toggling parameters on / off.

config clone

Clone SRC config to DST within the same backend. Useful when profile quick-setup --copy-from isn't enough — for example, when you want to clone a tuned config to a new name without creating a profile in the same step. Routes through the backend's canonical serializer so the resulting YAML is byte-identical to a TUI-edited config.

llmux config clone SRC DST [OPTIONS]
ArgumentDescription
SRCSource config name to copy from. Required.
DSTNew config name to create. Required.
OptionDefaultDescription
--backend, -bauto-resolveBackend of SRC; required only if SRC exists in both backends.
--overwriteFalseOverwrite DST if it already exists.
uv run llmux config clone qwen3-0-6b qwen3-0-6b-experiment

config from-recipe

Create a vLLM config from the model's official vllm-project/recipes recipe. The TUI shows an interactive review window (see Import a vLLM recipe); this headless form picks a variant with --variant, or auto-picks the highest-quality one that fits the detected GPU.

llmux config from-recipe MODEL_ID [OPTIONS]
OptionDefaultDescription
--listFalseList the recipe's variants + features and exit.
--variantautoPrecision variant (default/fp8/awq/…). Auto-picks a GPU-fitting one if omitted.
--feature(none)Repeatable: opt-in feature to enable (e.g. reasoning).
--name, -nautoConfig name (derived from the model id if omitted).
--jsonFalsePreview the resulting config as JSON without writing.
--overwriteFalseOverwrite if the config already exists.
uv run llmux config from-recipe Qwen/Qwen3-32B --list
uv run llmux config from-recipe Qwen/Qwen3-32B --variant fp8 --feature reasoning
uv run llmux config from-recipe Qwen/Qwen3-32B --variant awq --json

config rename

Rename a config YAML and repoint every profile that referenced it. Refused while any referencing profile's container is running.

llmux config rename OLD NEW [OPTIONS]
ArgumentDescription
OLDExisting config name. Required.
NEWNew config name. Required.
OptionDefaultDescription
--backend, -bauto-detectRequired if OLD exists in both backends.
--yes, -yFalseSkip the interactive confirmation prompt.
uv run llmux config rename qwen3-0-6b qwen3-0-6b-fp8

config delete

Delete a config YAML.

llmux config delete NAME [OPTIONS]
ArgumentDescription
NAMEConfig name. Required.
OptionDefaultDescription
--backend, -bauto-resolveForce backend; auto-resolved otherwise.
--yes, -yFalseSkip the interactive confirmation prompt.

image — Docker image inventory + dev build

llmux image list|pull|remove|build-dev …

image list

List local (and optionally remote) Docker images.

llmux image list [OPTIONS]
OptionDefaultDescription
--repovllm/vllm-openaiImage repo to list locally.
--devFalseAlso list local vllm-dev:* and llamacpp-dev:* images.
--remoteFalseQuery DockerHub for the latest stable + nightly tags of vllm/vllm-openai.
--jsonFalseEmit JSON instead of a table.

Columns: source (local / local-dev / remote), repository, tag, size, created.

uv run llmux image list --dev
uv run llmux image list --remote --json

image pull

docker pull <repo>:<tag> — surfaces raw docker output and exit code.

llmux image pull TAG [OPTIONS]
ArgumentDescription
TAGImage tag, e.g. v0.20.1 or nightly. Required.
OptionDefaultDescription
--repovllm/vllm-openaiImage repo to pull from.
uv run llmux image pull v0.20.1
uv run llmux image pull nightly

image remove

Wraps docker rmi <ref> so you can drop a local image without leaving the CLI. Use --force to drop images that are still referenced by a stopped container.

llmux image remove REF [OPTIONS]
ArgumentDescription
REFImage reference (e.g. vllm/vllm-openai:v0.10.0, vllm-dev:main, llamacpp-dev:fork-master, or a 12-char id). Required.
OptionDefaultDescription
--force, -fFalsePass --force to docker rmi.
uv run llmux image remove llamacpp-dev:fork-master
uv run llmux image remove vllm/vllm-openai:v0.20.0 --force

image build-dev

Build a <backend>-dev:<tag> image from source, streaming docker build output. The build pipeline (git clone/update → docker build → image labels) is shared; the tags applied are <prefix>:<custom_tag or branch-YYYYMMDD> and <prefix>:<branch> (a stable alias to the latest build).

llmux image build-dev [OPTIONS]
OptionDefaultBackendDescription
--backendvllmbothWhich backend to build for (vllm or llamacpp).
--branch, -bfrom .env.commonbothSource branch. Falls back to VLLM_BRANCH / LLAMACPP_BRANCH (default main / master).
--repo-urlfrom .env.commonbothSource repo URL. Falls back to VLLM_REPO_URL / LLAMACPP_REPO_URL.
--tag, -tbranch namebothCustom output tag.
--officialFalsevLLMBuild with upstream Dockerfile defaults (skips local GPU-arch detection patches). Ignored for llama.cpp with a warning.
--cuda-arch""llama.cppOverride auto-detection. CMake-format, e.g. 89 (Ada) or 86;89 (mixed). Empty = auto-detect via nvidia-smi. Ignored for vLLM with a warning.
--multi-archFalsellama.cppDisable GPU auto-detection and build for all archs (portable, slow). Ignored for vLLM with a warning.
# vLLM dev image from an unmerged PR branch
uv run llmux image build-dev --backend vllm --branch my-feature \
    --repo-url https://github.com/me/vllm.git

# llama.cpp dev image, pinned to a single GPU arch for a fast build
uv run llmux image build-dev --backend llamacpp --branch master --cuda-arch 89

See Dev Builds for the full workflow, and Architecture for how the pipeline works.

system — system info & env validation

llmux system gpu|mem-estimate|disk|env-check …

system gpu

Print an nvidia-smi summary, one row per GPU. Also available as the top-level alias llmux gpu.

llmux system gpu [OPTIONS]
OptionDefaultDescription
--jsonFalseEmit JSON instead of a table.

Columns: index, name, memory_used, memory_total, utilization, temperature. Prints (no GPUs detected — is nvidia-smi installed?) if none are found.

uv run llmux gpu
uv run llmux system gpu --json

system mem-estimate

Estimate a Hugging Face model's VRAM footprint via hf-mem — the same engine the TUI's memory estimator uses. Reads HF_TOKEN from .env.common (or the environment) for gated models.

llmux system mem-estimate MODEL_ID
ArgumentDescription
MODEL_IDHugging Face model id, e.g. Qwen/Qwen3-8B. Required.
uv run llmux system mem-estimate Qwen/Qwen3-8B
# → ~17.2GB (model: 15.3GB + KV: 1.9GB)

system disk

Show the llama.cpp model directory, its GGUF inventory + sizes, and df -h filesystem usage for the partition that hosts it. Mirrors the TUI's System → Disk / Model Dir tab. The vLLM equivalent (HF cache usage) lives in the TUI's System → Disk / HF Cache tab.

llmux system disk
uv run llmux system disk
# Model dir : /home/me/Project/llmux/models
# GGUF files: 2 (total 17.1 GB)
# df ...: used 583G, avail 285G (68%)

system env-check

Validate .env.common and report key paths. Checks that the file exists, that HF_TOKEN / HF_CACHE_PATH / VLLM_VERSION are set, and that HF_CACHE_PATH is absolute. Also available as the top-level alias llmux env-check.

llmux system env-check [OPTIONS]
OptionDefaultDescription
--jsonFalseEmit JSON findings instead of a text report.

Exits 0 when everything checks out, 1 when .env.common is missing or any issue is found. HF_TOKEN is masked in the text report (shown as <set, N chars>).

uv run llmux env-check
uv run llmux system env-check --json

See .env.common Reference for every variable this command validates.

Top-level aliases

For convenience — and so agents can write llmux up <profile> directly — the most-used commands are mirrored at the top level:

AliasEquivalent to
llmux tuilaunch the TUI explicitly
llmux gpullmux system gpu
llmux env-checkllmux system env-check
llmux upllmux container up
llmux downllmux container down
llmux logsllmux container logs
llmux psllmux container ps
llmux render-envllmux container render-env

These aliases share the exact arguments, options, and defaults of their canonical commands.