Grass vs SSH Apps: Which Should You Use to Access Coding Agents from Your Phone?

SSH apps give you a raw terminal on your phone. Grass gives you a mobile-native interface built specifically for coding agents. Here's when each makes sense.

If you want to monitor and control Claude Code or OpenCode from your phone, a general-purpose SSH app can technically get you there — but it was not built for this. SSH gives you a raw terminal; you watch output scroll by, type commands into a small input box, and manage the connection yourself. Grass is purpose-built for mobile coding agent access: agent output is rendered as markdown, approval gates surface as native modals, and you can redirect the agent with a chat prompt rather than typing into a terminal. If you need a general shell on a remote machine, an SSH app is fine. If you are specifically working with a coding agent, Grass removes significant friction.

TL;DR

  • SSH apps (Termius, Blink Shell) give you a raw terminal — functional but not agent-aware
  • Grass is built specifically for coding agents: markdown rendering, permission modals, diff viewer, chat interface
  • SSH connection drops kill your session unless you use tmux; Grass reconnects automatically with full output replay
  • SSH apps require no additional server-side setup; Grass requires grass start running on the machine
  • For general shell access, SSH wins; for coding agent workflows specifically, Grass is a better fit

What are SSH apps?

SSH apps like Termius and Blink Shell give you a terminal emulator on your phone that connects to remote machines over SSH. They are general-purpose tools — you get a shell, a file browser in some cases, and the ability to run any command on the remote machine. They are widely used for server administration, remote development, and anything that requires shell access from a mobile device.

What is Grass?

Grass is a native iOS app (with an Android PWA) built specifically for coding agent workflows. It connects to a lightweight CLI server (grass start) running on your machine and presents a mobile-native interface for your Claude Code or OpenCode sessions: streaming output with markdown and syntax highlighting, per-action approval modals, a git diff viewer, and a chat input for sending prompts. It is not a general terminal — it is an agent interface. Grass is free for local use.

Head-to-head: SSH apps vs Grass

Dimension SSH apps (Termius, Blink Shell) Grass
Interface type Raw terminal emulator Agent-native mobile interface
Agent output rendering Plain terminal text Markdown + syntax highlighting
Permission approvals Manual — watch terminal, type response Native modal — one tap to approve or deny
Session recovery on disconnect Requires tmux/screen; otherwise session dies Automatic — SSE replay with sequence numbers
Diff viewing Run git diff in terminal Built-in diff viewer with color coding
Server-side setup SSH access only Requires grass start running
Agent support Any agent (via terminal) Claude Code, OpenCode
Cost Free to paid (Termius has a free tier) Free for local use

The practical difference shows up most clearly in three scenarios. First, approval gates: when Claude Code hits an agent approval gate and pauses for permission, an SSH session shows a text prompt in the terminal — you have to be watching, read the prompt, and type a response. In Grass, a native modal appears on your phone immediately regardless of what screen you are on. Second, output readability: Claude Code produces markdown-formatted responses with code blocks. In a terminal, that renders as raw markdown syntax. In Grass, it renders with syntax highlighting. Third, disconnects: if your SSH connection drops mid-task — a tunnel, a network handoff, any interruption — the session dies unless you are running inside tmux. Grass reconnects automatically and replays any output you missed using SSE sequence numbers.

When to use an SSH app

SSH apps are the right tool when you need general shell access to a remote machine and are not specifically working with a coding agent. System administration, checking logs, running one-off commands, or accessing a machine where you cannot install additional software — these are all natural SSH use cases. SSH apps are also the right choice when you need access to any agent or tool, not just Claude Code and OpenCode, since Grass's agent support is scoped to those two. If you are already comfortable in a terminal and do not need the agent-specific UI features, an SSH app works.

When to use Grass

Grass is the right choice when your primary mobile workflow is monitoring and directing a coding agent session:

You want approval gates handled as phone notifications. Permission modals appear automatically in Grass — you do not need to watch a terminal for approval prompts. According to Anthropic's research on agent autonomy, the 99.9th percentile Claude Code turn duration exceeded 45 minutes as of early 2026. For sessions that long, watching a terminal is not realistic — Grass is built for exactly this scenario.

You want readable agent output. Claude Code's markdown responses and code blocks render correctly in Grass. In a terminal they are raw text. For reviewing what the agent is doing and why, readable output matters.

You want session resilience without tmux setup. Grass reconnects automatically after a network drop and replays missed output. Getting the same resilience from SSH requires setting up and attaching to a tmux session before you disconnect — an extra step that is easy to forget.

Your agent is on a remote coding session. Both SSH and Grass can connect to remote machines, but Grass's QR-code pairing and Tailscale integration make the remote setup faster than configuring SSH keys and connection strings on mobile.

The bottom line

SSH apps and Grass are not competing for the same use case. SSH apps are general-purpose shell access tools; Grass is a purpose-built coding agent interface. If you regularly work with Claude Code or OpenCode from your phone — monitoring sessions, handling approval gates, checking diffs — Grass removes friction that SSH apps were never designed to eliminate. If you need shell access for general administration or working with tools Grass does not support, an SSH app is the right tool.

Frequently asked questions

Can I use an SSH app like Termius to monitor a Claude Code session from my phone?

Yes — you can SSH into the machine running Claude Code and watch the terminal output. But you can't respond to agent approval gates through Termius in the same way Grass handles them: in a raw terminal, Claude Code prints the permission request and waits for you to type yes or no. On a phone keyboard in a terminal emulator, that works but is clunky. Grass surfaces approval gates as native mobile modals — one tap to approve or deny, no typing required.

What SSH apps are commonly used to access remote servers from iPhone?

The most widely used SSH clients for iOS are Termius, Blink Shell, and ShellFish. All three give you a capable terminal experience on mobile. They're excellent for general remote server access, but they're not built for the AI agent workflow — no approval gate UI, no diff viewer, no streaming agent output formatted for mobile.

Do I need SSH access to use Grass?

No. Grass doesn't use SSH at all. The Grass CLI runs an HTTP server on your machine, and the Grass mobile app connects to it over your local network using HTTP REST and SSE. There's no SSH key setup, no port forwarding, and no terminal access required. If you want remote access outside your local network, Grass uses Tailscale for the network layer — not SSH tunnels.

How does Grass compare to running tmux on a remote server and SSHing in?

Tmux + SSH is a valid approach: tmux keeps your agent session alive across disconnects, and you SSH in from your phone to monitor it. This works, but it requires managing SSH keys, knowing your server's IP, configuring port access, and navigating a full terminal on a phone screen. Grass replaces all of that with a QR code scan and a mobile-native UI. The trade-off: Grass is less flexible (it only covers the agent workflow), but far lower friction for the specific job it's designed for.

What happens to my Claude Code session if I lose the SSH connection mid-session?

If you're using SSH, a dropped connection kills your terminal session unless you're running inside tmux or screen. The agent process may also be killed depending on how it was started. With Grass, a dropped connection doesn't affect the agent at all — it keeps running on your machine, and when you reconnect, Grass replays any output you missed using SSE sequence numbers and Last-Event-ID.

Is Grass more secure than using an SSH app?

Neither is inherently more secure — it depends on your setup. SSH is a mature, widely audited protocol; a well-configured SSH server is very secure. Grass uses HTTP over your local network or Tailscale, with no authentication by default. On a trusted home or office network, this is fine. For remote access, Tailscale provides WireGuard-based encryption between your devices. The main security note for Grass: anyone who can reach the Grass port on your network can interact with the running agent — use it on trusted networks, or use Tailscale to restrict access.