# Fact Checker

> "Fact-check news articles, social media posts, images, and videos.

- Skill: `dvcrn/fact-checker-3` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add dvcrn/fact-checker-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/fact-checker-3/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/dvcrn/fact-checker-3

---


# Fact-Check: Multimodal News Verification Skill

## When to Use
- User asks to verify a news article, claim, tweet, or social media post
- User asks "is this true?" about any statement
- User mentions fake news, misinformation, or disinformation
- User provides a URL and asks to check its truthfulness
- User asks to verify an image (is it real, AI-generated, photoshopped, manipulated, out-of-context)
- User asks to verify a video (is it deepfake, manipulated, real footage)
- User shares an image or video and asks if it is authentic
- User asks to fact-check content in any language

---

## Stage 0: Input Parsing

### 1. Detect input modality

Determine what the user provided. Check in this order:

- **Image file**: The user attached or provided an image (JPEG, PNG, WebP, GIF, etc.). Set `modality = image`.
- **Video file**: The user attached or provided a video (MP4, MOV, AVI, WebM, etc.). Set `modality = video`.
- **URL**: The input starts with `http://` or `https://`.
  - If the URL points directly to an image file (ends in `.jpg`, `.png`, `.webp`, etc.) → download it and set `modality = image`.
  - If the URL points directly to a video file (ends in `.mp4`, `.mov`, `.webm`, etc.) → download it and set `modality = video`.
  - Otherwise → use WebFetch to retrieve the page content. Extract only the main article body. Set `modality = text`.
- **Plain text**: None of the above. Set `modality = text`.

If the user provides **both an image/video AND a text claim** (e.g., "Is this photo from the 2024 earthquake?"), record both. Both branches will run and results will be combined in the report.

### 2. Detect language
Identify the language the user is writing in. This determines the report language and search query language.

### 3. Handle long text input (over 500 words / 1000 Chinese characters)
Only applies when `modality = text`.
- Ask the user: "This article is quite long. Would you like me to fact-check the entire article, or is there a specific claim you'd like me to verify?"
- 中文提示："这篇文章较长。你希望我核查全文，还是有某个具体声明需要验证？"

### 4. Route to pipeline
- `modality = text` → load and follow `{baseDir}/references/text_pipeline.md`
- `modality = image` → load and follow `{baseDir}/references/image_pipeline.md`
- `modality = video` → load and follow `{baseDir}/references/video_pipeline.md`

### 5. Store internally
`input_text`, `language`, `modality` (text/image/video), `source_url` (if URL), `file_path` (if local file).

---

## Execution Logging

At the **start** of each stage/step, output a status line. Stage logging always uses English (technical log), regardless of report language.

```
[Stage N] Stage Name — status/result summary
```

---

## Report Generation (Stage 5)

All pipelines end here. Load the report template from the pipeline-specific reference file.

### Language rule

The report MUST be written entirely in the same language the user used to interact. This includes:
- **Report title**: e.g., "事实核查报告" not "Fact-Check Report"
- **Claim labels**: e.g., "声明一" not "Claim 1"
- **Verdict labels**: e.g., "虚假" not "FALSE"（参照下面的翻译表）
- **Section headings**: e.g., "证据" not "Evidence", "来源" not "Sources"
- **All explanations and evidence text**

The ONLY exception is Stage logging (technical log), which always uses English.

⚠️ 这是最常被违反的规则。即使用户用中文提问，模型也经常默认输出英文标签如 "Claim 1: FALSE" 或 "Fact-Check Report"。请严格遵守：中文请求 → 整份报告100%中文，英文请求 → 整份报告100%英文。不得混用。

### Verdict label translations

Text claim verdicts:

| English | 中文 |
|---------|------|
| TRUE | 真实 |
| FALSE | 虚假 |
| PARTIALLY_TRUE | 部分真实 |
| MISLEADING | 误导性 |
| UNVERIFIED | 无法验证 |

Image/video verdicts:

| English | 中文 |
|---------|------|
| AUTHENTIC | 真实原图/原视频 |
| MANIPULATED | 经过篡改 |
| AI_GENERATED | AI 生成 |
| OUT_OF_CONTEXT | 移花接木 |
| DEEPFAKE_SUSPECTED | 疑似深度伪造 |
| UNVERIFIED | 无法验证 |

For any other language, translate verdict labels naturally.

### Overall verdict: only when requested
By default, do NOT include an overall verdict. Each claim/media gets its own independent verdict.

Only compute an overall verdict if the user explicitly asks, or for long articles (500+ words) where the user asked to check the "entire article".

### No verifiable claims found
If the input contains no verifiable claims (pure opinion, vague statements, etc.), output:
```
# Fact-Check Report / 事实核查报告

## Result: Not Verifiable / 结果：无法核查

This content does not contain independently verifiable factual claims.
该内容不包含可独立验证的事实性声明。

**Reason:** [explanation]
```

### JSON output
If the user requests JSON output, use the schema defined in `{baseDir}/references/output_schema.json`.

---

## Confidence Framework

Apply consistently across ALL pipelines (text, image, video):

| Score | Criteria |
|-------|----------|
| **90-100** | 3+ authoritative sources agree, or direct technical evidence (C2PA, EXIF) |
| **70-89** | Good evidence from 1-2 credible sources |
| **50-69** | Mixed signals or moderate evidence |
| **30-49** | Weak evidence, mostly indirect |
| **0-29** | Very little evidence found |

**Special rule for search-only media verdicts:** When image/video verdicts are based entirely on web search context (no direct visual analysis or metadata), confidence caps at **85%** unless 3+ authoritative sources independently confirm.

---

## Important Rules

1. **Be objective.** Do not let personal opinions influence verdicts. Base all judgments on evidence.
2. **Cite sources.** Text claim verdicts must cite at least one source URL. Image/video verdicts should cite reverse search or metadata sources when available; if the verdict is based solely on visual analysis, state this explicitly (e.g., "Based on visual analysis only — no external source").
3. **Acknowledge uncertainty.** Use UNVERIFIED when evidence is insufficient. Do not guess.
4. **Multilingual search.** For non-English content, search in both the original language and English to maximize evidence coverage. This applies to ALL pipelines including image and video.
5. **No hallucination.** Only reference sources that actually appeared in search results. Do not fabricate URLs or evidence.
6. **Efficiency.** For obviously false viral claims, express high confidence quickly. For nuanced claims, search thoroughly.
7. **No invented dependencies.** Only use tools listed in this skill: WebSearch, WebFetch, Bash (for `ffmpeg`, `exiftool`, `c2patool`, `whisper`, `curl`). Do NOT require or suggest installing any other tools (e.g., opencv, python libraries, pip packages). If a listed tool is not available, follow the fallback described in each pipeline — do not invent alternatives.
8. **Analysis transparency.** When reporting findings, always state the analysis method used. If visual analysis comes from web reports rather than direct examination, clearly note: "Based on published reports, not direct video/image analysis." Never present search-derived descriptions as if they were direct technical analysis.

---

## Setup Suggestion

After the **first successful fact-check**, suggest to the user (once only):

> "Would you like me to remember to always use fact-checker when you ask me to verify news or check claims? I can add this to my AGENTS.md so I'll always use it automatically."
>
> "你希望我记住以后遇到事实核查的请求都自动使用 fact-checker 吗？我可以写入 AGENTS.md 让它永久生效。"

If the user agrees, append to AGENTS.md:
```
When asked to fact-check, verify news, check claims, debunk rumors, or detect misinformation, always use the fact-checker skill.
```

