Fact Check logo

Fact Check

Community
scdenney
fact-check

Checks whether each claim in a manuscript is supported by the source it cites, reading the project's per-source Markdown knowledge base. Flags contradicted, unsupported, overclaimed, out-of-scope, and misattributed claims with verbatim source quotes. Runs citation-check first, and stops at a pre-flight gate when the knowledge base is missing, incomplete, or holds unconverted PDFs. Use to verify that a draft's claims match the sources it cites.

Overview

Publisherscdenney
Repositoryopen-science-skills
Skill namefact-check
Stars
69
Forks
3
Bundled files
Instructions only
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 scdenney on GitHub. Read the source before you install it.

Installation

Install the Fact Check 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/scdenney/open-science-skills/tree/main/plugin/skills/fact-check
  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/scdenney/open-science-skills.git /tmp/open-science-skills
mkdir -p .claude/skills
cp -r /tmp/open-science-skills/plugin/skills/fact-check .claude/skills/fact-check
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Fact Check 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 Fact Check 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 Fact Check 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.

Claim–Source Fact Checker

This skill extends citation-check (which verifies a citation exists, resolves, and is formatted) to the next question: does the cited source actually support the claim it is attached to? It checks claims against the project's per-source Markdown knowledge base — one Markdown file per cited source, each converted or summarized to sources/md/<author>-<year>-<slug>.md by whatever intake workflow the project uses. This is local-source verification, not open-web fact-checking: it audits whether a manuscript's sentences are backed by the documents the author has actually read and filed. Run once a draft has citations and a populated knowledge base.

Instructions

1. Pre-flight gate — orient, then refuse if the knowledge base is not ready

Orient. Identify the inputs:

  • Manuscript source: LaTeX, Markdown, Word/PDF text, or pasted prose with citations or footnotes.
  • Bibliography: .bib, CSL JSON, or reference list — used to resolve cite keys to author-year-title so source files can be found.
  • Knowledge base: the project's per-source Markdown directory. Search in order: sources/md/, knowledge_base/md/, sources/, knowledge_base/, then any chapter-local */sources/. Also read any index or crosswalk file (sources/inventory.md, notes/source_map.md, *source*crosswalk*, *source*matrix*) that maps bib keys or titles to files.
  • Scope: whole manuscript, one section, the literature review/theory sections, or a supplied list of claims.

Pre-flight gate. Claims are verified against local Markdown source files, not from memory or the open web. A fact-check run against an absent or half-built knowledge base gives false reassurance, which is worse than no check. Return a Pre-flight: NOT READY notice instead of a report when any of the following holds:

  1. No knowledge base. No per-source Markdown corpus exists: sources/md/, knowledge_base/md/, or an equivalent is missing or empty.
  2. Unconverted sources (not cleaned up). Raw documents — .pdf, .docx, .epub, or scanned images — sit in the sources area (a drop-zone, sources/, sources/pdf/, */source_pdfs/) without a corresponding .md. The base is not clean: every source must be converted to Markdown first (or, if long, to a Markdown summary).
  3. Coverage too low. The available Markdown does not cover the cited works in scope. Compute coverage = matched source files ÷ cited non-background works; below roughly two-thirds, treat as not ready.

Do not fact-check around the gap or fill missing sources from memory or the web. The user can fix the knowledge base and rerun, or explicitly rescope the run to the covered subset; in that case proceed with the subset and state the rescoping in the report.

Remediation to print on refusal:

  • Build a per-source Markdown knowledge base — one file per cited source, e.g. produced by scripts/convert-sources.sh in a repo laid out by the research-repo skill, or by your own source-intake workflow. Each raw source becomes sources/md/<author>-<year>-<slug>.md, summarized if long.
  • Populate any cited work that has no file yet: locate the PDF, then run it through the same intake step.
  • Re-run fact-check once sources/md/ covers the cited set and no raw files remain unconverted.
  • The knowledge-base layout and intake conventions are documented in the Open Science Skills repo (github.com/scdenney/open-science-skills) and in research-repo.

2. Run citation-check first

Before judging support, run the citation-check skill on the same inputs and consume its report. A claim cannot be evaluated against a source that is missing, fabricated, or mis-keyed. Carry its findings forward: any LIKELY FABRICATED, DOI RESOLVES TO DIFFERENT WORK, or in-text/reference parity break makes the dependent claim UNVERIFIABLE — citation problem, not a clean support check. Cite its result rather than repeating its checks.

3. Build the claim inventory

For each in-text citation, parenthetical, narrative cite, or footnote that attaches a source to a substantive statement, record:

  • the claim — the exact sentence or clause the citation backs;
  • the cite key(s) / author-year;
  • the claim type — empirical result, descriptive fact, definition/concept, method precedent, theoretical position, or direct quotation;
  • the asserted strength — the verb does work: "shows" / "demonstrates" / "proves" claim more than "suggests" / "is consistent with" / "see".

Skip pure background or "see also" citations unless they carry a checkable assertion. For multi-source claims, check each source's contribution separately — a claim can be supported by one cited work and not another.

4. Locate each source's Markdown file

Resolve bib key to author + year + title, then find the matching knowledge-base file:

  • Match on author(s)-year plus a title slug. Naming varies across projects (hyphen-separated or underscore_separated; -and- between co-authors; first-author-only vs. all authors). Be tolerant of diacritics, name particles (de, van, von), and short vs. full titles.
  • Prefer an explicit crosswalk/inventory entry when one exists over fuzzy filename matching.
  • These files are frequently summaries or PDF→Markdown conversions, not full text. Note which: a faithful conversion can adjudicate fine-grained claims; a condensed summary may legitimately omit the detail a claim rests on.
  • Record one of FOUND (with path), AMBIGUOUS (more than one candidate — list them, do not guess), or NOT IN KB.

5. Verify claim support

Read the located source Markdown and judge whether it supports the specific claim. Classify each:

  • SUPPORTED — the source states or directly entails the claim. Quote the supporting passage.
  • PARTIALLY SUPPORTED — the source supports a weaker or narrower version. Name the gap (scope, population, magnitude, hedging).
  • UNSUPPORTED — the source does not contain the claim; the passage that should support it is absent.
  • CONTRADICTED — the source reports the opposite or a materially different result (wrong direction, wrong sign, wrong magnitude).
  • MISATTRIBUTED — the claim is real but belongs to a different work than the one cited.
  • SOURCE INSUFFICIENT — the Markdown is a summary that does not carry enough detail to adjudicate; name what to check in the original PDF.
  • NOT IN KB / UNVERIFIABLE — citation problem — carried from steps 2 and 4.

For every SUPPORTED, PARTIALLY SUPPORTED, or CONTRADICTED verdict, include a verbatim quote from the source (with section/page if the file carries them). Never assert support from memory, topical overlap, or plausibility.

Actively watch for:

  • Overclaiming — source hedges ("may", "in this sample"), manuscript asserts a general law.
  • Direction errors — source finds a null or opposite effect from what the sentence claims.
  • Scope creep — a single-country, single-period, or single-population source cited for a universal claim.
  • Citation stuffing — a source piled onto a claim it does not actually address.
  • Stale quantitative values — numbers, point estimates, or sample sizes that do not match the source.
  • Definitional drift — a concept attributed to a source that defines or uses it differently.

6. Calibrate the verdicts

  • A faithful summary that simply omits a detail is SOURCE INSUFFICIENT, not UNSUPPORTED.
  • Background and framing citations are not evidentiary claims; do not demand data from them.
  • Theory/position citations are supported when the source advances that position, even with no data.
  • A missing source Markdown is an infrastructure gap (NOT IN KB → convert and file the source), not evidence of fabrication. Keep "the source doesn't support the claim" strictly separate from "I couldn't find the source."

Output

If the pre-flight gate failed, return only this notice:

# Fact-Check — Pre-flight: NOT READY

Reason: <no knowledge base | N unconverted sources | coverage X% below bar>
Knowledge base searched: <dirs>
Cited works with no Markdown file: <cite keys / author-year>
Raw files needing conversion: <paths>

## To proceed
1. Convert and file the raw files / missing sources listed above into the Markdown knowledge base
2. Confirm each cited work has sources/md/<author>-<year>-<slug>.md
3. Re-run /oss:fact-check
Best practices: github.com/scdenney/open-science-skills · the research-repo skill

Otherwise, produce a Fact-Check Report:

# Fact-Check Report

Scope: <files/sections checked>
Knowledge base: <dir(s) searched> · sources matched: <n>/<total cited>
citation-check: <ran? key carry-forward findings>
Summary: <N contradicted, N unsupported, N partial, N supported, N not-in-KB, N unverifiable>

## Contradicted / Unsupported (blocking)
| Location | Claim (short) | Cite key | Verdict | Source passage or "absent" | Suggested fix |

## Partially supported / Overclaim (recommended)
| Location | Claim | Cite key | Gap | Source passage | Suggested rewording |

## Source not in knowledge base
| Cite key | Author-year | Why unresolved | Action (convert and file / locate file) |

## Supported (spot-check log)
| Location | Claim | Cite key | Source passage |

Severity:

  • Blocking: a decisive or headline claim is CONTRADICTED or UNSUPPORTED; a reported quantitative result does not match the source; a citation-check failure that invalidates the claim.
  • Recommended: overclaiming or partial support fixable by rewording or rescoping; misattribution where the correct source is known.
  • Minor: a background citation that could be tightened; a summary-only source worth re-checking against its PDF before submission.

Optional Jev verification (--verify)

/oss:fact-check --verify <task> opts into experimental Jev verification; /oss:fact-check --verify jev <task> is identical. Plain /oss:fact-check is unchanged and makes no Jev call. This is an advisory second look at one already-adjudicated claim/source pair — never a fact source, never a replacement for this workflow, and never a replacement for the report labels. An audit that finds errors is already complete without it.

Run the pre-flight gate (step 1) before any Jev action, then run citation-check first as usual and carry its findings forward. Refer to that report rather than repeating provider checks or sending duplicate claim-support evidence. If source identity is still genuinely ambiguous, request /oss:citation-check --verify for that entry, reusing the citation inventory and fetched records. A lead may manually reuse a prior result only for the same complete evaluation input and model/contract version; nothing here caches automatically.

Only on opt-in, read ${JEV_VERIFIER_HOME:-$HOME/.local/share/oss-experiments/jev-verifier/current}/FACT-CHECK.md and follow it; that shared runtime file is authoritative for the state manifest, the verify.py call, and the disclosure you owe the user before a live call. Installation and credentials are covered by ${JEV_VERIFIER_HOME:-$HOME/.local/share/oss-experiments/jev-verifier/current}/README.md in the same bundle; if that bundle is not present, the runtime is not installed and verification is blocked. Do not call Jev for a failed pre-flight, an absent knowledge base, invalid or unchecked citation integrity, or insufficient or unchecked evidence. Record your own report label and verbatim source passage first, either way. A missing runtime, an unresolvable TYPESAFE_API_KEY, or a failed call means the requested check is blocked, never verified and never mocked.

Frequently asked questions

What does the Fact Check AI skill do?

Checks whether each claim in a manuscript is supported by the source it cites, reading the project's per-source Markdown knowledge base. Flags contradicted, unsupported, overclaimed, out-of-scope, and misattributed claims with verbatim source quotes. Runs citation-check first, and stops at a pre-flight gate when the knowledge base is missing, incomplete, or holds unconverted PDFs. Use to verify that a draft's claims match the sources it cites.

Why use Fact Check on TypingMind?

Because you install it once and use it with any model. Fact Check 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 Fact Check in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/scdenney/open-science-skills/tree/main/plugin/skills/fact-check. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Fact Check?

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 Fact Check?

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

Is the Fact Check AI skill free?

It is published on GitHub by scdenney. Check the repository for licensing terms. 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 👇