github nklmilojevic/sofka v0.15.2
v0.15.2: `:notify` past the multiplexer

latest releases: v0.28.3, v0.28.2, v0.28.1...
one month ago

v0.15.2 makes :notify deliver past the multiplexer. OSC 9/777 escape sequences never escape a tmux or herdr pane, so terminal-multiplexer users got silence. A new [notify] command runs a local notifier subprocess (notify-send, terminal-notifier, anything) instead, and inside a herdr pane no config is needed — sofka detects the pane and routes through herdr's own toast CLI automatically.

Added

Notifier subprocess for :notify (#123)

[notify] command runs a local notifier alongside the OSC sequences. Placeholder substitution follows the same plugin rule — $MESSAGE is a whole argument, never spliced into a shell string:

[notify]
bell = true
desktop = "osc777"
command = ["notify-send", "sofka", "$MESSAGE"]      # Linux, inside tmux
# command = ["terminal-notifier", "-title", "sofka"] # macOS ($MESSAGE appended)
  • $MESSAGE substitutes as a whole argument — a message like a; rm -rf / stays inert; the test suite pins this. With no placeholder, the message appends as the final argument.
  • Fire-and-forget with nulled stdio. A notifier that fails to spawn is one flash warning, never a broken TUI.
  • An empty executable warns at config load and is ignored — surfaced in :config and on :reload like the existing desktop validation. When the executable is empty, herdr auto-detection still applies.

herdr auto-detection

herdr exports HERDR_SOCKET_PATH into every pane and ships herdr notification show <title> --body …, which delivers via the user's ui.toast setting (in-app toast, outer-terminal notification, or the OS notification service). When sofka finds itself in a herdr pane and no explicit command is set, :notify events route through that CLI automatically. Zero config. An explicit command always wins.

herdr has no OSC 9/777 passthrough — its own Claude Code notifications come from agent-state detection, not from forwarding pane escape sequences — so the subprocess route is the only reliable delivery from inside a herdr pane. Detection is HERDR_SOCKET_PATH-based and forced off under cfg!(test), so a test suite run inside a herdr pane doesn't pop real toasts.

Full Changelog: v0.15.1...v0.15.2

Don't miss a new sofka release

NewReleases is sending notifications on new releases.