Helm108 is a real SSH terminal for iPhone and iPad built around one idea: bring your environment with you, and never leave a mess on someone else's box.
Three ways the app relates to the remote shell — for three kinds of user
They don't compete. An ops engineer hopping between boxes, a developer on their own gear, and everyone who just wants things to render correctly each get a different one.
A one-tap, idempotent installer writes a managed block into the host's .zshrc — bounded by sentinel markers, backed up first, and safe to re-run or revert. Everything inside the markers is ours; everything outside is untouched.
Carry your plugins and theme to any host without touching its config, and tear it down on disconnect. Most SSH apps hand you a raw PTY and walk away — Helm108 brings your shell with you. How it works is below.
A real terminal emulator (SwiftTerm) with correct rendering, color, and input handling. It's what keeps interactive REPLs, full-screen TUIs, and AI coding agents from looking broken.
Bring your shell with you — without polluting the host
Define a Profile — plugins, theme, tools — once. On connect, Helm108 stages a config bundle and re-execs zsh against it, so the shell reads your config instead of the host's.
# 1. SFTP a staged bundle into a cache dir on the host
~/.cache/aiconsole/<profile-hash>/
# 2. Re-exec zsh with ZDOTDIR pointing at the bundle —
# zsh now reads OUR .zshrc/.zshenv, the host's config is untouched
exec env ZDOTDIR=~/.cache/aiconsole/<hash> zsh -l
# 3. Plugins lazy-install on first use via antidote (a single 50KB file)
# 4. The bundle carries its own cleanup: trap 'rm -rf "$ZDOTDIR"' EXIT
The custom ZDOTDIR is the whole trick: zsh reads the bundle's .zshrc, so the host's real config never changes. Nothing to undo, nothing left behind.
The first connect uploads to ~/.cache (survives reboots). Every connect after checks a content hash and skips the upload — so it's instant.
Ship the plugins pre-cloned (works air-gapped) or a tiny manifest that lazy-installs on first use. Manifest is the default; both are user-selectable.
Locked-down hosts (no zsh, no writable cache) are detected up front, with a graceful fall back to the host's native shell rather than a broken session.
Two clean concepts: where you connect, and what you bring
The destination — host, port, username, credential (in the Keychain), and an optional preferred profile. This is where you're going.
The environment — plugin manager, plugins, theme, tools. This is what you bring with you. Both models read from a Profile; one profile can ride to many hosts.
A tab is a whole live terminal — not a saved tab
Each tab owns its own SSH connection, PTY, and terminal widget. A backgrounded tab keeps draining its shell into its own buffer — so a long-running agent keeps streaming while you work elsewhere.
Run Codex or Claude Code streaming in one tab, open a second tab to the same host, and aws s3 cp something — without killing the first session.
SSH multiplexes many channels over one connection; a same-host second tab is a new channel, effectively instant. A different host is a new connection.
Switching tabs, or a screen-sleep reconnect to the same host, preserves your scrollback — you never lose the conversation you were reading.
A device-local staging area — two-way, between any hosts
Move files and whole folder trees over SFTP: host A → iPad → host B. Or bring in screenshots and files straight from the iPad, then push them to a host.
SFTP runs over the same connection the tab already holds — no separate login, no new transport.
Import from Photos (screenshots) or Files, download from a host, upload to another — the locker is the hub in the middle.
Staged files use iOS Data Protection, tied to your device passcode; also surfaced in the Files app for AirDrop and export.
Multi-line prompts for AI agents — on any keyboard
Shift+Return inserts a newline instead of submitting — the muscle memory Claude Code and Codex assume on the desktop. On a hardware keyboard it's intercepted at the terminal view; for the on-screen keyboard and voice dictation, an explicit newline key does the same. No core interaction is locked behind owning extra hardware.
Your data stays yours
Log in with a password or an Ed25519 key. Keys are generated on-device (private key in the Keychain) and installed on the host in one tap — ssh-copy-id without the copy-paste. A one-tap reset cleans both sides.
SSH passwords and private keys live in the iOS Keychain, the system's encrypted credential store — never in app files.
No accounts, no analytics, no trackers. The only network connections are the SSH sessions you set up, directly to your own servers.
Sessions, profiles, and locker files stay on your device with Data Protection. Read the privacy policy →
Built in phases — each one shippable on its own
The Profile model, local storage, and editor — the entry point both models read from. Plus clone-from-host.
The portable shell: ZDOTDIR plumbing, antidote plugin wiring, and theme application over SFTP.
Persistent host-side cache (shipped); cache-management UI and an air-gapped self-contained bundle to come.
The managed-block installer with backup, idempotent re-run, and one-tap revert.
CloudKit-backed profiles, and export/import a setup as a single shareable file.
In-app tabs, each a live interactive terminal, with buffers that survive backgrounding.
Two-way SFTP locker with Photos/Files/folder import (shipped); an optional security gate and one-tap host-to-host relay to come.
Password or Ed25519 key login. Generate a key on-device and install it on the host with one tap — like ssh-copy-id, no key files to copy by hand — plus a one-tap reset that cleans both sides.