Skip to content

Why Does Claude Code Remote-Control Keep Disconnecting and How to Fix It

Problem

When I use Claude Code remote-control from my phone, it keeps disconnecting. I see dropped connections, stuck sessions, and sometimes I can’t clear sessions remotely. On mobile, I have no visibility into permission prompts that might be blocking operations.

Here’s what users are reporting:

Reddit user reports
FromAtoZen (55 points): "It sucks... always disconnecting. Tailscale is much more feature rich."
detinho_ (3 points): "Still a bit buggy... from the phone there were no options nor signs of processing...
arrived home to see a permission request."
se7eneyes (16 points): "Really wanted to use remote-control, but the inability to clear sessions
remotely is a deal breaker."

Environment

  • Claude Code remote-control
  • macOS (host machine)
  • iOS/Android (mobile client)
  • Network: WiFi and cellular

What happened?

I tried to use Claude Code remote-control to access my development environment from my phone. The idea is great - I can continue coding tasks while away from my desk.

But I kept running into these issues:

  • Network switching drops connections: Moving from WiFi to 5G (or vice versa) disconnects the session
  • Silent permission prompts: Permission requests appear on my Mac but I can’t see them from my phone
  • No automatic reconnection: After a drop, I have to manually reconnect
  • Session lock-up: Sometimes sessions get stuck and I can’t clear them without physical access to my Mac

The core problem is that remote-control doesn’t handle network transitions gracefully, and there’s no built-in recovery mechanism.

How to solve it?

I found three solutions that work together:

Solution 1: Configure launchd with KeepAlive

I created a launchd service that automatically restarts Claude Code remote-control if it crashes or exits unexpectedly.

First, I created the plist file:

~/Library/LaunchAgents/com.claude.remote-control.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.claude.remote-control</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/claude</string>
<string>remote-control</string>
</array>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/claude-remote.err</string>
<key>StandardOutPath</key>
<string>/tmp/claude-remote.out</string>
</dict>
</plist>

Then I loaded the service:

Load the launchd service
launchctl load ~/Library/LaunchAgents/com.claude.remote-control.plist
# Verify it's running
launchctl list | grep claude

Now if remote-control crashes or disconnects, launchd automatically restarts it.

Solution 2: Use Tailscale for stable networking

Instead of relying on raw network connections that drop during WiFi/cellular transitions, I use Tailscale as a mesh VPN layer.

Install and configure Tailscale
# Install Tailscale on macOS
brew install tailscale
# Start Tailscale
sudo tailscale up
# Get your Tailscale IP
tailscale ip

I installed Tailscale on both my Mac and my phone. The Tailscale IP stays stable even when I switch networks. Tailscale handles:

  • Automatic reconnection on network changes
  • NAT and firewall traversal
  • More reliable connections than raw TCP

Solution 3: Pre-approve permissions before leaving

Before I leave my computer, I make sure to clear any pending permission prompts:

Start remote-control locally first
claude remote-control
# Accept any permission prompts that appear
# Then I can leave with confidence

The reason

I think the key reasons for disconnections are:

  1. Network transition handling: Remote-control uses a simple TCP connection that doesn’t survive network changes. Tailscale wraps this in a mesh VPN that maintains connection state.

  2. No built-in recovery: Without KeepAlive, crashes or disconnects require manual intervention. launchd provides the auto-restart mechanism.

  3. Permission UI limitations: Permission prompts are tied to the local terminal session. From mobile, there’s no way to see or interact with them. Pre-approving before leaving is the workaround.

The combination of these three solutions addresses all the major pain points.

Summary

In this post, I showed how to fix Claude Code remote-control disconnection issues. The key point is using launchd KeepAlive for automatic restart and Tailscale for stable networking. Pre-approving permissions before leaving your computer prevents silent blocks from mobile.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments