Skip to content

Proactive reminders 1/3: event reminders (approval waiting, failed, finished) in app and desktop #353

Closed

Description

@hsliuustc0106

Why

FlyBot is passive today: the user has to open it to learn that an approval is waiting, a task failed, or a task finished. Phase 1 of proactive reminders gives the minimum useful loop without any new infrastructure.

Part of a 3-phase proactive-reminders track. Phase 2: scheduled tasks. Phase 3: 24/7 runtime and external channels. Related: #349 (Agent inbox board), #352 (deployment).

Scope

Acceptance

Out of scope

Scheduled or recurring tasks (phase 2), running while the app is closed (phase 3), Slack/email delivery (phase 3).

Process

Implementation via cloud OpenCode, review via Codex; bots do not hand-write code.

Activity

  1. added
    enhancementNew feature or request
    area:uiWeb/desktop UI and copy
    area:automationScheduled tasks and automation
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Oct 19, 2026
  2. Birfy commented on Oct 19, 2026

    @Birfy
    Collaborator

    Triage on main 7b9e90b, 2026-10-19 ~12:10 Asia/Shanghai: needs-human, not agent-ready. Question for the owner: start phase 1 (in-app + desktop reminders for approval waiting / failed / finished)? Also how it relates to the Agent inbox board (#349): one notification source for both, or separate?

  3. Birfy commented on Oct 20, 2026

    @Birfy
    Collaborator

    Triage (maintenance, 2026-10-20 08:04 Asia/Shanghai)

    Checked on main a45fc8c.

    Already on main

    • Approval waiting → system notification: core/src/client/approval-notices.js fires one notification per approval that starts waiting while the window is in the background or shows another chat; click opens that chat. Never asks for OS permission.
    • Sidebar rows already show Working / Waiting for your approval / Unread activity.
    • Missing: finished and failed reminders, "waiting too long", quiet hours, mute, and the reason line.

    Expected behavior
    When one of my own Bots finishes or fails a turn, or an approval has waited too long, and I am not looking at that chat, I get one notification that says why ("Coder finished", "Coder failed: ", "Waiting for your approval for 15 min") and opens that chat on click. A notification only notifies: it never approves, rejects or sends anything.

    First slice (smallest shippable step)

    • Extend approval-notices.js (same rules: only when the window is in the background or shows another chat, only if the OS already allows notifications, one per event via tag) with finished and failed for my own Bots' chats.
    • One switch in Settings → General: Notifications (on by default), covering all three kinds.
    • Tests next to core/test/approval-notices.test.js; doc line in docs/subsystems/core-client.md.

    Details I decided (say if you disagree)

    • Only my own Bots in this slice. Friends' chats and team mode wait for later.
    • Dedup per event id, so no repeats after restart (events from before the window opened are skipped, same as approvals today).
    • Notifications have no Approve/Reject buttons. Approving stays on the card in the chat (buttons only, never typed replies).
    • Quiet hours, per-trigger switches, merging repeats and "waiting too long" go in slice 2.
    • [Feature RFC] Agent inbox board: one place for tasks, approvals and failures (personal first, team second) #349's board and these reminders read the same events: one source, two views.

    Question for the owner
    Is this first slice OK: (a) desktop notifications for finished and failed, plus one Notifications switch, quiet hours later; (b) the same plus quiet hours and "waiting too long" now; or (c) wait and build it together with the #349 board?
    Recommendation: (a).

  4. added
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    and removed
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Oct 20, 2026
  5. Birfy commented on Oct 20, 2026

    @Birfy
    Collaborator

    Owner decision (2026-10-20): Confirmed option (a): first step only — add completion and failure notifications for the owner's own Bots, with a Notifications toggle in settings. Tapping a notification opens the matching chat (no approve-in-notification). Do-not-disturb and 'waiting too long' reminders come later.

  6. added
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 20, 2026
  7. self-assigned this
    on Oct 20, 2026
  8. Birfy commented on Oct 20, 2026

    @Birfy
    Collaborator

    Claimed by maintenance run (2026-10-20 08:55 Asia/Shanghai), branch feat/353-finish-fail-notifications on Birfy/FlyBot, following the Owner decision above.

  9. Birfy commented on Oct 20, 2026

    @Birfy
    Collaborator

    Minor decisions for the first slice (PR #470), 2026-10-20 09:02 Asia/Shanghai:

    • Which turns count: a turn of one of my own Bots that completes or fails, in its own chat or a group I own. Not: a turn I stopped (I know), a turn switched to a new part or retried because the model wrote its tool call as text (the next one counts), a friend's Bot, a turn a friend started (their request or plain line), a hidden turn another Bot asked for, and face-to-face / inbound-share rooms (rooms with other people; "friends' chats later").
    • Text: title {name} finished / {name} failed: <reason>; the reason is the failure's message, else its code (an AUTH message is never shown, as today), cut at 160 characters. Body: the group's name for a group turn, else empty — no reply text, so nothing private shows on a lock screen.
    • Switch: Settings → General → Notifications, saved with the other team prefs (prefs.notifications, on unless false), covering approvals too. Events while it is off stay "told", so switching it on brings no backlog.
    • Dedup: one per event via tag (ds-bot-turn-<session>:<turn>:<time>); the host keeps the last 20 ended turns in memory only, and a window skips anything older than its opening, so a restart repeats nothing.
    • Deferred items are in Proactive reminders 1/3 follow-up: quiet hours, mute, waiting-too-long #469 (needs-human).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a templateagent-workingAn agent has claimed this issue (the claim comment names the branch)area:automationScheduled tasks and automationarea:uiWeb/desktop UI and copyenhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions