Streams
What a stream is
A stream is a thing that produces items on some cadence. You configure a stream once, and items show up in your loop as relevant events happen.
Examples:
- A GitHub stream watches your notifications and creates one item per thread.
- A Gmail stream polls your inbox and creates one item per new thread.
- A “Daily standup” repeater creates one item every weekday at 9am.
Streams live in the right column of the main view. Press l to focus them,
c to create a new one.
Stream types
Repeater
The simplest kind. You set a cadence (every 1 day, every 3 days,
every 1 week) and a local time, and Loopr creates an item on that schedule.
Good for standups, weekly reviews, “water the plants,” anything recurring.
GitHub
Syncs GitHub notifications. Each thread (PR, issue, discussion) becomes one
item. AI summarizes what’s happening and decides whether you’re actually being
asked to do something (waiting_on_you?) vs. just CC’d. Completing in Loopr
marks the notification read in GitHub.
Requires connecting a GitHub identity (Profile → Connect GitHub).
Gmail
Syncs Gmail. Each thread becomes one item with an AI-generated summary and tags. Completing in Loopr archives the thread in Gmail.
Requires a Google identity. Filters work — a stream can watch a specific label or search.
Google Calendar
Upcoming meetings land in your loop some number of minutes before they start. Configurable lead time; default 15 minutes. The item links to the event.
RSS
Any RSS/Atom feed. One item per new entry. Useful for release announcements, blogs you’d otherwise forget to check, status pages.
Discourse Forum Search
Watches a Discourse-powered forum for a search query and creates items for new matching threads. Good for keeping tabs on a community: mentions of your name, a product, a topic, an event you’re interested in.
Linear
Syncs your Linear inbox notifications. Each notification — a comment mention, an assignment, a project update, an initiative update — becomes one item. The AI summarizer fetches the related issue (with its parent project), project, or initiative from Linear and writes a summary that combines the triggering event with the surrounding context. Completing the item in Loopr archives the notification on Linear.
Requires a Linear personal API key (Linear → Settings → API → Personal keys) when configuring the stream.
iOS Reminders
Two-way sync with Apple Reminders via the iOS companion app. In closed beta — see Mobile & Swipe Gestures.
Slack
A push-only stream — Loopr doesn’t poll your Slack messages. Instead, install
the Loopr Slack app to your workspace, then use the “Send to Loopr”
message action on any message (the … overflow menu → Send to Loopr) and
that message lands in your loop.
Each item’s title is the channel + workspace (“#general (Acme)”) with the
author tag prefixed when it isn’t you. The message text becomes the
description, and the URL points back to the message in Slack.
Connect once via the Slack stream form (you only need one Slack stream — the action works on any message in any workspace where you’ve installed the app, including Enterprise Grid). Pause / unpause / delete behave like every other stream, but since Slack only sends items when you trigger the action, there’s nothing scheduled to suppress.
Discord
Mirrors the Slack flow for Discord. Install the Loopr Discord app to your account (it’s a User Install, no server admin needed), then right-click any message → Apps → Send to Loopr. The message lands in your loop.
Item title is the server name (“Loopr”) with the author tag when it isn’t
you, and DMs label as “DM”. Message text becomes the description, and the
URL deep-links back to the message — opens the Discord app on iOS / Android
via Universal Links, or the desktop app if it’s registered as the
discord.com handler in your browser.
Paused vs. hidden vs. scheduled
- Paused streams stop generating new items entirely. Existing items stay.
- Hidden streams exist and run, but their items don’t show in your main loop unless they’re urgent (urgency ≥ 4). Useful for noisy sources you want the AI to triage before you see them.
- Scheduled streams only produce items during their configured window (e.g. weekdays 9am–5pm). Outside the window, their items wait.
Completing a stream-generated item
Depends on the stream type:
- GitHub → marks the notification read
- Gmail → archives the thread
- Linear → archives the notification on Linear (the issue itself stays open; Linear’s model is “the inbox is the unit of attention,” and you close the issue separately when it’s actually done).
- Repeater → the next occurrence is scheduled
- RSS / Discourse / Calendar → the item just goes away
- Slack / Discord → no back-sync; the message stays where it is in Slack / Discord. Re-triggering the action on the same message updates the existing Loopr item rather than creating a duplicate.
If you want to close something on one side without affecting the other, you can delete the item (the card) instead of completing it.
Notifications per stream
Each stream owns its own push-notification rule, set on the stream form:
- Summarizer streams (Gmail, GitHub, Linear) show a Notify when AI sets urgency ≥ dropdown: Off, 2+, 3+, 4+, or 5 only. The AI’s urgency rating drives push delivery for that stream — set the threshold low for high-signal sources, set it to “5 only” for noisy ones, leave it Off to mute the stream entirely without pausing it.
- Other streams (RSS, Repeater, Calendar, Linear, iOS Reminders, etc.) show a single Notify on every new item checkbox. Use it for streams where any new item warrants a push (e.g. a calendar lead-time reminder you don’t want to miss).
- Slack and Discord don’t expose notification config at all — items there are user-triggered (“Send to Loopr” message action), so you’ve already engaged with the message before it lands in the loop.
Push delivery itself is configured in Preferences → Push Notifications. That panel lists every browser/device that’s subscribed, lets you delete stale subscriptions, and surfaces “errored” badges when a push service (Apple, Mozilla) has rejected the subscription. The “Enable push on this device” button shows whether the current device is already subscribed and updates automatically if you flip the OS-level permission in browser site settings.
Badge notifications
Every item that fires a push also gets badged. While an item is badged it contributes to:
- A red dot in the top-right corner of the item’s row in the loop.
- A
(n)count prepended to the browser tab title. - The iOS app icon badge on the native app.
A badge clears the moment you do any of these:
- Complete the item (
x/Enter/ swipe right). - Snooze it (
z/ swipe left). - Click or tap the red dot directly.
- Dwell on the item for one second — selecting it with
j/kand pausing, or letting your scroll settle on it. Flying past on the keyboard or mouse wheel doesn’t clear anything.
If you don’t want the badge UX, disable it in Preferences → Badge notifications. Pushes still fire on the same per-stream rules; you just won’t see a count or a red dot. Toggling it off also clears every item currently badged so the count drops to zero immediately.