ShiftStage

iPhone · iPad · Apple Watch · an agent on your Mac

Read the diff. Answer the agent. Push. From your phone.

ShiftStage is an iPhone app that drives your own Mac: its terminal, git, files, processes and the AI coding agents running on it. A small agent on the Mac serves them, end to end encrypted — no SSH server to open, no port to forward.

Free forever for one Mac on your own network, no account. $6.99 a month to reach it from anywhere.

Not in the App Store yet — the app and the agent ship together, once the agent is notarised.

Three iPhones and an Apple Watch: a diff with the lines picked for a commit, an agent asking to run the tests, the terminal after a push, and the same question on the watch

Works with the agents already on your Mac

  • Claude Code
  • Codex CLI
  • Gemini CLI
  • Cursor Agent
  • Amp
  • opencode
  • Crush
  • Goose
  • Aider
  • Qwen Code
  • Factory Droid

Found on your PATH without configuration. Anything else runs in the terminal as it is.

The Mac's own services, not a picture of its screen

Every screen below is the app itself, on a sample project.

AI sessions

The agent stops to ask. You answer from wherever you are.

Hand Claude Code or Codex a job, lock the phone and leave. When it needs a human, the question arrives with the command and its risk named — and the options become buttons, on the phone or on your wrist.

  • A chat view for Claude Code, Codex, Gemini CLI, Qwen Code and opencode: replies, tool calls and file edits as a conversation, read from the tool's own record. The raw terminal is one tap away.
  • The session lives on the Mac. Close the app or lose signal — it keeps working.
  • A session you started by hand in your own terminal shows up too.
  • Your keys, your subscriptions. No model runs on our side, and the conversation never reaches us.
An iPhone in chat view: Claude Code shows a diff it wrote and asks to run swift test, with the options Yes, Yes and don't ask again, and No. Beside it an Apple Watch shows the same command marked medium risk, allowed by turning the crown.

Git

A diff you can actually review on six inches.

Git as structure, not scraped text: syntax colour, changed fragments marked inside the line, added and removed counted per file. Twelve files changed and four deserve to land — stage those, commit, push.

  • Stage single lines, whole hunks, files, a multi-selection or a folder subtree.
  • Search inside the diff, with a match counter.
  • Fetch, pull with rebase or merge, push. Remote credentials stay on the Mac.
  • Merge conflicts arrive with all three sides; resolve per file or per block.
An iPhone showing the diff of SyncEngine.swift: two removed lines and eight added ones selected, and a Stage button for the ten selected lines.

Terminal

A real PTY with your shell, your dotfiles, your tools.

Not an emulator talking to a server somewhere: your login shell on your Mac, with ANSI colour and full-screen programs intact. Several sessions at once, and they survive the app going to the background.

  • Ctrl, Esc, arrows and Tab on a row above the keyboard; snippets on one tap.
  • What you type appears at once instead of waiting for the echo.
  • sudo gets a hidden field, filled by Face ID — if you switched that on on the Mac.
An iPhone terminal on the orbit project: 48 tests passed, a commit and a push to main, with a row of Esc, arrow and Tab keys above the keyboard.

Files

The file is on the Mac. The Mac is not with you.

Browse every workspace the Mac shares. Code opens highlighted, markdown rendered, images and PDFs previewed — streamed, not downloaded first.

  • Edit and save in place, with a warning if the file changed on disk.
  • Send it out through the share sheet; bring a photo from the gallery into the project folder.
  • Search names and contents across all workspaces; results stream in as they are found.
  • What you chose to keep opens later with the Mac asleep.
An iPhone showing SyncEngine.swift with syntax highlighting and line numbers, with search, reading mode and Save in the toolbar.

And the rest of the machine

  • Commit history drawn as a branch graph, with HEAD, main, origin/main, a feature branch and a v2.4.0 tag.

    History

    Any branch as a list or a graph with its tags. Filter by author, file or message; revert, cherry-pick, branch or reset from a commit.

  • A list of services on the Mac: dev server, API, Postgres and Redis running, a queue worker crashed, two stopped.

    Processes

    What runs, what it costs, which ports it holds. Keep your dev servers under watch and hear about it when one dies.

  • Run number 218 on the phone: deploy to production waits for a decision, with Approve and Reject buttons and the build job succeeded.

    CI/CD

    GitHub Actions, GitLab, Jenkins and TeamCity. Rerun failed jobs, approve a waiting deploy, read a log folded into steps. Needs no Mac at all.

  • Two Apple Watch screens: the Mac connected with Claude Code waiting for approval and Codex waiting for an answer, and a medium-risk command allowed by turning the crown.

    Apple Watch

    Its own key, straight to the Mac. Low risk is a tap, medium a turn of the crown, high only on the phone.

Also: push notifications that name the build or the session, Live Activities for long builds, transfers and agent sessions, a widget with the Mac's state, and an access log that stays on the Mac.

Set up once, on your own network

  1. Install the agent

    A signed, notarised Mac app from this site. It shares only the folders you name.

  2. Pair the phone

    Scan the code the agent shows and confirm the same words on both screens. No account.

  3. Leave the desk

    On the same Wi-Fi they talk directly. Away, they connect peer to peer — and through a relay that sees only ciphertext when networks refuse.

Why not the tools you already have

They are good tools. They solve a different problem.

Question ShiftStage SSH appsTermius, Blink Shell, Moshi Claude Code Remote Control Remote desktopScreens, Jump Desktop
What the phone gets Native screens for terminal, git, files, processes, CI/CD and agent sessions A terminal; Moshi adds agent views through its own hook The conversation of one Claude Code session A video of a screen built for a mouse
Coding agents Eleven found on your PATH; questions become buttons Any, as terminal text Claude Code only Whatever is on the screen
On the Mac The agent; pairing on your own network Remote Login switched on, keys set up claude remote-control, signed in to claude.ai Screen Sharing or the vendor's host app
Away from home Built in: direct first, encrypted relay as fallback Yours to arrange: a VPN such as Tailscale, or port forwarding Through Anthropic's API Built in through the vendor's service
Stored on someone's server Nothing. The relay forwards bytes it cannot read Nothing, over your own path The session transcript, while connected Depends on the vendor

From each product's own documentation, September 2026: Remote Control, Moshi and Tailscale, Screens Connect, Jump Desktop Connect. Spotted something out of date? Tell us.

Your code stays between your devices

We do not store your files, your commands or your session output. Not as a policy — they never leave the pair of devices in a form anyone else can read.

Three paths between the phone and the Mac iPhone Mac same network, no server at all direct across the internet relay
Three paths, tried in that order. The relay only carries bytes it cannot read.
  • TLS 1.3 over QUIC, both ways. Phone and Mac authenticate each other by device keys held in the Secure Enclave. Our nodes know two fingerprints are talking, not what they say.
  • Pairing needs the Mac in front of you. A code on its screen, the same words on both devices, and a list on the Mac where any device is revoked in one click.
  • The Mac decides. Named folders are all the phone can see. Ending processes and sudo from the phone start switched off, and the relay can be forbidden per Mac.
  • A log you keep. Every operation a device asked for is recorded on the Mac, never file contents or output — and the protocol has no command to read it out.
  • Your own node, if you like. The rendezvous and relay server is open to self-host, so nobody — us included — sees who connected to whom. How
  • No trackers here either. This site runs no scripts, sets no cookies and loads nothing from other domains.

One price. Features are not rationed.

The subscription does not unlock features. It opens distance and scale.

At home

Free

forever, no account

  • One Mac on your own network
  • Every service: terminal, git, files, processes, AI sessions, CI/CD, Watch
  • Not a single request to our servers
Download

Anywhere

$6.99 / month

or $69.99 a year — about two months free

  • Everything in Free
  • Reach the Mac from any network: direct, or through the relay
  • Any number of Macs
  • Your own relay node instead of ours
Try it free for 14 days

Through the App Store: the trial, renewal and cancellation work like any other subscription there. US prices; the store shows yours. If a subscription lapses mid-session, the session is not cut — the next connection from outside is the one that will not open.

Questions

Is this a remote desktop?

No. A remote desktop streams pixels of a screen designed for a mouse. ShiftStage sends the services themselves — the terminal is a terminal, the diff is a diff — and the phone draws them natively.

Does it run AI models?

No. It drives the agentic CLIs already installed on your Mac, with your keys, your config and your subscriptions. Nothing is sent to us.

Why not just SSH?

Use SSH — the terminal here does not replace it. What a pipe cannot give you is a diff as structure, a file browser with previews, a process list, a push when the build ends, or an agent's question you can answer from a watch. And no SSH server needs to be reachable from outside.

Which networks does it work on?

Same Wi-Fi: directly, found over Bonjour. Different networks: directly whenever hole punching succeeds, through a relay when it does not. Mobile networks and hotel Wi-Fi are the normal case, and there is an entry point on port 443 for networks that block everything else.

Does it work when the Mac is asleep?

No, and it tells you so instead of timing out. The agent can keep the Mac awake while you are away, if you switch that on. Files you chose to keep on the phone open without the Mac.

What do I need?

An iPhone or iPad on iOS 18 or later, a Mac on macOS 15 or later, and an Apple Watch on watchOS 11 if you want one on your wrist.

Android? A Linux agent?

No. The app is native iOS, iPadOS and watchOS; the agent is native macOS. A cross-platform shell would have cost exactly the thing the product is for.

ShiftStage on an iPad, an iPhone and an Apple Watch: your Mac, in your pocket

Go live your life.
The Mac keeps working.

Free for one Mac on your own network. $6.99 a month from anywhere.