CLI
The native hexbot command starts the daemon, runs it as a service, manages bots, devices and Hex Connect, lists rooms, and sends one-shot messages.
A Headless install puts the command in ~/.local/bin/hexbot. It always runs the daemon version that is currently installed, so it keeps working after an update.
hexbot --help
hexbot --version
Commands use ~/.hexbot by default. Set HEXBOT_HOME to select another data directory. Use the same directory for the server and administrative commands; a pairing code from another home will not authenticate with your daemon.
Start a daemon
hexbot serve
The default port is 9119. A fresh daemon listens on localhost. You can choose a numeric bind address and port:
hexbot serve --host 127.0.0.1 --port 9119
Turn on “Allow other devices” only when another device needs access: hexbot lan on turns it on, whether or not the daemon is running, and hexbot lan off turns it off. hexbot serve --lan and --no-lan do the same as they start; without either flag, the saved setting applies. A daemon run by the app or by the service is already running; stop it before you start one by hand.
When started directly in an interactive terminal, the daemon prints a one-time browser sign-in link. It does not print one when supervised as a service or redirected to a log.
Check the daemon
hexbot status
hexbot status --json
Shows whether the daemon is running, its version and port, its LAN addresses when “Allow other devices” is on, its Tailscale address when tailscale ip -4 answers, its Hex Connect hostname, whether the service is installed and running, and whether the sandbox is available. It works before the daemon has ever started.
Run the daemon as a service
hexbot service install
hexbot service start
hexbot service stop
hexbot service restart
hexbot service status
hexbot service logs
hexbot service logs -f
hexbot service uninstall
install writes a per-user service and starts it: a launchd agent at ~/Library/LaunchAgents/app.hexbot.daemon.plist on macOS, a systemd user unit at ~/.config/systemd/user/hexbot.service on Linux. These are the same files the app writes for “Start the daemon at login”. The service starts the daemon at login and restarts it if it stops, and it lets an app on another computer update the daemon. On Linux, install also enables lingering so the daemon keeps running after you log out. status --json prints installed, running, manager, and file. logs -f follows the log until you press Ctrl-C. uninstall stops the service and removes its file; your data stays.
Set up an installed runtime
hexbot setup
Installs the code tools (uv, Python 3.11, and the voice tools) into ~/.hexbot and writes the hexbot command in ~/.local/bin, or repairs them. If ~/.local/bin is not on your PATH, it prints the line to add. --no-code-tools skips Python and the voice tools, and --json prints progress as one JSON object per line. The installer runs hexbot setup --activate from a downloaded daemon runtime, which also checks every file against the runtime’s manifest and makes it the current daemon; you rarely need it yourself.
Create a pairing code
hexbot pair
This prints a reachable address, one-time code, pairing link, and terminal QR code. The code works once and expires after ten minutes. Creating it does not turn on LAN access. Enable LAN first if another device needs to reach the daemon.
Enter the address and code in the app or on the browser sign-in page. Do not publish the code. See Pairing and LAN for device setup and troubleshooting.
Manage bots
hexbot bots list
hexbot bots create writer --description "Reviews drafts and edits copy"
Creation accepts --title, --description, --persona, --provider, --model, and --reasoning-effort, each followed by its value. The description helps teammates choose whom to ask. Use the app to configure provider credentials before sending a message.
To remove a bot:
hexbot bots delete writer
Deletion removes the bot’s profile, conversations, memory, and scheduled jobs. Stop any active work first. This operation is permanent.
Send a message and list rooms
Quote the message so the shell passes it as one argument:
hexbot send writer "Summarize the unfinished work in my notes"
hexbot rooms list
The named bot uses its configured model, soul, skills, and memory. When a daemon is already running, the CLI sends the request to it. If none is running, one-shot chat can start the runtime for that request. Interactive approvals and clarification questions are answered in the terminal.
The native CLI lists rooms; create rooms and manage their members in the app or browser.
List and revoke devices
hexbot devices list
hexbot devices revoke "DEVICE_ID"
Replace DEVICE_ID with an ID from the list. Revoking a device invalidates its token and ends its access. Pair it again to restore access.
Manage Hex Connect
hexbot connect --name "Studio Mac"
hexbot connect status
hexbot connect disconnect
Registration prints an address and code for browser approval. status shows the registration and tunnel. disconnect stops the tunnel, clears local credentials, and asks Connect to revoke the registration; if Connect cannot be reached, revoke the daemon from your daemons page. The daemon keeps working locally.
See Hex Connect for browser and app sign-in, remote access, and self-hosting the service.
Source and custom homes
For a source binary, point commands at the same home as the server:
HEXBOT_HOME="$PWD/.hexbot" backend/hexbot-core/target/debug/hexbot bots list
HEXBOT_HOME="$PWD/.hexbot" backend/hexbot-core/target/debug/hexbot pair
The development runner may choose a different port; CLI commands read the running daemon’s address from that home. Manage provider keys, connectors, budgets, and bot settings in the app. Legacy administration commands for the former Python daemon are not part of this CLI.