Free and Open Source · MPL-2.0

33stars446downloads

Start it in a terminal. Pick it up anywhere.

Uxnan Desktop runs Claude Code, Codex, OpenCode and any other CLI agent side by side, each in its own worktree. Start a session in a terminal, keep going in a chat, and pick it up on Uxnan Mobile: the same conversation, never started over.

Other platforms

Windows, Linux · macOS (experimental) · Android on Google Play · iOS coming soon

Uxnan DesktopALPHA
Reconnect backoff
Claude Code
Windows CI flake
Reconnect backoff
Add a reconnect backoff to the zero adapter and cover it with a test.

I'll read the adapter first, then add the backoff where the socket closes.

1 edit · 3 tool calls
Readzero-adapter.ts
Searchedreconnect · bridge/src
Editedzero-adapter.ts+18 −4
Runningnpm test -w uxnan-bridge
Working for 41s
Message the agent…
Opus 5.5Full access
uxnan/main

One conversation, every surface

A session goes where you go.

An agent's session isn't tied to the window you started it in. Keep working in a terminal, move to a chat when you would rather read than scroll, and take it with you on your phone. The history comes along, and so does the agent's memory.

01 · IN A TERMINAL

Claude Code
✻ Claude Code
❯ Give me a short tour
of this repository.
⏺ Here's the tour:
· uxnandesktop/ the app
· bridge/ the daemon
· relay/ optional
✻ done
❯
CopyCtrl C
PasteCtrl V
Continue as chat
Rename…
Split right
Split down

Run the agent with its full interface. When it is idle, Continue as chat closes it there with a signal to its process, never with keystrokes, and the shell stays.

02 · AS A CHAT

Repository tour
Repository tourClaude Code
Give me a short tour of this repository.

Here's the tour: the desktop app, the bridge on your PC and an optional relay, all speaking the contracts in shared/.

Message the agent…
Opus 5.5Full access
Open in terminal
Rename…
Archive
Delete…

The same session, with everything it already said, in a calm chat on your desktop. Open in terminal takes it back whenever you want the TUI.

03 · ON YOUR PHONE

9:41
Claude Code
Give me a short tour of this repository's components, one line each.
Work log3$ ls uxnandesktop bridge relay

Here's the tour:

  • •uxnandesktop/ the desktop app: agents side by side, each in its own worktree and terminal.
  • •bridge/ the daemon on your PC: drives the agents and keeps every conversation.
  • •relay/ optional, only when the phone and the PC are on different networks.
This conversation is open in a terminal on MacBook.Continue here
Message…

Still open in a terminal on your PC? The phone says so, and Continue here asks the PC to hand it over the moment the agent is idle.

Pick up any session

A new chat lists the sessions your agents had in that folder, from a terminal, their own app or another surface, and continues any of them with its history. Claude Code, Codex, OpenCode, pi, Zero and Grok list theirs; Antigravity continues from the terminal it runs in.

One writer at a time

While a terminal has a session open, nothing else writes into it, so two surfaces never talk over each other. And the agent keeps its memory when the bridge restarts or updates itself.

Bring your own agent

If it runs in your terminal, it runs in Uxnan.

22 agents report precise status: working, waiting, blocked or done. Each one resumes its sessions and keeps its own run options, and any other CLI you register launches exactly the same way.

Claude Code
Codex
OpenCode
Cursor
GitHub Copilot
Droid
Grok
Amp
Goose
Qwen Code
Kiro
Auggie
Devin
Kimi
Kilo Code
MiMo Code
Command Code
OpenClaude
Pi
OMP
Zero
Antigravitypartial support

These launch and run the same way, and show a working/idle indicator. Their CLI has no way to say a turn ended, so Uxnan doesn't claim a precise state it can't know.

Aider
Cline
Continue
Crush
Codebuff
Mistral Vibe
Rovo Dev
Autohand
Ante
+ any CLI agent

Every one of them runs as that vendor's own official binary, under the account you already signed it in with. Uxnan never calls a provider API, holds a key, or embeds an SDK. It drives the terminal, exactly like you would.

Parallel by default

One task. One worktree. One agent.

Every task gets its own isolated git worktree, so nothing an agent touches collides with what you're doing, or with the other three. You keep one window, and each of them keeps their own copy of the repo.

  • A new worktree in seconds, on a new branch, an existing one, or anywhere you like.
  • Terminals that survive sleep and restore with their scrollback intact.
  • Commit, push and open the PR with the merge methods your repo actually allows.
  • Subagents show up nested under the agent that spawned them.
uxnan· 3 active worktrees 1 ready
feat/reconnect-backoff
Claude Code · editing zero-adapter.ts
Working
fix/windows-flake
Codex · asking to run the suite
Waiting on you
docs/agent-surfaces
OpenCode · +142 −38 · ready to review
Done
$git worktree add ../uxnan--fixready in 0.9s

Alone or together

Each one works on its own. Together, nothing is missed.

Use the desktop without a phone, or the phone without the desktop. When they meet, whatever happened on one is already on the other, even what you did while offline. A chat open in Uxnan Desktop is on your phone too, live, with Claude Code, Codex, OpenCode, pi, Antigravity, Zero and Grok.

NEEDS · NOTHING ELSE

Uxnan Desktop

Terminals, chats, worktrees, git and a browser for your agents. No phone, no account.

NEEDS · THE BRIDGE ON YOUR PC

Uxnan Mobile

Start, steer and review agents from your phone. The desktop app doesn't have to be installed.

NEEDS · NODE ON YOUR PC

The bridge

Runs as a user service, keeps every project and conversation, and updates itself.

Claude CodeCodexOpenCodepiAntigravityZeroGrok
  • Every read, search, edit and command shows up as the agent takes it, the same way for every agent, on both screens.
  • Send, stop, answer an approval or switch the model from either one; the other shows it as it happens.
  • A chat you start from the phone gets Uxnan's tools too, while the desktop is running.

Agents that work together.

Inside Uxnan every agent already has uxnan-cli and Uxnan's MCP tools, with nothing to install. It can open a worktree, start a chat with another agent, wait for it and read what it answered, then test the app in a real browser. You see every step, and nothing it does is destructive.

an agent's terminal inside Uxnan
# Claude Code, working on main, hands a review to Codex
$ uxnan-cli worktree create --project uxnan --branch fix/flake
$ uxnan-cli chat start --agent codex --message-file review.md
$ uxnan-cli chat wait <chat> --for idle
$ uxnan-cli chat read <chat> --turns 1
# …and checks the result in the workspace's own browser
$ uxnan-cli browser open http://localhost:3100
$

Away from the keyboard

Then walk away.

Uxnan Mobile is a real client, not a status page. Pick the agent and the model, start the conversation, and steer it from wherever you are: the sofa, the bus, another country.

9:41
Claude Code

It pairs with a small daemon on your PC so the phone can stream a conversation, approve the next step and review a diff.

Architecture

Monorepo with:

  • •shared/: JSON-RPC + E2EE contracts
  • •relay/: optional, your own on Cloudflare
  • •bridge/: the daemon on your PC

The phone connects directly over LAN or Tailscale first, and only falls back to the relay when you are off that network

Status: ALPHA. Android is in open testing on Google Play, and the desktop ships stable and nightly builds.

Copy response
17.9k9
Message…

It streams, live

Watch the answer arrive token by token and every step as the agent takes it. Leave the app and come back, it is still there, still going.

Queue a follow-up

Send the next instruction while the agent is still working. On the CLIs that allow it, it lands mid-turn without stopping anything.

Review the diff

Read what changed and stage it from the phone, before anyone opens a laptop.

A push when it's done

The moment an agent finishes, your phone tells you, not fifteen minutes later.

It pairs with your PC, not with a cloud.

A small daemon runs on your machine and prints a QR code. Scan it once and the phone connects straight over your LAN or Tailscale, falling back to an optional relay only when you're off the network, and it never sees anything but sealed envelopes.

$ npm install -g uxnan-bridge
$ uxnan-bridge start
▸ scan the QR from the app

X25519 · Ed25519 · AES-256-GCM

9:41
LG
Welcome back
Luis
1 online nowMember since Jun 2026
This phone
Pixel 9
Android 16
DESKTOP-4RO76Q2
192.168.1.20:8765
Last connection: 13:00
LAN2 working
14 conversations
MBP-DEV
100.88.12.4:8765
Last connection: Jul 30, 18:42
Disconnected
Connect3 conversations

Measured, not guessed

Small enough to leave the machine to the agents.

An agent needs the CPU more than your editor does. So the number that matters is what the app costs while they work, and it is a measurement, not a marketing figure: every run records the OS, webview version, CPU, build profile and commit before it records a megabyte.

226 MB
workspace asleep
252 MB
one terminal open
274 MB
four terminals in splits

Windows 11 · release build · private working memory. Agent CLIs run in their own processes and are never counted as ours. Read how it is measured.

Open source

Free, open, and yours.

No paid tier, no key to hand over, no API of ours in the middle. Uxnan is built in the open and released under the MPL-2.0. If something is missing, the source is right there.

~/code
$ git clone github.com/luisgamas/uxnan
✓ cloned in 3.1s
$ cd uxnandesktop && npm ci
✓ dependencies installed
$ npm run tauri dev
▲ Uxnan Desktop dev running
$
  • Change the interface

    Every surface is Svelte and Rust, and the design tokens live in one file.

  • Teach it a new agent

    Register any CLI by hand, or wire a real adapter and get status and resume too.

  • Ship your own build

    MPL-2.0. Build it, patch it, run it on your own machines.

Give your agents somewhere to work.

Install it, sign your agents in the way you already do, and let them run. Your machine stays usable, and your phone keeps the thread.

Honest heads-up: the Windows and macOS builds aren't code-signed yet, so SmartScreen and Gatekeeper will warn you on first run. How to get past it. That's an alpha without a signing certificate, not a sign anything is wrong.