Skip to main content
AIDiveForge AIDiveForge
🔎

Quote Attribution Verifier

Search & Retrieval · by AIDiveForge · Apr 17, 2026 · Intermediate · ✓ 1 verified compat

Compare quoted text with supplied sources and flag attribution errors.

Get a quote-by-quote evidence table and corrections.

Free · 2 KB · SKILL.md, instructions and example files. Provide the draft and source passages or accessible source URLs.

A worked example

A small example to try before using your own data.

Input

{
  "draft": "Lee said, \"Revenue doubled in 2025.\"",
  "source": "Lee: Revenue grew by 20 percent in 2025."
}

Expected result

{
  "status": "mismatch",
  "quote": "Revenue doubled in 2025.",
  "source_words": "Revenue grew by 20 percent in 2025.",
  "correction": "Use the source wording, or paraphrase the 20 percent increase without quotation marks."
}

What to check: Flag the numeric difference and preserve the source wording; an inaccessible source is unverified, not confirmed false.

Limits: Search snippets and secondary repetitions are not substitutes for the original source.

Worked example included. Model-specific performance and vendor compatibility have not been benchmarked.

Installation options and other formats

Install this skill

An agent skill starts with SKILL.md. The ZIP also includes its examples and any helper scripts. Drop the file into your tool of choice — or pick a different format if you use Cursor, Windsurf, Copilot, or something else.

Download SKILL.md
python3 - <<'ADF_SKILL_INSTALL'
import hashlib, io, os, stat, tempfile, urllib.request, zipfile
from pathlib import Path, PurePosixPath
folder = "quote-attribution-verifier"
root = Path(os.environ.get('ADF_SKILL_ROOT', str(Path.home() / '.claude' / 'skills'))).expanduser()
destination = root / folder
if destination.exists() or destination.is_symlink():
    raise SystemExit('An installation already exists. Back it up and merge the ZIP deliberately.')
root.mkdir(parents=True, exist_ok=True)
request = urllib.request.Request("https://aidiveforge.com/skill/quote-attribution-verifier.zip", headers={'User-Agent': 'AIDiveForge-Resource-Installer/1.0 (+https://aidiveforge.com/skills/)'})
with urllib.request.urlopen(request, timeout=30) as response:
    data = response.read(8 * 1024 * 1024 + 1)
if len(data) > 8 * 1024 * 1024 or hashlib.sha256(data).hexdigest() != "70b517c443375ae649eeb0d61b407045841d6d1ddf1b0372c645149522ffed81":
    raise SystemExit('The download did not match this reviewed bundle. No files were installed.')
with zipfile.ZipFile(io.BytesIO(data)) as archive, tempfile.TemporaryDirectory(prefix='.adf-skill-', dir=root) as temporary:
    members = archive.infolist()
    if len(members) > 100 or sum(m.file_size for m in members) > 16 * 1024 * 1024:
        raise SystemExit('Unexpected archive size')
    for member in members:
        name = PurePosixPath(member.filename)
        if name.is_absolute() or '..' in name.parts or not name.parts or name.parts[0] != folder or '\\' in member.filename or stat.S_ISLNK(member.external_attr >> 16):
            raise SystemExit('Unsafe archive entry; nothing was installed')
        target = Path(temporary).joinpath(*name.parts)
        if member.is_dir():
            target.mkdir(parents=True, exist_ok=True)
        else:
            target.parent.mkdir(parents=True, exist_ok=True)
            with target.open('xb') as stream:
                stream.write(archive.read(member))
    staged = Path(temporary) / folder
    if not (staged / 'SKILL.md').is_file() or destination.exists() or destination.is_symlink():
        raise SystemExit('The skill could not be installed without replacing existing data')
    os.rename(staged, destination)
print('Installed the complete skill folder:', destination)
ADF_SKILL_INSTALL

Claude Code: ~/.claude/skills/quote-attribution-verifier/SKILL.md. Codex: ~/.codex/skills/quote-attribution-verifier/SKILL.md. Keep the complete ZIP folder when helper scripts are included.

🧠 Why it works

Flag the numeric difference and preserve the source wording; an inaccessible source is unverified, not confirmed false.

⚙️ How it works

  1. Extract every direct quotation and the person, date and publication attributed to it.
  1. Locate the exact wording in a primary source; preserve a page, timestamp or stable link.
  1. Distinguish exact matches, disclosed omissions, paraphrases and unsupported quotations.
  1. Check whether surrounding context changes the meaning and whether the named speaker is correct.
  1. Offer a supported correction without silently rewriting someone’s words inside quotation marks.

Description

Get a quote-by-quote evidence table and corrections.

Provide the draft and source passages or accessible source URLs.

Limits: Search snippets and secondary repetitions are not substitutes for the original source.

Recommended Use

Tools and workflow packs this skill pairs well with. Forge picks are auto-generated from category + capability signals; Community picks are added by people who've used the pairing.

No matches yet. Be the first to suggest a pairing, or the Forge will populate suggestions as signals align.