Programming from a smartphone
Tools, tips, tricks
Note: this article is NOT about vibe coding1. Although you can use the tools in this article for that too, you may be better off vibe coding in tools like Replit Agent or Lovable.
For once, I stumbled on an uncharted territory when it comes to developer productivity and tooling. Programming on a smartphone was never considered a real option. Until now, when AI coding agents have become part of developers’ workflow.
I spent 20-30 hours in the past months coding on my 6-inch phone, and I can share some productivity tips for those who want to try. I also ended up building an open-source mobile-friendly coding UI (on that later) to enhance the experience further.
Why would anyone want to program on a smartphone?
First, let’s get this question out of the way.
I can easily imagine that programming is a form of entertainment for some (definitely for me), similar to video games, especially when it comes to hobby projects. So, whenever others feel a desire to launch their favorite video game, some would love to code while holding only a smartphone in their hands.
Challenges
The amount of code that fits on a 6-inch screen is not even the biggest problem when using a phone for programming — that was my first realization. The biggest is the keyboard, which requires multiple taps to enter ^ [ $ and any other special character.
Is there a better keyboard layout for mobile that’s comfortable for coding?
Probably not.
But I can avoid pressing those keys with AI agents.
Agents don’t solve the problem of navigating the files and reviewing the code, but you’ll find solutions for that later in the article.
Here’s how I use coding agents on mobile…
Coding agents via SSH on mobile
The approach I explored the most was using CLI coding agents Claude Code and OpenAI Codex via SSH.
I tried a couple of different SSH clients and ended up with Termius (available for iOS and Android), mainly because of its convenient swipe gestures that translate to arrow keys. Otherwise, SSH clients are very similar.
Not bad. I don’t really need to enter special characters. And a few that I need most often, I added onto the custom key panel in Termius.
But not everything is still as smooth as I would like. These are especially annoying:
Prompt editing in TUI-based agents is not as easy as in text editors
Navigating through files and code requires the keyboard to be active, covering almost half of the screen
Network issues can interrupt your sessions with the agents
Improving the experience further
tasks.md
I create tasks.md file in a project root with tasks and instructions that I point agents to. This way, I don’t have to deal with the quirky experience of coding agents too much. All I need is to tell the agent “Follow the instructions in the tasks.md”.
Here’s my typical tasks.md file:
# Instructions
Find the first unresolved task and implement it.
Run `ruff check` and `pyright .` when you’re done.
Finally, remove the it from this file and then stop.
# Tasks
- Refresh README.md by analyzing codebase
- Output JSON logs for production
Pros:
Maintains a backlog of tasks
Easier to move the cursor around and edit text
Familiar shortcuts (for Vim, Helix users)
Vim with AI help 🪄
Even with agentic coding, I still need to edit text sometimes.
I chose Vim as a text editor.
For those who tried to avoid Vim in the past, it takes only about 30 minutes to feel comfortable using it.
I decided to learn it even further, so I put this helper script (see below) into my $PATH. Now, when I want to learn how, for example, to move the line two lines down, I enter:
:puts me into the control mode. Then I type!vh “move the current line two lines down”, which executesvhscript below, which runs Claude Code in non-interactive mode with that Vim question.
#!/usr/bin/env bash
if [ $# -eq 0 ]; then
echo "Please provide a vim query as the first argument."
exit 1
fi
query="$*"
echo "👉 Query: $query"
claude -p "Give a short response to this query about VIM editor. Query: $query"
⋊> Use fish
Bash, Zsh, Fish are all alternative shells for command-line interfaces.
With fish, I get intelligent, context-aware command suggestions as I type. Then, if I see the command I need, I just swipe right and it’s there. Neat!
Context-awareness helps a lot. It is mostly about suggesting commands that I previously entered from that specific directory.
screen
I’ve been a huge fan of the terminal multiplexer tmux for years (maybe a decade now). Helps me organize my shell sessions in multiple panes. It can also, among other things, manage sessions.
First, I tried tmux, but hotkeys are painful on mobile, so I went to screen. It’s a basic terminal multiplexer that can restore your session if you lose internet connection.
OK, I like the experience much better now, but it’s still keyboard-driven and inconvenient.
I thought it would be great to use all the convenient features of smartphones, such as dragging things, tapping on elements of the UI instead of the keyboard, pinching and zooming, etc.
So I built a UI for coders on smartphones
It’s called TapCode and it’s open source: https://github.com/gornostal/tapcode
You can call it an IDE for mobile phones if you’d like.
It provides a convenient way to browse project files, view code and changes, annotate lines, create tasks for agents, and run tasks with agents.
It works by by running this on a laptop, server, Raspberry PI, etc.
npx tapcode .and then opening a UI (http://localhost:2025) to control the codebase in a smartphone browser.
Read more in README.md.
Andrej Karpathy described vibe coding as “fully giving in to the vibes, embracing exponentials, and forgetting that the code even exists.” The last part is the key that distinguishes this method from coding methods, where developers review the code.





