Connection issues
Claude can't connect to the server
Claude can't connect to the server
Claude requires a public HTTPS URL to reach your Reacher server.
-
Confirm the server is running and reachable:
You should get
{"status":"ok",...}. If this fails, the problem is network/DNS, not Reacher. -
Verify your reverse proxy is forwarding to the correct port (default
3000). -
Make sure the full URL you gave Claude includes the token:
-
Check that port
3000is not blocked by a firewall on your VPS.
401 Unauthorized
401 Unauthorized
Server not starting
Server not starting
Check the container logs for the actual error:Common causes:
- Missing required env vars —
MCP_SECRET,TAILSCALE_API_KEY, andGITHUB_TOKENmust all be set. A missing variable causes startup to fail with an explicit error message listing the missing keys. - Port already in use — another process is bound to port
3000. ChangePORTin.envor stop the other process. - Malformed
.env— quotes around values can cause parsing issues. Values in.envdo not need quotes.
SSH issues
SSH not working — connection refused or timeout
SSH not working — connection refused or timeout
Check that the device is online
Ask Claude to run
tailscale_status and confirm the target device shows as online: true. An offline device cannot be reached over SSH.Verify Tailscale SSH is enabled on the target
Tailscale SSH must be explicitly enabled on each target machine. SSH to the device manually and run:
Test the connection manually
From the Reacher server itself, test that SSH works:If this fails, the issue is with SSH credentials or Tailscale connectivity, not Reacher’s tool layer.
Command blocked unexpectedly
Command blocked unexpectedly
The command matched an entry in If the block is incorrect — for example, a legitimate command contains a blocked substring — you have two options:
SSH_BLOCKED_COMMANDS. The response includes matched_rule showing which rule triggered.To see your current blocklist:- Remove the specific entry from
SSH_BLOCKED_COMMANDSorssh.blocked_commandsin your YAML config, then restart. - Reword the command to avoid the substring. Remember that matching is substring-based, so
dd if=...matches the blocked entrydd.
Permission denied on a directory path
Permission denied on a directory path
ssh_exec returned blocked: true with reason: "Path not in allowed directories".This means SSH_ALLOWED_DIRS (or ssh.allowed_dirs) is set and the command references a path outside the allowed prefixes.Options:-
Add the path to your
SSH_ALLOWED_DIRSlist: -
Clear the allowlist if you no longer want directory restrictions:
Tool errors
fetch_external: domain not allowed
fetch_external: domain not allowed
The target domain is not in Restart the server. The full hostname must match —
PROXY_ALLOWED_DOMAINS.Add it to your .env:api.github.com and github.com are treated as separate entries.GitHub authentication failed
GitHub authentication failed
The
GITHUB_TOKEN in your .env is either missing, expired, or lacks the required scopes.-
Verify the token is set:
- Check that the token has not expired in GitHub Settings → Tokens.
-
Confirm the token has the right scopes:
repo(or specific repo access) forgithub_searchand API calls viafetch_externalgistforgist_kb
-
Generate a new token and update
.env, then restart the container.
gist_kb errors
gist_kb errors
gist_kb requires GITHUB_TOKEN with gist scope (read and write). A token with only repo scope will fail.- Go to GitHub Settings → Tokens
- Edit your token and enable the
gistscope - Save and update
GITHUB_TOKENin.env - Restart the server
.env, confirm the container picked up the new value:Browser tool issues
agent-browser not found
agent-browser not found
The If you’re running Reacher in Docker, this must be included in your Docker image or installed in the container. The default Rebuild and restart the container after making this change.
browser tool depends on the agent-browser CLI being installed globally on the server.Dockerfile does not include it — add the install step if you need browser support:CDP connection refused
CDP connection refused
The browser tool connects to a CDP-compatible browser at
ws://BROWSER_CDP_HOST:BROWSER_CDP_PORT. Connection refused means no browser is listening on that address.- Confirm the browser process is running.
-
Check the default endpoint:
ws://127.0.0.1:9222. -
If your browser is on a different host or port, update
.env: - Restart Reacher after changing the config.
Setting up Lightpanda
Setting up Lightpanda
Lightpanda is a lightweight headless browser with CDP support. To use it with Reacher:
- Download and install Lightpanda on your server following the instructions in its repository.
-
Start Lightpanda with CDP enabled on port
9222: -
Leave
BROWSER_CDP_HOSTandBROWSER_CDP_PORTat their defaults, or set them to match your Lightpanda configuration. -
Verify the connection: