Open source AI content verification
Project description
TruthCheck 🔍
Open source AI content verification. Score claims 0-100 and trace their origins.
Why?
AI chatbots present web content as fact. Bad actors exploit this — a BBC journalist showed he could make ChatGPT call him "the best tech journalist at eating hot dogs" with one fake article.
TruthCheck catches this:
$ truthcheck verify "Thomas Germain is the best tech journalist at eating hot dogs" --llm gemini
TruthScore: 0/100 (FALSE)
⚠️ ZERO FLAG: Content identified as satire
Install
pip install truthcheck
Setup
Search: Works out of the box with DuckDuckGo (free, no key needed).
LLM (required for --llm flag):
export GOOGLE_API_KEY=AIza... # Gemini (recommended)
# or OPENAI_API_KEY, ANTHROPIC_API_KEY
Usage
# Verify a claim (with LLM for deep analysis)
truthcheck verify "Some claim" --llm gemini
# Trace claim origin
truthcheck trace "Some claim"
# Check URL(s) — single or multiple
truthcheck check https://reuters.com
truthcheck check "Sources: https://reuters.com and https://bbc.com"
# Check publisher reputation
truthcheck lookup breitbart.com
Check URLs
Verify URLs and detect hallucinations (URLs that don't exist):
$ truthcheck check "Sources: https://reuters.com/fake-article and https://bbc.com"
URLs Found: 2
Summary: 🚨 1 broken/hallucinated URL(s) | ✅ 1 sources verified
🚨 Broken/Hallucinated URLs:
✗ https://reuters.com/fake-article (404 Not Found)
Verified URLs:
81% https://bbc.com
Also works with files:
truthcheck check -f response.txt
Trace Example
$ truthcheck trace "Thomas Germain is the best tech journalist at eating hot dogs"
🎯 ORIGIN
Domain: tomgermain.com
Date: 2026-02-05
📅 TIMELINE
🥇 [2026-02-05] tomgermain.com
🥈 [2026-02-18] bbc.com
🥉 [2026-02-18] gizmodo.com
📊 STATS
Sources: 14 | Date range: 2026-02-05 → 2026-02-19
📋 More examples: See TEST_CASES.md for detailed verification results on common misinformation claims.
Python
from truthcheck import verify_claim, trace_claim
from truthcheck.search import DuckDuckGoProvider
result = verify_claim("Earth is flat", search_provider=DuckDuckGoProvider())
print(f"TruthScore: {result.truthscore}/100")
origin = trace_claim("Some viral claim")
print(f"Origin: {origin['origin']['domain']}")
How It Works
TruthScore weighs four factors equally:
| Factor | Weight |
|---|---|
| Publisher credibility (origin) | 25% |
| Content analysis | 25% |
| Corroboration | 25% |
| Fact-checker verdicts | 25% |
Fact-checkers are weighted by their own MBFC credibility rating (reduces bias from any single source).
Zero flags (satire, self-published, fake experiments) force score to 0.
MCP Server
Works with Claude Desktop and Cursor:
{
"mcpServers": {
"truthcheck": { "command": "truthcheck-mcp" }
}
}
License
MIT
Issues · Docs · Test Cases
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file truthcheck-0.4.0.tar.gz.
File metadata
- Download URL: truthcheck-0.4.0.tar.gz
- Upload date:
- Size: 290.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d67bb5813f1f435fcaa1f2cc27420894000d7aa39052e7661037d120e596d73
|
|
| MD5 |
e905fb57426e573c21def3abc17e4163
|
|
| BLAKE2b-256 |
0e26a02e08488ef9d049a108ba6f6e0d485cfcc1e55a4910d1cfe9ae7f619538
|
File details
Details for the file truthcheck-0.4.0-py3-none-any.whl.
File metadata
- Download URL: truthcheck-0.4.0-py3-none-any.whl
- Upload date:
- Size: 287.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aebd0a87c11a8e889410a38e325f01adfa1605ebb924812cc5f560a10a1710a3
|
|
| MD5 |
94dae72824df1326ab3cf076f76ab997
|
|
| BLAKE2b-256 |
246bc11d54ec8276a8a439ee363c0ac26ae59683146633fd6230a030065bd351
|