Terminal

The Mobile SSH terminal is built for phone and tablet operation. It combines a terminal canvas, an extra key row, multi-session panes, scroll handling, and reconnection behavior.

Terminal basics

Multi-session grid

Mobile SSH can run up to eight SSH sessions at the same time. Each session appears as a pane in the terminal grid. Tap a pane to select it, or use + Add Session to start another connection.

The pane header names where you are. On Android it shows the pane’s real working directory, asked from tmux or reported by the shell over OSC 7 and refreshed while the app is open; on iOS it shows the title the remote sets, falling back to user@host:port.

Closing a pane disconnects that SSH session. Returning to the start screen keeps live sessions available through Active Sessions.

Eternal Terminal (ET)

Each saved server can use one of two transports, chosen with the Transport selector when you add or edit a server:

ET keeps the session alive on the server, so when your phone changes networks or wakes from sleep, Mobile SSH reattaches to the same running shell instead of opening a new one. This makes it a good fit for mobile data, Wi-Fi/cellular hand-offs, and long-running commands.

ET needs an etserver process on the host. If the server does not have one, Mobile SSH can install and start it for you over the existing SSH connection — no manual server setup required. Once ET is available, connect with the Eternal Terminal transport selected.

Extra key row

Both platforms put a row of thirteen terminal keys within reach — the ones that are awkward or missing on a touch keyboard. On Android it is a strip at the bottom of the session (which hides itself when a hardware keyboard is attached); on iOS it rides above the software keyboard.

The two default sets are the same size but not identical:

AndroidiOS
DefaultsESC TAB CTRL arrows HOME PGUP END PGDN ESC TAB CTRL arrows HOME END PGUP PGDN
Differencehas backspace, no Shifthas sticky Shift, no backspace

The row never scrolls. When the keys stop fitting the width they divide the space evenly and wrap to a second row; anything still left over folds into a overflow menu. Nothing is hidden behind a swipe or clipped at the screen edge, and an armed modifier still applies to a key you pick out of the overflow.

CTRL acts as a sticky modifier: tap CTRL, then type C to send Ctrl-C. Shift is stickier on iOS than on Android — on iOS it also uppercases the next character you type on the software keyboard, while on Android it applies only to the bar’s own keys (Shift+Tab, Shift+arrows).

Hold a key like an arrow or PGDN and it repeats.

Keyboard behavior

The terminal uses a native pass-through connection to the on-screen keyboard: each character is sent to the remote shell as you type, with autocorrect and predictive suggestions turned off so the keyboard never rewrites input before it reaches the shell. This keeps Vim, tmux, htop, less, shells with unusual key chords, and remote password prompts predictable — there is no suggestion buffer to disable.

Soft-keyboard voice dictation still works: the dictated text is committed straight to the shell like any other typed input.

Hardware keyboards

External and Bluetooth keyboards drive the terminal directly on both Android and iOS. Beyond ordinary characters, Mobile SSH maps arrow keys, Home/End, PgUp/PgDn, Insert, Delete, Esc, function keys F1F12, Ctrl+key and Alt/Option-as-Meta chords, and Shift+Tab. Modifier keys combine with the extra key row’s sticky modifiers.

Paste

Pasting into a program that requests it (bash, Vim, and other bracketed-paste apps) is wrapped in bracketed-paste markers, so multi-line clipboard content is inserted as text instead of being auto-executed line by line. Only real pastes are wrapped; typed and dictated text is untouched.

Select, copy, share

Long-press inside the terminal to select the word under your finger, then drag the handles to adjust. The selection toolbar offers three actions:

Find in the terminal

Search the whole terminal buffer — scrollback and the visible screen — and jump between matches. Open search from the terminal controls, type a query, and step through hits. This works on both Android and iOS.

Color, italics, and remote clipboard

Shell integration and inline images

Appearance and keys

On both Android and iOS, Settings lets you tailor the terminal:

Reset restores the shipped defaults rather than freezing today’s list, so a later release’s improvements still reach you. Edits apply live to panes that are already open.

Scrolling

Mobile SSH routes scroll gestures based on terminal state:

On Android, a tap inside a mouse-tracking program is delivered as a left click at that cell, so htop, vim, and click-to-focus panes respond to touch. On iOS a tap in the same program raises the keyboard rather than clicking; only wheel scrolling is reported.

If you type while scrolled back, Mobile SSH returns to the live terminal view.

tmux behavior

Mobile SSH observes outgoing tmux attach and new-session commands such as:

tmux attach -t work
tmux a -t work
tmux new -A -s work

When a connection drops while you were in tmux, the app can remember the last tmux session name for that server and attempt to reattach after reconnect. If no explicit session name was observed but the app knows you were in an alternate-screen tmux-like session, it may try a generic tmux attach.

This behavior is best-effort. If the remote tmux session no longer exists, the remote shell remains available.

Tmux manager

Mobile SSH includes a tmux manager so you can browse and control tmux without typing prefix chords. Open it with the Tmux button from a connected session. It lists, in three sections:

From the manager you can:

A 🔔 marks any session whose agent is awaiting input, so you can spot a paused Claude Code or Codex run at a glance and attach to it. This complements the reattach hints above: the reattach logic restores your last session automatically on reconnect, while the manager gives you full manual control.

Both platforms can also manage more than one tmux server (socket) on the same host, and sort sessions by name or creation date.

Herdr and Zellij (Android)

Android ships the same idea for two other multiplexers. Each gets its own toolbar icon, and an icon only appears once the app has actually found that program on the server — so the toolbar tells you what is installed there without you running which.

If herdr or Zellij is installed but not on the login shell’s PATH, the page offers to add it.

Each saved server has an Attach on connect setting: Auto (detect), Nothing, tmux, herdr, or Zellij. Auto picks whichever one you last used on that server, then whichever has live sessions, then whichever is installed — and attaches to nothing rather than guessing when it has not probed the server yet.

The iOS app is tmux-only today.

Agent alerts

Mobile SSH tells you when a remote AI coding agent — Claude Code, Codex, Gemini — is blocked waiting on you. It does not guess by reading your terminal output. There are two paths, and they work at different levels of detail.

The bell

Out of the box, a terminal bell from a session you are not watching raises an alert, as do the desktop-notification escape sequences (OSC 9, OSC 777) that many tools already emit. Bells that arrive immediately after you typed are ignored, so ordinary shell completion noise does not page you.

This needs no setup, but the app only knows that something rang.

The agent hook

For the app to know which agent is waiting and what it is doing, install the agent hook on the server:

This writes a small shell script to ~/.mobile-ssh/agent-hook.sh on that server. It is agent-agnostic — it takes command-line arguments rather than parsing any one vendor’s format — so anything that can run a command can report through it. Deleting the file is a clean uninstall.

Once an agent reports through the hook:

Answering without typing

When an agent asks a question with a fixed set of answers, the app shows a button per option — up to six — in the Agents list. On Android you can also tap the agent chip in a pane header.

Your answer does not get typed into the session. It is written to a file over a separate channel and picked up by the hook, so replying cannot corrupt whatever is on screen. The app refuses to send an option the prompt did not actually offer, and tells you plainly if the connection has since dropped rather than failing quietly.

Settings

Alerts are on by default on both platforms, with individual switches for the notification, sound, vibration, and whether the session you are currently viewing should alert too.

One default is worth knowing: sound is limited to headphones. With nothing plugged in or paired, an alert notifies and vibrates but plays no tone. Turn that off if you want the alert audible on the phone speaker.

There is no sensitivity setting and no sound picker — the controls are on/off.

Full-screen terminal programs

For programs such as Vim, less, htop, ncurses tools, and tmux panes: