There's a flaw in every AI answer engine, including this one, and it took me a while to name it.
Ask ten sources what something costs and you'll often get several different numbers. A vendor's figure, an independent test, a review from eighteen months ago that nobody updated. An AI reads all of them and hands you back one sentence, in one confident voice. The disagreement doesn't show up as uncertainty. It just quietly disappears, and you never learn it was there.
A list of blue links was better at this. Ten links let you see that the third and fourth results don't match, and that tells you something real: this is contested, look closer.
So that's what this release is about — Chervil showing its working. Where the sources didn't agree, which claims it actually went and checked, what came from your own reading rather than the web. And, because it turns out to be the same problem from the other end, remembering the things you've told it it got wrong.
Composed pages now show you where sources disagree
When Sprig reads several pages and they give materially different answers — a price, a date, a measured figure, whether something even happened — it no longer picks one quietly or splits the difference.
Both positions go on the page. Each one names the source that makes it, with a line on which is more credible and why, or an honest admission that it's genuinely unsettled. If the split is really about staleness rather than disagreement, it says that instead and gives you the dates.
You'll see a ⚖️ on the Sources button when a page has one, and the contested points listed at the top of the Sources panel.
The rule I wrote into the prompt matters as much as the feature: this is the exception, not the rule. Most pages have no genuine conflict, and an AI that manufactures disagreement to look thorough would be its own kind of dishonest. Sprig is told, in as many words, never to stretch a wording difference into a dispute or use it for a matter of taste.
✓ Verify now marks the page instead of writing a report
Verify has been in Chervil for a long time and I suspect almost nobody ran it. It fact-checked a whole page and composed a separate Trust Check report — thorough, slow, and a mode you had to remember to choose.
Now it does something smaller and much more useful. Sprig picks the three to five claims the page's usefulness actually rests on — the figures and dates and current statuses where being wrong would change what you do — checks those against the live web, and marks the verdict right there in the text:
- ✅ verified — independent sources agree
- ⚖️ contested — credible sources genuinely disagree
- ❓ unverified — it couldn't find sourcing either way
- ❌ false — sources clearly contradict it
Hover a mark and you get what it found. The full list, with the source it checked, sits in the Sources panel.
Two details I want to be straight about, because they're the difference between a trust feature and a trust theatre feature.
A verdict it isn't sure about degrades to "unverified", never to a tick. A page marked verified that wasn't checked properly is worse than a page with no marks at all.
Some claims won't get a mark. To put a verdict next to a sentence, Sprig has to quote that sentence exactly, and sometimes the wording runs through bold or a link in a way that can't be anchored cleanly. When that happens the claim still appears in the panel — it just doesn't get a badge on the page. I'd rather lose a marker than have Chervil rewrite your page to make one fit.
And the old whole-page Trust Check hasn't gone anywhere. It's in the Sources panel now, one click away, which is exactly where you want it — you reach for the wider report after a verdict makes you suspicious, not before.
Tell Sprig when it's wrong, and it remembers
This is the one I think will matter most in a month.
Until now, if Sprig got a fact wrong about your world — your office moved, that product was discontinued, the thing everyone online says about your industry is out of date — you could correct the page in front of you, and the next compose would make exactly the same mistake. Nothing accumulated.
Now you type /correct and what's actually true:
/correct our office moved to Dayton in March
Sprig applies it to every page it composes from then on. Corrections are listed in Settings → You, dated, and removable one at a time.
The design decision I care about here is what happens when a correction gets old. Corrections beat what the model was trained on — that's the whole point — but they don't beat today's evidence. If Sprig searches the web and finds that a price you corrected in March has changed again, it goes with what it found and tells you, so an old note can't quietly outlive the truth. Your correction is a strong prior, not a permanent override.
It's also deliberately an explicit command rather than something Chervil tries to detect in ordinary conversation. A correction stored because the app thought you were correcting it is worse than one you had to spend four keystrokes on.
Answer from your own reading first — if you want it
Chervil already keeps a private index of the sites you read, and you can ask it things like "what was that laptop review I read last month?" That's been there since 0.20.0. But it was always something you had to ask for.
Now it can be the first thing that happens on every question: before composing anything, Chervil checks what you've already read and uses it where it genuinely helps, marking those parts so you can get back to the original.
It's off until you turn it on, under Settings → Security → Your Web, and I want to explain why rather than just noting it.
That settings page makes you a promise — no AI ever sees a page just because you read it; the text only reaches your provider if you ask a question it answers, exactly like attaching a file. This feature is the one thing that would bend that promise, because it sends matching pages along with questions you never framed as being about your reading. So it asks first, in plain language, and whatever gets used is listed in the Sources panel where you can see it. A feature that quietly widened what leaves your machine would not be worth having.
The retrieval is deliberately strict, too. When you ask about your reading, a loose match beats a miss — you asked, and you can see where the answer came from. Here you didn't ask, so a loose match would drag an unrelated page into an unrelated answer. It requires every meaningful word of your question to appear in the page, and otherwise stays quiet.
Living pages tell you what actually changed
A page that keeps itself current gets rewritten every time it refreshes. So "this page changed" was technically true almost every time and told you nothing — the model had reworded a paragraph, and Chervil dutifully announced it.
It now compares the figures rather than the text:
starting price $899 → $849 · launch date Sept 12 → Sept 19 · warranty cover 24 months (new)
Those appear in the Sources panel with a count next to the live indicator. And if only the wording moved, it says so plainly — "reworded, no figures changed" — which is its own kind of useful, because it means you don't need to read it again.
Watch a number, not a page
Once Chervil could see the figures on a page, this became obvious. On a page that's keeping itself current, just say:
"tell me when the price drops below $1,500"
Chervil watches that figure and tells you when it crosses. It costs nothing extra — the check rides along on the refresh the page was already doing, and the comparison happens on your machine.
It notifies when the number enters the range you asked about, not every time it wobbles around inside it. (My first version got that wrong: a price drifting from $1,450 to $1,400 — never leaving the range you cared about — would have pinged you every single refresh. Which is precisely how people learn to ignore notifications.) Everything you're watching is listed, and cancellable, in the Sources panel.
Fixed
Quick chat was answering in raw markdown. The floating chat on Ctrl+Shift+Space was showing **bold** and bracketed link syntax as literal characters — because nothing in Chervil renders markdown in the first place, so every asterisk the model typed was landing on screen as an asterisk. Replies are plain prose now, and the panel shows the sources it used underneath, which it had been quietly discarding.
Feed briefings were being written by the wrong instructions. This one was embarrassing to find. On Grok, Gemini, OpenAI and Azure, a feed digest reached the AI described as "pages you read and are trying to re-find" — for articles you haven't read. The correct briefing instructions existed but had only ever been wired up for one provider. Every provider now gets them, including the part that says it only has headlines and summaries and must not write as though it read the articles.
Composing is cacheable now, so repeat work costs less. The same bug chat had in 0.24.0: the current time was sitting near the front of every compose prompt, changing it every minute and defeating your provider's prompt caching entirely. It goes last now. And the page you're refining is sent before your request rather than after, so refining the same page twice reuses the expensive part instead of paying for it again.
"Switch providers" when your key was just missing. Features needing web access read an unset API key as a provider that couldn't do the job, and cheerfully told you to switch to a provider you were already using. They now tell you which key to add.
Get it
Chervil 0.25.0 is on the download page. If you already have it, it updates itself.
The through-line, if there is one: I'd rather Chervil be visibly uncertain than invisibly wrong. Every feature here is a seam it used to paper over — a conflict it averaged away, a claim it never checked, a correction it forgot, a refresh that said "something changed" and left you to find it.
Showing your work is slower and less tidy than sounding certain. It's also the only version of this I'd want to use.
