$ claude · on your phone

Your terminal's claude CLI,
on your phone too.

A phone UI that drives your terminal claude through the Agent SDK—same session, same host settings. Touch layout, not a screen mirror. One driver at a time: when the terminal is writing, the phone is read-only on the transcript until you take over.

Approvals open in the app with full command + cwd. Push is type-level only (tool name, not the command body).

Not Anthropic’s official mobile app — an independent, self-hosted open-source project. Spec: Claude Agent SDK.

What is Claude Chat Mobile?

Claude Chat Mobile is a self-hosted phone UI that drives your terminal claude through the Claude Agent SDK—same session, same host settings (user/project/local). The interface is rearranged for touch (bubbles, tool cards), not a remote-desktop screen mirror, and not a second cloud Claude or Anthropic’s official mobile app.

For people who already use Claude Code at a desk and need approvals, progress, or a continued session from a phone. One operator per instance; one writer at a time (single-driver). Lock the host with tokens and device trust before any public URL.

  • Self-hosted; single-user per instance—not multi-tenant SaaS.
  • With no AUTH_TOKEN, the server binds 127.0.0.1 only.
  • CLI settings allow-lists are inherited; off-list actions suspend and show full command + cwd in the app. Push is type-level (tool name only).
  • Independent open source (AGPL). Read the security model before public exposure.
Approving a git push from the phone
Typical flow

You leave the desk. The session keeps running.

22:30You send: "merge the duplicate date helpers in utils into one function, make the tests pass."

22:30Claude streams back, threaded with Read · Edit · Bash(npm test) tool cards.

22:39You unlock. The page has reconnected and replayed missed output from the server buffer: tests passed, and an in-app approval is waiting with the full git commit command and working directory. You tap Allow.

22:40"Now add a line to the CHANGELOG." It remembers what it just changed, and picks up right where it left off.

When it helps

Claude Code is running. You are not always at the desk.

A phone UI on your terminal claude—not a remote desktop, not another hosted Claude.

01

Approve from a meeting or the road

A long task stalls on a dangerous step or a multiple-choice question. Push reaches your phone with a type-level hint (e.g. “needs authorization: Edit”)—open the app for the full command and working directory, then allow, deny, or pick an option without walking back to the terminal.

02

Peek while the desk still drives

While the desk CLI still drives the session, the phone follows the on-disk transcript read-only (catch-up, not attach to the live process). Take over when you mean to—usually after the current turn—so both sides do not write the same session at once.

03

Start on phone, resume at the desk

Both sides read the same CLI transcript (same session id). Sketch on the phone, then /resume at the desk—or open a CLI-driven session on the phone as a read-only mirror. Continue the thread, not a second conversation.

04

Watch several repos at once

Switch among whitelisted workspaces, the home hub, and session lists (including worktree groups)—not “browser tabs,” and not cramming multiple desktop windows onto a phone remote desktop.

05

Capture an idea with phone-first input

Slash commands you can tap, attach from the photo library or files, long-press to copy. Built for touch—not a shrunk terminal. Not a claim of camera-only “snap and send”.

06

Stay in the loop on flaky networks

If the instance is online and reachable, reconnect and replay missed output after a drop. That is reconnect—not offline mode in airplane mode.

Self-hosted, one user per instance. Works where your CLI already works (subscription or gateway). Not multi-tenant SaaS.

Phone layout for the same session

Streaming output with Markdown rendering

Streaming

Markdown · syntax highlight · status line

Tool-call cards

Visible process

tool calls render as collapsible cards

Dangerous actions approved from the phone

Approve on phone

in-app: full command + cwd; push is type-level only

Multi-repository workspace session switcher

Workspace switcher

Watch and switch multiple repositories

Fine-grained settings control

Settings Panel

Permission modes and thinking effort

Direct log viewing

Real-time Logs

Inspect process logs and SDK errors

What it changes

Terminal claude, phone layout

01

Your terminal claude, not a clone

It ships no Claude of its own. The Agent SDK drives your host claude and filesystem settings (MCP, skills, hooks, allow-lists)—same session path as at the desk. The phone only changes how that stream is laid out.

02

Same session, single driver

Same session, same host settings; touch layout, not a shrunk terminal. One writer at a time: when the terminal is writing, the phone is read-only on the transcript until you take over.

03

Approve risky actions from your phone

Off-allowlist actions are suspended. The app shows the full command and working directory; push only names the tool. Nothing runs until you allow it in the app.

04

Handles flaky mobile networks

The task lives server-side, decoupled from the socket. After a dropped mobile connection, the page reconnects and replays missed events.

6 permission modes Per-message model switching Multi-repo · multi-session File & image upload Web Push PWA-installable Zero-CDN, self-hosted Official or gateway
Security model

A code-execution channel into your shell

1

Single-user per instance

You run your own instance for yourself. There are no accounts or multi-user controls; anyone who passes auth has the same power as you at the terminal.

2

No token, no exit

With no AUTH_TOKEN set, the server binds to 127.0.0.1 only. There is no "empty = open to the world" path. Reaching the internet requires a token.

3

CLI permissions are inherited

Auto-approve comes from your existing CLI settings allow-list (user/project/local). Off-list actions suspend; the app shows full command + cwd. Push is type-level (tool name only).

4

Device trust (TOFU)

A connection that is neither local nor Access-verified must be authorized once on your computer before it can do anything. A valid token alone is not enough.

No AUTH_TOKEN ⇒ binds 127.0.0.1 only. It cannot reach the public internet until you deliberately open it.

Scope

When it's worth it

This is not “open a remote desktop back to your computer.” A remote desktop mirrors a screen. This is a phone UI on your terminal claude session: same session and host settings, touch layout; in-app approvals, single-driver handoff, multi-workspace progress, library/file upload, long-press copy.

If you only glance in remotely now and then, a remote desktop is enough. This project is for using the phone often as a terminal companion.

Run it on your own machine

Self-hosted. No shared demo: the phone UI drives your own host claude via the Agent SDK.

Prerequisites: Node.js ≥ 20 on macOS or Linux, and a working claude CLI on the host. Official subscription works out of the box; third-party gateways work by exporting the required ANTHROPIC_* variables in the shell that starts the server.

# clone, install runtime deps, configure, run git clone https://github.com/Ike-li/claude-chat-mobile.git cd claude-chat-mobile npm install --omit=dev npm run setup # generate AUTH_TOKEN + ask WORK_DIR # Optional gateway: export ANTHROPIC_* in this shell before starting npm start # http://localhost:3000