Notify & read-aloud¶
Two ways asmltr uses voice to keep you in the loop when you're away from a chat window:
- Notify — the assistant (or a schedule) proactively reaches you with a spoken / pushed message, trying the best channel that can actually get through.
- Notification reader — your phone reads incoming notifications aloud over your headphones as a short spoken synopsis, skipping the noise.
Both are voice-first, both respect quiet hours, and both are configurable.
Reaching you — asmltr notify¶
When something needs your attention out-of-band — a scheduled morning brief, "your build finished," an alert while you're away — the assistant calls:
| Flag | Effect |
|---|---|
--title |
A short heading shown with the message. |
--force |
Deliver even during quiet hours (use only when it's genuinely urgent). |
--silent |
Skip the spoken step — deliver as text only. |
A schedule whose prompt says "notify me…" or "send me a message" is exactly this command. It's also the primitive the morning brief uses.
The delivery ladder¶
asmltr notify doesn't just fire and hope — it walks a ladder and stops at the first step that can
actually reach you:
- Read aloud — if a connected assistant device (the phone app or a headless control link) is present and allowed to speak, it's spoken aloud through your configured voice.
- Push — a push notification to the device (when a push sender is configured).
- Text fallback — a message to a configured channel (Telegram / Discord / email).
If a step isn't reachable or isn't configured, the ladder falls through to the next. The command reports
which step delivered it (✓ notified via android) or that nothing landed — so a notification never
silently vanishes into the void.
Quiet hours suppress the spoken step (so a 3 AM brief won't wake you); the message still travels the
rest of the ladder as text unless you passed --force. If no quieter step is configured, it's held rather
than spoken.
Configuring delivery¶
Set the policy in the dashboard under Settings → Notifications → Notify delivery:
- Quiet hours — the window where the spoken step is suppressed.
- Only read aloud over headphones — never speak over the phone's loudspeaker.
- Text fallback — the channel + target that catches messages the spoken step can't (recommended, so quiet-hours notifications still reach you silently).
Under the hood this is stored at ~/.asmltr/notify.json and served by POST /v2/notify +
/v2/notify/config; connectors are reached through the connector manager's unified send path, so there
are no host-specific scripts to wire up.
Reading phone notifications aloud¶
The notification reader speaks a natural-language synopsis of incoming phone notifications over your headphones — like a conversational, selective version of a car's "read my messages." It's a native feature of the Android app.
How it works¶
- The app watches posted notifications (you grant Android's Notification access once).
- Each one is judged on-device by the local engine — it returns whether to speak it, a priority score, and a one-sentence synopsis. Because this runs on the local Agent SDK (not a metered/cloud API), the content of your private notifications never leaves the device for a third-party key.
- If it clears your threshold, the app reads the synopsis aloud ("You've got a direct message on Discord — they're done with the project").
- A burst of notifications is summarized together rather than read one by one.
Gating & settings (app → ⚙ Notifications)¶
- Enable readout on/off, and only over headphones (skip when on the speaker).
- Quiet hours — no readout during your configured window.
- Priority threshold — read only notifications scored at or above your bar.
- Per-app allow/deny and a sender allow-list; ongoing/transport/foreground-service noise is filtered out automatically.
- Verbosity — headline vs. full synopsis — and burst-summarize on/off.
Privacy¶
Notification text is sensitive by nature. The synopsis is generated locally, nothing is retained beyond what's needed to de-duplicate a burst, and readout only happens over a private audio route (headphones). Android's own consent screen gates the whole feature.