Run Claude Code Remotely from Any Browser with Pinggy

Nov 3, 2026 · 7 min read
Claude Code Remote Access AI Coding Agents Terminal Pinggy
Headline 'Run Claude Code from any browser' with the Pinggy and Claude Code logos, the install command curl -fsSL https://pinggy.io/install.sh | sh on the left, and the Pinggy dashboard Terminal tab with Claude Code running on the right

Access your terminal from anywhere, right in your browser, with Pinggy.

Install the Pinggy CLI on a machine, then open that machine’s terminal from the Pinggy dashboard on any browser. Run Claude Code in it, or anything else. The machine only makes an outbound connection, so there is no SSH server, open port or public IP to set up.

Summary

  1. Install and sign in: curl -fsSL https://pinggy.io/install.sh | sh (Windows: irm https://pinggy.io/install.ps1 | iex). Enter your email and the 6-digit code.
  2. Open the terminal: go to the Pinggy Devices page, click your device, open Terminal, and click New shell.
  3. Run Claude Code: claude

How it works

This feature is called Pinggy Devices, and it arrived in Pinggy CLI v0.6.2 on November 2, 2026. The CLI runs on your machine as an agent and keeps one outbound connection open to the dashboard. Your browser talks to the dashboard, and the dashboard passes your keystrokes down that connection into a shell on the machine. Nothing connects inbound, so it works behind NAT, CGNAT and firewalls.

The shell runs as the user who ran pinggy, so claude in it uses the files, git config and Claude login that user already has. I ran the whole flow on an Apple Silicon MacBook with Pinggy CLI 0.6.3 and Claude Code 2.1.318. The screenshots come from that run, with emails, tokens and device IDs swapped for placeholders. Limits and plan numbers come from the Pinggy Devices docs.

Step 1: Install the Pinggy CLI and sign in

On the machine you want to reach, run:

bash
curl -fsSL https://pinggy.io/install.sh | sh

On Windows, run this in PowerShell instead:

powershell
irm https://pinggy.io/install.ps1 | iex

The script installs the CLI without sudo, then runs pinggy device login. You don’t need a Pinggy account first. Enter your email and type the 6-digit code it sends. You can also click Approve sign-in in the email, but only if the page shows the same code your terminal printed. An unknown email gets a new free account, and the machine is added as a device named after its hostname. On Alpine and other musl-based systems, use npm install -g pinggy instead.

Terminal running the Pinggy install script on macOS: it installs CLI 0.6.3, asks for an email and a 6-digit code, then reports the machine connected as a device and prints a dashboard link

Screenshot: the install script on macOS, November 2026. Email, code, link and IDs are placeholders.

Already have the device in the dashboard? Its Overview tab has a Connect this device card with two commands that already contain the device token:

Pinggy dashboard device Overview tab with system details, live CPU and memory, and the Connect this device card showing an install command and an Already installed command, each with a token placeholder

Screenshot: dashboard.pinggy.io, November 2026. Account, hostname and tokens are placeholders.

The first, curl -fsSL https://pinggy.io/install.sh | DEVICE_AGENT_TOKEN=<TOKEN> sh, installs the CLI and connects the machine with no email and no code, so it works with no keyboard attached. If the CLI is already installed, use the second: pinggy device connect --token <TOKEN> --manage dashboard.pinggy.io. The --manage option names the dashboard host, and the docs list the same command without it.

Terminal running pinggy device connect with a token and the manage option, reporting a successful connection as a device and printing the device's dashboard link

Screenshot: terminal on macOS, November 2026. Token, email and ID are placeholders.

The first successful connect saves the token on the machine, so later runs need only pinggy device connect.

Step 2: Keep the device running in the background

After sign-in the agent stays in the foreground until you press Ctrl+C. Stop it and reconnect in teh background with -b:

bash
pinggy device connect -b

On a machine with no saved token, add it: pinggy device connect --token <TOKEN> -b.

Terminal running pinggy device connect with a token in the background, printing the device id, the dashboard link, the daemon log path and the command to stop it

Screenshot: macOS terminal. The CLI also accepted --b, as shown; the docs use -b. Token, email, ID and username are placeholders.

The agent runs in the Pinggy daemon, so it outlives the terminal but not a reboot. After a reboot, run pinggy device connect -b again. To stop it, run pinggy device stop, or pinggy daemon stop to stop the whole daemon. The dashboard then shows the device offline.

Terminal running pinggy daemon stop, which reports the daemon stopped and the background device agent stopped too, so the device shows offline in the dashboard

Screenshot: terminal on macOS, November 2026.

Step 3: Open the terminal and run Claude Code

Open the Pinggy Devices page and click your device. The Overview tab shows its hostname, OS, CPU and memory, with live usage.

Pinggy dashboard device Overview tab showing the device online, system details for an Apple M3 Pro Mac, and live CPU, memory, load average and uptime

Screenshot: dashboard.pinggy.io, November 2026. The hostname is a placeholder.

Open the Terminal tab and click New shell. Each shell gets its own tab. From there it’s an ordinary terminal:

bash
cd ~/code/storefront   # your own project folder
claude
Pinggy dashboard Terminal tab with one shell tab named claude and Claude Code 2.1.318 running in it after answering a short prompt

Screenshot: dashboard.pinggy.io, November 2026. The shell runs on the machine; the browser only draws it.

If Claude Code isn’t installed yet, install it from this shell with curl -fsSL https://claude.ai/install.sh | bash, but log in while you’re still at the machine, because the first launch opens a browser window there. Claude Code has a fallback (press c to copy the login URL), but I haven’t tried it through the dashboard terminal.

Closing the browser tab doesn’t end the shell. Reopen the Terminal tab and the screen is redrawn as you left it.

Pinggy dashboard Terminal tab where Claude Code 2.1.318 has answered a short greeting typed in the browser, with the shell footer showing /bin/zsh and its process id

Screenshot: dashboard.pinggy.io, November 2026, on the first device I enrolled. Device name and account are placeholders.

Step 4: Run long tasks in the background

A dashboard shell ends after 30 minutes with no activity, or after 8 hours regardless. A session started with plain claude ends with it. For a long task, start a background session instead. A seperate supervisor process runs it, so it keeps working with no terminal attached:

bash
claude --bg "run the test suite and fix the failing tests in src/billing"

On Claude Code 2.1.317, a short test prompt returned at once and printed:

text
Starting background service…
backgrounded · 5dc70293
  claude agents             list sessions
  claude attach 5dc70293    open in this terminal
  claude logs 5dc70293      show recent output
  claude stop 5dc70293      stop this session

From any later shell, claude agents lists your sessions, claude attach 5dc70293 reopens one, and claude logs 5dc70293 prints its recent output. To detach, press the left arrow key on an empty prompt, or Ctrl+Z. A --bg session works in its own git worktree under .claude/worktrees/. It survives sleep but stops if the machine shuts down.

Free vs Pro

Every plan, Free included, gets the browser terminal. Prices are from the Pinggy pricing page and limits from the devices docs, checked on November 3, 2026.

PlanPriceDevicesTerminals per deviceTerminals open across all devices
Free$0111
Pro$2.50/month billed annually, $3/month billed monthly25310 per seat

Free is enough for one home machine. Pro’s three shells per device is where it gets comfortable: one for Claude, one for the dev server, one for git. Pro also adds persistent tunnels, custom domains and teams, with a 7-day free trial. Enterprise has custom pricing (contact@pinggy.io), and its pricing card lists unlimited devices and terminals.

How this compares with Remote Control and SSH

Claude Code Remote Control needs a Pro, Max, Ultra, Team or Enterprise subscription (no API keys), and it only reaches a claude process that’s already running, so someone has to start claude remote-control at the machine. SSH needs a server listening and, behind NAT, a tunnel such as ssh -p 443 -R0:localhost:22 tcp@free.pinggy.io, whose address changes every 60 minutes on the free tier.

A Pinggy Devices shell has neither limit. Start Claude from scratch, restart a dev server, run git pull, or use Codex instead, with any Claude login, API keys included. Our guide to Claude Code and Codex on a VM covers the other two routes in detail.

Security

The device token sits in device.json under ~/.config/pinggy/, readable only by your user. Per the docs, the agent never logs what you type, and the Activity tab lists the device’s events with source IP addresses.

Anyone signed in to your Pinggy account can open a shell on your devices, as your user, and run claude with your Anthropic login. Turn on 2-factor authentication first, and keep the dashboard’s connect commands out of screenshots and chats, since they contain the token. To cut a machine off, delete the device or rotate its token in the dashboard. pinggy device remove only forgets the token locally.

Troubleshooting

  • Terminal tab is greyed out. The CLI on that machine is too old. Run the install command again.
  • This machine already runs as device <id> in the background. Stop it first: pinggy device stop. A background agent already holds the connection. Stop it before running login or connect in the foreground.

Recap

Three commands cover it:

bash
curl -fsSL https://pinggy.io/install.sh | sh   # install and sign in
pinggy device connect -b                       # keep the machine connected
claude --bg "<your task>"                      # in the browser terminal: a task that outlives the shell

Then open the device’s Terminal tab on the Pinggy Devices page, click New shell, and start working.