VIBELET / Claude Code + Codex

Your next idea.
Already in motion.

Keep your AI sessions moving. Follow progress, send a message, and approve the next step — from your desktop, phone, or browser.

VIBELET / WORKSPACEDESKTOP
Desktop workspace · macOS
Keep going on mobile
Keep going on mobile

One conversation. Across your devices.

  • macOS
  • Windows
  • Linux
  • iOS
  • Android
  • Web
💻

Desktop, mobile, and web

Available on Windows, macOS, Linux, iOS, Android, and the web.

📱

Continue an existing session

Pick up a session from your computer on your phone, with your conversation history intact.

🤖

Claude Code and Codex

Use Claude Code and Codex in one app, and switch between sessions.

📎

Share images and view files

Send screenshots to the AI, view images in replies, and browse files on your computer.

🛡️

Approve from your phone

Review permission requests from the AI on your phone, then allow or deny them.

🎨

Choose your theme

Classic or Minimal, light or dark. Pick your own accent color in Minimal.

Screenshots

See it in action

Manage assistant sessions at your desk, or keep the conversation going from your phone.

Desktop · macOS

Your sessions and conversations in a full desktop workspace. Select a screenshot to view it at full size.

Desktop workspace · Light
Desktop workspace · Light
Desktop workspace · Dark
Desktop workspace · Dark

Mobile

Get App

Use Vibelet on your computer and phone

Use the free desktop app at your desk, and pair with the phone app to continue when you step away.

macOS · Beta

Vibelet for Mac

Free desktop app for Apple Silicon. Beta download, signed and notarized by Apple.

Download for Mac
Windows · Beta

Vibelet for Windows

The free x64 Windows beta is being prepared for release.

Linux · Beta

Vibelet for Linux

The free x64 Linux beta is being prepared for release.

iOS

Install Vibelet on iPhone

Install the official App Store release for everyday phone control.

Stable

App Store release

The normal iPhone install path for controlling paired sessions.

Open App Store
QR code for the iOS App Store download
Android

Install Vibelet on Android

Download the official Android APK for everyday phone control.

Stable

Release APK

Primary Feishu download for controlling paired sessions on Android.

Download APK
QR code for the Android release APK download
Before You Pair

Make sure the setup path is ready

  • Start the desktop connector on the computer that should keep working
  • Use the default Remote Direct QR, or pass --access=local when you only want LAN pairing
  • Open Vibelet on your phone and scan the QR before stepping away
Getting Started

Three steps from desk-bound to phone-controlled

Start the connector, scan once, and keep the session moving when you are away from the computer.

Install

Start the connector on the computer that will do the work

Run this before you leave the desk so the phone has something to pair with.

npx vibelet
Connect Your Phone

Scan once from the phone

  1. Install the Vibelet app from the App Store or release APK
  2. Open the app and tap Scan QR Code
  3. Scan the QR code displayed on your computer
Start a Session

Send the next instruction from anywhere

  1. Tap New Session in the app
  2. Choose the remote assistant configured on your computer
  3. Type your prompt and send
What You Get

What changes after pairing

  • Leave the computer running while you approve or reply from the phone
  • Keep separate sessions for different folders or projects
  • Come back later without losing the session context
  • Use the default Remote Direct connections, or --access=local when you only want LAN pairing
Remote Access

Use remote access only as much as you need

Remote Direct is enabled by default. You can also use your local network or an existing network path.

Remote DirectEnabled by default

Connect from your phone without extra setup

Vibelet automatically establishes an encrypted connection between your phone and computer. No separate networking app or account is needed.

npx vibelet

Run npx vibelet, then scan the pairing QR with the current app. LAN remains available.

Open the remote connection guide
Custom Relay

Use the network path you already trust

Already running cloudflared, ngrok, or another tunnel? Pass its public URL directly.

# Cloudflare (manual)
npx cloudflared tunnel --protocol http2 --url http://localhost:9876

# ngrok
ngrok http 9876

# Then tell Vibelet to use it:
npx vibelet --access=https://<your-tunnel-url>

The relay URL is persisted in ~/.vibelet/relay.json and reused on restart.

Built-in TailscaleVPN + Tailnet

Keep your proxy VPN and reach Vibelet over Tailscale

Recommended on iPhone when you need a proxy VPN and Tailscale at the same time. Use Stash or another proxy app that can run Tailscale as an internal node and route Tailnet traffic to it.

npx vibelet --access=<computer-tailscale-ip>

Route 100.64.0.0/10 and *.ts.net to the Tailscale node. Do not leave 100.64.0.0/10 in Stash Skip Route.

Open the Stash example setup
FAQ

A few networking notes

Short answers for the pairing and relay edge cases that come up most often.

Why do some proxy apps mention *.argotunnel.com?

When Cloudflare Tunnel or Argo Tunnel is in the path, some rule-based proxy apps need *.argotunnel.com treated as a real IP target and excluded from the proxy chain.

In Loon-style configs, that usually means putting *.argotunnel.com in real-ip and skip-proxy. The goal is simple: resolve the tunnel hostname normally and connect to it directly instead of bouncing that tunnel traffic through another proxy layer.

For example, in Loon you may need this in `[General]`: `real-ip = *.argotunnel.com` `skip-proxy = *.argotunnel.com`

If your current network cannot reach *.argotunnel.com directly, do not keep it in skip-proxy. Route it through a stable proxy policy instead, or use a custom relay / Tailscale path.

I scanned the QR code and saw "Network request failed". What does that usually mean?

That error usually means the phone could not reach the host inside the QR payload at all, before Vibelet received any HTTP response.

Common causes are: the phone and computer are not on the same reachable network, the QR points to a LAN or .local address that the phone cannot resolve, Local Network permission was denied on iPhone, or a proxy app intercepted the tunnel / relay domain incorrectly.

If you are using a remote tunnel, make sure the relay hostname itself is reachable. If you are using LAN-only pairing, try the computer LAN IP directly or rerun Vibelet with the right --access host list.

Why did the QR code expire?

The pairing QR is intentionally short-lived and one-time-use. That keeps the pairing flow simple without leaving a reusable open window behind.

If it expires, just run `npx vibelet` again on your computer and scan the fresh QR code. If this phone was already paired before, reconnecting from the saved device entry may still work.

When should I use --access=local?

Use `npx vibelet --access=local` when your phone and computer are already on the same LAN and you do not want Vibelet to use the default Remote Direct connections for that run.

Use plain `npx vibelet` when you want the QR code to be remote-ready by default. That is the better default when you are not sure whether the phone will stay on the same local network.

What is the difference between a custom relay and Tailscale?

A custom relay means you already have a public tunnel URL, such as Cloudflare Tunnel or ngrok, and pass it to Vibelet with `--access=https://...`.

Tailscale is different: there is no public relay URL in Vibelet. Instead, you tell Vibelet the machine Tailscale IP with `--access=<tailscale-ip>`, and your phone must also be logged into the same tailnet.

How can I use a proxy VPN and Tailscale for Vibelet at the same time on iPhone?

iOS allows only one system VPN tunnel at a time, so two independent VPN apps cannot both own the tunnel. Use Stash or another proxy app that can run Tailscale as an internal routable node inside the same tunnel.

The app must support both a built-in Tailscale node and rule-based routing; ordinary Tailscale protocol recognition is not enough. Stash exposes this capability as a `type: tailscale` node, so the guide uses Stash as the concrete example.

Send `100.64.0.0/10` and `*.ts.net` to that node, while normal internet traffic keeps using your existing Stash proxy groups. Vibelet can then use the computer Tailscale IP without turning off the proxy VPN.

Do not put `100.64.0.0/10` in Stash Skip Route. Skipped traffic never reaches the Tailscale node and the Vibelet health check will time out.

See the Stash example guide for the complete configuration and authentication steps. Other compatible apps may use different configuration syntax.