CyranoB

news-monitor

Search for recent news and developments on a topic, organize them chronologically, and deliver a concise briefing. Use this skill when the user wants to catch up on recent events, news, or developments around a topic. Trigger on phrases like "what's new with X", "recent news about X", "any updates on X", "what happened with X lately", "catch me up on X", "news roundup for X", "what did I miss about X", "latest developments in X", or "has anything changed with X recently". Also trigger when the user mentions a time frame like "this week", "this month", "since January", or "in the last few days" combined with wanting information. Don't trigger for general research, product comparisons, or fact-checking — only when recency is the point.

CyranoB 9 3 Updated 3mo ago
GitHub

Install

npx skillscat add cyranob/web-forager/news-monitor

Install via the SkillsCat registry.

SKILL.md

News Monitor

This skill finds recent news and developments on a topic and delivers a chronological
briefing. The focus is on what's new — not a general overview.

Design principle: search results first, fetch sparingly

The news search tool already returns titles, snippets, dates, and sources for each
result. That's enough to build most of the briefing without fetching any pages. Only
fetch a page when a snippet is too vague to understand what actually happened and you
need the full article to write a useful summary. Most of the time, 0–2 fetches is
plenty. Never fetch more than 3 pages.

Tools available

News search — the primary tool. Returns results sorted by date with timestamps
and source outlets.

If an MCP news search tool is available (e.g., mcp__web_forager__duckduckgo_news_search
or mcp__duckduckgo__duckduckgo_news_search), prefer it:

mcp__web_forager__duckduckgo_news_search(query="your query", max_results=10)

Each result includes title, url, snippet, date, and source.

Without MCP, use the ddgs library directly:

from ddgs import DDGS
results = DDGS().news(query="your query", max_results=10)
for r in results:
    print(r["date"], r["title"], r["url"], r["source"])

If ddgs isn't installed: pip install ddgs

General search — use an MCP search tool or DDGS().text() only if news
search returns too few results.

Fetch — use an MCP fetch tool or curl -s "https://r.jina.ai/URL"
only when a snippet is too vague to summarize the event. Cap fetches with
max_length=3000 to avoid pulling giant pages.


News monitoring workflow

Step 1 — Determine scope

Before searching, clarify:

  • Topic: what exactly are we monitoring?
  • Time frame: did the user specify "this week", "last month", "since X"? If not,
    default to the last 2–4 weeks.
  • Angle: are they interested in everything, or a specific aspect (e.g., "funding
    news about X", "regulatory updates on Y")?

Step 2 — Search

Run 1–2 news searches with different angles to get good coverage:

  • "[topic]" as the base query
  • A second query with a more specific angle if relevant (e.g., "[topic] announcement",
    "[topic] policy", "[topic] release")

Include the current year in queries to bias toward recent results.

Step 3 — Deduplicate and filter

From the combined news results:

  • Group articles about the same event (multiple outlets covering the same story)
  • Pick the best source for each event (prefer the one with the most informative snippet)
  • Discard anything outside the relevant time frame
  • Discard duplicates or near-duplicates
  • Aim for 3–7 distinct events

Step 4 — Selective fetch (only if needed)

Look at your filtered results. For each event, ask: "Can I write a useful 2–4 sentence
summary from the title + snippet alone?" If yes, don't fetch. If the snippet is cryptic
or you need key details (numbers, names, outcomes), fetch that one page with
max_length=3000.

Step 5 — Deliver the briefing

Organize chronologically (most recent first) and present as a news briefing.


Output format

# [Topic] — News Briefing

**Period**: [time frame covered]
**Last updated**: [today's date]

## Headlines
- [One-line summary of event 1] — [date]
- [One-line summary of event 2] — [date]
- [One-line summary of event 3] — [date]

## Details

### [Event 1 title] — [date]
[2–4 sentences: what happened, why it matters, what's next]
Source: [Title](url)

### [Event 2 title] — [date]
[2–4 sentences]
Source: [Title](url)

### [Event 3 title] — [date]
[2–4 sentences]
Source: [Title](url)

## What to watch
[1–2 sentences about upcoming events, expected announcements, or unresolved threads
that the user might want to follow up on]

Keep it tight. The user wants to catch up quickly, not read essays. If there's genuinely
no recent news, say so — "No significant developments found in [time frame]" is a valid
and useful answer.