Why this matters
Today the Email Triage Agent's user-facing surface in the Agent UI is a chat. A user types "Run a pre-scan", the agent calls the tool, returns a typed envelope, and the chat surface renders an inline triage card. That card carries the right information and the right action affordances — but the frame is wrong for the actual user we're targeting.
The target user receives 100–500 emails per day at a director / VP / senior-IC level. Their question every morning is "what needs me right now?" — not "let me have a conversation with my email." A chat-with-agent surface forces them to drive the agent verbally for every action; that's barely better than driving Gmail directly. The right frame is a task-tracker dashboard that the agent populates with surfaced items, drafted replies, learned preferences, and overnight summaries — items the user reviews and approves, not items they have to ask for.
This umbrella tracks the build of that dashboard surface, sized so a v0 is dogfoodable in a few sprints and the full vision lands as memory + multi-model + event-trigger work matures.
Scope change based on feedback
This issue captures a deliberate scope shift for the Email Triage Agent's user-facing surface. PR #995 shipped the engine (typed pre-scan envelope, inline action buttons, deterministic structured-render hook) inside the existing chat surface. Live-driving the chat surface against a real inbox surfaced the limitation: it's a power-user tool, not a daily-driver. The dashboard surface is the new direction; the chat surface is preserved as a verbal-drive entry point for power users. Engine code is reusable as-is.
POC flow this dashboard fulfills
A 5-step product flow informs the build order:
- Context sources — inbox + calendar; messages later.
- Event triggers — meeting ends, new email arrives, scheduled cadence.
- Agent reasoning on local hardware — local LLM via Lemonade; eventually NPU-accelerated.
- Outputs in task tracker — items have explicit state (in progress / drafted / summarized) and live somewhere persistent the user can browse without re-running the agent.
- Human approval / execution — approve drafted reply, accept invite, copy summary.
What's shipped today only partially covers steps 3 and 5. The dashboard delivers step 4 and the surface around step 5; steps 1 and 2 land progressively.
Build order — fastest dashboard visibility first
Sub-issues are intentionally ordered so a visible dashboard surface lands as early as possible, even if its data is sparse, so we can dogfood the frame and let real-use friction drive the rest. Per direction received in the scope change, event triggers and local NPU acceleration are sequenced last — both are high-leverage but neither blocks the dashboard from being usable.
| # |
Issue |
What lands |
Visible? |
| 1 |
#1008 |
Dashboard route + 3-column skeleton |
✅ Yes — empty surface, but visible immediately |
| 2 |
#1009 |
Wire pre_scan_inbox + Refresh button |
✅ Real triage data populates the Surfaced column |
| 3 |
#1010 |
In-session task store + state machine |
✅ Items move through columns as user acts |
| 4 |
#1011 |
Drafted column with Send/Edit/Discard |
✅ "Agent does work, human approves" loop |
| 5 |
#1012 |
Calendar items column with RSVP |
✅ Calendar decisions in same surface |
| 6 |
#1013 |
"Learned this session" preferences strip |
✅ Trust-arc visibility loop |
| 7 |
#1014 |
Migrate task store to persistent memory |
Dashboard upgrades to "real" daily-driver |
| 8 |
#1015 |
Streaming progress UI for long jobs |
Dominant friction reduction |
| 9 |
#1016 |
Background watcher / event triggers (deferred) |
Always-on assistant |
| 10 |
#1017 |
Local NPU acceleration for classifier (deferred) |
Sub-second inference |
Sub-issues 1–6 together produce a dogfoodable dashboard. Sub-issue 7 makes it honest as a daily driver. Sub-issues 8–10 take it from "manually-triggered snapshot" to "always-on assistant" without changing the user-facing surface.
Dependencies
- Memory subsystem — required for #1014 and everything after; the in-session store works as a stand-in until then but a daily-driver dashboard needs persistence to claim "Drafted overnight" honestly.
- Multi-model parallelism (#1000) — required to bring tier-1 classification down to sub-second so a background poll cadence is viable. The dashboard works without it; it just won't refresh autonomously at low cost.
- Connectors framework / Google OAuth (already merged: #915, #926).
Acceptance for the umbrella
Refs
- Parent agent umbrella: #645
- Engine PR: #995
- Dependency: #1000 (multi-model parallelism)
- Provider track: #963 (Outlook/Exchange)
Why this matters
Today the Email Triage Agent's user-facing surface in the Agent UI is a chat. A user types "Run a pre-scan", the agent calls the tool, returns a typed envelope, and the chat surface renders an inline triage card. That card carries the right information and the right action affordances — but the frame is wrong for the actual user we're targeting.
The target user receives 100–500 emails per day at a director / VP / senior-IC level. Their question every morning is "what needs me right now?" — not "let me have a conversation with my email." A chat-with-agent surface forces them to drive the agent verbally for every action; that's barely better than driving Gmail directly. The right frame is a task-tracker dashboard that the agent populates with surfaced items, drafted replies, learned preferences, and overnight summaries — items the user reviews and approves, not items they have to ask for.
This umbrella tracks the build of that dashboard surface, sized so a v0 is dogfoodable in a few sprints and the full vision lands as memory + multi-model + event-trigger work matures.
Scope change based on feedback
This issue captures a deliberate scope shift for the Email Triage Agent's user-facing surface. PR #995 shipped the engine (typed pre-scan envelope, inline action buttons, deterministic structured-render hook) inside the existing chat surface. Live-driving the chat surface against a real inbox surfaced the limitation: it's a power-user tool, not a daily-driver. The dashboard surface is the new direction; the chat surface is preserved as a verbal-drive entry point for power users. Engine code is reusable as-is.
POC flow this dashboard fulfills
A 5-step product flow informs the build order:
What's shipped today only partially covers steps 3 and 5. The dashboard delivers step 4 and the surface around step 5; steps 1 and 2 land progressively.
Build order — fastest dashboard visibility first
Sub-issues are intentionally ordered so a visible dashboard surface lands as early as possible, even if its data is sparse, so we can dogfood the frame and let real-use friction drive the rest. Per direction received in the scope change, event triggers and local NPU acceleration are sequenced last — both are high-leverage but neither blocks the dashboard from being usable.
pre_scan_inbox+ Refresh buttonSub-issues 1–6 together produce a dogfoodable dashboard. Sub-issue 7 makes it honest as a daily driver. Sub-issues 8–10 take it from "manually-triggered snapshot" to "always-on assistant" without changing the user-facing surface.
Dependencies
Acceptance for the umbrella
TOOLS_REQUIRING_CONFIRMATIONgating.Refs