# Taskbar status feature — design (flash + progress + overlay + self-teaching hints)

Goal: when the AI drives the user's real browser, paint glanceable status onto that window's Windows
taskbar button — so the user has an "ongoing task list" cue (pup-style) without watching the screen.
Designed with John, 2026-06-20.

## What renders on the BROWSER (Chrome/Edge) taskbar button
Only these work cross-window (ITaskbarList3 + FlashWindowEx take any hwnd):
- **Flash** (`FlashWindowEx`, FLASHW_TRAY|FLASHW_TIMERNOFG) — orange "come look" until the user focuses
  the window. Self-clears on focus; bridge also stops it on close/shutdown.
- **Progress bar** (`SetProgressState`/`SetProgressValue`) — determinate 0–100% or indeterminate
  marquee, color-coded: green=running, **yellow=paused (human-in-the-loop: captcha/2FA/login)**, red=error.
- **Overlay badge icon** (`SetOverlayIcon`) — small corner glyph. **DEFAULT = the Adom logo whenever a
  session is driving the window ("Adom is driving your browser")**. AI / 3rd-party bridge can override
  with a custom icon; `"none"` clears.

(Thumbnail-toolbar buttons, jump lists, iconic/live-preview only work on the owner's OWN window, so
they'd be ab's button — "AI cockpit", phase 2. A DWM live thumbnail of the browser inside ab is the
juicy phase-2 item.)

## Flash modes (set by USER or AI)
- `quiet` (default) — flash only on "come look" moments: navigate-complete, screenshot taken, error,
  task done. Plus progress/overlay stay live.
- `chatty` — flash on every activity verb (click/type/navigate/eval/screenshot). For anxiety-driven
  users who want to watch everything.
- `off` — no auto-flash; explicit `nbrowser_flash` still works.

## Bridge verb surface (bridge owns the logic; ab owns the OS primitive)
- `nbrowser_flash {sessionId?}` / `nbrowser_flash_stop {sessionId?}`
- `nbrowser_flash_mode {mode:"quiet"|"chatty"|"off"}`
- `nbrowser_taskbar {sessionId?, progress?:{state,value?}, overlay?:{badge,tooltip?}}`
- **hwnd captured at control-start**: on `nbrowser_open_window` the bridge resolves the OS hwnd (via
  ab GetForegroundWindow / desktop_list_windows — the just-opened window is focused) and caches
  `sessionId → hwnd`. All taskbar ops target the cached hwnd → never the wrong window.
- On control-start the bridge sets overlay=Adom by default.

## Self-teaching hints (a fresh AI thread must DISCOVER this — it isn't obvious)
- `nbrowser_open_window` reply: full hint — capability exists, current flashMode, the verbs, when to
  use (done/error/gate), that the USER can prefer chatty/quiet/off, "never leave it strobing".
- First activity per session: one-line reminder.
- `nbrowser_help`: complete reference + best-practice playbook.
- `nbrowser_flash_mode` echoes the new mode + that the user can change it anytime.
- Teach WHY/WHEN (courtesy to the user, tied to their preference), not just HOW.

## Dependency: ab `desktop_taskbar` verb (prompt sent to ab thread)
`desktop_taskbar { hwnd, flash?, progress?:{state,value?}, overlay?:{badge:"adom"(default)|"<named>"|"none", icon?:"<path|base64>", tooltip?} } -> {ok}`
- Lightweight persistent COM (ITaskbarList3 init once), no per-call process spawn.
- Ships the Adom overlay icon; accepts custom icons for 3rd-party bridges.
- Flash is the only channel doable via run_script fallback before this lands; progress/overlay need it.

## Build order
1. ab confirms `desktop_taskbar` shape (+ a foreground-hwnd helper if needed).
2. Bridge: hwnd capture on open_window + the 4 verbs + modes + auto-flash hook + Adom-overlay default
   + the rich hints. Extension: report active-window title if needed for hwnd resolution of adopted windows.
3. Test: open window → correct hwnd flashes; progress green/yellow/red; Adom badge shows while driving.
