CLI reference
hal0 ships a single hal0 binary built with Typer
(src/hal0/cli/main.py). Every non-serve subcommand talks to the
local daemon on 127.0.0.1:8080, so the CLI and the dashboard end up
calling the same code paths.
Every command listed below hits a live endpoint. The # real /
# stub markers used in earlier builds have been retired now that
the surface is fully wired.
System
Section titled “System”hal0 status # system + slot summaryhal0 probe # re-run hardware detectionhal0 serve [--host] [--port] [--reload] # daemon modehal0 status is what you run first when something looks off.
hal0 probe rewrites /etc/hal0/hardware.json — re-run after BIOS
UMA changes, GPU swaps, or RAM upgrades.
hal0 slot listhal0 slot load <name> [--model M]hal0 slot unload <name>hal0 slot restart <name>hal0 slot swap <name> --model Mhal0 slot logs <name> [--follow] # SSE tail of journaldhal0 slot swap is the most-used command in normal operation. It
changes a slot’s model in one call and you watch it transition
through unloading → starting → warming → ready.
hal0 slot logs <name> --follow is the journald tail wrapped over
SSE; it shows the same stream the dashboard’s Logs view tails.
Models
Section titled “Models”hal0 model listhal0 model pull <ref> # HF streaming pullhal0 model rm <ref>hal0 model assign <ref> --slot Shal0 model list is the CLI view of what the dashboard’s /models
page shows: every registered model with its size, backend, and
capability tags. Use it when you’ve SSH’d in and don’t want to bounce
to the browser.
Configuration
Section titled “Configuration”hal0 config showhal0 config edit # opens $EDITORhal0 config validate # schema checkhal0 config migrate # apply schema migrationshal0 config validate is safe to run at any time and doesn’t write
anything. Use it before hal0 config edit to confirm your starting
point is clean.
Updates
Section titled “Updates”hal0 update # apply latest stablehal0 update --channel stablehal0 update --channel nightlyhal0 update --check # print version, don't applyhal0 update --rollback # revert to previous versionSee Updates & rollback for the atomic symlink-swap mechanics.
Uninstall
Section titled “Uninstall”hal0 uninstall [--keep-data] [--force] [--dev]Thin wrapper over installer/uninstall.sh. The CLI exec’s the script
so the DELETE confirmation prompt inherits the live TTY; in
non-interactive contexts pass --force or --keep-data to skip the
prompt. --dev mirrors install.sh --dev for a $PWD/.hal0ai
tree.
Talking to the daemon
Section titled “Talking to the daemon”Almost every subcommand is a thin client on the API. You can hit the same endpoints directly:
curl http://localhost:8080/api/slotscurl http://localhost:8080/api/modelscurl -X POST http://localhost:8080/api/slots/primary/restartThe CLI is for ergonomics; the API is the source of truth.