<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andri Darnius</title>
    <description>The latest articles on DEV Community by Andri Darnius (@andre-arc).</description>
    <link>https://dev.to/andre-arc</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4234415%2Fcc90038b-3263-4dee-acd0-8cbec0c0e531.jpg</url>
      <title>DEV Community: Andri Darnius</title>
      <link>https://dev.to/andre-arc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andre-arc"/>
    <language>en</language>
    <item>
      <title>I checked every quote Claude's deep research cited. One wasn't what the source said.</title>
      <dc:creator>Andri Darnius</dc:creator>
      <pubDate>Mon, 09 Nov 2026 05:15:37 +0000</pubDate>
      <link>https://dev.to/andre-arc/i-checked-every-quote-claudes-deep-research-cited-one-wasnt-what-the-source-said-5ae7</link>
      <guid>https://dev.to/andre-arc/i-checked-every-quote-claudes-deep-research-cited-one-wasnt-what-the-source-said-5ae7</guid>
      <description>&lt;p&gt;AI research tools are good at sounding sourced. Every paragraph ends with a link, every key point sits in quotation marks. I wanted to know how often those quotes are actually on the page they link to, so I checked them with code instead of trusting the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  The setup
&lt;/h3&gt;

&lt;p&gt;I asked Claude's &lt;code&gt;deep-research&lt;/code&gt; skill a technical question: &lt;em&gt;"SQLite WAL vs rollback journal for concurrent writes."&lt;/em&gt; It came back with a solid report: four parallel researchers, 30 sources, and 21 direct quotes.&lt;/p&gt;

&lt;p&gt;Then I pulled out every quote and the link that followed it, fetched each page, and checked whether the quoted words were really there. Matching ignored case, punctuation, line breaks and PDF formatting, but never the words themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  The result
&lt;/h3&gt;

&lt;p&gt;20 of 21 quotes were exact. One wasn't.&lt;/p&gt;

&lt;p&gt;The report quotes the SQLite forum as saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"a VM has its own memory space"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The thread never says that. The closest sentence is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"QEMU provides a private virtual memory space for its VM"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The meaning is close. The quotation marks are wrong. It's a paraphrase presented as a quote, and nothing in the research process checks for that.&lt;/p&gt;

&lt;p&gt;To be fair to deep research: its report was excellent and broader than mine (more on that below). One soft misquote in 21 isn't a scandal. But it's the kind of error that survives review, because it &lt;em&gt;sounds&lt;/em&gt; right.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's not just one tool
&lt;/h3&gt;

&lt;p&gt;I hit the same problem in my own research agent. In one run on HTTP/3 performance, the agent quoted two research papers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It wrote &lt;em&gt;"advantageous **for&lt;/em&gt;* users that move."* The paper says &lt;em&gt;"advantageous **in case of&lt;/em&gt;* users that move."*&lt;/li&gt;
&lt;li&gt;It wrote &lt;em&gt;"QUIC's removal of HOL blocking…"&lt;/em&gt; The paper says &lt;em&gt;"QUIC's removal of HOL *&lt;/em&gt;(head-of-line)** blocking…"*&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are close enough that a reader, or the model re-reading its own notes, would accept them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this happens
&lt;/h3&gt;

&lt;p&gt;The cause I found most surprising: &lt;strong&gt;when an agent "reads" a page, it often doesn't see the page.&lt;/strong&gt; Many agent web-fetch tools pass the page through a smaller model and return a summary or an answer to a prompt. The agent then quotes from that summary. Quotes drift. PDFs are worse: many fetch tools can't extract them at all, so the agent quotes from memory or from a secondary source.&lt;/p&gt;

&lt;p&gt;Asking the model to double-check doesn't fix this. It checks against the same summary.&lt;/p&gt;

&lt;h3&gt;
  
  
  What worked
&lt;/h3&gt;

&lt;p&gt;Two changes, both boring:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fglzhomz125ylg5xpx8qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fglzhomz125ylg5xpx8qw.png" alt="How Quoteproof works" width="799" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Quote from the exact page text.&lt;/strong&gt; Before quoting, fetch the raw page (or extract the PDF's text) and copy from that, not from a summary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check every quote with code.&lt;/strong&gt; After research, fetch each cited page once and match each quote word for word, as whole words, in order. A quote is either on the page or it isn't.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When a quote isn't on the cited page, check the &lt;em&gt;other&lt;/em&gt; pages in the same research. Often the quote is real but pinned to the wrong source. In one run the checker found a real SQLite quote attributed to &lt;code&gt;wal.html&lt;/code&gt; that actually lives on &lt;code&gt;pragma.html&lt;/code&gt;, and corrected the link instead of dropping it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbjn0lrnsnbldpoii3v3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbjn0lrnsnbldpoii3v3n.png" alt="Real checker output: a wrong page, caught and corrected" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the checker itself work?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3r9u1i3wzab9b9ljgcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3r9u1i3wzab9b9ljgcn.png" alt="Stress test: 45 of 45 classified correctly" width="799" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I stress-tested it: 40 real verified quotes, 30 of them deliberately damaged (two words swapped, a "not" removed, a number changed, the wrong page cited) plus 5 invented quotes and 10 left intact. It classified &lt;strong&gt;45 of 45&lt;/strong&gt; correctly.&lt;/p&gt;

&lt;p&gt;PDFs needed their own fixes. Footnote numbers glue onto words ("users1 ."), words split across lines ("trans-\nactions"), and ligatures replace letter pairs. Each one caused a false "not found" until handled.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it costs
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9t7li51vc415en4eu5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9t7li51vc415en4eu5t.png" alt="Research tokens: Quoteproof 78.5K on Haiku vs deep research 278.8K" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the same SQLite question, my pipeline's research phase used &lt;strong&gt;78,517 tokens on Claude Haiku&lt;/strong&gt;. Deep research's four researchers used &lt;strong&gt;278,826 on the main model&lt;/strong&gt;. That's about 28% of the tokens, on a cheaper model.&lt;/p&gt;

&lt;p&gt;The trade-off is real: deep research found things mine didn't, including a SQLite WAL corruption bug fixed in 3.51.3 (March 2026) and corruption across Docker Desktop VM boundaries. Broader search costs more. Checking quotes costs almost nothing, since it's a script, not a model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;

&lt;p&gt;I packaged this as an agent skill called &lt;strong&gt;Quoteproof&lt;/strong&gt;: a 5-angle research pipeline that quotes from exact page text and checks every quote before writing the report. The report ends with an audit line: quotes checked, verified, corrected, dropped.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free, MIT:&lt;/strong&gt; &lt;a href="https://github.com/andre-arc/Quoteproof-Community" rel="noopener noreferrer"&gt;Quoteproof Community&lt;/a&gt; checks quotes from web pages:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  git clone https://github.com/andre-arc/Quoteproof-Community.git ~/.claude/skills/quoteproof-community
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pro:&lt;/strong&gt; adds PDFs and research papers, exact-text quoting, and wrong-page detection: &lt;a href="https://www.agensi.io/r/ANDREARC?to=/skills/quoteproof&amp;amp;utm_source=devto" rel="noopener noreferrer"&gt;Agensi&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;All the data&lt;/strong&gt; behind this post, including the deep research report and every quote checked: &lt;a href="https://github.com/andre-arc/Quoteproof/tree/master/proof" rel="noopener noreferrer"&gt;github.com/andre-arc/Quoteproof&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tested with Claude Code. One limit to know: it proves a quote &lt;strong&gt;exists&lt;/strong&gt; on the page, not that the page is &lt;strong&gt;right&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  I'm looking for reviewers
&lt;/h3&gt;

&lt;p&gt;So far every test is mine. I'd like researchers and programmers to try it on &lt;strong&gt;their own&lt;/strong&gt; questions and tell me what happened, especially when it fails.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the free edition (one &lt;code&gt;git clone&lt;/code&gt;, above).&lt;/li&gt;
&lt;li&gt;Ask your agent to research something you know well, so you can judge the answer.&lt;/li&gt;
&lt;li&gt;Share the result in the comments here, or through the &lt;a href="https://github.com/andre-arc/Quoteproof-Community/issues/new?template=review.yml" rel="noopener noreferrer"&gt;review form&lt;/a&gt;:

&lt;ul&gt;
&lt;li&gt;what you researched,&lt;/li&gt;
&lt;li&gt;the audit line at the end of the report,&lt;/li&gt;
&lt;li&gt;anything it caught, and anything it got wrong.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'll read every response and publish a follow-up with what reviewers found, good and bad. With your permission, I'll quote you.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I built Quoteproof and earn from sales of the Pro edition. The Agensi link is my referral link.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>python</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
