Your Claude Code and Codex sessions, on one phone screen.

Kiteline runs on your own Mac or Linux machine. It finds the coding agent sessions already running there and lists them in a web app on your phone. Read what each one is doing, reply, and allow or deny tool calls. Gemini CLI, Pi and OpenCode 1.x sessions show up read-only.

The install command ships with v0.1.

Email me when it ships

Opens your mail app. Or write to hello@kiteline.dev.

Tested so far with real Claude Code on an Intel Mac (macOS 12) and an Android phone. Replying works in tmux, iTerm2 and Terminal.app; other terminals are read-only. Codex runs through kl codex and has only been tested with a fake model. iPhone is not tested yet.

fig. 1 Allow from the phone staged demo, sample data

Staged demo built from real Kiteline screens. Not a live session. Sample data, staged timing. Phone approvals are tested with real Claude Code on an Intel Mac, with the phone’s answer sent by a test script. The phone app is tested on Android. It has to be open: there are no push notifications yet.

One list. Three states.

Monitor your coding agents from your phone: the Claude Code, Codex, Gemini CLI, Pi and OpenCode 1.x sessions running on the machine, in one list. Tap one to read the conversation or watch its terminal screen.

The Running (3) list in the Kiteline phone app: checkout-api (Claude) marked Needs you, docs-site (Claude) marked Working, and billing-worker (Codex) marked Open.
The real Kiteline phone app at commit d02c898. Demo data: two sessions of Kiteline’s fake test agent (labelled Claude) and the real Codex CLI talking to a fake model. Not real Claude Code.
Needs you
The agent is waiting on you, for example to allow or deny a tool call.
Working
The agent is busy. The conversation updates live.
Open
The session is running and idle. You can send it the next message.

Start Claude Code the way you always do. Kiteline finds it.

There is no wrapper for Claude Code. Kiteline reads the session files and the process list on your machine. Phone approvals need one command, once: kl hooks install.

Codex is different. Start it with kl codex to reply and approve from the phone. Codex started the usual way still shows up, and you can type into it from the phone if it runs in a supported terminal.

# demo data: Kiteline’s fake test agent, and Codex with a fake model
$ claude
$ kl sessions
open    codex   0m  billing-worker     Summarise the last commit
working claude   0m  docs-site          Fix the broken links in the setup guide
open    claude   0m  checkout-api       Add a retry to the payment client

Approve permission prompts from your phone. First answer wins.

When Claude Code shows a permission prompt to run a tool, a card appears on your phone. Answer there or at your desk. Whichever answer comes first counts.

Nothing is ever auto-approved. If Kiteline isn’t running, or nobody answers on the phone, Claude’s prompt at your desk still works.

Needs kl hooks install, once. Cards appear only when Claude asks; in auto mode Claude decides on its own. Codex cards need kl codex and have only been tested with a fake model. No push notifications yet: cards show only while the app is open.

Tap Allow or Deny. This is a demo card, so nothing runs.

Approve?Bashnow
Claude · Add a retry to the payment client
npm test -- payment-client

Reply from your phone. It never types over you.

If there is already text in the agent’s input box at your desk, Kiteline tells the phone and types nothing. A message is never sent twice.

Other terminals are read-only. If a Claude Code or Codex session there is idle, one button moves it into tmux, and then you can reply.

What the phone can do in each terminal
TerminalSendKeysLive screen
tmux (macOS, Linux)YesYesYes
iTerm2YesYesYes
Terminal.appYesEsc onlyYes
OthersRead-only, plus Move to tmux

Background-service mode (kl install) is not ready yet. Run kl serve in a terminal.

Kiteline’s live screen view: the fake test agent’s terminal mirrored on the phone, with buttons for up, down, Enter, Esc, 1, 2, 3 and Tab.
Demo data: the fake test agent in tmux, shown in the live screen view.

What works today

Support by agent
AgentSeeReplyApproveTested with
Claude CodeYesYes, in a supported terminalYes, after kl hooks installReal Claude Code on an Intel Mac. On Linux, a fake test agent only.
CodexYesYes, via kl codex or a supported terminalVia kl codexA fake model only.
OpenCodeYes, 1.x onlyNot yetNot yetParser tests on saved CLI output only. OpenCode 2 is not supported yet.
Gemini CLI, PiYesNot yetNot yetSaved transcript fixtures only.

Your computer: macOS or Linux. Windows is not supported. Phone: tested on Android. iPhone is not tested yet.

Setup is two commands and a QR code.

  1. $ kl setup

    Sets a phone password and tells you what to do next.

  2. $ kl serve --tunnel

    Opens a Cloudflare quick tunnel and prints a one-time QR code. It needs cloudflared installed.

  3. Scan the code with your phone camera to sign the phone in. The tunnel address changes each time you run kl serve --tunnel, so scan the new code each time.

That gets you the list, the conversation and replies. For approval cards from Claude Code, also run kl hooks install once. There is no public download of kl yet. It ships with v0.1.

What the connection can see

Kiteline runs on your own machine. Your phone needs a way in, and each way puts someone different in the path. Kiteline is not end-to-end encrypted today.

Connection routes
RouteWho is in the pathAddressStatus
Cloudflare quick tunnel
kl serve --tunnel
Cloudflare. TLS ends at Cloudflare, so Cloudflare can read the traffic in transit.Random, new on every runWorks today
Your local network
kl serve --lan
Your network. The certificate is self-signed, so the phone shows a warning.Local onlyWorks today
TailscaleNot tested yet. Kiteline has no Tailscale option today.

The pairing QR code signs a phone in. Treat it like a password.

Found a problem? security@kiteline.dev

Coming soon

Planned and not built yet. No dates.

Push notifications

Approval cards that reach your phone even when the Kiteline app is closed.

A stable address

One phone address that stays the same between runs, without extra setup.

More terminals

Typing into zellij, WezTerm and kitty, next to tmux, iTerm2 and Terminal.app today.

Worktrees and pull requests

Route a task to the right session, keep it in its own worktree, and commit, push and open the pull request from your phone.

Native iOS and Android apps

Apps for both phones, next to the web app the binary serves today.

More than one machine

Sessions from several computers in one list on your phone.

Windows

Kiteline on Windows. Today it runs on macOS and Linux.

Start sessions from the phone

Start a new agent session on your computer from the phone, not only answer running ones.

Questions

How do I approve Claude Code permission prompts from my phone?

Run kl setup and kl hooks install once, then kl serve --tunnel (it needs cloudflared), and scan the QR code with your phone. When Claude Code asks to run a tool, a card with Allow and Deny appears in the phone app. Answer there or at your desk. The first answer counts. Push notifications are not built yet; today cards show only while the app is open. Tested with real Claude Code on an Intel Mac (macOS 12) and an Android phone. There is no public download of kl yet. It ships with v0.1.

Does Kiteline work with the Codex CLI?

Yes, with limits. Start Codex with kl codex to reply and approve from the phone. Codex started the usual way still shows up in the list, and you can type into it from the phone if it runs in tmux, iTerm2 or Terminal.app. So far this has been tested with the real Codex CLI talking to a fake model, not with a real Codex model.

How is Kiteline different from Claude Code Remote Control?

Remote Control is Claude Code’s own feature. It is included in Claude’s paid plans and is a good choice if Claude Code is the only agent you run. In that case you may not need Kiteline. Kiteline is for when you also run Codex or other agents and want every session on the machine in one list.

Why not SSH into tmux from my phone?

That works, and Kiteline doesn’t replace it. Kiteline adds one list of sessions across agents, approval cards with Allow and Deny, and a live screen with the keys an agent prompt needs, so you aren’t typing into a raw terminal on a phone.

Is Kiteline open source and self-hosted?

The source goes public with v0.1. Kiteline runs on your own Mac or Linux machine. There is no Kiteline account, no Kiteline server and no hosted version today. The phone app is a web page that the kl binary serves from your machine, so you install nothing on the phone. Your phone still needs a route in: with the Cloudflare quick tunnel, TLS ends at Cloudflare, so Cloudflare can read the traffic in transit. Kiteline is not end-to-end encrypted today.