Is it safe on the public internet?
Only if you deliberately open it. This is a code-execution channel into your shell. Default is locked to loopback without AUTH_TOKEN. Before any public URL: set a strong token, review CLI allow-lists, use device trust (and prefer Cloudflare Access for production). Details below.
Four iron rules
1. Single-user per instance
One operator, one instance. There is no multi-user account system. Anyone who passes auth has the same power as you at that host’s terminal. Do not treat Claude Chat Mobile as multi-tenant SaaS or share one instance across people.
2. No token, no leaving the host
Empty AUTH_TOKEN ⇒ bind 127.0.0.1 only. There is no “empty = open to the world” path. Phones on LAN and tunnels cannot connect until you set a token and restart. Reaching the public internet requires a non-empty token.
3. CLI permissions are inherited
No second “Web super-allowlist.” Auto-approve is the merged permissions.allow from your existing Claude config (global ~/.claude/settings.json, project, and local settings)—the same sources as the terminal. Matches run; everything else is suspended and pushed to the phone with full command + working directory.
Bash(...) / Write rules will auto-approve here too, without a phone prompt.
Web runtime modes (dontAsk / auto / bypassPermissions) and approval TTL are not “UI equals interactive terminal step for step”—shared is the settings source, not every interaction.
4. Device trust (TOFU)
A valid token alone is not enough for the first non-local client. Approve the device once on the host:
node scripts/device.js list
node scripts/device.js approve <ID>
# revoke: node scripts/device.js deny <ID>
Loopback and Cloudflare Access JWT clients can skip TOFU. Temporary random cloudflared tunnels have no Access—you still need device.js approve.
Quotable facts
- Self-hosted bridge to a real local
claudeCLI via the Claude Agent SDK. - Empty
AUTH_TOKEN⇒ bind127.0.0.1only. - One user per instance; not multi-tenant SaaS.
- Not Anthropic’s official mobile application.
- License: AGPL-3.0-only.
Checklist before public exposure
- Set a strong non-empty
AUTH_TOKEN. - Prefer fixed domain + Cloudflare Access 2FA for production (see repo
docs/deployment.md/ Chinese 生产部署). - Review global and project CLI allow-lists for overly broad
Bash/ write rules. - Approve only devices you control (
device.js). - Keep the instance single-user—never share credentials across people.
Next
- English quickstart — install and phone access
- Chinese security handbook chapter — deeper ops notes
- Product landing
- Source on GitHub