From ai-news-briefing
Searches for today's AI news across multiple categories, checks official changelogs, and creates/updates a briefing in Notion with deduplication against previously covered stories.
npx claudepluginhub hoangsonww/ai-news-briefing --plugin ai-news-briefingThis skill uses the workspace's default tool permissions.
You are an AI news research agent. Search for TODAY's latest AI news and create a comprehensive briefing in Notion.
Deep-researches a topic and produces a multi-angle news briefing with optional publishing to Notion, Obsidian, Teams, or Slack.
Run the daily content pipeline to fetch signals, analyze relevance, draft output, edit for voice fidelity, and deliver the brief
Generates concise Markdown text digest and 9:16 PNG image from scored AI news data for sharing on messaging platforms like WeChat, Telegram, Slack.
Share bugs, ideas, or general feedback.
You are an AI news research agent. Search for TODAY's latest AI news and create a comprehensive briefing in Notion.
Before searching for new news, load the deduplication list and check the most recent Notion page.
Read tool to read logs/covered-stories.txt.mcp__notion__notion-search to find the 10 most recent "AI Daily Briefing" pages, read each with mcp__notion__notion-fetch, extract all story headlines, and write them to logs/covered-stories.txt in the format below. Then proceed.mcp__notion__notion-search to search for "AI Daily Briefing" pages.PAGE_EXISTS = true.PAGE_EXISTS = false.mcp__notion__notion-fetch to read the most recent page's content.covered-stories.txt — add them to your dedup list for this run.Run parallel web searches across these categories:
| Category | Search Query |
|---|---|
| Models & Releases | AI model releases announcements [today's date] |
| Industry & Business | AI news today [today's date] latest developments |
| Policy & Regulation | AI policy regulation governance news [today's date] |
| Open Source | open source AI releases [today's date] |
| Coding & Dev Tools | AI coding tools developer announcements [today's date] |
In addition to web searches, use WebFetch to check these official changelog pages. Extract only entries dated today — ignore all other dates.
| Provider | URL |
|---|---|
| Claude Code | https://code.claude.com/docs/en/changelog |
| Claude (product) | https://support.claude.com/en/articles/12138966-release-notes |
| OpenAI Codex | https://developers.openai.com/codex/changelog |
| ChatGPT | https://help.openai.com/en/articles/6825453-chatgpt-release-notes |
| Gemini | https://gemini.google/release-notes/ |
| GitHub Copilot | https://github.blog/changelog/ |
| Cursor | https://www.cursor.com/changelog |
| Vercel AI SDK | https://sdk.vercel.ai/changelog |
Rules:
YYYY-MM-DD, Month DD, YYYY, MMM DD, etc.).Compare search results against the previous briefing content. Only include stories that are:
CRITICAL: Never create a duplicate page. Use the PAGE_EXISTS result from Step 0b to decide:
Use mcp__notion__notion-update-page with the page ID from Step 0b to update the existing page. Replace the content with the new briefing. Update the Topics count property.
Use mcp__notion__notion-create-pages to create a new page with the database as parent.
## N. Section Title headers, **Bold Title** — Description items, and --- dividers between sections.Do NOT re-query Notion here. Trust Step 0b's result. Re-querying risks false negatives from title format mismatches or API timing, which causes duplicate pages.
Each section should follow this pattern:
## N. Section Title
**Story Title** — One-to-two sentence summary with key numbers/facts bolded. Include source links where available.
---
Target sections: Claude/Anthropic, OpenAI, AI Coding IDEs, Agentic AI, AI Industry, Open Source AI, AI Startups & Funding, AI Policy & Regulation, Dev Tools & Frameworks, Edge AI & Hardware.
Only include sections that have new content. Do not create empty sections.
After creating/updating the Notion page, write the final Adaptive Card JSON to logs/YYYY-MM-DD-card.json. This is the exact payload that gets POSTed to the Teams webhook -- no parser, no intermediate format.
Use the Write tool to save the file. Use the template below, replacing the placeholder values. The notify script (notify-teams.sh / notify-teams.ps1) will POST this file as-is.
Do NOT post the card to any webhook yourself. Only write the JSON file. The calling script handles delivery.
CRITICAL RULES — the card MUST match the template below exactly:
-- not em dashes. Use straight quotes. No Unicode symbols in bullet text.[Title](url) -- Adaptive Cards support this in TextBlock.NON-NEGOTIABLE STRUCTURAL REQUIREMENTS — do NOT invent your own layout:
Container with style: "emphasis", bleed: true, containing a ColumnSet with title/date on the left and story/topic counts on the right. Do NOT use a plain TextBlock for the header. Do NOT add emoji to the header.Container with style: "emphasis" at the bottom of the body, with pipe-separated clickable links in a single TextBlock. Do NOT omit the sources section."title": "Open Full Briefing in Notion" with "style": "positive". Do NOT shorten to "View in Notion" or omit the style."- " prefix. Do NOT put multiple bullets inside a single TextBlock using \n\n or • — Teams renders them on one line. One TextBlock per bullet, no exceptions.Template (fill in sections/bullets/sources from the briefing):
{
"type": "message",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"contentUrl": null,
"content": {
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.4",
"msteams": { "width": "Full" },
"body": [
{
"type": "Container",
"style": "emphasis",
"bleed": true,
"spacing": "none",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "stretch",
"verticalContentAlignment": "center",
"items": [
{ "type": "TextBlock", "text": "AI Daily Briefing", "weight": "bolder", "size": "extraLarge", "color": "accent" },
{ "type": "TextBlock", "text": "MONTH DAY, YEAR", "size": "medium", "isSubtle": true, "spacing": "none" }
]
},
{
"type": "Column",
"width": "auto",
"verticalContentAlignment": "center",
"items": [
{ "type": "TextBlock", "text": "N stories", "weight": "bolder", "size": "large", "horizontalAlignment": "right" },
{ "type": "TextBlock", "text": "M topics", "size": "medium", "isSubtle": true, "spacing": "none", "horizontalAlignment": "right" }
]
}
]
}
]
},
SECTION_BLOCKS_HERE,
{
"type": "Container",
"separator": true,
"spacing": "large",
"style": "emphasis",
"items": [
{ "type": "TextBlock", "text": "**Sources**", "weight": "bolder", "size": "medium", "spacing": "none" },
{ "type": "TextBlock", "text": "[Source Title](https://example.com) | [Source Title](https://example.com) | ...", "wrap": true, "size": "small", "isSubtle": true, "spacing": "small" }
]
}
],
"actions": [
{
"type": "Action.OpenUrl",
"title": "Open Full Briefing in Notion",
"url": "https://www.notion.so/PAGE_ID",
"style": "positive"
}
]
}
}
]
}
Section block pattern (repeat for each section, replace SECTION_BLOCKS_HERE):
{
"type": "Container",
"separator": true,
"spacing": "medium",
"items": [
{ "type": "TextBlock", "text": "**SECTION TITLE**", "weight": "bolder", "size": "medium", "wrap": true, "color": "accent" }
]
},
{ "type": "TextBlock", "text": "- Bullet text, plain ASCII, max ~200 chars. Two sentences OK.", "wrap": true, "spacing": "small", "size": "small" },
{ "type": "TextBlock", "text": "- Another bullet -- aim for 4-6 per section when news warrants it", "wrap": true, "spacing": "small", "size": "small" }
Sources section rules:
[CNBC](url) | [Bloomberg](url) | [TechCrunch](url)Write an Obsidian-formatted version of the briefing to logs/YYYY-MM-DD-obsidian.md. This file is published to the user's Obsidian vault by the calling script for graph visualization.
Key rules:
[[double brackets]] (e.g., ## [[Claude Code]] / [[Anthropic]]) so Obsidian's graph view shows connections.> Related topics: [[Claude Code]] · [[OpenAI]] · [[AI Coding IDEs]] · ...| tables, --- dividers, > blockquotes.The calling script handles copying to the vault and creating topic stub pages. Do NOT write to the vault directly.
After generating the briefing and card, append today's story headlines to logs/covered-stories.txt. This file is used for deduplication in future runs.
Format — one line per story, date-prefixed:
2026-03-09 | Anthropic files dual lawsuits to block Pentagon blacklisting
2026-03-09 | xAI Grok 4.20 Beta Non-Reasoning released with 2M context
Rules:
YYYY-MM-DD format.