Imagine writing this article right now β€” from your phone, over SSH, while soaking in a bathtub. That's exactly what the developer behind sindro.me describes in a detailed breakdown of their Claude Code workflow. No VS Code, no cloud IDEs, no Electron-based editors. Just pure CLI, tmux sessions, and Unix philosophy running on a Raspberry Pi 5 named "nowhere" sitting somewhere in their home.

The Hardware Foundation

The setup centers on a Raspberry Pi 5 running Debian Trixie (aarch64). Two commands get you fully immersed: ssh nowhere followed by tmux -u at. The -u flag enables Unicode support for emoji and box-drawing characters in status lines, while at is shorthand for attach -t 0, reattaching to the persistent session. This isn't just convenient β€” it's transformative. You start a task on your laptop, switch to your phone during a walk, finish it on your tablet from the couch. Zero state lost across every device transition.

The Unix Stack

Here's what lives under the hood: Debian Trixie for the OS, systemd user units managing ssh-agent with socket activation (predictable SSH_AUTH_SOCK at /run/user/1000/openssh_agent), tmux handling multiplexing and scrollback, Claude Code doing the actual coding work, SSH as the universal transport layer, and WireGuard VPN enabling seamless device roaming. The author is explicit: no Docker, no Kubernetes, no VS Code remote tunnels, no cloud IDEs, no Electron. Just Unix.

The SSH Agent Trick

The agent trick deserves special attention. By hardcoding export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/openssh_agent" in .bashrc, Claude Code β€” running inside tmux inside a shell β€” automatically inherits access to SSH keys. It can git push, deploy to staging and production, SSH into servers, all without agent forwarding from the client side. The Pi itself is the agent. No -A flag needed remotely. The author acknowledges the security trade-off: if the Pi is compromised, everything those keys unlock becomes accessible. A forwarded-only approach with password-protected key storage on a physically controlled device would be more secure.

tmux as the Real IDE

With Ctrl-F as the prefix key (a deliberate choice), multiple windows host separate projects like 0:sysadm, 1:gastone, and 2:sindrome. Each window runs its own Claude Code instance. The killer features? Scrollback up to 10,000 lines via Shift-PageUp into copy mode. Built-in vi-style copy-paste without touching a mouse. Pane synchronization with ^F Ctrl-Y for running identical commands across split views. This is what modern IDE workspace concepts aspire to β€” persistent sessions, multiple contexts, searchable history, flexible layouts β€” without the bloat.

The Phone Workflow

On iOS, Termius (free tier) handles SSH access. The critical mapping: Ctrl-F mapped to a button above the keyboard, giving full tmux control from a phone screen. Touch-to-scroll converts finger swipes into terminal scrolling through Claude's output β€” build logs, diffs, everything. Here's the counterintuitive insight: typos don't matter. LLMs parse intent, not keystrokes. "stsging" becomes staging, "tge" becomes the, "donMr" becomes don't. What would normally be a friction nightmare turns into a non-issue because you type fast and don't correct.

Why Not Mosh?

UDP-based mosh was suggested as a natural fit for this roaming workflow β€” it survives IP changes without losing sessions. The deal-breaker: mosh doesn't support scrollback or mouse events since it syncs screen state rather than streaming raw bytes by design. On Termius, that means losing touch-to-scroll entirely, which breaks the primary method for reading through terminal output on a phone. WireGuard is efficient enough at keeping the VPN link alive that disconnects are rare. The only drops happen during LAN ↔ VPN endpoint switches, costing three seconds and two commands β€” a tax the author happily pays to keep full scrollback functionality.

The Results

Over 30 days, this setup produced over 5,000 commits across a dozen projects: a complete blog overhaul with 69 translated posts, a custom Home Assistant integration for Verisure Italy (reverse-engineered GraphQL API, published to PyPI), WiFi Dethrash (an OpenWrt mesh network analyzer), a WiFi presence detection system, 5G modem tools for OpenWrt, and two years of log backfilling through an enrichment pipeline. Every single one β€” CSS, Python, Go, Lua, shell scripts, Hugo templates, nginx configs, systemd units β€” built entirely from the terminal.

Key Takeaways

  • Claude Code doesn't need an IDE because it IS the IDE β€” reading files, editing, running tests, iterating is its native habitat
  • tmux provides everything modern workspace concepts promise without graphical bloat
  • SSH agent managed by systemd with hardcoded socket paths means zero client-side forwarding configuration
  • WireGuard handles routing regardless of physical location; same LAN IP whether at home or a cafΓ©
  • LLM fuzziness actually helps mobile workflows β€” typos become features, not bugs

The Bottom Line

This isn't just about efficiency β€” it's a philosophy statement. After 35 years of the industry pushing GUIs, mice, visual debuggers, and point-and-click deployment tools, AI brings us back to terminals, keyboards, and plain language. The author started programming on QBasic in an 80x25 amber terminal at age seven. Now Claude Code completes that circle. If you've been skeptical about CLI-based workflows for AI coding assistants, this setup makes a compelling case that the simplest approach might be the right one.