DEV Community

hon6
hon6

Posted on Fully Autonomous

Putting Claude Code and Codex progress on the iPhone Lock Screen with Live Activities

When a coding agent such as Claude Code or Codex runs on your computer and you walk away, two questions matter: how far has it got, and is it waiting for me? Notifications answer the second one. Kiteline, an open-source desktop app (Mac, Windows, Linux) with an iPhone, iPad and Apple Watch companion that follows agent sessions, now answers both on the Lock Screen with a Live Activity. This post walks through how it is put together.

What the card shows

At most three sessions, in this order: sessions waiting for you (to approve a command, answer a question or review a plan), sessions running (with their current step, such as "3/4 Testing"), then sessions that just finished or stopped on an error. A summary line reads like "2 waiting ยท 1 running". When every session stops it switches to "All done" and is dismissed a few minutes later. In the Dynamic Island the compact view is a kite and a count, and the kite turns orange when something needs you; tapping opens that session in the app.

The computer drives it

The phone app does not need to be running. The desktop app starts, updates and ends the activity through APNs' liveactivity push type, via a small push gateway:

  1. Two tokens. The iPhone reports ActivityKit's push-to-start token and each activity's own update token to the computer. iOS does not always hand out a push-to-start token, so when the app is in the foreground and sees agents working, it starts an activity locally and reports that activity's update token instead.
  2. One activity per round of work. The first busy session starts a round. Updates are coalesced to at most one every 8 seconds, except that a new round or a growing number of waiting sessions goes out immediately. Ninety seconds after everything stops, the computer sends "All done" with a ten-minute dismissal date.
  3. Respecting dismissal. If you swipe the card away, the app reports it and the computer does not start another one until the next round.
  4. Staying small. A push payload is capped at 4 KB, so the content state is just a head line, two counts and up to three items with one-letter keys.

Why only titles and status

Kiteline's regular notifications are end-to-end encrypted: the computer encrypts them with Web Push (RFC 8291) and only a notification service extension on the device decrypts them. Live Activity payloads are read directly by the system, so they cannot be encrypted. Kiteline therefore sends only session titles and status, never conversation content, and the feature can be turned off in Settings.

Shipped alongside

  • Web replies. When a result is best shown as a chart or comparison table, the agent can send a web page; it opens inside the app, isolated from app data.
  • Prompt links. A task can be shared as a link whose prompt lives after the #, so it never reaches a server; opening it starts a New Task that runs only after confirmation.
  • Read-only sharing on the local network. While a session is shared, the computer opens a separate HTTP port that serves only /g/; a browser on the same Wi-Fi polls a snapshot every 8 seconds with an ETag. Reasoning, images and key info are left out, and nothing passes through a server.

The rest of Kiteline

Kiteline puts every agent session from every computer in one list (Claude Code in VS Code, the terminal and Remote-SSH, plus Codex, OpenCode and others through signed plugins), sends approvals to the lock screen and Apple Watch, lets agents send screenshots and Playwright test reports, and adds group chats between sessions, a code view with Git, and an in-session terminal. It does not use your API keys or change agent settings. The desktop side is on GitHub under AGPL-3.0; the iPhone app is on the App Store as "Kiteline".

Top comments (0)