Repository navigation
Replies: 5 comments
|
Great idea! No one interested? |
|
+1 — and the reason every trigger you list gets reimplemented by plugins instead of subscribed to is precisely the missing seam. Data points from the shipped build (0.2.0-rc.1):
On your open questions: #5411 is a concrete reference implementation of the web-side half — visibility-gated, one alert per interaction, settings-backed ( |
|
For the missing waiting-state bridge, I would test delivery independently from resolution: notify once for a specific pending question ID, keep that question pending when delivery fails or quiet hours suppress the alert, and clear it only when the host accepts its answer. Replayed events should stay quiet. An old notification opened after cancellation should show that the request is closed. Keep approval/asked and ordinary question input distinct; answering a question must not resolve a tool authorization. Disclosure: I build JustCallMe, a hosted phone channel for a specific blocking agent question. If you want to try the away-from-Web-UI question path separately, I can help with your own-phone verification, scoped key and private dashboard skill. In a disposable Claude Code/Codex session, ask "SQLite or Postgres for dummy project alpha?" Let one request expire and check alpha stays pending; answer a fresh request and check the retrieved answer stays with that request and task. Early access has 20 free minutes, no card. DeepSeek Harness pairing is unimplemented and untested. Its native approval controls stay with the host. Use a disposable environment and keep phones, codes, keys and real project data private. |
|
dsh-composer-plus does this as a plugin: while dsh is in the background (desktop app or a background browser tab) you get an OS notification when a turn finishes (first line of the reply), or when a chat really waits for you, i.e. an approval (tool name), a question, or a plan review. Clicking it opens that chat, and the Dock/taskbar badge counts the chats waiting for you. Requests that get answered automatically stay silent, and a notification is withdrawn once its request is answered. Tested on macOS. Install: Settings → Plugins → Add plugin → |
|
On open question 2, from having built this layer: I'd make quiet hours a property of the person, enforced once in core, not per channel plugin. A few reasons and edge cases that came up:
Disclosure: I maintain Cue, an MIT, self-hosted service that does this as a separate layer (quiet hours, per-person caps, digests, approvals that expire). It could sit behind a webhook from these events, but the points above hold whether you use it or build it into core. I wrote up the time-related bugs here. |
Uh oh!
There was an error while loading. Please reload this page.
Motivation
When an agent session stops and waits for the user (e.g. asking a question, waiting for approval, or surfacing a subagent failure), there is currently no built-in way to notify the user outside the Web UI. The user has to keep the tab open and watch for state changes, which defeats the purpose of long-running / background agent flows.
The runtime already exposes a rich
SessionEventMap(approval/asked,tool/call,assistant/message,subagent/descriptor, etc.) and ships anotifytool with many channels (Telegram, Slack, Discord, webhook, desktop bell, …). What is missing is the automatic bridge between "agent entered a waiting/completed state" and "user gets notified on their preferred channel".Proposal
Add a core-level notification layer that fires automatically on well-defined agent-state transitions, with two complementary surfaces:
1. Auto-notify (opt-in per channel, off by default)
When the agent enters one of the states below, DSH sends a notification through every channel the user has configured (respecting per-channel opt-in / quiet-hours if those settings exist):
ask_user_questionand pauses for a replyuser/question-askedapproval/asked(already exists)subagent/escalatedtask/completedAuto-notify should be off by default (to avoid surprise noise) and enabled per-channel via settings. When enabled, it uses the same delivery path as the existing
notifytool so channel configuration is reused.2. Open event / hook for plugins and presets
In addition to the built-in auto-notify, expose the same state transitions as first-class events on
SessionEventMap(or an equivalent public surface) so that:The existing
approval/askedevent is a good template; the new events (user/question-asked,subagent/escalated,task/completed) should follow the same shape and lifecycle guarantees.Why this belongs in core
ask_user_questionpauses the turn, when an approval gate blocks, when a subagent escalates). A plugin cannot reliably detect these without a core event.notifytool + channel registry). Auto-notify reuses it rather than duplicating channel logic in every preset/plugin.Non-goals / boundaries
notifytool. Agents should still be able to send ad-hoc notifications explicitly; auto-notify only covers the "agent is waiting / done" cases users most often miss.Open questions for the team
task/completed, what counts as a "long-running" task worth notifying about? A configurable duration threshold, an explicit tag from the agent, or every terminal state change?All reactions