Skip to content

Needs you: one list of what waits for you, unread chats, and notices that open the thing - #61

Merged
danielehrhardt merged 2 commits into
mainfrom
feat/needs-you
Oct 4, 2026
Merged

danielehrhardt merged 2 commits into
mainfrom
feat/needs-you

Conversation

@danielehrhardt

Copy link
Copy Markdown
Contributor
  • One list of everything that waits for you, computed from live state so
    items leave by themselves once handled: questions and approvals, missing
    logins (leading back to the stuck chat or ticket), tickets to review or
    blocked, paused chats, held budgets (one row per budget), chats that
    failed while you were away, failing automations, people asking a bot for
    access. On Home and in the Inbox, each with its one action.
  • Sidebar badges count from it: Inbox (what waits), Tasks (review and
    blocked), Automations (failing).
  • Chats you talk in are marked unread when work ends while you're
    elsewhere; opening one (or "Mark all read") reads it. A window tells the
    core which chat it shows, so nothing notifies while you're looking.
  • "Mia replied in “Q4 plan”" / "ran into a problem" when nobody watched —
    never twice (not when the agent told you itself or a missing login
    already did). Toasts carry Open; what's already on screen doesn't pop up.
  • Each automation chooses when it tells you: on failures (default, once
    until it works again), always, or never.
  • Migration 54: conversations.unread_run_id, routines.notify.

Checks

  • pnpm typecheck: all packages pass
  • Core tests: 1400 pass, 10 skip, 0 fail (new: attention.test.ts)
  • Desktop build and phone type check pass
  • Checked in the browser: Home "Needs you", Inbox list with the question card, sidebar badges, unread dots and Mark all read

New routes: GET /api/attention, POST /api/conversations/read (Cloud: allowed; phone: closed). Client event conversation.view.

…that open the thing

- One list of everything that waits for you, computed from live state so
  items leave by themselves once handled: questions and approvals, missing
  logins (leading back to the stuck chat or ticket), tickets to review or
  blocked, paused chats, held budgets (one row per budget), chats that
  failed while you were away, failing automations, people asking a bot for
  access. On Home and in the Inbox, each with its one action.
- Sidebar badges count from it: Inbox (what waits), Tasks (review and
  blocked), Automations (failing).
- Chats you talk in are marked unread when work ends while you're
  elsewhere; opening one (or "Mark all read") reads it. A window tells the
  core which chat it shows, so nothing notifies while you're looking.
- "Mia replied in “Q4 plan”" / "ran into a problem" when nobody watched —
  never twice (not when the agent told you itself or a missing login
  already did). Toasts carry Open; what's already on screen doesn't pop up.
- Each automation chooses when it tells you: on failures (default, once
  until it works again), always, or never.
- Migration 54: conversations.unread_run_id, routines.notify.
@danielehrhardt
danielehrhardt merged commit 346c85c into main Oct 4, 2026
5 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant