1.8 KiB
1.8 KiB
cmuxd-remote (Go)
Go remote daemon for cmux ssh bootstrap, capability negotiation, and CLI relay.
Commands
cmuxd-remote versioncmuxd-remote serve --stdiocmuxd-remote cli <command> [args...]— relay cmux commands to the local app over the reverse TCP forward
When invoked as cmux (via wrapper/symlink installed during bootstrap), the binary auto-dispatches to the cli subcommand. This is busybox-style argv[0] detection.
RPC methods (newline-delimited JSON over stdio)
helloping
CLI relay
The cli subcommand (or cmux wrapper/symlink) connects to the local cmux app's socket through an SSH reverse TCP forward and relays commands. It supports both v1 text protocol and v2 JSON-RPC commands.
Socket discovery order:
--socket <path>flagCMUX_SOCKET_PATHenvironment variable~/.cmux/socket_addrfile (written by the app after the reverse relay establishes)
For TCP addresses, the CLI retries for up to 15 seconds on connection refused, re-reading ~/.cmux/socket_addr on each attempt to pick up updated relay ports.
Integration in cmux
workspace.remote.configurebootstraps this binary over SSH when missing.- Client sends
hellobefore enabling remote port probing/forwarding. - Daemon status/capabilities are exposed in
workspace.remote.status -> remote.daemon. - Bootstrap installs
~/.cmux/bin/cmuxwrapper and keeps a default daemon target (~/.cmux/bin/cmuxd-remote-current). - A background
ssh -N -Rprocess reverse-forwards a TCP port to the local cmux Unix socket. The relay address is written to~/.cmux/socket_addron the remote. - Relay startup writes
~/.cmux/relay/<port>.daemon_pathso the wrapper can route each shell to the correct daemon binary when multiple local cmux instances/versions coexist.