Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Collect, filter, and freshness-qualify news items.
.claude/skills/notque-news-collection/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 1346% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 150% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 76% | 0% |
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.
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 schema in references/evidence-contract.md. 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.
Goal: cheap, high-recall pass over collected items. Three verdicts: keep / monitor_only / reject, each with a reason code from references/coarse-filter.md.
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. See the dispatch note in references/coarse-filter.md.
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.
Goal: for each keep and monitor_only item, establish when the story first became public and whether this page is the original coverage. Methods in references/freshness-forensics.md:
developments.
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.
Goal: emit qualified items as a structured JSON artifact (schema: references/evidence-contract.md) 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):
| Verdict | Count | |---------|-------| | keep | n | | monitor_only | n | | reject | n | | unclear (freshness) | n | | duplicates consolidated | n |
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.
No items collected
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
published_at: null, confidence: low, disclose inevidence_notes; freshness verdict for that item is unclear.
Two sources disagree on first-public time
(references/freshness-forensics.md); if still split, verdict unclear.
Item count mismatch at DELIVER
a verdict with reason code.
| Signal | Load These Files | Why | |---|---|---| | Recording items, JSON artifact schema, confidence fields | evidence-contract.md | Five-fact contract and artifact schema | | Assigning verdicts, reason codes, cheap-model dispatch | coarse-filter.md | Verdict definitions and dispatch note | | Dating a story, syndication, duplicates, canonical pick | freshness-forensics.md | Forensic methods and rubrics |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-14 | pass→pass | 5,354 | 4,635 | -13% | 1 | 1 | 0% | 941 | 2,057 | +119% | 0 | 0 | — |
case-01 | fail→pass | 16,619 | 32,146 | +93% | 1 | 1 | 0% | 3,211 | 7,378 | +130% | 0 | 0 | — |
case-02 | fail→pass | 6,125 | 22,012 | +259% | 1 | 1 | 0% | 397 | 5,740 | +1346% | 0 | 0 | — |
case-03 | fail→pass | 11,974 | 20,688 | +73% | 1 | 1 | 0% | 2,259 | 5,644 | +150% | 0 | 0 | — |
case-04 | pass→fail | 13,939 | 20,565 | +48% | 1 | 1 | 0% | 2,391 | 5,164 | +116% | 0 | 0 | — |
case-05 | pass→pass | 11,861 | 15,533 | +31% | 1 | 1 | 0% | 1,708 | 3,508 | +105% | 0 | 0 | — |
case-06 | pass→fail | 17,931 | 23,087 | +29% | 1 | 1 | 0% | 2,585 | 5,763 | +123% | 0 | 0 | — |
case-07 | fail→pass | 10,784 | 3,793 | -65% | 1 | 1 | 0% | 1,742 | 1,881 | +8% | 0 | 0 | — |
case-08 | fail→fail | 11,475 | 3,650 | -68% | 1 | 1 | 0% | 1,786 | 1,800 | +1% | 0 | 0 | — |
case-09 | pass→pass | 12,489 | 4,322 | -65% | 1 | 1 | 0% | 1,867 | 1,991 | +7% | 0 | 0 | — |
case-15 | fail→pass | 6,455 | 3,266 | -49% | 1 | 1 | 0% | 1,025 | 1,802 | +76% | 0 | 0 | — |
case-10 | fail→pass | 10,322 | 4,160 | -60% | 1 | 1 | 0% | 1,486 | 1,886 | +27% | 0 | 0 | — |
case-11 | fail→pass | 13,294 | 7,288 | -45% | 1 | 1 | 0% | 2,072 | 2,585 | +25% | 0 | 0 | — |
case-12 | fail→pass | 13,753 | 3,998 | -71% | 1 | 1 | 0% | 1,881 | 1,870 | -1% | 0 | 0 | — |
case-13 | pass→pass | 10,945 | 7,462 | -32% | 1 | 1 | 0% | 1,736 | 2,474 | +43% | 0 | 0 | — |
case-16 | pass→pass | 6,533 | 3,386 | -48% | 1 | 1 | 0% | 966 | 1,859 | +92% | 0 | 0 | — |
case-17 | fail→pass | 10,183 | 3,609 | -65% | 1 | 1 | 0% | 1,717 | 1,929 | +12% | 0 | 0 | — |
case-18 | fail→fail | 11,405 | 3,023 | -73% | 1 | 1 | 0% | 1,945 | 1,737 | -11% | 0 | 0 | — |
case-19 | fail→pass | 8,137 | 2,879 | -65% | 1 | 1 | 0% | 1,332 | 1,737 | +30% | 0 | 0 | — |
case-20 | fail→pass | 11,380 | 4,148 | -64% | 1 | 1 | 0% | 1,809 | 1,965 | +9% | 0 | 0 | — |
case-21 | fail→pass | 11,025 | 4,223 | -62% | 1 | 1 | 0% | 1,835 | 1,916 | +4% | 0 | 0 | — |
case-22 | pass→pass | 10,485 | 3,533 | -66% | 1 | 1 | 0% | 1,607 | 1,836 | +14% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 21 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.