Artefact: what the researcher would see (macOS banners and the Settings row are system or SwiftUI chrome, approximated, drawn as macOS 27 draws them: icon, title, time, body, no app name; token colours verbatim)Commentary and diagrams: not product
Notificationfinished, Bristlenose in the background
B
Checkout studynow
Analysis finished · 8 sessions · 38m
Notificationdid not finish, reason known
B
Checkout studynow
The analysis didn’t finish · Out of credit · 5 of 8 sessions analysed
Notificationfinished with failures
B
Checkout studynow
Analysis finished with failures · 6 of 8 sessions analysed · 38m
Notificationdid not finish, reason not known
B
Checkout studynow
The analysis didn’t finish · 5 of 8 sessions analysed
SettingsSettings ▸ General, on by default
Default location for new projects
Last location used
Notify when an analysis finishes
SettingsSettings ▸ General, muted
Default location for new projects
Last location used
Notify when an analysis finishes
Sheetfirst analysis: our one-button screen, then the system's request
B
Notify me when analysis finishes
macOS will ask next whether Bristlenose can send notifications. You can change this in Settings > General.
Continue
SettingsSettings ▸ General, notifications off in System Settings
Default location for new projects
Last location used
Notify when an analysis finishesNotifications are off for Bristlenose in System Settings.
Open Notification Settings…
Commentary — not part of the product
For owner scrutiny, not a spec. The text is illustrative and the project is synthetic. Per the owner's direction (6 Nov 2026) the text carries the project name, the switch is on by default, and there is no "about N min".
String plan
Text
Status
"The analysis didn’t finish"
Shipped (failedTitle)
"Claude is out of credit"
Shape shipped (llmSettings.validation.outOfCredit: "{{provider}} is out of credit…"); the short form is new
New, with a plural. Order follows the owner's own Notification Center (what or where first, then what happened). Sentence case decided by the owner. There is a shipped tooltip "Analysis finished with failures for {{project}}", which is a different case.
"{{project}} · {{count}} sessions · {{duration}}"
New, with a plural. Whether the count belongs is open (the same question as a "found so far" count).
Sheet: "Notify me when analysis finishes", "macOS will ask next whether Bristlenose can send notifications. You can change this in Settings > General.", button "Continue"
New. Owner-written wording (6 Nov). One button, titled Continue, that opens the system request; no Cancel (Apple's rules for a screen before a permission request). The analysis starts either way.
"Notifications are off for Bristlenose in System Settings." and "Open Notification Settings…"
New, owner-written proposals. The button opens the system pane for the app. It never re-asks.
"Notify when an analysis finishes"
New, owner-written proposal. Reads positively, on by default. General tab holds one row today.
All new strings need the 21 full locales. Not drawn: the sound. There is no Dock bounce (decided).
When a run's end becomes a banner
The run…
Researcher looking
Away
Muted in Settings
finished
no banner; sidebar row flips
banner
no banner
didn't finish
no banner; the failure shows as today
banner
no banner
was stopped by the researcher
no banner: they just did it, and "Analysis stopped" is already plain
ended because the app quit
no banner: nothing is alive to send it (today's rule)
Decided (owner, 6 Nov 2026): when the researcher is looking at Bristlenose (the app is active, a window is visible, the display is awake, the screen is unlocked and the session is active) there is no banner, whichever project is on screen. The researcher is in the app and has the sidebar; a run finishing in another project shows there as it does today. A closed sidebar is a wrinkle to play with once it is built, not a reason to banner.
Still to settle: several runs finishing close together (one banner each, or grouped; macOS can thread them by project); a run that finished while the Mac was asleep (macOS shows it on wake).
Your question: could the web app ask its platform to send the alert? (Parked by the owner, 6 Nov 2026: kept for the record, not being pursued.)
Short answer: yes in principle, but it is the wrong place for this one. The thing that knows a run has ended is the Swift side, which already supervises the run; the report page has no run-progress channel at all. Routing it page → bridge → Swift just adds a hop to reach the same notification centre.
Inside the Mac app's web view: I could not confirm that the page's own Notification or Push API works there. The commonly described workaround is the one the app already uses for other page-to-app messages: a message to native code, which posts the notification (search-level; Apple's WebKit release notes for the current macOS are the authority).
In a plain browser tab (bristlenose serve with no Mac app): the browser's Notification API can raise a banner while the tab is open, after the browser's own permission prompt. That is a fallback for people not using the Mac app, not a route for the phone: Safari's Web Push (macOS 13 and later) needs a service worker, an HTTPS site and Apple's push service, and a page served from the researcher's own Mac cannot be reached from their phone to subscribe (my inference from how Web Push subscribes; not tested).
Either way it stays on the Mac. Phone and Watch need route 1 (a service the researcher picks), as in the design note.
Design record: docs/design-perceived-wait.md, candidate A.
Commentary — not part of the product
For owner scrutiny, not a spec. The text is illustrative and the project is synthetic. Per the owner's direction (6 Nov 2026) the text carries the project name, the switch is on by default, and there is no "about N min".
String plan
failedTitle)llmSettings.validation.outOfCredit: "{{provider}} is out of credit…"); the short form is newAll new strings need the 21 full locales. Not drawn: the sound. There is no Dock bounce (decided).
When a run's end becomes a banner
Decided (owner, 6 Nov 2026): when the researcher is looking at Bristlenose (the app is active, a window is visible, the display is awake, the screen is unlocked and the session is active) there is no banner, whichever project is on screen. The researcher is in the app and has the sidebar; a run finishing in another project shows there as it does today. A closed sidebar is a wrinkle to play with once it is built, not a reason to banner.
Still to settle: several runs finishing close together (one banner each, or grouped; macOS can thread them by project); a run that finished while the Mac was asleep (macOS shows it on wake).
Your question: could the web app ask its platform to send the alert? (Parked by the owner, 6 Nov 2026: kept for the record, not being pursued.)
Short answer: yes in principle, but it is the wrong place for this one. The thing that knows a run has ended is the Swift side, which already supervises the run; the report page has no run-progress channel at all. Routing it page → bridge → Swift just adds a hop to reach the same notification centre.
bristlenose servewith no Mac app): the browser's Notification API can raise a banner while the tab is open, after the browser's own permission prompt. That is a fallback for people not using the Mac app, not a route for the phone: Safari's Web Push (macOS 13 and later) needs a service worker, an HTTPS site and Apple's push service, and a page served from the researcher's own Mac cannot be reached from their phone to subscribe (my inference from how Web Push subscribes; not tested).Design record:
docs/design-perceived-wait.md, candidate A.