craft.notifications posts real UNUserNotificationCenter banners, but there is no UNUserNotificationCenterDelegate anywhere in the zig sources — so not even a plain click on a notification reaches the page. No UNNotificationAction/UNNotificationCategory either (repo-wide grep: zero hits), and one trap: bridge_notification.zig:104 documents an \"actionId\": \"open\" field in the show payload that nothing parses.
(The iOS template does register a response handler — CraftApp.swift:55 — desktop never got it.)
Ask, in two stages:
- Click-through (small): install a center delegate, implement
didReceiveNotificationResponse:, emitcraft:notification:clickwith the notification id. Also letsshowhonor or delete the documented-but-deadactionId. - Action buttons: accept
actions: [{id, label}]onshow/schedule, register aUNNotificationCategoryper shape, and emitcraft:notification:actionwith{notificationId, actionId}on response.
The concrete use case waiting on stage 2 (stacksjs/harness): an AI agent requests tool approval while the user is in another app — "Claude wants to run rm -rf build/ — Approve / Deny" as notification buttons means approving without switching apps.
🤖 Generated with Claude Code