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:
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 sessionsremotely 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:
<?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:
launchctl load ~/Library/LaunchAgents/com.claude.remote-control.plist
# Verify it's runninglaunchctl list | grep claudeNow 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 Tailscale on macOSbrew install tailscale
# Start Tailscalesudo tailscale up
# Get your Tailscale IPtailscale ipI 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:
claude remote-control
# Accept any permission prompts that appear# Then I can leave with confidenceThe reason
I think the key reasons for disconnections are:
-
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.
-
No built-in recovery: Without KeepAlive, crashes or disconnects require manual intervention. launchd provides the auto-restart mechanism.
-
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