News Collection logo

News Collection

Community
notque
news-collection

Collect, filter, and freshness-qualify news items.

Overview

Publishernotque
Repositoryvexjoy-agent
Skill namenews-collection
Stars
443
Forks
50
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by notque on GitHub. Read the source before you install it.

Installation

Install the News Collection AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/notque/vexjoy-agent.git /tmp/vexjoy-agent
mkdir -p .claude/skills
cp -r /tmp/vexjoy-agent/skills/research/news-collection .claude/skills/news-collection
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable News Collection in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads News Collection on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so News Collection is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

News Collection

Gather news items on a topic, filter junk cheaply, verify freshness, and emit qualified items under an evidence contract. Pipeline-shaped: four phases, a gate between each. Content pipelines consume the JSON artifact; pair with fact-check to verify what this skill qualifies.

Instructions

Phase 1: COLLECT

Goal: gather candidate items from available sources (feeds, search results, provided fixtures). Every item carries the five-fact evidence contract: title, url, outlet, author, published_at.

Rule (verbatim from the design): publish times are extracted (article metadata), never guessed; missing timestamp → recorded as unknown, confidence lowered and disclosed. A guessed timestamp poisons every downstream freshness verdict; an honest "published_at": null keeps the item usable with known uncertainty.

Record each item as one JSON object per the item schema below. Fill evidence_notes with where each fact came from (meta tag, byline, JSON-LD, sitemap).

Distinguish outcomes: zero items because sources were unreachable is a collection failure (report it, stop); zero items from reachable sources is a valid empty feed (deliver an empty artifact with counts of zero).

Gate: every collected item has all five fields present — value or explicit null with a confidence downgrade and a disclosure note. Items with silent gaps stay in COLLECT until the gap is recorded.

Phase 2: COARSE FILTER

Goal: cheap, high-recall pass over collected items. Three verdicts: keep / monitor_only / reject, each with a reason code (see Coarse Filter below).

Rule (verbatim from the design): high-magnitude stories are downgraded to monitor_only at most, never rejected — a false keep is cheap, a silent drop is expensive. A keep costs one extra freshness check; a wrongly dropped major story costs the whole pipeline its value.

This phase runs on a cheap model when dispatched -- it needs recall, not judgment depth. Give the dispatched model: topic, verdict/code tables, asymmetry rule, and items' five facts plus a text excerpt.

Gate: every item has exactly one verdict and one reason code. reject verdicts on items that look high-magnitude get re-checked once before the phase closes.

Phase 3: FRESHNESS CHECK

Goal: for each keep and monitor_only item, establish when the story first became public and whether this page is the original coverage.

  • First-public time vs page date -- a page can carry today's date on old news.
  • Syndication and aggregator reposts detected; select the canonical coverage.
  • Same-story vs new-development rubric -- consolidate duplicates, keep genuine developments. See Freshness Forensics below.

Rule (verbatim from the design): two independent sources or verdict "unclear". Conservative default: unclear over guessed. An "unclear" verdict is recoverable downstream; a confidently wrong "fresh" verdict ships stale news.

Gate: every surviving item carries freshness: fresh | stale | unclear, a first_public_estimate (or null), and the count of sources backing the verdict. Duplicate clusters are consolidated to one canonical item with duplicates_of links.

Phase 4: DELIVER

Goal: emit qualified items as a structured JSON artifact (see Artifact Schema below) plus a summary table. Every verdict state appears in the artifact — monitor_only, unclear, and reject items ship with their verdicts rather than vanishing, so consumers see the full triage.

Gate (deterministic phase checkpoint — emit this table before delivering the artifact; delivery without it is incomplete):

VerdictCount
keepn
monitor_onlyn
rejectn
unclear (freshness)n
duplicates consolidatedn

The counts make silent drops visible: collected total must equal keep + monitor_only + reject. If it does not, return to the phase that lost items.

Error Handling

No items collected

  • Cause: sources unreachable, or feed genuinely empty.
  • Solution: unreachable sources → report collection failure and stop; reachable but empty → deliver an empty artifact with zero counts. The two outcomes stay distinct so an outage is not read as a quiet news day.

No timestamp found anywhere for an item

  • Cause: page has no metadata, byline date, or sitemap entry.
  • Solution: set published_at: null, confidence: low, disclose in evidence_notes; freshness verdict for that item is unclear.

Two sources disagree on first-public time

  • Cause: syndication chain or republished update.
  • Solution: apply canonical-coverage selection (references/freshness-forensics.md); if still split, verdict unclear.

Item count mismatch at DELIVER

  • Cause: an item was dropped without a verdict.
  • Solution: diff item ids against the COLLECT record; assign the missing item a verdict with reason code.

Evidence Contract

Every collected item carries five facts:

FactTypeMissing value handling
titlestringEmpty string only if page truly has none; note in evidence_notes
urlstringRequired -- no URL means unverifiable; exclude from artifact
outletstringDerive from domain when no masthead found; note derivation
authorstring or nullnull when no byline; note where you looked
published_atISO 8601 or nullExtracted from metadata, never guessed. null when absent; lower confidence, disclose

Confidence: high (all five extracted), medium (one derived or weak), low (published_at null or 2+ derived).

Item Schema

json
{
  "id": "string", "title": "string", "url": "string",
  "outlet": "string", "author": "string|null",
  "published_at": "ISO 8601|null", "confidence": "high|medium|low",
  "evidence_notes": "string", "verdict": "keep|monitor_only|reject",
  "reason_code": "string", "freshness": "fresh|stale|unclear|null",
  "first_public_estimate": "ISO 8601|null",
  "freshness_sources": "integer", "duplicates_of": "string id|null"
}

Artifact Schema

json
{
  "schema_version": "1.0", "topic": "string",
  "collected_at": "ISO 8601",
  "counts": {"collected":0,"keep":0,"monitor_only":0,"reject":0,"unclear_freshness":0,"duplicates_consolidated":0},
  "items": []
}

Conservation rule: collected == keep + monitor_only + reject.


Coarse Filter

VerdictMeaningGoes to freshness check
keepOn-topic, substantive, plausibly freshYes
monitor_onlyWorth watching: off-topic but high-magnitude, thin, or uncertainYes
rejectJunk: spam, ads, dead pages, clearly irrelevantNo

Asymmetry rule: high-magnitude stories downgrade to monitor_only at most, never reject. A false keep is cheap; a silent drop is expensive.

Reason Codes

CodePairs withMeaning
RC-ONTOPICkeepDirectly on topic
RC-DEVkeepNew development of known story
RC-OFFTOPIC-BIGmonitor_onlyOff-topic but high-magnitude
RC-THINmonitor_onlyOn-topic but little substance
RC-UNCERTAINmonitor_onlyRelevance unclear
RC-SPAMrejectPromotional, SEO bait
RC-IRRELEVANTrejectOutside topic, low magnitude
RC-NOCONTENTrejectDead link, paywall stub, empty page

Freshness Forensics

First-public time vs page date

A syndicated repost or refreshed CMS page can carry today's date on old news. Establish first-public time from (in trust order):

  1. Article metadata (article:published_time, JSON-LD datePublished) on the originating outlet's page.
  2. Earliest published_at across collected items covering the same story.
  3. In-text anchors ("announced Tuesday") tied to a known date.

Two independent sources or verdict unclear. Independent means separately reported -- two copies of the same wire story count as one.

VerdictCondition
freshTwo sources put first-public time inside the freshness window
staleTwo sources put it outside, or page repackages older coverage
unclear<2 sources, conflicting evidence, or no usable timestamp

Syndication detection

Signals of a repost: wire credit in byline, rel=canonical pointing elsewhere, body near-identical to an earlier item, aggregator framing ("read more at"), outlet with no original bylines across beats. A repost inherits the original's first-public time.

Canonical-coverage selection

When several items cover one story, deliver one canonical item, link the rest via duplicates_of. Pick canonical by: originating outlet > earliest published_at > most complete five-fact record.

Same-story vs new-development

QuestionSame story (consolidate)New development (keep separate)
New named facts?NoYes
New primary source?NoYes
Event advanced?NoYes
Only framing/outlet changed?Yes--

Two+ "new development" answers = separate item.

Frequently asked questions

What does the News Collection AI skill do?

Collect, filter, and freshness-qualify news items.

Why use News Collection on TypingMind?

Because you install it once and use it with any model. News Collection is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install News Collection in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use News Collection?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with News Collection?

As many as you like. As long as a model supports skills, you can use News Collection with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the News Collection AI skill free?

Yes. It is published on GitHub by notque under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇