How to Connect Grass to Daytona

Run your coding agent on a Daytona workspace and monitor it from your phone with Grass. Your laptop stays off — the agent keeps working.

You can run Claude Code on a Daytona remote workspace and monitor it from your phone using Grass — no laptop required. Start a Daytona workspace, run grass start --network remote-ip on it, scan the QR code with the Grass app, and you have a live connection to your agent from anywhere. The workspace keeps running whether your phone is connected or not.

TL;DR

  • Daytona provides a cloud-hosted dev workspace; Claude Code runs on it instead of your laptop
  • Grass connects your phone to that workspace, giving you live agent output and approval modals
  • grass start --network remote-ip generates a QR code with the workspace's public IP
  • For private access, grass start --network tailscale uses your Tailscale IP instead
  • Your laptop can stay off entirely — the agent runs on Daytona, Grass is the interface

Why run your coding agent on Daytona instead of your laptop

Running Claude Code locally means your laptop has to stay on, plugged in, and on a stable network for the entire duration of the agent task. For a 20-minute task that is manageable. For a 2-hour feature build — which falls well within what Claude Code handles autonomously — it is not.

A transient dev server like Daytona removes those constraints. The workspace runs in the cloud, has its own compute and network connection, and stays alive regardless of what your laptop is doing. You can close your laptop, leave the office, or go to sleep — the agent keeps working.

The gap that existed until now was the mobile interface. SSH clients work but are not agent-aware: they give you a raw terminal, not a mobile-native view of what the agent is doing or a way to handle agent approval gates without typing into a terminal input box. Grass fills that gap. It connects to the Daytona workspace and gives you the same live output, permission modals, and chat interface you would have if the agent were running locally.

What you need before you start

  • A Daytona account with a workspace ready to use. See the Daytona workspace documentation for setup.
  • Claude Code installed on the Daytona workspace — run npm install -g @anthropic-ai/claude-code inside the workspace terminal. Requires Node.js 18+.
  • Grass CLI installed on the Daytona workspace — run npm install -g @grass-ai/ide inside the workspace.
  • Grass mobile app — iOS App Store (native) or Android PWA.
  • Tailscale on the workspace (recommended) — for private access without exposing a port publicly. Optional if you use --network remote-ip instead.

Step-by-step: connecting Grass to a Daytona workspace

  1. Start your Daytona workspace. Use the Daytona dashboard or CLI to spin up a workspace with your repository. The workspace should have your project files and Node.js available.
  2. Open a terminal in the workspace. Via the Daytona dashboard, VS Code Remote, or SSH — any terminal access to the workspace shell works.
  3. Install the Grass CLI. Run:
npm install -g @grass-ai/ide
  1. Navigate to your project directory. cd into the repo root or the parent directory containing your repos.
  2. Start Grass with the correct network flag.
    • For Tailscale (recommended): grass start --network tailscale
    • For public IP access: grass start --network remote-ip Grass auto-selects a port from 32100–32199, prints the server URL, and displays a QR code.
  3. Scan the QR code with the Grass app. Open Grass on your phone, tap the QR scanner, and scan. The workspace connection is added to your server list.
  4. Select your repo and start a Claude Code session. Tap the server, pick your repository, choose Claude Code as the agent, and start a new session or continue an existing one.
  5. Start your Claude Code task. Type your task in the Grass chat interface. Claude Code starts working on the Daytona workspace. You can close your laptop.

Using Tailscale vs public IP — which should you use?

The choice depends on how you want to handle access control.

Tailscale (grass start --network tailscale) generates a QR code with your Daytona workspace's Tailscale IP. Only devices on your Tailscale network can reach it. This is the recommended approach: no port is exposed publicly, access is locked to your devices, and the connection works from anywhere your phone has internet. Daytona workspaces support Tailscale installation directly in the workspace environment.

Public IP (grass start --network remote-ip) fetches the workspace's public IP from api.ipify.org and encodes it in the QR code. The Grass port (32100–32199) needs to be reachable from your phone — which may require configuring firewall rules or port forwarding in your Daytona workspace settings. Grass has no authentication by default, so anyone who can reach the port can interact with the session. Use this only on networks where you control access, or protect it with a firewall rule restricting the port to your phone's IP.

For most use cases, Tailscale is simpler and safer.

What the Grass connection gives you on a Daytona workspace

Once connected, the Grass mobile interface works identically to the local case:

  • Live agent output streams to your phone over SSE. You see Claude Code's activity — file reads, edits, bash commands — in real time with markdown rendering and syntax highlighting.
  • Permission modals appear immediately when the agent hits an agent approval gate. One tap approves or denies the action. The agent waits as long as needed.
  • Session persistence means the agent keeps running if your phone disconnects. Reconnect and the Grass app replays any missed output using SSE sequence numbers.
  • Diff viewer shows git diff HEAD for the workspace repository. Check what the agent has changed without opening a terminal.
  • Bidirectional chat lets you send new prompts, corrections, or redirections from your phone at any point during the session.

The remote coding session runs on Daytona's infrastructure. Grass is the mobile interface to it.

What you need

  • Daytona workspace with your repository cloned and Node.js 18+ available
  • Grass CLI — npm install -g @grass-ai/ide on the workspace
  • Claude Code — installed and authenticated on the workspace
  • Grass mobile app — iOS App Store or Android PWA
  • Tailscale (recommended) on both the workspace and your phone
  • Pricing — Grass is free; Daytona remote usage includes free credits

Frequently asked questions

Does the Daytona workspace stay running when I close my laptop?

Yes. Daytona workspaces run on Daytona's cloud infrastructure independently of your local machine. Closing your laptop has no effect on the workspace or any processes running inside it, including Claude Code. The workspace runs until you stop it or it hits an auto-stop policy configured in your Daytona settings.

What happens to the Grass session if the Daytona workspace auto-stops?

If the workspace stops while an agent session is running, the agent process terminates and the Grass connection drops. When you restart the workspace, run grass start again to re-establish the connection. Claude Code session history is stored in ~/.claude/projects/<cwd>/<session-id>.jsonl on the workspace filesystem — if the workspace persists its disk between stops, you can resume with claude --continue.

Can I run multiple Claude Code sessions on one Daytona workspace?

Yes. Run grass start from different project directories in separate terminal sessions — Grass auto-selects different ports from the 32100–32199 range for each instance. Each instance appears as a separate server connection in the Grass app. This is mobile coding agent orchestration in practice: multiple agents running on one workspace, all manageable from your phone.

How is this different from just SSHing into the Daytona workspace from my phone?

SSH gives you a raw terminal. You would need to watch the terminal output manually, type commands to approve agent actions, and manage the SSH connection yourself. Grass gives you a mobile-native interface: agent output rendered as markdown, one-tap permission approvals, a diff viewer, and automatic reconnection if the network drops. For monitoring and directing a coding agent specifically, Grass removes significant friction compared to a terminal session.

Does Grass work with OpenCode on a Daytona workspace?

Yes. Grass supports both Claude Code and OpenCode. Install OpenCode on the Daytona workspace alongside the Grass CLI, run grass start, and select OpenCode from the agent picker in the app. Everything works identically to the Claude Code case.

Do I need to reinstall Grass CLI every time I create a new Daytona workspace?

Yes, unless you configure your Daytona workspace template to include the Grass CLI as part of the base image or devcontainer.json setup. Adding npm install -g @grass-ai/ide to your workspace init script means every new workspace spins up with Grass already installed.

Related use cases

Monitor a long-running coding agent overnight — The monitoring workflow in detail: how live output streaming works, how permission modals surface on your phone, and how sessions recover from disconnects.

Kick off a coding task during your commute — Starting a new agent session from your phone. Particularly useful with a Daytona workspace: start the task from the train, the workspace handles execution, and you check the diff when you arrive.

Manage multiple agents from one mobile dashboard — Running several concurrent agent sessions across multiple workspaces or repositories, monitored from a single Grass app instance.