Fact Checker
SkillSearchTargeted claim verification pipeline. Given a factual assertion, search multiple independent sources, cross-check for agreement or contradiction, rate confidence (verified / likely true / disputed / unverified / outdated), and produce a cited verification report.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Fact Checker skill
What this skill tells your AI
The instructions your AI receives, as published by moonlight-lupin/agent-skills in research/fact-checker/SKILL.md and read by ahel’s review.
Overview
Fact Checker is a targeted verification workflow for one factual assertion at a time. It exists because agents often produce claims that sound plausible but may be hallucinated, copied from a weak source, contradicted by later data, or stale after new reporting. A normal research pass can gather useful background while still failing to answer the narrow question: is this specific claim supported, contradicted, outdated, or not verifiable from available sources?
Use this skill to turn a claim into structured search queries, collect confirming and contradicting passages from multiple independent sources, assess source independence and recency, then produce a concise verification report with citations and a calibrated verdict.
Quick Start
From this skill directory:
python scripts/verify.py structure --claim "Singapore's GDP grew 4.1% in 2025"
Or use the compatibility shortcut:
python scripts/verify.py --claim "Singapore's GDP grew 4.1% in 2025"
After collecting source passages with a web search tool and web extraction tool, generate a report:
python scripts/verify.py report \
--claim claim.json \
--sources sources.json \
--output verification-report.md
Completion criterion: the report states a verdict, lists every cited source, surfaces contradictions if present, and includes a source-independence note.
When to Use
- Verify a single factual claim before publishing, sending, or relying on it.
- Check whether a statistic, event, relationship, quote, or date is supported by sources.
- Cross-check an agent-written paragraph by verifying its highest-impact claims one by one.
- Audit a cited claim for source independence and recency.
When NOT to Use
- Broad topic research or literature review → use a deep research workflow.
- Full entity background dossiers → use an entity research workflow.
- Citation database management → use a source tracking workflow.
- Propaganda, bias, or intent analysis → this skill only verifies factual support.
- Real-time market, weather, emergency, legal, medical, or regulatory determinations → use authoritative live systems and human review.
The 5-Stage Pipeline
1. Parse Claim
Extract the assertion into a structured object:
- Claim text — exact wording to verify.
- Claim type — statistic, event, relationship, quote, or date.
- Key terms — entities, metrics, values, years, dates, and distinctive nouns.
- Time period — explicit year/date range if present.
- Entity / metric / value — when detectable.
- Search queries — 3-5 targeted searches.
Command:
python scripts/verify.py structure --claim "Singapore's GDP grew 4.1% in 2025" > claim.json
Completion criterion: the JSON contains enough terms to search for the claim without relying on memory.
2. Search
Run 3-5 targeted searches across different source families. Combine:
- Primary/official source query: regulator, statistics agency, company filing, court document, government release.
- Independent news/report query: reputable outlet or analyst report.
- Contradiction query: add terms like
not,revised,correction,dispute, or an alternative value/date. - Recency query: add
latest, current year,revised,updated, orfinalwhen the claim has a time period.
Do not treat repeated versions of the same press release as separate evidence.
Completion criterion: the search set includes at least one query likely to find contradiction or newer data, not only confirmation.
3. Extract
For each candidate source, extract a short passage that directly confirms, refutes, or nuances the claim. Store sources as JSON:
[
{
"url": "https://example.org/report",
"title": "Example Report",
"passage": "The economy grew 4.1% in 2025...",
"stance": "confirm",
"source_type": "official",
"accessed_at": "2026-07-06"
}
]
Use stance values:
confirm— directly supports the claim.refute— directly contradicts the claim.nuance— partially supports, qualifies, or changes scope.
Completion criterion: every source has a URL, title, quoted passage, stance, source type, and access date.
4. Cross-Check
Assess four dimensions before deciding:
- Source independence — different root domains are a start, but not enough. Check whether sources rely on the same wire story, press release, filing, or dataset.
- Agreement — count confirming, refuting, and nuancing sources separately.
- Contradictions — if credible sources disagree, present both positions with citations.
- Recency — if the claim refers to a time period, check for later revisions, final data, restatements, or updated filings.
Use the URL assessment helper:
python scripts/verify.py assess --urls "https://a.example/report,https://b.example/story,https://c.example/data"
Completion criterion: the final report explains whether evidence is genuinely independent and current.
5. Verdict
Generate the report:
python scripts/verify.py report --claim claim.json --sources sources.json --output report.md
The verdict is a confidence label, not a truth oracle. The report should state what the collected evidence supports, where it conflicts, and what remains unknown.
Completion criterion: the verdict follows the rubric below and the report includes citations, contradictions, notes, and verification date.
Confidence Rubric
| Verdict | Use when | Minimum evidence |
|---|---|---|
| ✅ Verified | The claim is directly supported by multiple independent reliable sources and no credible contradiction was found. | At least 2 independent confirming sources, current data, no credible refutation. |
| ⚠️ Likely true | The claim is supported by one authoritative source or limited corroboration, with no contradiction found. | 1 official/academic/report source or one strong source plus weak corroboration. |
| ⚖️ Disputed | Reliable sources disagree about the claim. | At least one confirming and one refuting source, neither obviously irrelevant. |
| ❓ Unverified | No reliable source directly supports the claim. | No reliable sources, only weak/irrelevant mentions, or sources do not address the assertion. |
| 📅 Outdated | The claim appears to have been true for an earlier data vintage but newer data contradicts or supersedes it. | Older confirmation plus newer contradictory/revised source. |
No Hallucination Rule
If no sources are found, the verdict is Unverified — never false. Absence of evidence in a quick search does not prove the claim is false. Say what was searched, what was not found, and what would be needed for a stronger conclusion.
Outdated Detection
If a claim references a year, quarter, event date, filing period, or named data release:
- Search for
revised,final,updated,restated,latest, and the current year. - Prefer the newest official data vintage over older preliminary coverage.
- If older sources confirm but newer sources contradict, use Outdated rather than Disputed when the newer source supersedes the older one.
Contradiction Surfacing
When sources disagree, present both sides. Do not silently pick the side that matches the expected answer. Explain differences in wording, scope, units, dates, and data vintages.
Claim Types
| Claim type | Detection clues | Verification approach | Best sources |
|---|---|---|---|
| Statistic | Numbers, percentages, currency, rates, rankings | Find original dataset/release; verify units, time period, geography, and revisions. | Statistics agencies, filings, official data portals, audited reports. |
| Event | Acquired, launched, announced, resigned, won, filed, approved | Confirm event happened, date, parties, and status; check follow-up if announced vs completed. | Press releases, filings, regulator notices, reputable news. |
| Relationship | is CEO of, belongs to, owned by, subsidiary of, partnered with | Verify current relationship and effective dates; check whether relationship changed. | Company pages, filings, registries, official bios, reputable profiles. |
| Quote | Quotation marks, said, wrote, according to | Find original transcript/document/audio; verify exact wording and speaker. | Transcripts, speeches, interviews, primary documents. |
| Date | Explicit year/date, founded in, launched on, as of | Verify exact date and whether it is start, announcement, completion, publication, or effective date. | Official timelines, filings, primary documents, encyclopedic references with citations. |
Source Independence Rules
Source count is not evidence count. Three articles that all cite one press release count as one source origin, not three independent confirmations.
Treat sources as independent only when they come from different organizations and appear to have independently obtained or verified the fact. Root-domain comparison is a useful first pass, but also check:
- Same byline or wire service across multiple sites.
- Same wording and publication timestamp.
- Explicit phrases like
according to the company,according to a press release, orreported by Reuters. - Aggregator pages that summarize another outlet.
- Official data reused by many articles; the dataset is the primary source.
When in doubt, count conservatively and explain the limitation.
Integrations
- Deep research workflow — verify key claims before a long report is published. Run this skill on the most important statistics, dates, and potentially controversial assertions.
- Source tracker — log every source used in the verification report with topic tags and notes so citations remain reusable.
- Entity research — verify entity-specific claims such as ownership, leadership, registration status, adverse-media assertions, and sanctions-list signals before including them in a dossier.
Common Pitfalls
- Treating secondary sources as independent. Multiple articles can repeat the same source origin. Trace back to the original.
- Confirmation bias. Queries that only include the asserted value tend to find confirmations. Always run at least one contradiction or revision query.
- Declaring
falsewithout evidence. A failed search means unverified unless a reliable source directly refutes the claim. - Ignoring recency. Preliminary data, old bios, and announced-but-not-completed events often become stale.
- Mismatched scope. A source may confirm a similar claim with a different country, time period, unit, denominator, or entity.
- Quote laundering. Do not verify a quote from a quote roundup; find the original transcript, video, speech, or document.
- Overweighting domain count. Different domains can still carry the same syndicated article or press release.
Verification Checklist
- Claim is quoted exactly and scoped to one assertion.
- Claim type, key terms, time period, entity, metric, and value were extracted where possible.
- Search included official/primary, independent secondary, contradiction, and recency queries.
- Every source has URL, title, passage, stance, source type, and access date.
- Source independence was checked beyond root domains.
- Confirming, refuting, and nuancing sources were counted separately.
- Contradictions were surfaced with citations.
- Recency and data vintage were checked for time-bound claims.
- Verdict follows the confidence rubric.
- No unsupported claim was upgraded beyond the evidence.
What This Skill Is NOT
- Not a general research engine.
- Not a propaganda, bias, or intent detector.
- Not a real-time data feed.
- Not a substitute for official databases, professional judgment, legal advice, medical advice, or domain experts.
- Not authoritative on its own; it produces a cited verification report for a person to review.
Files
scripts/verify.py— rule-based claim structuring, URL independence assessment, and Markdown report generation.references/confidence-rubric.md— detailed verdict criteria, edge cases, and examples.references/source-independence.md— source-origin and syndication rules.templates/verification-report.md— report template used by the CLI output.tests/test_verify.py— pytest coverage for parsing, reporting, and independence assessment.
Signals
- GitHub stars
- 65
- Forks
- 11
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
fact-checker- Source
- github.com/moonlight-lupin/agent-skills