I run Claude Code every day. I also spend a lot of time away from my Mac. Those two facts are in constant tension, and this is the post about how I tried to solve it.
After about a year of fighting with iOS terminal apps that all let me down in different ways — broken on flaky networks, hostile to tmux on a touchscreen, no way to know when my AI agent was waiting on me — I gave up and built my own. It's called MT — Mosh Terminal, it's $14.99 once and you own it forever, and this is the long-form Show DEV post about what's actually inside it.
I'll cover the four things I did from scratch (Mosh, tmux on touch, push notifications via Claude Code Hooks, GPU rendering), the honest tradeoffs (what MT does not do), how it stacks up against Termius / Blink / Prompt 3, and the pricing decision that's going to either delight you or annoy you.
What MT is, in one paragraph
MT — Mosh Terminal is a SSH and Mosh terminal client for iPhone and iPad, built specifically for developers who live with AI coding agents. It connects to your own servers — your home Mac, a cloud VM, a Raspberry Pi, anything you SSH into today — and gives you a terminal experience that's actually usable on a phone. The headline features are a from-scratch Mosh implementation in Rust, one-tap tmux operations that don't require touching the prefix key, system-level push notifications via Claude Code's Hooks API, and a Metal-rendered terminal engine based on libghostty. It costs $14.99 once, no subscription.
Specs
| Item | Spec |
|---|---|
| Name | MT — Mosh Terminal |
| Devices | iPhone, iPad, iPad mini |
| Price | $14.99 one-time (no subscription) |
| Protocols | SSH, Mosh (custom Rust implementation) |
| Terminal engine | libghostty (Metal GPU rendering) |
| CJK input | Full Japanese / Chinese / Korean IME with inline composition |
| Concurrent tabs | Unlimited (limited by device memory) |
| tmux integration | 15+ one-tap actions, multi-session |
| External keyboard | Magic Keyboard, JIS, Bluetooth, ⌘ shortcuts |
| Themes | 8 built-in (Tokyo Night, Dracula, Catppuccin, Gruvbox, Solarized, etc.) + custom |
| Scrollback | Up to 100,000 lines |
| Auth | Password, public key (RSA, Ed25519), SSH agent |
| OS | iOS 18+ |
The Mosh implementation
The thing I want to talk about first is also the one that took the longest to build. Let me back up.
Mosh (Mobile Shell) is the answer to "SSH dies the moment you switch from Wi-Fi to LTE." A normal SSH session is a phone call: when the line drops, the call ends, and you redial. Mosh is closer to a series of letters: even if some of them get lost in transit, the next one tells you the latest state of the world. It's a UDP-based, state-synchronization protocol designed for terminals on flaky mobile networks. If you've ever had a terminal session survive a subway tunnel or a Wi-Fi-to-cellular handoff without missing a beat, that was Mosh.
Almost every "iOS terminal with Mosh support" is wrapping the existing mosh-client binary. MT doesn't. I wrote the protocol from scratch in Rust. It implements the State Synchronization Protocol (SSP) from the Mosh paper, stays compatible with the standard mosh-server, and uses AES-128-OCB3 for encryption.
Why bother? Because the feel of Mosh on mobile — how aggressively the client retries, how quickly it gives up and reconnects, how it adapts scroll speed to the current round-trip time, what it does when the network is "almost back" — is invisible to most users and totally unfixable when you're a thin wrapper around an opaque binary. I wanted control over every one of those decisions, because the difference between "session survived the subway" and "session died at the platform" is exactly there.
I tested it on the actual Tokyo subway, in cafés with garbage Wi-Fi, on Wi-Fi-to-LTE handoffs, in elevators, in basements. SSH dies. Mosh hangs on. It's not magic — if you have zero signal for long enough you do eventually lose it — but the recovery is dramatically better than anything else I've used on iOS.
One-tap tmux
If you've ever used tmux on a touchscreen, you already know the problem.
tmux is built around a "prefix key" model: press Ctrl+B, release, then press another key for the actual command. On a hardware keyboard this is fine. On a soft keyboard it's misery. Hunting for Ctrl, then B, then n, every time you want to switch windows is the kind of friction that makes you stop using mobile terminals altogether.
MT defines 15 tmux operations as one-tap actions in a bottom action bar: detach, new window, vertical split, horizontal split, switch pane, zoom, copy mode, list sessions, kill window, and so on. No prefix key juggling. The action bar is reorderable and you can hide actions you don't use. (New to tmux? I wrote a tmux primer for mobile devs that covers the basics first.)
Two details that fell out of building this:
- No accidental tmux fires while typing CJK. If you've used a Japanese, Chinese, or Korean IME inside any other iOS terminal, you've hit the bug where pressing keys mid-composition fires off random tmux commands. MT tracks IME composition state and holds tmux input until composition is committed.
-
Server tmux config is auto-imported. If your
~/.tmux.confdefines a custom prefix or key bindings, MT reads them on connect and adapts the action bar so the labels match what you actually have on the server. You can opt out in settings.
You can also run multiple tmux sessions side by side with horizontal swipe to switch. On iPhone where screen real estate is tight, this is the workflow I use most: one session per task, swipe to switch, no memorization of pane layouts.
Push notifications via Claude Code Hooks
This is the feature MT was named after, in spirit. The whole reason I built it.
The pain: I'd ask Claude Code to do something big, walk away, come back twenty minutes later to find the agent had been waiting on a one-key approval the whole time. That's twenty minutes of nothing happening because I had no way to know.
The fix: system-level push notifications wired into Claude Code's Hooks API. You paste two hook entries into your ~/.claude/settings.json, you're done. When Claude Code (or Codex) needs input — task completion, permission request, anything — your iPhone buzzes. Tap the notification → MT auto-resumes the exact tmux session over Mosh. Host, user, and session name are matched automatically. Apple Watch is supported too, because half the time my phone is in another room.
There's no proprietary daemon and no vendor lock-in. The push relay is self-hostable if you don't want to use the default one. The whole hook setup is two YAML entries you can read and audit.
This is the closest thing to "Claude Code in your pocket" that I know how to build, and it's the feature I use most.
iPad: keyboard-first
iPad with an external keyboard is, unironically, my favorite Claude Code workstation right now. I have a MacBook. I still reach for the iPad first when the work is "talk to the agent."
What MT does on iPad:
- Stage Manager support — multi-window, resize, tile.
-
External keyboard, mouse, trackpad — full ⌘ shortcuts.
-
⌘1–⌘9: switch tab -
⌘N: new connection -
⌘W: close -
⌘D: split pane -
⌘+/⌘-: font size -
⌘K: clear terminal
-
-
Hold
⌘to surface a shortcut overlay (the macOS convention; nice that iPadOS exposes it). - Binary-tree pane splits with no hard limit — split as many times as you want, zoom in on one pane, drag tabs between windows.
-
JIS keyboard auto-detection with
¥→\conversion for the Japanese-keyboard crowd. (If you're not on a JIS layout this doesn't affect you.)
The result, with a Magic Keyboard or a split ergo board, is a terminal experience that genuinely doesn't feel like a compromise. I've done full debug sessions on a 13" iPad Pro and forgotten I wasn't on a Mac. My daily setup is actually the iPad mini — I wrote about the 300-gram AI coding rig separately.
iPhone: the L1 soft key bar
"iPhone for terminal work? The screen is too small."
I thought so too. Then I built it and discovered it's totally usable, with two tricks.
The L1 soft key bar. Always-on at the bottom of the screen: ESC, TAB, sticky Ctrl, arrow keys, F1–F12, Page Up/Down. The Ctrl key is sticky — tap it, then the next key — so one-handed operation is genuinely possible. This is the feature that turns "I can technically run a terminal on iPhone" into "I can actually do work on iPhone."
Horizontal swipe between sessions. I commute with five tmux sessions running, one per Claude Code task, and switching between them is one swipe. The combination of swipe-to-switch and the L1 bar means you can run a real multi-agent workflow on a 6-inch screen, which I would not have believed before I built it.
libghostty + Metal
The terminal engine is libghostty, the library form of the popular desktop terminal Ghostty. Metal GPU rendering, 60 fps everywhere, 120 fps on ProMotion iPads, smooth scroll, no tearing.
Getting libghostty (which was designed for macOS) to run cleanly on iOS / iPadOS was not a one-line port. There's a non-trivial amount of glue code in MT for the iOS-specific bits — view lifecycle, background-to-foreground redraws, touch and pointer event routing — that I won't get into here. The user-visible result is that I can have a dozen tabs open and the app stays smooth.
Themes ship with the usual suspects (Tokyo Night, Dracula, Catppuccin Mocha, Gruvbox Dark, One Dark, Solarized Dark/Light, default). Fonts include Menlo, Courier New, JetBrains Mono, and you can import your own .ttf / .otf files. Pinch-to-zoom on the terminal text is a real-time font-size change, which is very satisfying after years of "Settings → Display → Font Size → Apply → Restart."
Other things in the box
- iCloud Sync — Connection profiles, tmux settings, and terminal settings sync across devices. Per-category toggles. Passwords and SSH keys are gated behind a separate iCloud Keychain toggle and are E2E encrypted. All sync is off by default, because that's the safe default.
- Security — SSH keys live in iOS Keychain protected by Secure Enclave. Face ID / Touch ID gating for keys. Host key verification (TOFU) with fingerprint display. No analytics, no tracking, no ads, no third-party SDKs of any kind.
- Localization — English, Japanese, Korean, Simplified Chinese, Traditional Chinese. Full UI translations for each, including the tmux action bar labels.
Honest tradeoffs
I would lose your trust if I didn't write this section.
MT does not do:
- SFTP file transfer. If you need to move files in and out of remote machines as a primary use case, MT isn't your tool yet. Termius and Prompt 3 are better at this.
- Port forwarding. Same story. MT is laser-focused on the terminal experience, not the SSH-as-network-tool experience.
- Always-on cloud sessions. MT is a client. It connects to servers you set up. It is not a VPN, not a proxy, not a tunnel — those are explicit non-goals because they're a different category of app and Apple reviews them as such (more on that in a separate post).
- Push notifications might be Pro-only later. Maintaining the push relay infrastructure costs money, and it's the one thing that doesn't fit cleanly into a one-time-purchase model. As of v1.2.1 they're free. If they ever move to MT Pro, existing users at least get a heads-up.
-
Mosh requires
mosh-serveron the remote machine. This is a Mosh-protocol limitation, not an MT one. SSH connections need no server-side install; Mosh does. Ifmosh-serverisn't installed or UDP is blocked, MT auto-falls-back to SSH.
If those tradeoffs are dealbreakers, the table below should help you pick something else.
How MT compares to Termius / Blink Shell / Prompt 3
| MT | Termius | Blink Shell | Prompt 3 | |
|---|---|---|---|---|
| Price | $14.99 one-time | $10/month and up | $19.99/year | $20/year or $100 one-time |
| Mosh | ✅ Custom Rust impl | ✅ | ✅ | ✅ |
| tmux integration | 15 one-tap actions | Limited | Limited | Good |
| Pane splits | Unlimited | Yes | Yes | Yes |
| GPU rendering | ✅ Metal | ❌ | ❌ | Partial |
| Push notifications | ✅ via Claude Code Hooks | ❌ | ❌ | ❌ |
| SFTP | ❌ | ✅ | ✅ | ✅ |
| Port forwarding | ❌ | ✅ | ✅ | ✅ |
I'm not going to claim MT is "better than" any of those apps in a vacuum — they all have years of head start and feature surface I don't match. What MT has that none of them have is the specific intersection I built it for: from-scratch Mosh + one-time pricing + one-tap mobile tmux + Claude Code Hooks notifications. If that intersection is what you need, MT is currently the only option. If you need a Swiss-army-knife SSH tool, one of the others is probably a better fit.
Why one-time pricing
Quick personal note.
I do not enjoy paying subscriptions for tools that are fundamentally simple infrastructure. A terminal client is plumbing. Plumbing should not have a monthly fee. So I shipped MT as a one-time $14.99 purchase and gritted my teeth about everything that decision makes harder (notification servers, future updates, my own runway).
$14.99 is more than a single month of Termius. It is dramatically less than a year. You break even at month two and own it forever. That's the deal I wanted as a customer, so that's the deal I built.
There will eventually be an MT Pro tier for things that genuinely cost ongoing money to operate. Everything in this post — Mosh, tmux, Claude Code notifications, the iPad/iPhone experience — is in the base app. I'm not playing the "feature gating" game.
Who this app is for
- You run Claude Code, Codex, or another AI coding agent on a remote machine and you want to be able to talk to it from your phone or iPad without losing your mind. (No remote machine yet? Tailscale turns your home Mac into one in about ten minutes.)
- You commute, travel, or work from places that aren't your main desk.
- You don't want another monthly subscription for the small set of dev tools you use every day.
- You use tmux and want it to not be hostile on touch.
- You care about your terminal feeling fast at any tab count.
If that's you, MT — Mosh Terminal is on the App Store now for $14.99.
If it's not you, no hard feelings — Termius and Prompt 3 are excellent for the use cases MT doesn't cover, and I've used both.
What's next
I'm shipping MT updates monthly and watching what users actually ask for. The current short list:
- Better SFTP-style file ops (I know, I know — see "Honest tradeoffs" above; a minimal version is coming)
- More hook integrations beyond Claude Code (Codex CLI is already in, more agent CLIs being added)
- Per-host theme overrides so prod and dev look different
- Android version — not soon, but on the long-term roadmap
If you try MT, the thing that helps me most right now is honest feedback. I read every review, every X reply, and every email. Tell me what's missing and I'll prioritize.
→ MT — Mosh Terminal on the App Store — $14.99 one-time, no subscription. Requires iOS 18 or later.
I'm a solo iOS developer. I write about gadgets and dev tools at jaga-farm.com. MT — Mosh Terminal is my first App Store release. Find me on X at @jaga_farm. If you want the personal-essay version of why I built this, I wrote one — link will go here once that post is up.



Top comments (0)