Count how many independent origins are behind news coverage of a claim, instead of counting URLs.

MITAuto-check passedResearch & Science

Install Coverage Check

skills CLI
$ npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install SerhiiKorniienko/bullshit-detector coverage-check --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ingestion/coverage-check .claude/skills/coverage-check && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
coverage-check
GitHub stars
154
Token cost
~1.5k tokens
SKILL.md length
767 words
Files
3 (incl. scripts)
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

Count how many independent origins are behind news coverage of a claim, instead of counting URLs.

  • A claim appears to be confirmed by many outlets and you need to know whether thats many sources
  • SKILL.md covers When to reach for it, Usage, Reading the output and Limits — read these before…, plus 1 more section
  • Runs Python scripts from its folder; calls uv
  • One source many times

What it does

Coverage Check is an agent skill from SerhiiKorniienko/bullshit-detector. Count how many independent origins are behind news coverage of a claim, instead of counting URLs. Queries GDELT for matching articles, collapses reprints and wire copy into single origins, and flags publication bursts that indicate syndication. Use when a claim appears to be confirmed by many outlets and you need to know whether that's many sources or one source many times.

Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including scripts (for example `scripts/coverage.py`).

It sits in Research & Science, covering Fact-checking and source verification. The repository describes itself as: Agent skills that fact-check the internet: claim-by-claim verification with sources and a 0-10 BS score for any YouTube video, article, tweet, or PDF. The licence is MIT.

When your agent uses it

  • A claim appears to be confirmed by many outlets and you need to know whether thats many sources
  • One source many times

Example prompts

  • “/coverage-check”

Requirements

  • Python 3

What it can do on your machine

Read from SKILL.md and the folder at commit d5f6156. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • uv

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Coverage Check loads about 1.5k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 767 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~98
When it runs · the whole SKILL.md, loaded when a task matches
~1.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from SerhiiKorniienko/bullshit-detector at commit d5f6156, republished under its MIT licence (© SerhiiKorniienko). 767 words, ~1,492 tokens.

Download SKILL.mdSave it as .claude/skills/coverage-check/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
coverage-check
description
Count how many independent origins are behind news coverage of a claim, instead of counting URLs. Queries GDELT for matching articles, collapses reprints and wire copy into single origins, and flags publication bursts that indicate syndication. Use when a claim appears to be confirmed by many outlets and you need to know whether that's many sources or one source many times.

coverage-check

Ten URLs are not ten sources. This turns "lots of outlets reported it" into a number you can defend.

When to reach for it

During claim verification, when a claim looks corroborated by volume — a pile of search results all saying the same thing. That pattern has two very different causes:

  • Many newsrooms independently established the fact → genuinely strong evidence
  • One press release, wire story, or study got reprinted 40 times → one source

Search results look identical in both cases. This tells them apart.

Usage

bash
uv run scripts/coverage.py "<query>" [--timespan 3m] [--max 250] [--sort dateasc] [--timeout 120] [--json]

It is slow. This is normal. GDELT takes ~15s for a trivial one-day query and considerably longer for a 3-month window at 250 records. The script prints progress to stderr and how long the call took, so you can tell "working" from "hung" — if you see the querying line, wait. Narrowing --timespan is the speed lever; raise --timeout before assuming it's broken.

The query accepts GDELT operators: "exact phrase", (a OR b), -exclude, domain:example.com, sourcelang:english. Quote the distinctive phrasing of the claim — a verbatim phrase is what catches reprints.

bash
# Is this "40 outlets confirmed it" or one wire story?
uv run scripts/coverage.py '"quantum breakthrough" AND university'

# Narrow to the week the claim surfaced
uv run scripts/coverage.py '"record quarterly revenue" domain:reuters.com' --timespan 7d

Reading the output

The first line is the verdict the detector needs. The rest supports it.

  • Distinct story clusters — articles grouped by headline similarity. This is the origin estimate. Outlets ≫ clusters means syndication.
  • ⚠️ syndicated on a cluster — multiple outlets published the same story inside 24h. Treat the whole cluster as one source.
  • wire-attributed headline on a cluster — a headline names a wire service or press-release distributor (Reuters, AP, PR Newswire…). The strongest mechanical one-origin signal available at headline level; bodies would catch more, but GDELT returns none.
  • Duplicate URLs collapsed — the same page counted twice behind tracking params, www., or a trailing slash. Collapsed before anything else is counted, so every number below it is already deduplicated.
  • Span (hours) — a tight burst points at a press release or embargo lift; coverage developed over weeks is more likely independent.

Feed the result into the report's evidence column as an origin count: "6 results, 1 origin (all reprints of the company's press release)" is worth more than six links.

Limits — read these before trusting a number

  • Rolling 3-month window only. GDELT DOC 2.0 does not reach further back. For an older claim this returns nothing, and nothing does not mean unreported. The script says so in its output; don't let the agent quietly read empty as disconfirming.

  • Clustering is headline similarity, on two measures: sequence ratio for reworded headlines and token overlap for the same facts in a different order. Grouping is transitive — three outlets on one wire story stay together even when the two extremes score below the bar individually. Verbatim reprints, rewritten wire copy and reordered headlines all collapse correctly.

    What it still won't catch: two newsrooms that independently reached the same finding and described it in genuinely different words. Those show as separate clusters, which is the safe direction to be wrong in — it under-reports syndication rather than inventing it.

    Thresholds were tuned against real GDELT output, not guessed. If you see false merges, raise TITLE_MATCH/TOKEN_MATCH in the script; if wire copy slips through as distinct, lower them.

  • Presence is not credibility. A claim covered by 200 outlets in 30 distinct clusters is widely reported, not true. Verdicts still need the source hierarchy in the detector's RUBRIC.md.

  • Results cap at 250 per query. When the cap is hit the output says so — every count becomes a lower bound, and the honest fix is a narrower --timespan, not a bigger number.

  • The free endpoint is unreliable, and this is the important one. GDELT returns "Please limit requests to one every 5 seconds" well below that rate whenever its public API is busy — independent of IP, User-Agent, and query size. Measured behaviour: identical calls succeed and fail minutes apart. The script retries with growing backoff and then exits 3.

    Exit 3 means "unmeasured", not "no coverage". Never let a failed check weaken or strengthen a verdict, and never record it as though the search came back empty. If the tool can't measure, the report says the origin count is unknown and falls back to the eyeball tells in RUBRIC.md. Retry in a few minutes, or skip it.

    ExitMeaning
    0measurement succeeded (including a legitimate zero-result window)
    1bad input or unreachable host
    3GDELT throttled — no measurement, claim is unmeasured
  • No API key, no auth, free. Nothing to configure, nothing to rotate.

Show full SKILL.md (40 more words)Show less

What it does not do

It counts and groups coverage. It does not fetch article text — that's fetch-content — and it does not judge anything. Analysis skills read its output; they never call it to decide a verdict on their own.

© SerhiiKorniienko, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts) in skills/ingestion/coverage-check of SerhiiKorniienko/bullshit-detector.

  • SKILL.md
  • VERSION
  • scripts/coverage.py

Open the folder on GitHubat commit d5f6156

Compare with similar skills

Coverage Check next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Coverage Check compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Coverage Check this skillSerhiiKorniienko/bullshit-detector154—~1.5kAutomated safety check: PassMIT
Citation Verification GuideGalaxy-Dawn/claude-scholar5.7k2 repos~1.9kAutomated safety check: PassMIT
Article Fact Checkerdigoal/blog8.6k—~939Automated safety check: PassGPL-2.0
Grounded CitationsNousResearch/hermes-agent253k—~3.1kAutomated safety check: PassMIT
Fact Checkakitaonrails/my-skills220—~2.7kAutomated safety check: PassNone
Alego Docsingula-ai/alego1091 repos~4.5kAutomated safety check: PassMIT

Similar skills

  • Citation Verification Guide

    Galaxy-Dawn/claude-scholar

    Reference guidance for checking every citation in academic writing against canonical sources such as DOI, arXiv, CrossRef and Semantic Scholar, to catch fake or wrong references.

    5.7k GitHub starsUsed in 2 repos~1.9k tokens
    Research & ScienceAuto-check passed
  • 三层审查模型,逐段逐句验证文章真伪、证据链与逻辑结构。Use when the user asks to fact-check, verify, audit, or evaluate the credibility of an article, essay, report, opinion piece, social-media post, or any written claim —…

    8.6k GitHub stars~939 tokensUpdated 2 days ago
    Research & ScienceAuto-check passed
  • Grounded Citations

    NousResearch/hermes-agent

    Attaches a numbered, URL-backed citation to every outside fact in an answer or document, rejecting quotes that aren't real.

    253k GitHub stars~3.1k tokensUpdated today
    Research & ScienceAuto-check passed
  • Fact Check

    akitaonrails/my-skills

    Adversarial fact-checking of the user's articles and essays (typically blog posts from akitaonrails-hugo, any markdown/text file), verifying every claim against online primary sources via cheap…

    220 GitHub stars~2.7k tokensUpdated today
    Research & ScienceAuto-check passed
  • Alego Doc

    singula-ai/alego

    Create, restructure, review, audit, or migrate Alego Markdown documentation, package READMEs, and the documentation website using audience-first hierarchy, kind-mapped YAML metadata, bilingual line…

    109 GitHub starsUsed in 1 repo~4.5k tokens
    Research & ScienceAuto-check passed
  • Fact Check

    elvisun/newsjack

    Extract factual claims from PR copy, verify each claim independently, attach concrete citations, and warn when certainty is low.

    1.5k GitHub stars~5.6k tokensUpdated 4 days ago
    Research & ScienceAuto-check passed

More from SerhiiKorniienko/bullshit-detector

  • Fetch Content

    SerhiiKorniienko/bullshit-detector

    Fetch and normalize any content source into clean text with metadata — YouTube video transcripts, TikTok captions, web articles, PDFs, tweets/X posts, local files.

    154 GitHub stars~976 tokensUpdated 11 days ago
    Auto-check passed
  • Report Card

    SerhiiKorniienko/bullshit-detector

    Render a finished BS report as a self-contained HTML page — score hero, filterable claims, readable on a phone, prints to a clean PDF.

    154 GitHub stars~2k tokensUpdated 11 days ago
    Auto-check passed
  • Share

    SerhiiKorniienko/bullshit-detector

    Turn a BS report (or any analysis result) into ready-to-paste posts for X/Twitter, LinkedIn, Facebook, Reddit, Hacker News, or a newsletter issue — plus a branded image carousel (PNGs + PDF) for…

    154 GitHub stars~857 tokensUpdated 11 days ago
    Auto-check passed
  • Bullshit Detector

    SerhiiKorniienko/bullshit-detector

    Fact-check and hype-audit content. An agent skill from SerhiiKorniienko/bullshit-detector.

    154 GitHub stars~10k tokensUpdated 11 days ago
    Auto-check passed
  • Summarize

    SerhiiKorniienko/bullshit-detector

    Produce a structured summary of a video, article, tweet thread, or PDF — TLDR, key points with timestamps/locations, notable quotes, and who should read/watch it.

    154 GitHub stars~420 tokensUpdated 11 days ago
    Auto-check passed
  • Explain

    SerhiiKorniienko/bullshit-detector

    Explain content or any concept inside it at the depth the user needs — ELI5, practitioner level, or expert deep-dive — with a jargon glossary and context the original assumes.

    154 GitHub stars~443 tokensUpdated 11 days ago
    Auto-check passed

Questions about Coverage Check

What does Coverage Check do?

Count how many independent origins are behind news coverage of a claim, instead of counting URLs. Coverage Check is an agent skill from SerhiiKorniienko/bullshit-detector. Count how many independent origins are behind news coverage of a claim, instead of counting URLs.

When should I use Coverage Check?

Coverage Check fits situations like: A claim appears to be confirmed by many outlets and you need to know whether thats many sources; one source many times.

How do I install Coverage Check in Claude Code?

Run `npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a claude-code`. Or copy the skill folder (skills/ingestion/coverage-check in SerhiiKorniienko/bullshit-detector) into .claude/skills/coverage-check in your project. Claude Code loads it when a task matches its description.

How do I install Coverage Check in Codex?

Run `npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a codex`. Or copy the skill folder (skills/ingestion/coverage-check in SerhiiKorniienko/bullshit-detector) into .agents/skills/coverage-check in your project. Codex loads it when a task matches its description.

Can I use Coverage Check in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/coverage-check, .gemini/skills/coverage-check, .github/skills/coverage-check and .opencode/skills/coverage-check in your project.

What does Coverage Check need to run?

Going by SKILL.md and its folder, Coverage Check needs Python for the scripts in its folder and the command-line tools its instructions call (uv). Our summary lists: Python 3.

Does Coverage Check access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Coverage Check safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Coverage Check use?

Coverage Check is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Coverage Check use?

About 1.5k tokens (SKILL.md is roughly 6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Coverage Check?

Skills that share tags, products or a category with Coverage Check: Citation Verification Guide (Galaxy-Dawn/claude-scholar, 5.7k stars), Article Fact Checker (digoal/blog, 8.6k stars), Grounded Citations (NousResearch/hermes-agent, 253k stars) and Fact Check (akitaonrails/my-skills, 220 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Coverage Check?

SerhiiKorniienko (a GitHub user) maintains it in SerhiiKorniienko/bullshit-detector, which has 154 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on September 29, 2026.

Source: SerhiiKorniienko/bullshit-detector on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.