Skip to content

Remove TMUX based SSH warpification flow#12478

Merged
kevinyang372 merged 2 commits into
masterfrom
kevin/remove-tmux-based-ssh-flow
Jun 12, 2026
Merged

Remove TMUX based SSH warpification flow#12478
kevinyang372 merged 2 commits into
masterfrom
kevin/remove-tmux-based-ssh-flow

Conversation

@kevinyang372

@kevinyang372 kevinyang372 commented Jun 10, 2026

Copy link
Copy Markdown
Member

Description

Fully removes the legacy tmux-based SSH warpification flow in favor of the remote-server SSH extension, and adds a one-time deprecation banner for users who had opted into the tmux wrapper (~6.3k lines removed).

What's removed

The tmux SSH flow and all of its plumbing :

  • The SSHTmuxWrapper feature flag, the ssh_tmux_wrapper cargo feature, and the TmuxSshWarpification* server experiments.
  • The bundled tmux SSH scripts (app/assets/bundled/ssh/**: warpify_ssh_session*.sh, install_tmux_and_warpify_*.sh).
  • Tmux control mode in the terminal model and ANSI parser: TmuxControlMode, TmuxPerformer, TmuxPaneWriter, the tmux branch of the PTY parse loop, and the tmux Handler/HandlerEvent surface area.
  • TmuxCommandExecutor and the tmux branch of the session command executor.
  • The SSH-tmux view layer: SshInstallTmuxBlock, SshWarpifyBlock, SshErrorBlock, the WarpifySSHSession action/keybinding, and the SSH variants of the warpify banner/footer (WarpificationMode is gone; the banner/footer are subshell-only now).
  • The use_ssh_tmux_wrapper setting's UI (Warpify page toggle + Command Palette entries) and all SshTmux*/SshInstallTmux* telemetry events.
  • Related dead code surfaced by the removal: the never-shown legacy "Warp SSH wrapper enabled/disabled" inline banner, the deprecated Features-page "Warp SSH Wrapper" toggle (the Warpify page is now the single SSH settings surface), the unused InitSsh event plumbing (the DCS hook is still parsed and ignored for shells in the wild), and the tmux-install UI helpers in requested_action.rs/requested_script.rs.
  • The tmux SSH integration tests.

The setting definition for use_ssh_tmux_wrapper is retained (marked deprecated) only so the migration below can read it; it can be deleted in a future release.

What's added

One-time deprecation banner. On startup, a migration checks whether the user had explicitly opted into the tmux wrapper. If so, it force-disables the setting (synced via cloud preferences) and sets a pending-notice flag. On the user's next SSH session, an inline banner explains that tmux SSH warpification has been turned off in favor of the SSH extension, with a Learn more link. It's shown at most once, triggered either when the SSH session successfully warpifies (WarpifiedRemote bootstrap) or, for sessions that stay unwarpified, when end-of-SSH-login detection fires.

Linked Issue

N/A — planned deprecation; see the implementation plan linked below.

  • The linked issue is labeled ready-to-spec or ready-to-implement.
  • Where appropriate, screenshots or a short video of the implementation are included below (especially for user-visible or UI changes).

Testing

  • I have manually tested my changes locally with ./script/run

Manual testing:

  • Set use_ssh_tmux_wrapper = true in settings.toml, relaunched: migration reset it and set the pending flag; SSHing showed the deprecation banner once (under the warpify success block); subsequent SSH sessions and restarts did not show it again.
  • Verified SSH warpification via the remote-server extension still works end to end, subshell warpify banner/footer still work (ctrl-i), and plain tmux still works as a regular TUI locally and over SSH.
  • Heavy-output and alt-screen/synchronized-output programs (htop, nvim) render correctly after the PTY parse-loop change.

Automated:

  • cargo check, ./script/format, and the presubmit clippy command pass clean.
  • Relevant unit tests pass (cargo nextest run -p warp -E 'test(ansi) or test(warpify) or test(ssh) or test(settings)').
  • Removed the now-obsolete tmux SSH integration tests; legacy SSH and remote-server integration tests are unchanged.

Screenshots / Videos

https://www.loom.com/share/8d215312c5f34ab0b3d4313bb3a2fd69

Agent Mode

  • Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Implementation plan | Conversation

CHANGELOG-IMPROVEMENT: The experimental tmux-based SSH warpification flow has been removed in favor of Warp's SSH extension. Users who had opted into the tmux wrapper see a one-time notice on their next SSH session.

Co-Authored-By: Oz oz-agent@warp.dev

@cla-bot cla-bot Bot added the cla-signed label Jun 10, 2026

Copy link
Copy Markdown
Member Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@oz-for-oss

oz-for-oss Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

@kevinyang372

I ran into an unexpected error while working on this.

Powered by Oz

@kevinyang372 kevinyang372 requested a review from MaggieShan June 10, 2026 22:56

@MaggieShan MaggieShan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WOOO!! 🎉🎉🎉

general nit: now that this is deprecated there are still parts in the codebase from comments/skills that still refer to it - would be great to remove those too

Comment thread app/src/settings_view/features_page.rs
Comment thread app/src/terminal/event.rs Outdated
Comment thread app/src/terminal/model/ansi/dcs_hooks.rs Outdated
Comment thread app/src/terminal/event.rs
Comment thread app/src/terminal/view/ssh_tmux_deprecation_banner.rs Outdated
@kevinyang372 kevinyang372 force-pushed the kevin/remove-tmux-based-ssh-flow branch from 5424e1c to a3f5214 Compare June 12, 2026 15:37
@kevinyang372 kevinyang372 enabled auto-merge (squash) June 12, 2026 15:37
@kevinyang372 kevinyang372 merged commit 57062bd into master Jun 12, 2026
26 checks passed
@kevinyang372 kevinyang372 deleted the kevin/remove-tmux-based-ssh-flow branch June 12, 2026 15:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants