Troubleshooting
Start with the relay URL and the agent process. Most early failures are one of:
- the phone or agent cannot reach the relay URL
- the device was paired but the agent is not running
- Claude Code is not working locally on the agent machine
Run this first:
remote-cli doctorDevice Shows Offline After Pairing
remote-cli pair starts the agent after pairing. If that terminal exits, the device goes offline.
On the agent machine:
remote-cli status
remote-cli runFor background use:
remote-cli service install
remote-cli service status
remote-cli service logsQR Code Or Pairing URL Shows localhost
localhost only works from the same machine. If you scan a QR code containing http://localhost:8080, your phone tries to connect to itself, not your laptop.
Set the relay URL to a LAN IP, Tailscale hostname, or public HTTPS domain:
remote-cli relay init --url http://192.168.1.10:8080 --forcePhone Cannot Reach Relay
Symptoms:
- PWA does not load.
- Login says it cannot reach the relay.
- Reconnecting banner stays visible.
Check from the phone browser:
http://YOUR_RELAY_URLIf the page does not load, fix networking first.
Common causes:
- relay URL is
localhost - phone is on cellular but relay is LAN-only
- firewall blocks port 8080
- relay host is asleep
- relay process is not running
- reverse proxy is not forwarding WebSockets
Check the relay:
remote-cli relay status
remote-cli relay startFor Docker:
docker compose ps
docker compose logs relayDevice Shows Online But No Response To Messages
First check whether Claude works on the agent machine:
which claude
claude --version
claude --print "Reply with OK"If Claude says you are not logged in, authenticate Claude Code on that machine.
If Claude says you are rate-limited, wait until the reset time and try again.
Then watch the terminal running:
remote-cli runUseful logs include:
session start: <session-id>
session <id>: claude pid <pid> started
session <id>: claude init
session <id>: turn complete
session <id>: claude stderr: ...If no session logs appear after tapping a device, check the PWA for an error such as device_offline, device_busy, or device_unreachable.
Device Shows Busy
The relay marks a device busy while it has an active session.
Normal fixes:
- end the active session from the PWA
- wait for the agent to send
session.ended - restart
remote-cli runif the local Claude process got stuck
If the phone disconnects, the relay asks each affected device to end the owned session. The device should become online again after the agent sends session.ended.
Agent Online, Then Suddenly Offline
The relay marks a device online only while its agent WebSocket is connected.
Common causes:
- the
remote-cli runprocess exited - laptop/desktop/Pi went to sleep
- relay host restarted
- network changed
- relay URL became unreachable
- firewall/VPN changed
Restart the agent:
remote-cli runIf it reconnects and then drops again, check:
remote-cli service status
remote-cli service logsTapping A Device Does Nothing Or Session Never Starts
Check that the agent is currently connected to the relay.
On the agent machine:
remote-cli status
remote-cli runIf the PWA reports device_unreachable, the relay had the device in memory but could not deliver the message. This usually means the agent disconnected at the same moment. Restart the agent and try again.
Check the stored relay URL:
cat ~/.config/remote-cli/agent.tomlIf the relay URL is wrong:
remote-cli unpair
remote-cli pair --relay http://CORRECT_RELAY_URLClaude Auth Or Rate Limit Errors
The agent uses Claude Code locally. Each agent machine needs its own working Claude Code setup.
Verify on the agent machine:
claude --print "Reply with OK"If this fails, remote-cli cannot get a response from that machine either.
Common fixes:
- run the Claude Code login/auth flow
- wait for rate limits to reset
- confirm
claudeis on thePATHused byremote-cli runor the background service
Phone Cannot Scan QR Code
Camera-based QR scanning may require HTTPS depending on browser and platform.
Fallback:
- tap manual code entry in the PWA
- enter the 6-digit code printed in the agent terminal
If the code expired, rerun:
remote-cli pair --relay <relay-url>Relay Behind Reverse Proxy: WebSocket Fails
The relay uses WebSockets for both phone and agent connections.
For nginx, include:
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}Caddy usually handles this automatically:
relay.example.com {
reverse_proxy localhost:8080
}Reset Pairing On An Agent
On the agent machine:
remote-cli unpair
remote-cli pair --relay <relay-url>This resets the local agent credential. To remove the relay-side device record, delete the device from the PWA.
Reset Relay Admin Password
remote-cli relay reset-passwordReset Relay State
For local development only, stop the relay and delete the SQLite database.
Warning: this removes admin and device state.
Default local database:
~/.config/remote-cli/relay.dbFor Docker, stop the stack and remove the relay data volume.
What To Include In Bug Reports
Please include:
- OS and architecture of relay and agent machines
- relay deployment mode: npm/local binary, Docker, or source
- relay URL shape: LAN IP, Tailscale, public domain, etc.
- whether the PWA shows the device online
- output of
remote-cli doctor - output of
remote-cli status - whether
claude --print "Reply with OK"works on the agent machine - relevant agent logs from
remote-cli runorremote-cli service logs - relevant relay logs
Do not include tokens, JWTs, or private credentials.