claudex
Vol. 1 · Issue 0 remote.claude / cockpit edition
MIT · self-hosted node 20 · pnpm 9

Claudex.

Remote control for the claude CLI on your laptop. Open your phone, keep driving — review a diff, approve a permission, queue the next prompt.

Fig. A — what it is

A self-hosted browser for the
claude CLI on your machine.
Your keys. Your diffs. Your network.

Bind
127.0.0.1 only
Auth
password · TOTP
Inherits
~/.claude/ config
Designed for
390 px first
§ 01 The product

The cockpit fits
in your pocket.

Every screen is drawn for a 390-pixel viewport first. Bottom sheets, safe-area aware, iOS-keyboard-tuned. The desktop opens the same session into a wider cockpit — but the phone is the home turf.

Fig. 01
Tool calls collapse. Each read, grep, or bash becomes a one-line pill — tap to expand the full output, leave it collapsed for skim mode.
Fig. 02
Inline diff. The edit card opens a real diff with Accept · Reject right there. No detour to a separate review page for routine work.
Fig. 03
Slash · @ rail. A sticky chip strip above the keyboard. Triggers slash commands, file pickers, attachments, /btw side chats.
9:41 5G
Fix hydration mismatch on…
spindle · opus-4.7 · ask
the <time> element is throwing hydration warnings. take a look?
claude · opus-4.7
Hydration mismatches on <time> almost always come from locale-formatted dates. Let me check.
read app/(marketing)/page.tsx
grep "Intl.DateTimeFormat" 4
Found it — lib/date.ts uses the user's locale, which differs server vs client. Pinning to "en-US" on the server fixes it.
edit lib/date.ts +5 −3
@@ lib/date.ts
return new Intl.DateTimeFormat(locale, OPTS)…
+ const safe = typeof window === "undefined" ? "en-US" : locale;
awaiting you…
Looks good. After this, run vitest and open a PR.
Opus 4.7 · ask
Spec sheet
Viewport
390 × 844
Stream
WebSocket
Storage
SQLite (FTS5)
Daemon
launchd / pm2
Bind
127.0.0.1
Fig. 04 Also fits desks

Same session, wider canvas.

Sidebar with projects and saved filters. A grouped session list with branch, diff stats, and live status. The same data your phone sees, laid out for a 27-inch screen.

claudex.local — 127.0.0.1:5179/sessions
Sessions
All projects
Search sessions, files… ⌘K
Filter All 6 Running Needs approval 2 Scheduled Archived
spindle Next.js 15 · TS 2 sessions
Fix hydration mismatch on marketing
claude found the <time> issue, ready to patch
claude/fix-hydration
+24 −6 · 1f
needs you
Investigate slow cold-start on /api/search
p95 dropped 812 → 214ms after lazy import
claude/cold-start-debug
+22 −6 · 2f
running
ember-api Go 1.23 · HTMX 2 sessions
Add retry + jitter to webhook dispatcher
running tests in ./internal/dispatcher …
claude/webhook-retry
+112 −38 · 5f
running
Generate OpenAPI spec from route handlers
merged · #1284 · CI green
main
+860 −4 · 1f
archived
lumen Python · FastAPI 1 session
Audit dependency CVEs, propose upgrades
found 4 direct + 11 transitive advisories
main
no changes
idle
Sidebar + sessions list, same data your phone sees.
§ 02 Why claudex

Four things, said precisely.

We could list twelve features. We've listed four. The rest is in the documentation.

  1. 01

    Phone-first by design.

    Bottom sheets · safe-area · thumb reach

    Every screen is sized for a 390-pixel viewport, not retrofitted from a desktop layout. The desktop opens the same session into a wider three-column cockpit — but the phone is the home turf.

  2. 02

    Inherits everything.

    We spawn the CLI, we don't replace it

    Your config, MCP servers, plugins, skills, OAuth token — all yours, untouched. claudex drives the real claude CLI as a subprocess. We never call the Anthropic API ourselves.

  3. 03

    Auth from day one.

    Username · password · TOTP · ten codes

    There is no dev-mode backdoor. JWT in an httpOnly cookie. Ten single-use recovery codes printed once at init. The server refuses to bind anything other than 127.0.0.1.

  4. 04

    Real git worktrees.

    Branches · isolation · auto-rebase

    Each session lands on its own branch in an isolated worktree. Run five claudes on the same repo without stepping on yourself. Auto-rebase on create, auto-prune on archive.

§ 03 Install

One line, then you're in.

Walks you through admin setup, prints a TOTP QR and ten recovery codes, then offers to register a user-scoped daemon. Nothing silent. Sudo opt-in.

$ ~ — bash
$ curl -fsSL https://raw.githubusercontent.com/ahaostudy/claudex/main/install.sh | bash
After it runs

Open http://127.0.0.1:5179. Sign in with your TOTP. You're driving.

For your phone

Front it with Cloudflare Tunnel, frpc, or Tailscale. claudex stays bound to localhost — public exposure is your call.

If anything breaks

The Troubleshooting page covers boot loops, restart hangs, and HTTP-vs-HTTPS gotchas.