SSH Remote Development

Add an SSH-backed project to a VibeSpace to browse and edit files and run terminals on a remote server.

Prerequisites

  • An SSH key pair configured for the remote host (key-based authentication only)
  • A profile for the remote host in your SSH config or Settings > Connections

🚨 Warning: Password authentication is not supported. You must use key-based authentication.

Setting up a remote project

  1. Open Settings > Connections.
  2. Click + to add an SSH profile, or click Import from SSH Config to import hosts from ~/.ssh/config.
  3. Create or open a VibeSpace.
  4. Add a remote project by selecting your SSH profile and specifying the remote path.

File browsing

Remote directories appear in the Files sidebar like local projects. CrispyVibe uses SFTP to list and transfer files. You can create, rename, and delete remote items, or use the refresh control on a remote project root to reload its listing.

Remote item names can’t contain / and can’t be . or ... If a rename fails, the rename field stays open with your proposed name so you can correct it and try again.

Enhanced remote file explorer (Beta)

CrispyVibe offers Enhanced remote file explorer (Beta) as an opt-in, per-device setting and leaves it off by default. It monitors the project root and expanded directories so changes can refresh only the affected folder, including same-name files whose metadata changes.

To enable it:

  1. Open Settings > Connections.
  2. Turn on Enhanced remote file explorer (Beta).
  3. Reopen your remote projects.

With enhanced mode enabled, create, rename, and delete actions update their affected directories without requiring you to collapse and expand the parent folder. CrispyVibe can also open inline rename immediately after you create a nested item.

⚠️ Note: Enhanced mode uses best-effort polling. You can still use the explicit refresh control, and a setting change does not affect remote projects until you reopen them. Remote drag-and-drop moves are not supported.

Editing remote files

Open any remote text file in the content viewer. CrispyVibe saves your edits to the remote server over SFTP.

CrispyVibe opens remote images and PDFs in their standard preview modes.

Remote terminals

Launch a terminal on the remote host from Terminal Board or the command palette. CrispyVibe connects remote terminals through SSH.

tmux persistence

If tmux is available on the remote host, CrispyVibe can persist terminal sessions across disconnects. When you reconnect to the host, CrispyVibe reattaches to the existing tmux sessions.

Agent CLI on remote hosts

The crispy CLI works in remote terminals, including for AI agents on the remote host. CrispyVibe relays the CLI over your SSH connection without installing it on the remote machine. CrispyVibe enables this per-connection option by default. See Remote Agent CLI for setup and details.

Port forwarding

Access forwarded ports through the remote status popover in the status bar. Add or remove port forwards while connected.

Connection management

Connection states

StateMeaning
ConnectedActive SSH connection
ConnectingHandshake in progress
DisconnectedNo active connection
FailedConnection attempt failed

Reconnect or disconnect

Use the remote status popover to manually reconnect or disconnect from a remote host.

Host key validation

On first connection to a new host, CrispyVibe prompts you to verify the host key fingerprint. Subsequent connections validate against the stored key.

VibeSpace restore

When you reopen a VibeSpace that contains remote projects, CrispyVibe reconnects to the remote hosts and restores your previous state.

Managing SSH profiles

Open Settings > Connections to:

  • Add new SSH profiles
  • Edit existing profiles
  • Remove profiles
  • Import hosts from ~/.ssh/config

Known limitations

  • Only key-based authentication is supported; password and keyboard-interactive authentication are unavailable.
  • Remote drag-and-drop moves are unavailable; create, rename, and delete are supported.
  • Enhanced explorer refresh is polling-based and best effort. Use the explicit refresh control if a remote change does not appear.