Now in beta

Your AI,
anywhere.

Control Claude Code and Codex CLI from your phone. One command install, QR scan connect — works over LAN or via secure tunnel from anywhere on the internet.

macOS / Linux bash
curl -fsSL https://aimote.net/install.sh | bash
aimote-server — zsh
╔══════════════════════════════════╗
║ AiMote Server v2.0.0 ║
╚══════════════════════════════════╝
─────────────────────────────────
Cloudflare Tunnel started
├─ Port: 5210
├─ PIN: Xk9mAp2Q
└─ Domain: a1b2c3d4.aimote.net
Scan QR to connect:
▄▄▄▄▄▄▄▄ ▄▄  ▄▄▄▄▄▄▄▄
█ ▄▄▄ █ ▄██▄ █ ▄▄▄ █
█ ███ █ ▄▀▀▄ █ ███ █
█▄▄▄▄▄█ █▄█▄ █▄▄▄▄▄█
▄▄ ▄▄▄▄▄ ▀▄▄ ▄▄ ▄▄▄▄
 ▄▀▄▀▀▄▀▀█▀▄▀▄▀▄▀▀▄▀
▀▀ ▀ ▀▀▄▀▄▄▀▀ ▀▀▀▄▀
▄▄▄▄▄▄▄ ▀▄▄▄▀ ▄ ▄▀▄
█ ▄▄▄ █ ▄▄▄▀ ▄▄▄▀▄▄
█ ███ █ █▄ ▀▄███▄▀▄
█▄▄▄▄▄█ ▄▄▀▄▀▀ ▄▄▀
URL: aimote://connect?host=a1b2c3d4...
Ready. Waiting for connections…
9:41 Connected
AiMote
+
Sessions History Settings
Claude
Build a REST API
~/projects/my-api
Codex
Fix TypeScript errors
~/projects/webapp · 12 msgs
Claude
Write unit tests
~/projects/api · 8 msgs
Sessions
📋History
⚙️Settings

Everything you need

Designed for developers who want their AI available wherever they are, on any device.

🔒

Zero-Config Tunnel

Start the server once and get a stable *.aimote.net URL instantly. No DNS, no certificates, no port forwarding. Powered by Cloudflare.

📱

QR Scan Connect

Open the mobile app, tap the QR icon, point your camera. Done. No typing, no copy-paste — you're connected in under three seconds.

📡

Live Output Streaming

Watch Claude think and code in real time. Tool calls, file edits, terminal output — everything streams to your phone the instant it happens.

💾

Session Persistence

Every conversation is archived. Browse history, resume where you left off, pick up a session from any device at any time.

🔐

PIN Authentication

Every connection requires an 8-character PIN. Your AI workspace is yours alone — no accidental public exposure.

🪟

Cross-Platform

macOS, Linux, and Windows. Claude Code and Codex CLI both supported. The mobile app runs on iOS and Android.

Three steps to AI freedom

From zero to connected in under two minutes.

1

Install the server

Run curl -fsSL https://aimote.net/install.sh | bash on your Mac or Linux machine. Windows users run the PowerShell script. The first launch starts a one-time setup wizard.

2

Scan the QR code

Open the AiMote app on your phone, tap the QR icon on the connect screen, and point your camera at the code shown in your terminal or browser.

3

Control your AI

Your Claude Code and Codex CLI sessions appear instantly. Start a new conversation, send a message, watch the output stream — all from your phone.

Choose your connection

Pick the mode that fits your setup. You can switch any time by editing ~/.aimote/config.json.

Custom Cloudflare

aimote-xxxx.your-domain.com

Bring your own Cloudflare account and root domain. Full control over your subdomain, routing, and access policies.

  • Your own domain name
  • Full Cloudflare Access integration
  • Custom tunnel configuration
  • Requires CF account with API token
📶

Direct Network

192.168.x.x:5210

No tunnel at all. Bind to 0.0.0.0 for LAN access, or use your own reverse proxy. Perfect for homelab setups and VPN users.

  • No external services needed
  • Works on LAN or over VPN
  • Configurable host binding
  • Bring your own reverse proxy

How users reach your server

AiMote Cloud is the default — zero config, handled by our provisioning Worker. The other tabs are for when you want your own domain or your own tunnel.

1

Install the server

One command — downloads a pre-built server bundle + cloudflared, sets up a launcher. No Cloudflare account needed, no API token handling on your end.

# macOS / Linux curl -fsSL https://aimote.net/install.sh | bash # Windows (PowerShell) irm https://aimote.net/install.ps1 | iex
2

Pick "AiMote Cloud" in the setup wizard

aimote-server # wizard prompt → 1) AiMote Cloud ★ Recommended 2) Cloudflare Tunnel 3) Direct Network Enter 1 / 2 / 3 [1]: 1

The server POSTs your machine's hash to provision.aimote.net. The Worker there creates a Cloudflare Tunnel + DNS record and returns a tunnel token scoped to only that one tunnel.

3

Scan the QR code

Once the server starts, it prints a QR containing aimote://connect?host={hash}.aimote.net&pin=…. Open the phone app, tap Scan QR, done.

No credentials in the binary. The server holds only a tunnel JWT — it can run your tunnel, but can't modify DNS, touch other tunnels, or affect other users' installs.
1

Locate cloudflared

If you installed via install.sh, it's already at ~/.aimote/bin/cloudflared — reuse it.

# reuse the one the installer placed alias cloudflared="$HOME/.aimote/bin/cloudflared" # or install system-wide: # macOS: brew install cloudflared # Windows: winget install --id Cloudflare.cloudflared
2

Start the tunnel

This exposes your local server to a random *.trycloudflare.com URL. Keep this terminal open.

cloudflared tunnel --url http://localhost:5210

Look for a line like https://random-words.trycloudflare.com in the output.

3

Point AiMote at that URL

Edit ~/.aimote/config.json — switch mode to manual and paste the domain:

{ "mode": "manual", "port": 5210, "host": "127.0.0.1", "pin": "JjvAWwve", "apiKey": "3D5K1eAVeAfwGmtNyDsnAhYdMt8fqShi", "manual": { "domain": "random-words.trycloudflare.com" } }

Restart the server. The QR page now encodes wss://random-words.trycloudflare.com — scan it from anywhere.

Heads up: Quick Tunnel URLs change every time cloudflared restarts. Great for demos and testing — not for long-term setups.
1

Create a Cloudflare API Token

Go to Cloudflare Dashboard → My Profile → API Tokens → Create Token. Use a custom token with these permissions:

Zone · DNS · Edit Account · Cloudflare Tunnel · Edit

Scope it to the account and zone (root domain) you want to use.

2

Run the setup wizard

If you already have a config, remove it first to trigger the wizard:

rm ~/.aimote/config.json aimote-server

When asked, choose 2) Cloudflare Tunnel. Paste your API Token and enter your root domain (e.g. example.com). The wizard will:

  • Verify the token and resolve your zone ID
  • Create a tunnel and DNS record for aimote-xxxx.example.com
  • Save the tunnel token to the config so it never needs re-auth
3

Start the server

From now on, aimote launches the WebSocket server and the cloudflared tunnel together. Your subdomain stays stable — tied to your machine's hostname hash.

Tip: Subdomain is immutable (derived from hostname()). If you want to change it, edit cloudflare.subdomain in config.json manually.
1

Bind the server to localhost

Set the server to listen only on 127.0.0.1 so it's not exposed directly — the proxy handles the public traffic:

{ "mode": "manual", "port": 5210, "host": "127.0.0.1", "pin": "...", "apiKey": "...", "manual": { "domain": "aimote.yourdomain.com" } }
2

Configure your reverse proxy

Caddy — auto TLS, shortest config:

aimote.yourdomain.com { reverse_proxy 127.0.0.1:5210 }

nginx — bring your own cert (Let's Encrypt, etc.):

server { listen 443 ssl http2; server_name aimote.yourdomain.com; ssl_certificate /etc/letsencrypt/live/aimote.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/aimote.yourdomain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:5210; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600s; } }
Must-have: The Upgrade and Connection: upgrade headers are required for WebSockets. Without them the client hangs at auth. Raise proxy_read_timeout to an hour so long-running agent sessions don't get cut.
3

Reload & verify

# Caddy caddy reload # nginx sudo nginx -t && sudo nginx -s reload # Quick check — should print HTTP 101 Switching Protocols curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" \ -H "Sec-WebSocket-Key: test" -H "Sec-WebSocket-Version: 13" \ https://aimote.yourdomain.com/

📱 How the client reads your config

The mobile app picks a URL scheme based on what you type into the connect form:

  • Looks like a domain (contains letters + a dot) → always wss:// on port 443. Port field is ignored.
  • Looks like an IPws://ip:port, plain TCP.
  • Starts with wss:// or ws:// → used as-is.
So: any domain you configure must be reachable over https:// on port 443 with valid TLS. Self-signed certs will be rejected.

Get started now

Install the server on your machine, download the app on your phone.

🖥️ Server

Runs on macOS, Linux, and Windows. Requires Node.js 18+.

macOS / Linuxbash
curl -fsSL https://aimote.net/install.sh | bash
Windows (PowerShell)powershell
irm https://aimote.net/install.ps1 | iex

Or clone and build manually:
git clone … && cd server && npm install && npm start

📱 Mobile App

Available for iOS and Android. Free to download.

Requirements on your machine:
• Claude Code CLI or Codex CLI installed
• Node.js 18+ for the AiMote server
• macOS, Linux, or Windows