Notification Surfaces¶
Surface details — Obsidian modals, Telegram messages, Dashboard forms
Details¶
Three surfaces, all addressed simultaneously by default. First response wins; others auto-dismiss.
| Surface | Port | Strengths | Limitations |
|---|---|---|---|
| Obsidian | 27125 | Consent modals (fast turnaround), toast notices | No generic forms (boolean/freeform/choice) — routes to dashboard |
| Telegram | 5125 | Mobile access, inline keyboard buttons, /reply command |
No sliders, no custom UI. Text-based fallbacks for unsupported types |
| Dashboard | 5127 | Richest UI: card-styled forms, all response types, toast notifications, tab management | Must have browser open |
Callers can target specific surfaces: surfaces: ["dashboard"] or surfaces: ["telegram", "obsidian"].
Response types and rendering¶
response_type |
Dashboard | Telegram |
|---|---|---|
none |
Toast only (click to dismiss, or expand if long body) | Plain message, no buttons |
boolean |
Yes (green) / No (red) outlined buttons | Inline keyboard: Yes / No |
choice |
Labeled buttons per choice (semantic colors) | Inline keyboard: one button per choice |
freeform |
Textarea + Submit button | "Reply to this message" prompt |
range |
Slider + Submit button | Number-as-text prompt |
custom |
Type-specific renderer (e.g., triage clarify/review) | Text summary only |
TTL and expiry¶
Notifications expire after 1 hour, requests after 2 hours. Expired notifications are swept lazily on list_pending(). The expires_at field is set automatically in create_notification().