Control your Mac terminal from iPhone
A shell on your Mac, from your phone. There are two ways to get it: the classic SSH route, and one that skips the network setup.
The SSH route
- On the Mac, turn on Remote Login: System Settings → General → Sharing.
- To reach it from outside your network, put both devices on a VPN such as Tailscale — opening port 22 to the internet is not a good idea.
- Install an SSH app on the iPhone and set up a key.
- Run long jobs inside
tmuxso they survive the phone dropping the connection.
It is free, it works with any server, and it is the right choice if a text pipe is all you need. The cost is the setup, and reading everything — diffs, file lists, logs — as raw text on a six-inch screen.
The ShiftStage route
ShiftStage gives the phone a real PTY: your shell, your dotfiles, your tools, several sessions at once that keep running in the background. Around it, the things a terminal shows badly on a phone are drawn natively: files with previews, git as structure, processes with their ports, AI agent sessions with questions as buttons.
Set it up once
- Install the agent on the Mac. A signed, notarised app from our open
Homebrew tap. It shares only the folders you name.
brew install --cask shiftstage/shiftstage/shiftstage-agent - Install the app on the iPhone from the App Store.
- Pair them. Scan the code on the Mac's screen and confirm the same words on both devices. No account. The first pairing needs both on the same network.
That is the whole setup: no VPN, no port forwarding, no SSH keys. On the same Wi-Fi the phone talks to the Mac directly; away from home the connection goes peer to peer, or through a relay that forwards only end-to-end encrypted bytes.
What the Mac controls
Named folders are all the phone can see. Killing processes and sudo start
switched off. Every operation is recorded in a log on the Mac — never contents or output —
and any device can be revoked in one click.
Keep the Mac awake
An agent on a sleeping Mac does nothing, and nothing can reach it — ShiftStage tells you the Mac is asleep instead of timing out. For a Mac that works while you are away, turn off system sleep and let it restart after a power cut:
sudo pmset -a sleep 0 disksleep 0
and enable "Start up automatically after a power failure" in System Settings. The display can still sleep.
Get it
The Mac agent: download page — one Homebrew command or a notarised disk image. The iPhone app: App Store. Free forever for one Mac on your own network, no account; $7.99 a month or $69.99 a year to reach it from anywhere.
More guides: all guides.