A spatial SSH terminal for remote tmux — visionOS first, with iPadOS and iPhone alongside. Its deck is a fleet-wide monitor wall: hosts probe concurrently, sessions appear as live capture-pane tiles, and each attach opens in its own window. herdr is also available per host.
App Store · multiplexterm.dev · Design rationale · Contributing · Contributor guide
- Fleet-wide deck: live tmux and herdr sessions across every host, with password, OpenSSH-key, or
mpx bindsetup and iCloud Keychain sync. - Real terminal windows: spatial scenes on visionOS, Stage Manager on iPad, and an adaptive iPhone shell. Tabs can move or merge without reconnecting.
- Agent awareness: detects Claude Code, Codex, Pi, Grok Build, Antigravity CLI, and Hermes; surfaces questions, permissions, and completed turns on the wall and through notifications.
- Purpose-built input: keyboard-focus arbitration, key rail with hold-CTRL Key Commands (saved chords and text macros) and a drag-to-arrange key order, IME, dictation, remote scrolling, tmux Copy Mode, and text selection.
- More than a shell: confirmed web links and remote paths open in a floating side panel beside the live terminal on iPad and Vision Pro (or move into a tab), alongside SFTP uploads, optional clean-room mosh, widgets, Shortcuts, deep links, and custom themes.
Some features require Multiplex Pro; see docs/store-metadata.md. This repository contains the complete app.
| Vision Pro | iPad |
|---|---|
multiplex-visionpro-demo.mp4 |
multiplex-ipad-demo.mp4 |
Vision Pro: Run Claude Code in herdr, open the File Viewer and inline browser (using serve-sim), then send a "create PR" message by pressing an Agent Bar key.
iPad: Run Claude Code in tmux, use tmux shortcuts to split and resize panes, see diff in the File Viewer, then send a "commit in current branch" message by pressing an Agent Bar key.
| Bind | Deck | Terminal | Shortcuts |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Bind a host with mpx-cli or manually. Host settings sync to all your devices through iCloud Keychain.
Deck: See every tmux and herdr session.
Terminal: Use the Agent Bar with supported CLI agents. Long-press CTRL to access commands. Tap the chat button to open the composer.
Shortcuts: Set up Multiplex shortcuts to quickly open a session or agent from a widget or the Action Button.
Requires Xcode with the visionOS SDK and XcodeGen. Install the command-line prerequisites with Homebrew:
brew install xcodegen swiftlintThe Xcode project is generated, so edit project.yml, not the .xcodeproj. Regenerate it after project configuration changes:
xcodegen generate
xcodebuild -project Multiplex.xcodeproj -scheme Multiplex \
-destination 'platform=visionOS Simulator,name=Apple Vision Pro' \
-derivedDataPath DerivedData buildUse the MultiplexTests scheme for unit tests and ./Tools/build.sh lint for linting. Keep -derivedDataPath DerivedData, and do not build visionOS and iOS against it concurrently. Minimum visionOS 1.0 / iOS 17. See AGENTS.md for the contributor workflow and architecture.
The local harness runs a user-mode sshd on 127.0.0.1:2222 without touching ~/.ssh:
./Tools/dev-sshd/harness.sh start # keys + sshd + writes state/seed.json
./Tools/dev-sshd/harness.sh demo # tmux sessions: main, scratch, deploy, agent
./Tools/dev-sshd/harness.sh herdr # herdr sessions with deterministic states
./Tools/dev-sshd/harness.sh stopPoint MULTIPLEX_SEED_HOST at Tools/dev-sshd/state/seed.json to seed a DEBUG build. See docs/agents/e2e-headless.md for the full headless workflow.
mpx is the companion CLI for binding a machine. Run mpx bind on the remote host and it appears on the deck with the app's SSH key enrolled and the host key fingerprints pinned from the first connection — nothing typed. The offer reaches the app by QR, local-network announcement with a PIN, or --copy to the clipboard; the default handshake never moves a private key.
Install and usage: multiplex-term/mpx-cli.
| Library | Version | Role |
|---|---|---|
| SwiftTerm | 1.18.0, vendored | Terminal emulator |
| Citadel | 0.12.0, exact | SSH, exec, SFTP, and key parsing |
| swift-nio-ssh | 0.3.5, vendored | SSH transport dependency |
Citadel 0.12.0 is pinned because 0.12.1 changed its swift-nio-ssh source to an unaudited fork. The mosh client is a clean-room implementation. The complete audited inventory and license texts live in Multiplex/Models/LicenseCatalog.swift.
- Built largely with GPT 5.6 Sol and Claude Fable / Opus.
- Design guidance: Leonxlnx/taste-skill and emilkowalski/skills.
- SwiftTerm and Citadel: the terminal emulator and SSH stack this app stands on (see Third-party code).




