Sitemap

Run Claude Code From Any Browser: A Complete Remote Terminal Guide

15 min readJust now

--

Use Pinggy to open a real terminal from any browser and run Claude Code, background tasks, and more without SSH.

Every developer has felt the moment when your main machine is at home or in the office, but you need to reach it from somewhere else. Maybe you start a long Claude Code session before you leave, then want to check on it from a laptop. Maybe you are travelling and need to inspect a log. The usual answer is SSH, but SSH can be painful behind home routers, corporate networks, and mobile connections. Pinggy offers a different path: a browser based terminal that uses an outbound connection from your machine. No public IP, no port forwarding, no SSH daemon required. You install a small CLI agent, sign in, and then open a shell from the Pinggy dashboard in any browser. This guide walks through the entire setup, with special attention to running Claude Code remotely.

The core idea is simple. 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. This is not a hosted shell; it is your own machine, with your own files, your own git configuration, and your own Claude login. The browser is only a window onto that real desktop environment.

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

Why Browser Based Remote Access Works

Traditional remote access assumes that you can open a port on the target machine, or that the machine already runs a server you can reach. That assumption breaks down in many real environments. Home internet connections often sit behind carrier grade NAT, which means your router does not even have a public IPv4 address. Office networks block inbound connections. Hotel and coffee shop wifi usually isolates devices. Mobile hotspots are even stricter. In all of those cases, SSH from the outside can be difficult or impossible without a separate tunnel service.

The feature that makes this possible is called Pinggy Devices. 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. There is no public IP and no inbound firewall rule. This is the same philosophy used for SSH tunnels, but the output is a usable terminal in the browser rather than a forwarded port.

The shell runs as the user who ran pinggy, so Claude Code 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 in the original walkthrough come from that run, with emails, tokens and device IDs swapped for placeholders. Limits and plan numbers come from the Pinggy Devices documentation.

Because the connection is outbound, the network configuraton can be almost anything. You do not need to know the public IP address of the machine. You do not need to ask an ISP for a static address. You do not need to configure port forwarding on a router. The agent simply reaches out to Pinggy and waits for instructions. That makes the browser terminal useful for laptops that move between networks, small single board computers at home, cloud instances, and even machines inside a corporate VPN.

What This Solves

  • You can use Claude Code from a tablet, a hotel computer, or another laptop.
  • You can check on long running experiments without keeping a terminal window open.
  • You can help a colleague with a problem on a machine that is behind a restrictive network.
  • You can turn a headless single board computer into a development target with a browser UI.
  • You can start a background Claude Code task at the office and inspect the result from home.

Prerequisites

Before you begin, you need a few things. First, you need the machine that you want to reach. It can be a laptop, a desktop, a virtual private server, or a small home server. It must be able to reach the internet. Second, you need a browser on the device you are connecting from. The browser must be able to reach the Pinggy dashboard. Third, if you plan to run Claude Code, you need an Anthropic account or API access. The shell runs as the user who started the agent, so the shell sees the same home directory, SSH keys, git config, environment variables, and Claude Code credentials.

The target machine should be powered on while you plan to connect to it. If it is a laptop and you close the lid, it may sleep. The agent will pause with the machine. If the machine reboots, the agent will not start again by itself unless you configure it to start at boot. This is not a limitation of Pinggy; it is simply how an outbound agent works. The machine must be alive to maintain the connection.

You also need a way to authenticate with Pinggy. You can use an email address. If you do not have an account yet, the CLI will create a new free account automatically. The sign in flow uses a six digit code sent to your email. Later, you can enable two factor authentication on the account for extra protection. That is especially important when the browser terminal can act as a full user on your machine.

Step 1: Install the Pinggy CLI and Sign In

On the machine you want to reach, open a terminal and run:

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

On Windows, run this in PowerShell instead:

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

The script installs the CLI without sudo, then runs pinggy device login. You do not need a Pinggy account first. Enter your email and recieve a six digit code. The email may also contain a link to approve sign in. You can click that link only if the page shows the same code that your terminal printed. This extra step prevents accidental or unwanted approvals. If an unknown email is used, a new free account is created, and the machine is added as a device named after its hostname.

On Alpine Linux and other musl based systems, use npm install -g pinggy instead.

npm install -g pinggy

Already have a device in the dashboard? Its Overview tab has a Connect this device card with two commands that already contain the device token. The first command installs the CLI and connects the machine with no email and no code, which works on a machine with no keyboard attached. The second command connects using an existing CLI installation.

curl -fsSL https://pinggy.io/install.sh | DEVICE_AGENT_TOKEN=<TOKEN> sh
pinggy device connect --token <TOKEN> --manage dashboard.pinggy.io

The --manage option names the dashboard host. The documentation lists the same command without it. The first successful connect saves the token on the machine, so later runs need only pinggy device connect. The token is stored in a JSON file under the user's config directory, and it is used automatically by the CLI on subsequent connections.

Step 2: Keep the Device Running in the Background

After sign in, the agent stays in the foreground until you press Ctrl+C. That is useful for the first test, because you can see the connection status directly. But a foreground process dies when you close the terminal or log out. To keep the machine available, stop the foreground agent and reconnect in the background with -b:

pinggy device connect -b

On a machine with no saved token, add the token explicitly: pinggy device connect --token <TOKEN> -b. The CLI also accepts --b, but the documentation uses -b. 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 run pinggy daemon stop to stop the whole daemon. The dashboard then shows the device offline.

Press enter or click to view image in full size

Terminal on macOS showing the Pinggy daemon stop command flow

This background mode is the one you will use most of the time. It lets the machine stay connected even after you close the terminal window, switch wifi networks, or walk away. The agent is lightweight. It does not consume a terminal session, and it does not show your commands to other users on the same machine. It simply maintains the outbound channel between the device and the dashboard.

Step 3: Open the Terminal and Run Claude Code

Open the Pinggy Devices page and click your device. The Overview tab shows its hostname, operating system, CPU and memory, with live usage. This is useful for confirming that the device is healthy before you open a shell. If the device appears offline, check whether the background agent is running on the machine.

Press enter or click to view image in full size

Pinggy dashboard device overview showing system usage

Open the Terminal tab and click New shell. Each shell gets its own tab. From there it is an ordinary terminal. You can run any command that the user can run on that machine. For example:

cd ~/code/storefront
claude

The browser terminal acts like any other terminal. You can run git commands, package managers, test runners, log viewers, and anything else installed on the machine. The keystrokes are sent through the Pinggy dashboard to the shell, and the output is streamed back to the browser. If you are familiar with terminal multiplexers, the experience feels like a persistent remote session.

If Claude Code is not installed yet, install it from this shell with curl -fsSL https://claude.ai/install.sh | bash. However, log in while you are still at the machine, because the first launch may open a browser window there. Claude Code has a fallback that lets you copy the login URL, but it is easier to authenticate directly at the keyboard. Once authentication is done, the browser terminal can use the same login because it runs as the same user.

Press enter or click to view image in full size

Pinggy browser terminal running Claude Code

Get Andrew’s stories in your inbox

Join Medium for free to get updates from this writer.

Closing the browser tab does not end the shell. If you close the tab and come back later, the Terminal tab will redraw the screen as you left it. This is a major advantage over a simple web SSH client: the session remains alive on the machine, not in the browser. You can even open the Terminal tab from a different browser or a different device and see the same session, as long as you are signed in to the same Pinggy account.

Step 4: Run Long Tasks in the Background

A dashboard shell has some limits. It 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, you should start a background session instead. A separate supervisor process runs the session, so it keeps working with no terminal attached.

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 immediately and printed:

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. This makes it ideal for long test runs, code generation tasks, refactoring, and other work that should continue after you close the browser tab.

The background task system is part of Claude Code, not part of Pinggy. Pinggy provides the terminal; Claude Code provides the background supervisor. This separation is clean. You could run any other long lived command in a Pinggy shell and keep it alive with tools like nohup or a terminal multiplexer. But the native claude --bg flow is more convenient because it knows how to manage sessions, output logs, and worktrees.

Free vs Pro

Every plan, Free included, gets the browser terminal. Prices are from the Pinggy pricing page and limits from the Pinggy Devices documentation, checked on November 3, 2026. The Free plan costs $0 and includes 1 device, 1 terminal per device, and 1 terminal open across all devices. The Pro plan costs $2.50 per month billed annually, or $3 per month billed monthly, and includes 25 devices, 3 terminals per device, and 10 terminals open 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, and its pricing card lists unlimited devices and terminals. If you need to reach multiple machines or share access with a team, Pro or Enterprise is worth considering.

The terminal limit matters when you want to run several tasks at once. On Free, you are limited to one shell, which is fine while you are starting out. On Pro, you can have a shell for Claude Code, a shell for a local development server, and a shell for git or shell commands. This makes the browser terminal feel like a real workstation, not just a single command portal.

How This Compares With Remote Control and SSH

Claude Code has another remote access option called Claude Code Remote Control. It needs a Pro, Max, Ultra, Team or Enterprise subscription, not API keys, and it only reaches a claude process that is already running. Someone has to start claude remote-control at the machine. That is fine for some scenarios, but it is not a general purpose terminal. You cannot use it to restart the machine, edit files outside a Claude session, or start a different tool from scratch.

SSH needs a server listening on the target machine and, behind NAT, a tunnel such as:

ssh -p 443 -R0:localhost:22 tcp@free.pinggy.io

That tunnel works, but the public address changes every 60 minutes on the free tier. You need an SSH client, a valid username, and a way to handle the changing hostname. A Pinggy Devices shell has neither of those limits. You can start Claude Code from scratch, restart a dev server, run git pull, or use Codex instead. Any Claude login or API keys available on the machine work in that shell because it is a real user session.

The browser terminal is also more accessible. You do not need to install an SSH client on the device you are connecting from. You only need a modern browser. That is helpful when you are using a shared computer, a tablet, or a locked down machine where installing software is not allowed.

Security and Access Control

Security is a natural concern when you give a browser access to a terminal. The device token sits in device.json under ~/.config/pinggy/, readable only by your user. According to the documentation, the agent never logs what you type. The Activity tab lists the device's events with source IP addresses, so you can see where and when connections were made.

Anyone signed in to your Pinggy account can open a shell on your devices, as your user, and run claude with your Anthropic login. That makes account security critical. Turn on 2 factor authentication first. Keep the dashboard's connect commands out of screenshots and chats, since they contain the device token. If you share a screenshot of your terminal, blur any token values that appear in the command history.

To cut a machine off, delete the device or rotate its token in the dashboard. This is immediate. The device will not be able to reconnect unless someone runs the connect command again with the new token. Note that pinggy device remove only forgets the token locally. It does not remove the device from your Pinggy account. Use the dashboard for account level revocation.

There are also practical security benefits to the outbound only model. The machine does not expose any inbound port, so port scanners will not find an SSH daemon. The attack surface is reduced to the Pinggy dashboard and the outbound agent connection. That is a smaller and more controlled surface than a typical always on SSH server on the public internet.

Troubleshooting

If the Terminal tab is greyed out, teh CLI on that machine is too old. Run the install command again. The Pinggy CLI updates frequently, and older versions may not support the browser terminal feature. The install script is safe to run again; it updates the CLI in place while keeping your saved device token.

Another common error message says: This machine already runs as device <id> in the background. That means a background agent already holds the connection. Stop it first with pinggy device stop. Then run login or connect in the foreground. Trying to start a second agent will fail because the first one already owns the device connection.

If the browser terminal appears blank after you reconnect, refresh the dashboard page. The shell itself stays alive, because closing the browser tab does not kill it. Refreshing usually redraws the screen. If the machine slept for a long time, the connection may have dropped; check that the device is still listed as online in the dashboard.

If a background Claude Code session disappears after a reboot, that is expected. The machine stopped, so the supervisor process stopped. Start the machine, reconnect with pinggy device connect -b, and inspect the logs to see what happened before the reboot. Long running tasks should be run on a machine that is not expected to restart.

Practical Workflows

The browser terminal opens up several workflows beyond the basic Claude Code demo. Here are some realistic examples.

  • Start Claude Code in the morning from a phone to review failing tests before you reach your desk.
  • Run a coding task at work, then check the output from home over a secure browser session.
  • Use a home server as a development environment while sitting in a coffee shop, without opening a port on your home router.
  • Let a teammate open a shell on a staging box without exposing SSH to the public internet.
  • Pair a Pinggy browser terminal with a Pinggy localhost tunnel to test webhooks and API callbacks from a local development server.

You can use this with any command line tool, not just Claude Code. The browser terminal is a shell, so your shell history, aliases, environment variables, and prompt are all available. That makes it possible to debug production issues, inspect logs, run database migrations, or manage containers from any browser.

Frequently Asked Questions

Can I use this with Claude API keys? Yes. Because the shell is your own shell, whatever authentication method Claude Code accepts locally will work in the browser terminal. The browser terminal does not replace Claude authentication; it just gives you a terminal on the machine where Claude Code runs.

What happens if the terminal sits idle? The shell ends after 30 minutes with no activity, or after 8 hours regardless. For long jobs, use claude --bg or another background process that can survive the shell ending.

Does the agent work after reboot? No. You must run pinggy device connect -b again after a reboot. You can configure this to happen automatically with a login item, a systemd user service, or a process supervisor, but the default install does not enable that.

Is SSH required? No. The agent uses an outbound connection. There is no SSH server, no open port, and no public IP required on the target machine. You can still use SSH inside the browser terminal to reach other machines, but it is not part of the setup.

Can I open more than one shell? The Free plan gives one shell. Pro gives three per device. Each new shell appears as a tab in the Pinggy dashboard. If you need more, check the current plan limits on the Pinggy pricing page.

Does the browser terminal support copy and paste? Yes, browser clipboard functions work with the terminal. You may need to use the context menu or keyboard shortcuts depending on your browser. Inside the shell, standard terminal commands and text selection behave as expected.

Recap

The setup is surprisingly short. Install the Pinggy CLI, connect the device, and use the browser terminal to run Claude Code. Three commands cover the main workflow:

curl -fsSL https://pinggy.io/install.sh | sh
pinggy device connect -b
claude --bg '<your task>'

Then open the device's Terminal tab on the Pinggy dashboard, click New shell, and start working. The first shell is free, the setup takes minutes, and it requires no public IP, no SSH server, and no complex firewall rules.

The browser terminal is especially useful for Claude Code because Claude Code sessions can be long, interactive, and full of context. You need a terminal that can keep up with output, survive temporary disconnects, and let you return to the same screen later. Pinggy Devices gives you that experience from any browser.

References

--

--