mosh drops the OSC 777 banner that omo-notify posts, so omo sessions on the server only reached the phone through ntfy. The server's omo-notify now writes the session state into its tmux client's terminal title (omo:<state>:<time>:<project>), which mosh and ssh carry. A pane-title-changed hook hands it to the new omo-remote, which runs omo-notify for the local mosh pane through the new OMO_NOTIFY_PANE override, so remote sessions get the same sound, tab marker and banner as local ones.
Sessions that no terminal is showing come through ntfy instead: omo-remote install starts a launchd agent running ntfy subscribe, which plays the sound and posts the banner for omo pushes the server did not tag attached. Brewfile gains ntfy; the token lives in ~/.config/ntfy/omo-remote.env, outside the repository.
omo names the event in "event" for UserPromptSubmit, without the
"hook_event_name" field its Stop and Notification payloads carry. The
script only read hook_event_name, so it ignored every prompt and the
blue working marker never showed. Read either field.
omo-notify now drives three signals from omo's UserPromptSubmit, Stop
and Notification hooks:
- A sound through afplay, so Focus modes cannot mute it
- A Ghostty notification (OSC 777) written to the session's tmux client
terminal, so clicking it opens the tab it came from. This replaces the
osascript banner, which opened Script Editor's file picker on click
- omo-status markers in front of the tab title: red error, amber
waiting for input, green finished, blue working. A tab shows its most
urgent agent; focusing it clears red, amber and green and selects the
pane that sent the banner
tmux puts @omo_status in the title and runs omo-status on client focus.