Skip to content

Tailscode

Remote for AI coding agents

Your AI agents, anywhere

Tailscode is a native remote for Claude Code, Oh My Pi and opencode running on your own machines — a universal app for iPhone and iPad with the turn on your Lock Screen, and open-source desktop clients for Linux and the Mac. Point-to-point over your tailnet, no relay, no account.

Open source 5.0(1) GPL-3.0 iPhone iPad Linux Mac
  • Streams every turn live — thinking, tool calls, subagents, code
  • Approve, answer, and steer the agent without leaving the chat
  • iPhone, iPad, Linux, and Mac clients built on one shared core
  • Point-to-point over your Tailscale network — no relay, no tracking
Tailscode for Linux, Suomi theme light: Two sessions side by side — subagents fanning out, todos burning down
The Linux desk in the Suomi theme. Flip this page's theme — every screenshot follows.

tailscode sync --watch

One session, two machines, zero relays

Three stills from one real turn, captured on both machines at once: a prompt leaves the iPhone, lands on a claude-bridge server over the tailnet, and the session appears in the Linux desktop's sidebar already live. It is an ultracode turn, so both composers burn the rainbow while it runs. No relay server ever sees a byte of it.

Tailscode on iPhone: the prompt just sent, the turn starting, the composer edge burning the ultracode rainbow
01 · Send from the phone — the Home composer mints the chat and the turn starts, rainbow already burning.
Tailscode for Linux seconds later: the same session live in the sidebar, transcript already streaming, no files pane
02 · The desk lights up — seconds later the same session is in the Linux sidebar, opened mid-turn, transcript already streaming.
Both machines side by side with the same settled answer, the turn priced in the phone's chrome
03 · One answer, two screens — the turn settles on both machines at once, priced in the phone's chrome. Open it on any client and it is simply there.

tailscode theme suomi

Eight themes, and every one has two faces

Shown here: Suomi — kaamos night under an aurora, and fresh snow under flag-blue ink by day. One catalog is shared by all three clients, light or dark can be pinned separately from the theme, and every color is walked through an OKLab contrast corrector until it clears WCAG on its own canvas. A theme that cannot be made readable fails the build.

Tailscode for Linux wearing the Suomi theme's dark face
Night is kaamos over a frozen lake — the aurora carries motion, ice the agent's marks.
Tailscode for Linux wearing the Suomi theme's light face
Day is fresh snow under flag-blue ink, with spruce for affirmation and cloudberry for attention.

ls ~/tailscode/iphone

The pocket client, screen by screen

Every frame below is the built-in demo wearing Suomi — what you see before wiring a single server. Scroll the rail; flip the site theme to see the other face.

Tailscode on iPhone, Suomi light: A live turn: the thinking, the code it wrote, the command it's running
01 A live turn: the thinking, the code it wrote, the command it's running
Tailscode on iPhone, Suomi light: A whole task end to end: todos, edits, subagents, and the summary
02 A whole task end to end: todos, edits, subagents, and the summary
Tailscode on iPhone, Suomi light: It asks before it edits — allow once, always, or deny, right in the chat
03 It asks before it edits — allow once, always, or deny, right in the chat
Tailscode on iPhone, Suomi light: Answer the agent's questions with a tap instead of guessing what it wanted
04 Answer the agent's questions with a tap instead of guessing what it wanted
Tailscode on iPhone, Suomi light: The subagents it spawns open in place, with what each one reported back
05 The subagents it spawns open in place, with what each one reported back
Tailscode on iPhone, Suomi light: Markdown, syntax-highlighted code, and links render inline
06 Markdown, syntax-highlighted code, and links render inline
Tailscode on iPhone, Suomi light: Every agent and machine on one board, with a composer that starts the next chat
07 Every agent and machine on one board, with a composer that starts the next chat
Tailscode on iPhone, Suomi light: Live plan and quota gauges straight from your own machine
08 Live plan and quota gauges straight from your own machine
Tailscode on iPhone, Suomi light: Every chat across every machine, filtered and searchable
09 Every chat across every machine, filtered and searchable
Tailscode on iPhone, Suomi light: Any model, any reasoning effort, mid-conversation
10 Any model, any reasoning effort, mid-conversation
Tailscode on iPhone, Suomi light: Context compacted, not lost — and you can read exactly what it kept
11 Context compacted, not lost — and you can read exactly what it kept
Tailscode on iPhone, Suomi light: The repo read from the machine that owns it: branch, drift, diffs
12 The repo read from the machine that owns it: branch, drift, diffs

tailscode ps --live

And this is a real evening

Everything above is the built-in demo. These five are the app in service, pulled straight off the phone — real servers, real chats across half a dozen providers, real money on the chrome. Status bar and all.

Tailscode on a real iPhone: Two turns live at once — one wearing the ultracode rainbow on its row — over recents from half a dozen models.
01 Two turns live at once — one wearing the ultracode rainbow on its row — over recents from half a dozen models.
Tailscode on a real iPhone: A code review fanning out mid-turn: 35 tools deep, one agent working, the session priced live in the chrome.
02 A code review fanning out mid-turn: 35 tools deep, one agent working, the session priced live in the chrome.
Tailscode on a real iPhone: An ultracode turn lands: five of five tasks struck through, master ↑4 on the git chip, the composer edge still burning.
03 An ultracode turn lands: five of five tasks struck through, master ↑4 on the git chip, the composer edge still burning.
Tailscode on a real iPhone: Quick ask aims anywhere: pick the machine, pick the model, ask.
04 Quick ask aims anywhere: pick the machine, pick the model, ask.
Tailscode on a real iPhone: The tanks, read from the machines themselves: Claude, Grok and opencode, each window with its own reset clock.
05 The tanks, read from the machines themselves: Claude, Grok and opencode, each window with its own reset clock.

ls ~/tailscode/ipad

The same app, given a bigger screen

Tailscode is universal: one purchase, one app, and on iPad it spreads out. Every list keeps to a readable column, a chat opens in its own window for Split View and Stage Manager, and a hardware keyboard drives the whole app through the same shortcut registry as the desktops.

Tailscode on iPad: The same live turn, given the room an iPad has: thinking, code, commands
01 The same live turn, given the room an iPad has: thinking, code, commands
Tailscode on iPad: Home on iPad — machines, projects, and recents in a readable column
02 Home on iPad — machines, projects, and recents in a readable column
Tailscode on iPad: Subagents fan out and dock inside the turn that spawned them
03 Subagents fan out and dock inside the turn that spawned them
Tailscode on iPad: The model directory: every provider's catalog, starred and searchable
04 The model directory: every provider's catalog, starred and searchable
Tailscode on iPad: The month in numbers — per machine, per model, priced
05 The month in numbers — per machine, per model, priced
Tailscode on iPad: Branch, staged, changed — the repo straight from the machine
06 Branch, staged, changed — the repo straight from the machine

ls ~/tailscode/desktop

Three desks, one shared core

The Linux client is native GTK4; the Mac client is native AppKit; the phone is programmatic UIKit. All three render the same toolkit-free core, and a parity registry refuses to compile a client that hasn't answered for a capability the others have.

iPhone & iPad

UIKit · universal · Live Activities

The pocket remote: send, steer, approve, and watch the turn finish on your Lock Screen. On iPad the same app spreads out — readable columns, windows in Stage Manager, a hardware keyboard.

Linux

GTK4 · libadwaita · tiling splits

A full desk: split panes, an embedded terminal, web and video panes, a global quick-ask key.

Mac

AppKit · Liquid Glass · macOS 26

The same desk with Apple materials: split panes, the analytics, the git surface, and a global quick-ask key — on the App Store, and it updates itself from it.

Tailscode for Linux, Suomi light: The month, priced and drawn: daily bars, the week's rhythm, models
The month, priced and drawn: daily bars, the week's rhythm, models — every server's ledger merged into one account, priced turn by turn from the CLI's own transcripts.
Tailscode for Linux: an ultracode turn — the composer's edge burns with the rainbow, the effort chip names it
An ultracode turn announces itself: the composer's edge burns rainbow, the chip names the tier, and the presence orb wears the same rim while it runs.
Tailscode for Linux: a compaction rendered as a readable seam in the transcript
A compaction is a seam, not a wall: what was traded for what, with the full summary behind a reader.
Tailscode for Linux: the quick ask summoned over a live chat
The quick ask: one global chord from any program, and the answer lands in a real conversation.

tailscode --features

What Tailscode does

A real client, not a web view

Programmatic UIKit on iOS, GTK4 on Linux, AppKit on the Mac — Swift 6 end to end, zero web views. Streaming transcripts with collapsible thinking and tool groups, and syntax-highlighted code with one-tap, byte-exact copy.

Written, not pasted

Text leaves a model in lumps, so every client plays the answer out of a buffer at a reading pace: the reveal counts rendered characters and a shimmer wave rides the newest span. Frames come from the display's own clock — CADisplayLink at up to 120Hz on iPhone, GTK's frame clock on Linux — and nothing ever re-wraps under the reader: a frame changes colours, never layout.

Ultracode wears a rainbow

Push a turn to the deepest reasoning tier and the app says so out loud: the composer's edge burns with the ultracode rainbow, the effort chip names it, and the presence orb wears the same rim while the turn runs. You can read a session's effort from across the room.

Three desks, one registry

Every capability is a case in a shared parity registry, and each client must answer it in an exhaustive switch — adding a feature to one client refuses to compile until all three have decided what they do about it. Nothing ships to one screen silently.

Three agents, one app

Drive opencode directly, Claude Code through claude-bridge, and Oh My Pi through omp-bridge — two open-source companion servers that turn a terminal agent into structured, streaming, subscription-backed sessions, with push notifications on Claude. Every model Oh My Pi can reach — Ollama Cloud, OpenCode Go, OpenRouter, Anthropic, xAI, DeepSeek — is one picker away, filterable by the subscription that pays for it.

Lock Screen status board

A Live Activity per session shows the phase, elapsed time, and tool counts in real time. Approvals alert you, finished turns linger with the outcome, and updates arrive by push even while the app is suspended.

Steer without stopping

Queue a follow-up while the agent works, edit it before it lands, stop the turn server-side, fork the conversation, or answer the agent's structured questions with a tap. Subagents open in place; a compaction becomes a seam you can read instead of a wall of summary.

Eight themes, two faces each

One catalog shared by every client, from Suomi's aurora-over-a-frozen-lake to fresh snow by day. Every color is pushed through an OKLab contrast corrector until it clears WCAG on its own canvas — a theme that cannot be made readable fails the build.

The month has numbers

Every server's transcripts are priced turn by turn and merged into one account: daily bars, the week's rhythm, models, projects, tools, and what caching saved — plus a trophy room that scores the same ledger, and wears it in Game Center on iPhone.

The repo, read — never operated

Branch, drift, conflicts, staged and changed files, and per-file diffs, read from the machine that has to live with them. A chip in the chat chrome spells the tree out the way a prompt does. Nothing offers to commit from your phone.

Updates are standing facts

Every machine in the picture — this app and each server — reports what it runs and what it could run, and one quiet mark in the chrome stays until the update is taken. A Linux package install checks the project's own release feed and hands over your package manager's command when a newer release exists; a bridge is installed end to end under one press.

One question, from anywhere

On the desktops a global hotkey summons a quick ask over whatever you are doing — no project, no setup. On the phone it lives in the jump list and Control Center. The answer lands in a real conversation you can pick up later.

A cue is a meaning, not an amplitude

Send, step, needs-you, received — each is a composed Core Haptics recipe authored to stay pleasant at the top of the slider: rounded body, soft attack, never an alarm. One intensity dial scales every cue, and a burst of tool calls is felt as progress rather than a rattle.

tailscode --pricing

The free app is the complete core

Tailscode

Free

  • One server, full chat, approvals, and questions
  • Attachments, models, forking, compaction
  • Live Activities, one session at a time
  • Every theme, the analytics, the git surface
  • The built-in demo — explore with no server

Tailscode Pro

$14.99 once

  • Multiple saved servers, one session list
  • Concurrent Live Activities (iPhone)
  • One purchase, iPhone and Mac
  • A supporter badge, and that is all it is
  • Pro $14.99 No subscription

One purchase covers iPhone and Mac on the same Apple Account. The Linux client and the Mac build you compile yourself are free, open-source and complete — the unlock is how the work gets funded, not a wall around it.

man tailscode

How Tailscode works

  1. 01

    Run an agent server

    On the machine where you code: opencode serve, claude-bridge in front of Claude Code, or omp-bridge in front of Oh My Pi. All three are open source and take minutes to set up.

  2. 02

    Join the same tailnet

    Install Tailscale on your devices — free for personal use. They see each other directly; nothing transits anyone else's servers.

  3. 03

    Connect and go

    Paste an address or let Tailscode discover your servers. Send a prompt from the phone, follow it on the Lock Screen, sit down at the desktop and the same session is already there.

tailscode --help

Questions, answered

Do I need my own server?

Yes — that's the point. Tailscode is a remote for agents running on hardware you control. There is no middleman cloud, which means no relay fees, no data sharing, and no vendor outage between you and your code. A built-in demo lets you explore the full app before wiring anything.

Which coding agents does it support?

opencode natively (any provider you've configured in it), Claude Code through claude-bridge, and Oh My Pi through omp-bridge — two open-source Swift servers that expose a terminal agent as structured streaming sessions backed by your own subscriptions. Oh My Pi brings its whole provider catalog with it: Ollama Cloud, OpenCode Go, OpenRouter, Anthropic, xAI, DeepSeek and your local ollama, priced per turn from the agent's own ledger.

Is there really a Linux desktop client?

Yes — a native GTK4/libadwaita app, plus an AppKit app for macOS 26, in the same repository. Arch users install it from the AUR (`paru -S tailscode`); everyone else grabs the release tarball from GitHub. All three clients share one toolkit-free core, and a parity registry refuses to compile a client that hasn't answered for a capability the others have. Both desktops add tiling splits and a global quick-ask hotkey; the Linux client and the Mac build you compile yourself also carry an embedded terminal and web and video panes, which the sandboxed Mac App Store build leaves out.

Does my code pass through anyone's cloud?

No. The app talks directly to your machines over your WireGuard-encrypted Tailscale network. No relay server, no account with us, no analytics, no tracking. The privacy policy is one sentence long in spirit: we collect nothing.

How do Live Activities update when the app is closed?

claude-bridge can push Live Activity updates over APNs, so the Lock Screen keeps ticking — phase, elapsed time, tool counts — even while the app is suspended. Approval requests fire an alert you can act on.

What does Pro add?

Tailscode Pro is a one-time $14.99 unlock for multiple saved servers, concurrent Live Activities, and a supporter badge. The free app is the complete core — full chat, permissions, attachments, models, forking, themes, analytics — forever, with one server.

Is it really open source?

All of it, under GPL-3.0: the iPhone app, both desktop clients, the engine (CodingAgentKit, a Swift 6 package that also runs on Linux), and both bridges (claude-bridge, omp-bridge). Build it yourself or grab it from the App Store.

Does it run on iPad?

Yes — the same app is universal. On iPad every list keeps to a readable column, chats open in their own windows for Split View and Stage Manager, and a hardware keyboard drives the whole app: ⌘N starts a chat, the desktop clients' shortcut registry answers the rest. One purchase covers iPhone and iPad.

Can I try it without a server?

Yes. Tap 'Try the demo' on the first screen: two sample servers with realistic sessions let you explore streaming, approvals, questions, the analytics and the git surface — no tailnet needed. Every screenshot on this page is that demo wearing the Suomi theme.

Your agent is already working. Watch it from anywhere.

Free and open source under GPL-3.0. Pro unlocks unlimited servers — and concurrent Live Activities on iPhone — for $14.99, one time, across iPhone and Mac.

ls ~/apps