Skip to content

CLI flags ​

sh
claude-ui [options]
claude-ui update     # install the latest version; the next start runs it
claude-ui <command>  # ask the running daemon (below)

Example:

sh
claude-ui --port 5000 --roots ~/projects:~/oss

Commands ​

They talk to the daemon running on this computer. They never start it and never create the token file.

CommandDoes
statusDaemon up, version, port, sessions by state
open [sessionId] [--print]Open claude-ui in your browser. --print prints the link instead. Without a session id the link holds the pairing token; with one it is a plain link for a browser that is already paired
sessions (ls)List sessions. --project <dir>, --state <idle|running|needs_input|error|closed>, --archived (also show archived ones)
projectsList projects
workersList orchestration workers by coordinator

Options of every command: --json (machine-readable; fields may be added), --port <n> (default: the port of the running daemon from daemon.json, else PORT, else 4280), --token-file <path> (default: CLAUDE_UI_TOKEN_FILE, else token in the config folder).

Exit codes: 0 ok, 1 the daemon refused (for example an unknown session id), 2 wrong usage, 3 daemon not running or token missing or rejected. Only open --print writes the token to the terminal.

After claude-ui update the global claude-ui command stays the old one: run npm i -g claude-code-ui to get the new launcher. An old launcher treats a command that fails within 10 seconds (for example status with no daemon running) as a broken new version.

Not yet: new, send, tail, interrupt, doctor, logs, stop (names reserved). A daemon on Windows cannot be reached from WSL; run claude-ui in PowerShell.

Flags ​

FlagEnvironment variableDefaultDoes
--port <n>PORT4280Port to listen on
--roots <paths>CLAUDE_UI_ROOTSyour home folderFolders that sessions, files and terminals may use. Separate them like PATH: : (Windows: ;)
--tailscaleCLAUDE_UI_TAILSCALE=1offServe on your tailnet with tailscale serve and print the HTTPS link. See Phone & remote access
--hostname <name>CLAUDE_UI_HOSTNAMEHTTPS name of your own proxy in front of the daemon. Cannot be used with --tailscale
--lanCLAUDE_UI_LAN=1offAlso listen on the local network, plain HTTP
--allow-bypassCLAUDE_UI_ALLOW_BYPASS=1offOffer the "Bypass permissions" mode
--no-update-checkCLAUDE_UI_UPDATE_CHECK=0check onDo not check npm for a new version
--no-os-notifyCLAUDE_UI_OS_NOTIFY=0onNo desktop notifications on this computer
--no-openCLAUDE_UI_OPEN=0openDo not open the web UI in this computer's browser at start. It never opens after an update restart, over SSH, or on Linux without a display
-v, --versionPrint the version
-h, --helpPrint the help

A flag wins over its environment variable.

Environment variables ​

Only as environment variables:

VariableDefaultDoes
CLAUDE_UI_IDLE_CLOSE_MINUTES10Close the Claude process of an idle session that no tab shows after this many minutes. 0 = never. The next prompt resumes it.
CLAUDE_UI_UPDATE_REGISTRYnpmAn npm registry mirror for updates. Must be https:// (plain http:// only on localhost).
CLAUDE_UI_CLAUDE_BINthe bundled onePath to a different Claude Code binary.

Files ​

The config folder holds the daemon's own data:

OSConfig folder
Linux, macOS$XDG_CONFIG_HOME/claude-ui, else ~/.config/claude-ui
Windows%APPDATA%\claude-ui (or ~/.config/claude-ui if that folder already exists or XDG_CONFIG_HOME is set)
FileHolds
daemon.jsonPort, pid, version and start time of the running daemon (no token). Removed when it exits
tokenThe pairing token. Delete it and restart to unpair every browser.
projects.jsonYour project list
sessions.jsonEach session's model, mode, effort and worker links
settings.jsonApp-wide settings (see Settings)
vapid.json, push-subscriptions.jsonPush notification keys and subscribed browsers
sides.json, side-pack/WSL and Docker sides
versions/Installed updates

Session history itself is not here. It stays in Claude Code's own transcripts in ~/.claude/projects/.

MIT licensed. Unofficial; not affiliated with Anthropic.