Wave enhances SSH by offering connections that stay alive across sessions, maintaining your environment and history, unlike traditional SSH that might disconnect and lacks universal command history. Setting up a Wave connection creates a resilient virtual SSH connection, preserving your session details and command logs.


Wave was designed with security in mind. It uses standard SSH for all remote machine authentication, without relying on any proprietary authentication schemes. Communication is exclusively handled through stdout and stdin, ensuring that the helper running on the remote machine never has to open any ports or require additional privileges.

To set up a new connection, navigate to “Connections” on the left sidebar and click “New Connection”. Fill out the required user and host details, then select your “Auth Mode”.

Wave utilizes standard SSH, offering the choice of an SSH key (akin to “-i”) or a password for authentication—SSH keys are favored for their increased security. For unique authentication needs or OTP, switch “connectmode” to “manual”.

To ensure persistent connections, Wave installs a helper (waveshell) on the remote machine. This helper communicates with Wave via stdin and stdout, requiring no extra permissions, opening no ports, and writing to disk only for detached commands. Waveshell is open-source, written in Go, and can be found in the waveterm GitHub repo in the waveshell directory. To reinstall, use /connection:install.

Importing SSH Configurations

To simplify setting up your connections, Wave let’s you import your existing SSH configurations using the Import Config feature, avoiding the need to manually recreate connections. To access this feature, select the “Connections” button in the left-hand sidebar and then select “Import Config.”

Note: This feature can also be invoked from the CLI directly by running /remote:parse (reference)

Using Connections

Once a Wave connection is established, switching between connections is simple. Use the cr command, akin to cd in functionality, by typing cr [remotename-or-alias]. Your prompt updates, indicating you’re executing commands on the selected connection, allowing for a blend of local and remote commands.

Each session and tab can switch to new connections with cr, maintaining their unique remote states—including different working directories—mirroring local session behavior.

For instance, executing cr server01 places you in server01’s environment. Operations like cd or setting variables are specific to that tab. To initiate another environment within the tab, cr server01:2 generates a separate workspace “2”. This setup permits multiple, isolated environments for each remote within a tab.

To reset a remote to its initial login state use the /reset command. This can be useful after updating your .bashrc, .zshrc or similar.