CLI reference

Every cu subcommand.

cu setup#

bash
cu setup --user <email> --server <url>
cu setup --token <mt_xxx> --server <url>   # legacy enrollment-token flow

Writes ~/.controlum/credentials (mode 600) and registers the machine with the backend. --user requires the email to be on the server allowlist.

cu daemon#

bash
cu daemon start         # spawn the daemon (detached, survives shell close)
cu daemon stop          # SIGTERM, then SIGKILL on timeout
cu daemon status        # JSON: pid, machine_id, version, sessions
cu daemon restart       # stop + start
cu daemon logs -f       # tail the daemon log file

Stop also kills any orphan cu-daemon processes owned by the current user — a safety net for situations where multiple installers or service registrations left zombies on the WS connection.

cu claude / cu codex#

bash
cu claude --cu-mode dangerous            # opens claude with --dangerously-skip-permissions
cu claude --cu-mode auto_safe ./repo     # --permission-mode acceptEdits + positional cwd
cu codex  --cu-mode dangerous            # codex --dangerously-bypass-approvals-and-sandbox

The wrapper registers the session with backend (so it shows up in the dashboard) and translates --cu-mode to the right harness flag. Everything else is passed through verbatim.

cu attach#

bash
cu attach <session-id>                  # observe + type (first attacher is controller)
cu attach <session-id> --take-control   # forcibly become the controller on join

Connects to the daemon's IPC, attaches to the session's pty.Broker as a subscriber, puts stdin in raw mode and forwards keystrokes. Resize is forwarded on SIGWINCH. Ctrl-\\ detaches cleanly without killing the session.

cu login / cu logout / cu open#

bash
cu login --email you@example.com           # magic-link flow from terminal
cu logout                                  # drop the local session token
cu open                                    # open the dashboard in browser