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.
Count how many independent origins are behind news coverage of a claim, instead of counting URLs.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector coverage-check --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "coverage-check" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/ingestion/coverage-check into .claude/skills/coverage-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coverage-check", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/ingestion/coverage-checkType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector coverage-check --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ingestion/coverage-check .agents/skills/coverage-check && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "coverage-check" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/ingestion/coverage-check into .agents/skills/coverage-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coverage-check", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector coverage-check --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ingestion/coverage-check .cursor/skills/coverage-check && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "coverage-check" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/ingestion/coverage-check into .cursor/skills/coverage-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coverage-check", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/SerhiiKorniienko/bullshit-detector.git --path skills/ingestion/coverage-check--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector coverage-check --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ingestion/coverage-check .gemini/skills/coverage-check && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "coverage-check" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/ingestion/coverage-check into .gemini/skills/coverage-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coverage-check", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install SerhiiKorniienko/bullshit-detector coverage-checkInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ingestion/coverage-check .github/skills/coverage-check && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "coverage-check" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/ingestion/coverage-check into .github/skills/coverage-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coverage-check", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill coverage-check -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector coverage-check --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ingestion/coverage-check .opencode/skills/coverage-check && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "coverage-check" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/ingestion/coverage-check into .opencode/skills/coverage-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coverage-check", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
coverage-checkCount 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. 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.
Read from SKILL.md and the folder at commit d5f6156. It shows what the files ask for, not the result of running them.
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.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from SerhiiKorniienko/bullshit-detector at commit d5f6156, republished under its MIT licence (© SerhiiKorniienko). 767 words, ~1,492 tokens.
.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.Ten URLs are not ten sources. This turns "lots of outlets reported it" into a number you can defend.
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:
Search results look identical in both cases. This tells them apart.
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.
# 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 7dThe first line is the verdict the detector needs. The rest supports it.
www., or a
trailing slash. Collapsed before anything else is counted, so every number below it is already
deduplicated.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.
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.
| Exit | Meaning |
|---|---|
| 0 | measurement succeeded (including a legitimate zero-result window) |
| 1 | bad input or unreachable host |
| 3 | GDELT throttled — no measurement, claim is unmeasured |
No API key, no auth, free. Nothing to configure, nothing to rotate.
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
SKILL.md and 2 other files (scripts) in skills/ingestion/coverage-check of SerhiiKorniienko/bullshit-detector.
Open the folder on GitHubat commit d5f6156
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Coverage Check this skillSerhiiKorniienko/bullshit-detector | 154 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Citation Verification GuideGalaxy-Dawn/claude-scholar | 5.7k | 2 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Article Fact Checkerdigoal/blog | 8.6k | — | ~939 | Automated safety check: Pass | GPL-2.0 | |
| Grounded CitationsNousResearch/hermes-agent | 253k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Fact Checkakitaonrails/my-skills | 220 | — | ~2.7k | Automated safety check: Pass | None | |
| Alego Docsingula-ai/alego | 109 | 1 repos | ~4.5k | Automated safety check: Pass | MIT |
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.
digoal/blog
三层审查模型,逐段逐句验证文章真伪、证据链与逻辑结构。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 —…
NousResearch/hermes-agent
Attaches a numbered, URL-backed citation to every outside fact in an answer or document, rejecting quotes that aren't real.
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…
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…
elvisun/newsjack
Extract factual claims from PR copy, verify each claim independently, attach concrete citations, and warn when certainty is low.
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.
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.
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…
SerhiiKorniienko/bullshit-detector
Fact-check and hype-audit content. An agent skill from SerhiiKorniienko/bullshit-detector.
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.
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.
Categories
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.