You might be surprised to learn that Claude Code on your phone is fun, not frustrating. After experimenting several weeks, including using it during a two hour flight delay to build this blog and deploy it on Vercel: I'm now that person on the BART train vibe context coding from their iPhone.
Claude Code, when combined with push notifications, some iOS apps, slash commands and hooks is surprisingly mobile-friendly. Thanks to Tailscale and some mesh VPN crypto magic, it now takes about 5 minutes to set up a private, always-on connection between your phone and home laptop or desktop.
If inspiration strikes in the subway: you get a new superpower. You can also go along with your regular commute and get pinged by a notification when Claude Code needs your input. It's better for your brain than social media apps and you get to make cool stuff in unexpected places.
Here's how I used Claude Code on my phone and you can too (with caveats). The hooks, commands, containers, and terminal layouts I used are on Github, where I've tried to package them in an "easy-mode" CLI that automates this setup inside a devcontainer.
The minimal mobile app stack

The basic ingredients for iPhone are:
- an iOS terminal app that supports mosh (recommend Blink Shell or Termimus)
- ntfy app for free push notifications
- Tailscale if connecting to your laptop/desktop, otherwise any remote server
- zellij or tmux for switching between your desktop and phone easily and nice UI
- The GitHub app for merging PRs, seeing CI output, etc
- a Claude subscription
The tech stack is pretty much identical for Android, but assume if you're a developer and Android user you've been running a custom shell on your phone since the early Obama administration.
Caveat #1: I don't recommend this workflow at all if you're new to Claude Code, even if you've been using similar tools like Cursor for a while. The idea is to be able to keep ideas and inspiration going on your mobile devices once you find a groove on a real computer with a keyboard.
If you're past that stage, happy to report that this technical combination of apps and mobile-friendly remote protocols is surprisingly resilient. It works on a 3G connection. It also worked well on United's wifi somewhere over the North Atlantic.
Caveat #2: You're obviously not going to be doing much typing, and it's a good idea to bootstrap your project on your laptop first. However, you can make a lot of typos and use terrible, shortened English. Claude always understands what you mean when you ask it to "gut" commit your files. Consider adding a keyboard shortcut that types "ultrathink" in the prompt.
Setting up your phone-to-laptop pipeline
Before we start context engineering, some prerequisites are needed. Let's assume you have a personal macOS laptop with a reliable Wifi connection, and Tailscale installed on both your phone and laptop. In my case, I've also connected my iPad and a cloud Linux server on DigitalOcean — everything can talk to everything else over the same private network.

This means, using an iPhone app like Blink Shell, you can run mosh you@<private Tailscale IP>
(because mosh is much better for mobile roaming) and get a shell on your laptop anywhere in the world. That by itself is pretty cool.
Caveat #3: Tailscale is optional if you have a development server somewhere... potentially even GitHub Codespaces could be an interesting option.
With the network and server in place: let's now build a fully functional Python app on our iPhone.
Context coding on the go
While it's completely possible to do everything via your phone, it's much less painful to do the initial bootstrapping with a real keyboard. In my case, I used an excellent python cookiecutter template to create a modern python app scaffold with quality checks and a build system in a directory on my personal laptop. Good scaffolding with things like lint rules and code formatting saves hours (trust me on this). My example python project also has access to my systemwide collection of Claude Code hooks, commands and (soon) sub-agents.
On my iPhone, I then open up a MOSH session to my laptop over my private Tailscale network inside of the Blink Shell app:
blink> mosh clay@<redacted-tailscale-ip-of-my-laptop>
At this point: a lot happens behind the scenes. My shell profile detects a remote session and spins up (or resumes) a Zellij layout that gives me a terminal-based Claude Code workspace optimized for mobile: I have my first tab to run Claude Code, then others to monitor usage of Claude Code itself using ccusage, a view of my git history, and system performance info. I can switch between tabs by tapping on them, and my primary input device is the iOS keyboard with many shortened shell aliases (gs = "git status", etc).

It's normal/regular Claude Code at this point, with one more critical mobile addition: push notifications when Claude Code has been waiting for your input more than 60 seconds, which is just a lightweight integration between a hook and the free ntfy app:

The push notifications are really nice because, for especially long running Claude Code tasks, you can switch to other tabs or tasks on your phone (or life).
Caveat #4: Figuring out ways to reduce typing is, well, key. You must have pre-defined Claude Code commands (like /check and /test) that do meaningful repetitive work and automated quality hooks that validate the output of Claude.
The other addition I'll highlight is monitoring of Claude Code itself ... when it's available on your phone, you may find yourself using it even more. I keep an eye on it in a separate tab:

If this seems like a lot to set up, it's mostly copying files to your ~/.claude directory and setting up some aliases: Claude Code can actually help you with both. Paste in your bash/shell history for some recommendations. If you don't want to use Tailscale, ask it to write some terraform and deploy a new server to the cloud of your choice.
Why this matters (or not)
There's a possible near-future where the morning commute is full of people typing, yelling, or whispering to their phones about the quality checks, PR approvals, and research reports that were running overnight. But who knows what the future workflow might be? As Scott Werner said, we're all junior AI engineers now.
I don't use Claude Code for work, but for fun non-professional projects. Here's what happened to my personal GitHub commit history after I got it working on my phone:

This is Jevons' paradox in action: I made this thing to use Claude Code on my iPhone, and I am now committing much more code for projects that I've wanted to build for a long time. The mobile constraint also had the effect of making me focus on what matters in this new workflow: good commands, well-defined CLAUDE.md files, and hooks to get the best results the first time without many keystrokes.
The barrier between ideas and actually building a prototype of it is dissolving faster than the time it takes to take BART from Embarcadero to 24th Street. This setup isn't for everyone, but generally works for me and the types of projects I like to build for fun (python APIs, web apps, mobile apps, shell scripts).
With new Claude Code limits coming soon, it's a good time to be focused on context and prompt efficiency. And you know what? It's way more fun than doom scrolling.
Check out https://github.com/smithclay/claudetainer for the code.