Changelog

Releases

What improved in each release, and what it shipped with still broken. Every version is tagged in git and its installers are available on the Download page with checksums.

View on GitHub
  1. v3.1.0

    Research only the files you choose, with every claim checked against them before you see the report.

    What improved

    Research only the files you choose, with every claim checked against them before you see the report and the checker’s measured accuracy shown. Folders, many more file kinds with citations that open at the cited page, sheet or slide, an Offline switch, and a separate corpus per project on the desktop.

    All 10 improvements
    • Choose files to research: tick files and folders on the Corpus page, choose Ask about these files, and the research may use only those files, at the versions they had when it started. The run page and the verification bundle list exactly which files and versions it was allowed to read.
    • Every claim in research limited to your corpus is checked before you see it. Each sentence is split into its claims, and each claim is checked against the passages its citations point to: numbers and dates must appear there, a citation that does not support its claim is removed, and a conclusion must follow from its findings. A passage your files do not support is rewritten from what they do support and checked again, or removed with a note where it was. When your files cannot answer, the research says so instead of answering from the model’s own knowledge.
    • The checking model’s measured accuracy is shown with the result. On the default routing, measured against an independent model judge on 425 claims, it passed 1.9% of the claims the judge rejected (with an upper bound of 4.3%) and rejected 5.1% of those the judge accepted; a model that was never benchmarked says “not measured” rather than implying a number.
    • Folders in the corpus: upload a whole folder with its subfolders, or drop it onto the Corpus page; rename, move and delete folders, with a confirmation that says how many files will go; stop an upload part-way.
    • Many more kinds of file: Word, OpenDocument and RTF documents, spreadsheets (.xlsx, .xls, .ods, .csv, .tsv), PowerPoint, EPUB, Jupyter notebooks, LaTeX, BibTeX and source code, alongside PDF, HTML, Markdown and text. A citation names where in the file it is — the page, sheet and row, slide, cell or line — and opens with the cited passage highlighted; a PDF opens at the cited page.
    • Offline: a switch that refuses to start research unless every model runs at an address on this computer, naming any that does not.
    • On the desktop app each project has its own corpus, as on a server. Documents uploaded before this release move to a project named “Documents from before 3.1”, and the original file is kept.
    • Dropping files or folders onto the desktop app’s Corpus page works. The app’s window took every drop before the page saw it, so the drop zone never reacted.
    • The desktop app runs research on a local model or a Custom Endpoint with the run limits the server uses, and Settings sees a Custom Endpoint as soon as its address is saved.
    • A Custom Endpoint with no address saved is refused, naming what to set. It used to be sent to OpenAI’s address, with your Custom Endpoint key and your prompts.

    Known gaps in this release

    The desktop app is now macOS-only; Windows and Linux stay on v3.0.3. Checking every claim makes selected-files research slower and costlier, and the checker’s accuracy was measured against a model judge, not a person, and meets its threshold on the default routing only. Offline checks addresses, so a local router to the cloud passes it.

    All 25 known gaps
    • The desktop app is published for Apple Silicon Macs only from this release. Windows and Linux users keep v3.0.3, the newest build for those platforms, which has none of this release’s corpus features.
    • Checking every claim makes research on your files slower and more expensive. On the default routing a Fast run took a median 115 seconds instead of 33 without the check (the slowest 5%: 249 seconds instead of 80), and used a median 2.5 times the input tokens. If you set MAX_INPUT_TOKENS, allow it room: at 60,000 two of three runs stopped before the check finished and ended without a report, at 120,000 none did.
    • The checker’s accuracy was measured against labels from an independent model judge (Claude Sonnet 4.5), not a person, on 425 claims, for two routings: the default (custom:auto/best-fast, a router alias that may send each call to a different model), which meets the threshold, and one pinned model (agy/gemini-3-flash through OmniRoute), which is below it and is labelled so. Every other model, local ones included, is labelled “not measured”.
    • Offline checks each model’s address, which is all the app can see. A Custom Endpoint on this computer that forwards to a cloud provider (OmniRoute, LiteLLM and the like) passes the check while your question and excerpts leave the machine through it.
    • Research on the web is not checked claim by claim; only research limited to your corpus is — your whole project corpus, or the files you choose.
    • A subfolder your computer does not let the app read is left out of a folder upload without a message.
    • Scanned PDFs need text recognition before upload; a PDF with no text is refused.
    • The spend limit (MAX_COST_PER_SESSION_USD) does nothing on OpenRouter and Custom routes. Their prices are not known, so a run’s cost is recorded as $0.00 whatever it spent. Cap spending at the provider.
    • Verifying a bundle with this release’s verifier needs Python 3.14 or later; on an older Python it refuses to start. The bundle format has not changed, so the verifier from 3.0.2 verifies this release’s bundles, selected-files runs included.
    • Bundles from this release are format v2, and a verifier from before 3.0.0 refuses them. Check a bundle with the verifier from this release; it still verifies every earlier bundle unchanged.
    • Research recorded before 3.0.0 still exports as a v1 bundle with no instructions recorded. Its prompts were never captured, and the bundle does not invent them.
    • Research recorded on the earlier pipeline (Sessions) does not apply customized instructions, and says so.
    • Customization is per account and applies to every run you start; there is no per-run override, and you cannot add agents of your own.
    • Customized instructions are written into the verification bundle in full, so anyone you share a bundle with can read them.
    • The default model routing is Google’s Gemini 2.5 models — 2.5 Pro for the planner and synthesizer, 2.5 Flash for the executor, critic and chat — and Google now limits each 2.5 model to accounts that have used it before. On a key from an account that has not, the first call to that model is refused. Choose other models in Settings → Models.
    • On a fresh desktop install, the demo report the app prepares on first launch fails: it is treated as corpus-only research against an empty corpus, so it finds no evidence. Your own research is unaffected.
    • Citation support was last measured for 3.0.2, in one run: ten fixed questions on one model routing. It measures whether each claim matches the evidence it cites, not whether the claim is true.
    • The share of evidence coming from primary sources is not measured, and is deliberately not estimated. The source URL on a piece of evidence is written by the model, so an invented link would score as a primary source with full confidence.
    • Three questions of the scholarly evaluation set carry citation-check records and three are unverified; the set is not yet used to grade anything.
    • Retrieval is dense-only; hybrid retrieval was measured against the baseline and did not beat it.
    • The desktop build is still not signed with an Apple Developer ID or notarized, and does not auto-update. macOS blocks the first launch until you clear the download flag with the Terminal command on the download page.
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
  2. v3.0.3

    The desktop app researches on a local model with no API key, as Settings always said it could.

    What improved

    On the desktop app, research on Ollama runs with no API key saved, Settings offers local models, and a Custom Endpoint URL saves. Successful sign-ins no longer count toward the sign-in limit, and corpus-only mode is described as what it enforces: local evidence, not local model calls.

    All 9 improvements
    • On the desktop app, research on a local model (Ollama) runs with no API key saved. Every desktop release since 2.1.0 refused it at once with “No provider key found”, whatever the model routing said, although the server and the command line never needed a key for Ollama.
    • Settings → Models on the desktop offers a local model whenever Ollama is running, and a Custom Endpoint once its base URL is saved, with or without a key. It offered only providers you had a key for, so a machine running Ollama was offered no local model beside an Ollama card reading Connected.
    • Saving a Custom Endpoint base URL on the desktop saves it. It answered “Unknown provider.”, because the request reached the route that stores provider keys first.
    • The run form’s Local LLM choice defaults to a model large enough to return citable evidence. It took the first model Ollama listed, even one Settings marks chat only; a chat-only model is now the default only when nothing larger is installed.
    • Signing in successfully no longer counts toward the sign-in limit. A sixth correct sign-in to one account within 15 minutes — from another device, or after signing out — was refused until the 15 minutes were up. Five failed sign-ins still lock the account for the rest of the 15 minutes, even against the right password, and an address with no account locks exactly as one with an account does.
    • Settings → Appearance no longer logs a hydration error on every full load. The theme picker shows no selection until the page has loaded in your browser, the only place that knows your theme, so the server’s page and the browser’s first render agree.
    • The public website no longer asks for your projects. Every page of the site requested /api/v1/projects from a server that is not there, and logged a 404 in the browser console; the pages worked, but no page of the site has any reason to call the app’s API.
    • Corpus-only mode is described as what it does. The site, the docs and the app promised it sent nothing over the network; it keeps the evidence local — evidence only from your uploaded documents, web search off, and indexing on a local model — but the question and the excerpts still go to whichever provider each research model (planner, executor, critic, synthesizer) is set to use, a cloud provider unless you have chosen local models. A local indexing model does not make a run offline. The comparison table, the guides, the run form’s help and the chat scope now say so, and a test fails if the old claim returns.
    • Chat’s “My corpus” scope no longer says it reads only this project’s documents on the desktop app, where every project shares one corpus.

    Known gaps in this release

    Corpus-only mode keeps evidence local, but the research models still receive your question and excerpts on whatever provider they use; local indexing does not make a run offline. The spend limit does nothing on OpenRouter and Custom routes, and this release’s bundle verifier needs Python 3.14.

    All 21 known gaps
    • Corpus-only mode keeps the evidence local, but it does not stop model calls from leaving your machine: the question and the excerpts it retrieves go to whichever provider each research model (planner, executor, critic, synthesizer) is set to use, which is a cloud provider unless you have chosen local models. A local indexing model does not change that, and corpus-only mode does not check what the research models use.
    • On the desktop app every project shares one corpus, so corpus-only research and chat’s “My corpus” scope draw on documents uploaded under any project.
    • Research saved before 3.0.2 keeps its doubled evidence after a rework: its snippet count stays doubled, and a run approved before 3.0.2 keeps the duplicates in its verification bundle. Cited counts and “backs N claims” are corrected on older runs too, because the page works them out when it loads.
    • The spend limit (MAX_COST_PER_SESSION_USD) does nothing on OpenRouter and Custom routes. Their prices are not known, so a run’s cost is recorded as $0.00 whatever it spent. Cap spending at the provider.
    • Verifying a bundle with this release’s verifier needs Python 3.14 or later; on an older Python it refuses to start. The bundle format has not changed, so the verifier from 3.0.1 still verifies this release’s bundles on an older Python.
    • Bundles from this release are format v2, and a verifier from before 3.0.0 refuses them. Check a bundle with the verifier from this release; it still verifies every earlier bundle unchanged.
    • Research recorded before 3.0.0 still exports as a v1 bundle with no instructions recorded. Its prompts were never captured, and the bundle does not invent them.
    • Research recorded on the earlier pipeline (Sessions) does not apply customized instructions, and says so.
    • Customization is per account and applies to every run you start; there is no per-run override, and you cannot add agents of your own.
    • Customized instructions are written into the verification bundle in full, so anyone you share a bundle with can read them.
    • The default model routing is Google’s Gemini 2.5 models — 2.5 Pro for the planner and synthesizer, 2.5 Flash for the executor, critic and chat — and Google now limits each 2.5 model to accounts that have used it before. On a key from an account that has not, the first call to that model is refused. Choose other models in Settings → Models.
    • On a fresh desktop install, the demo report the app prepares on first launch fails: it is treated as corpus-only research against an empty corpus, so it finds no evidence. Your own research is unaffected.
    • Citation support was last measured for 3.0.2, in one run: ten fixed questions on one model routing. Nothing that run measured has changed since. It measures whether each claim matches the evidence it cites, not whether the claim is true.
    • The share of evidence coming from primary sources is not measured, and is deliberately not estimated. The source URL on a piece of evidence is written by the model, so an invented link would score as a primary source with full confidence.
    • Three questions of the scholarly evaluation set carry citation-check records and three are unverified; the set is not yet used to grade anything.
    • Retrieval is dense-only; hybrid retrieval was measured against the baseline and did not beat it.
    • Desktop builds are still not signed with a publisher certificate or notarized, and do not auto-update. macOS blocks the first launch until you clear the download flag with the Terminal command on the download page; Windows shows SmartScreen.
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim verification is still not implemented, claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
  3. v3.0.2

    Research through your own model router runs for real, and a reworked report’s counts describe the report you approved.

    What improved

    Research through Custom, OpenRouter and Ollama setups runs for real instead of returning the demo, and no longer fails at plan approval. A reworked report no longer doubles its evidence, and its cited counts describe the draft you approved. Citation support measured 96.9% on ten fixed questions.

    All 15 improvements
    • A Custom, OpenRouter or Ollama setup researches your question. ./start.sh recognised only Google, Anthropic and OpenAI keys; on any other provider it started the stack in demo mode, which overrides the setting in .env, so every question came back as the same scripted report about RAG and fine-tuning.
    • Research no longer fails when you approve the plan. On the server, with an OpenAI-compatible or Anthropic model, approving a plan often ran in the same worker process that started the run, and the model client’s pooled connections still belonged to the earlier task’s event loop, which had closed. The run failed, and a database error (“Method ‘close()’ can’t be called here”) was recorded in place of the real one. The worker now keeps one event loop per process, and a research task that fails stops its siblings before the failure is recorded, so the reason shown is the real one.
    • A model that never calls the search tool no longer ends a run with no evidence. One real run opened Google, Bing, DuckDuckGo and Yahoo results pages 64 times with the page reader — getting JavaScript walls, server errors and captchas — and failed with nothing to quote. Search-engine results pages are now refused with directions to the search tool, and the executor’s instructions say which tool searches.
    • The executor’s new instructions were measured before shipping. Gemini 2.5 Flash running every agent, with Claude Sonnet 4.5 judging — the routing and judge 3.0.0 was measured on — completed all ten fixed questions, and citation support measured 96.9% over 190 judged claims, clearing the 95% threshold. 3.0.0 measured 96.4% the same way; with one run each, the two numbers are not evidence of a change.
    • A malformed page address from the model no longer crashes a research task. The page reader rejects it, and the model can correct itself on its next turn.
    • A report sent back for rework no longer doubles its evidence. Rework saved the run’s evidence a second time, so the run showed every snippet twice and its verification bundle carried the duplicates.
    • “Cited” means cited by the report you are reading. A source only the rejected draft cited was still shown as cited after the rework, and each source’s “backs N claims” added up the claims of every draft. Both now count against the latest revision, and a source only an earlier draft cited says so.
    • Approving a report no longer shows an error when the approval succeeded. On a server with no embeddings provider, filing the report into project memory fails as designed, and the page then said “Internal Server Error” for a decision that had been recorded.
    • A demo run says first, in full, that nothing was researched: your question was not sent to a model, the report is scripted and does not answer it, and if every run is a demo the server itself is in demo mode.
    • Settings → Agents can reset an agent to the shipped prompt from inside its editor, or discard unsaved edits there, without closing the editor first.
    • The published server images say which commit built them. /api/v1/version and Settings → About answered “unknown” on every self-hosted image through 3.0.1.
    • A server you build yourself reports its own version and commit. A leftover build stamp in a checkout was copied into every image built from it, so a 3.0.2 build could tell Settings → About it was 2.1.0; ./start.sh now stamps images from the checkout, and an image built any other way says unknown.
    • The server and the desktop app’s engine run Python 3.14, the version every test now runs on. The server images had moved to 3.14 while every test still ran 3.11.
    • The Oracle Cloud deploy script installs the latest release. It defaulted to a development build made before 1.0.
    • The self-hosted web server runs Next.js 16.4.2, past a high-severity server-side request forgery advisory in its image optimization (fixed in 16.3.8), along with two medium and one low; sharp and source-map-js are updated past high-severity advisories of their own.

    Known gaps in this release

    On the desktop, research on Ollama with no API key fails until you save any text as the Custom Endpoint key. Older research keeps its doubled evidence after a rework, and the spend limit does nothing on OpenRouter and Custom routes. This release’s bundle verifier needs Python 3.14; on an older Python, 3.0.1’s checks the same bundles.

    All 22 known gaps
    • Research saved before this release keeps its doubled evidence after a rework: its snippet count stays doubled, and a run approved before 3.0.2 keeps the duplicates in its verification bundle. Cited counts and “backs N claims” are corrected on older runs too, because the page works them out when it loads.
    • Signing in to one account successfully more than five times within 15 minutes locks it until the 15 minutes are up: the sign-in limit counts successful sign-ins as well as failed ones. Fixed for the next release.
    • Every full load of Settings → Appearance logs a hydration error in the browser console. The page works and the theme can be changed; the error is the page’s first render disagreeing with the server about which theme is selected. Fixed for the next release.
    • On the desktop app, research on a local model (Ollama) with no API key saved fails at once with “No provider key found”; Settings → Models offers no local model, and saving a Custom Endpoint base URL answers “Unknown provider.” Earlier desktop releases have the same fault. Until the fix ships, save any text as the Custom Endpoint key in Settings → Connections — Ollama ignores it — and research runs on the first model Ollama lists. Fixed for the next release.
    • The spend limit (MAX_COST_PER_SESSION_USD) does nothing on OpenRouter and Custom routes. Their prices are not known, so a run’s cost is recorded as $0.00 whatever it spent. Cap spending at the provider.
    • Verifying a bundle with this release’s verifier needs Python 3.14 or later; on an older Python it refuses to start. The bundle format has not changed, so the verifier from 3.0.1 still verifies 3.0.2 bundles on an older Python.
    • Bundles from this release are format v2, and a verifier from before 3.0.0 refuses them. Check a bundle with the verifier from this release; it still verifies every earlier bundle unchanged.
    • Research recorded before 3.0.0 still exports as a v1 bundle with no instructions recorded. Its prompts were never captured, and the bundle does not invent them.
    • Research recorded on the earlier pipeline (Sessions) does not apply customized instructions, and says so.
    • Customization is per account and applies to every run you start; there is no per-run override, and you cannot add agents of your own.
    • Customized instructions are written into the verification bundle in full, so anyone you share a bundle with can read them.
    • The default model routing is Google’s Gemini 2.5 models — 2.5 Pro for the planner and synthesizer, 2.5 Flash for the executor, critic and chat — and Google now limits each 2.5 model to accounts that have used it before. On a key from an account that has not, the first call to that model is refused. Choose other models in Settings → Models.
    • On a fresh desktop install, the demo report the app prepares on first launch fails: it is treated as corpus-only research against an empty corpus, so it finds no evidence. Your own research is unaffected.
    • This release’s citation support rests on one run: ten fixed questions on one model routing. It measures whether each claim matches the evidence it cites, not whether the claim is true.
    • The share of evidence coming from primary sources is not measured, and is deliberately not estimated. The source URL on a piece of evidence is written by the model, so an invented link would score as a primary source with full confidence.
    • Three questions of the scholarly evaluation set carry citation-check records and three are unverified; the set is not yet used to grade anything.
    • Retrieval is dense-only; hybrid retrieval was measured against the baseline and did not beat it.
    • Desktop builds are still not signed with a publisher certificate or notarized, and do not auto-update. macOS blocks the first launch until you clear the download flag with the Terminal command on the download page; Windows shows SmartScreen.
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim verification is still not implemented, claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
  4. v3.0.1

    The macOS app opens. Every Mac download before this one was reported as damaged.

    What improved

    The macOS app opens. Every Mac build from 1.0.1 to 3.0.0 was signed only by the linker, so a downloaded copy was reported as damaged with no way past it; the whole bundle is now signed, CI refuses an image whose app is not, and the install steps give the one command that opens every version.

    All 4 improvements
    • The macOS app is no longer reported as damaged. Every macOS build from 1.0.1 to 3.0.0 carried only the signature the linker stamps on the executable: nothing signed the app bundle, so its contents were unsealed and signature verification failed. Downloaded by a browser, the app was judged tampered with and macOS offered only to move it to the Trash — a state with no Open Anyway, so the unblock steps this project published never worked for it. The whole bundle is now signed before the disk image is built.
    • A broken signature can no longer ship. CI mounts the disk image it is about to publish and fails the build if the app inside is only linker-signed, fails codesign’s strict verification, or gets anything from Gatekeeper other than a policy verdict. The check was run against the damaged 3.0.0 image, a correctly signed one and one modified after signing, and failed the two it should.
    • The install steps describe what actually happens. The download page, the release notes and the desktop guide sent Mac users to an Open Anyway button the damaged builds never offered. They now give the one Terminal command that opens every macOS build, including the older versions the download page still offers.
    • Research itself is unchanged from 3.0.0: the engine, its results and the bundle format are the same.

    Known gaps in this release

    macOS still blocks the first launch until you run one Terminal command, because the build is not notarized. Bundles need a verifier from 3.0.0 or later, custom instructions do not reach research recorded as sessions, and the 96.4% rests on a single run.

    All 16 known gaps
    • Bundles from this release are format v2, and a verifier from before 3.0.0 refuses them. Check a bundle with the verifier from this release; it still verifies every earlier bundle unchanged.
    • Research recorded before 3.0.0 still exports as a v1 bundle with no instructions recorded. Its prompts were never captured, and the bundle does not invent them.
    • Research recorded on the earlier pipeline (Sessions) does not apply customized instructions, and says so.
    • Customization is per account and applies to every run you start; there is no per-run override, and you cannot add agents of your own.
    • Customized instructions are written into the verification bundle in full, so anyone you share a bundle with can read them.
    • The default model routing is Google’s Gemini 2.5 models — 2.5 Pro for the planner and synthesizer, 2.5 Flash for the executor, critic and chat — and Google now limits each 2.5 model to accounts that have used it before. On a key from an account that has not, the first call to that model is refused. Choose other models in Settings → Models.
    • On a fresh desktop install, the demo report the app prepares on first launch fails: it is treated as corpus-only research against an empty corpus, so it finds no evidence. Your own research is unaffected.
    • Citation support rests on one run: ten fixed questions on one model routing. It measures whether each claim matches the evidence it cites, not whether the claim is true.
    • The share of evidence coming from primary sources is not measured, and is deliberately not estimated. The source URL on a piece of evidence is written by the model, so an invented link would score as a primary source with full confidence.
    • Three questions of the scholarly evaluation set carry citation-check records and three are unverified; the set is not yet used to grade anything.
    • Retrieval is dense-only; hybrid retrieval was measured against the baseline and did not beat it.
    • Desktop builds are still not signed with a publisher certificate or notarized, and do not auto-update. macOS blocks the first launch until you clear the download flag with the Terminal command on the download page; Windows shows SmartScreen.
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim verification is still not implemented, claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
  5. v3.0.0

    You can rewrite how each research agent behaves, and every artifact now records exactly which instructions produced it.

    What improved

    Each of the five research agents can follow your own instructions, while the checks that keep research honest cannot be rewritten. A run keeps the instructions it started with, and its verification bundle records them. Citation support, now graded by an independent judge, measured 96.4% on ten fixed questions.

    All 9 improvements
    • Each of the five agents — planner, executor, critic, synthesizer and follow-up chat — can follow your own instructions instead of the shipped ones. Settings → Agents shows which agents are customized, starts every editor from the prompt that runs today, and resets any agent to the shipped prompt on its own. Instructions are limited to 2,500 characters per agent, and an empty box is never mistaken for a reset.
    • The checks that keep research honest cannot be rewritten. Citation verification, contradiction detection, report repair and project chat’s refusal line always run on the shipped prompts, whatever an agent is told — enforced in one place, before any saved instruction is read.
    • A run keeps the instructions it started with. Editing an agent while a run waits at a review gate changes the next run, not the half-finished one, so a report is never written under two sets of instructions.
    • Verification bundles record the instructions behind the research. A run’s bundle now carries, for every prompt the pipeline used, its full text, its SHA-256 and whether it was replaced — and editing any of it after the fact fails the bundle’s integrity check. The standalone verifier prints which agents ran on replaced instructions, so a clean pass no longer hides that.
    • The app says when your instructions did and did not apply. A run’s artifact names every agent that ran on replaced instructions, and research recorded on the earlier pipeline — which does not use them — says so rather than implying it did.
    • Customized instructions can be measured before you trust them. The evaluation harness runs a candidate against the same fixed questions and the same thresholds as the shipped prompts, and reports both side by side; a candidate that scores worse is reported, not refused.
    • Citation support is graded by an independent judge that the result names. The evaluation used to grade the pipeline’s citations with the pipeline’s own critic model and recorded no judge at all. A real-model evaluation now refuses to start without a judge that is none of the models under test, and the result records which model actually answered each ruling. This release’s own run — Gemini 2.5 Flash running every agent, Claude Sonnet 4.5 judging — measured citation support at 96.4% over the ten fixed questions, clearing the 95% threshold.
    • Stopping research holds wherever the stop lands. On the server, research stopped mid-run could reach the review gate anyway, or lose what it had spent; and on both hosts, research stopped just after it started could be left showing as running. Each case now keeps the stop, and the spend.
    • Upgrading keeps everything. A desktop data directory written by the real 2.1.0 app — settings, projects, research on both pipelines, a run waiting at a review gate, and bundles already exported — was upgraded by the packaged 3.0.0 engine and checked: nothing lost, old bundles still verify, the waiting run can still be approved, and new research carries its instructions.

    Known gaps in this release

    Bundles from this release need a verifier from 3.0.0 or later. Custom instructions apply per account, are readable by anyone you share a bundle with, and do not reach research recorded as sessions. Google limits the default Gemini 2.5 models to accounts that have used them before, and the 96.4% rests on a single run.

    All 16 known gaps
    • Bundles from this release are format v2, and a verifier from before 3.0.0 refuses them. Check a bundle with the verifier from this release; it still verifies every earlier bundle unchanged.
    • Research recorded before 3.0.0 still exports as a v1 bundle with no instructions recorded. Its prompts were never captured, and the bundle does not invent them.
    • Research recorded on the earlier pipeline (Sessions) does not apply customized instructions, and says so.
    • Customization is per account and applies to every run you start; there is no per-run override, and you cannot add agents of your own.
    • Customized instructions are written into the verification bundle in full, so anyone you share a bundle with can read them.
    • The default model routing is Google’s Gemini 2.5 models — 2.5 Pro for the planner and synthesizer, 2.5 Flash for the executor, critic and chat — and Google now limits each 2.5 model to accounts that have used it before. On a key from an account that has not, the first call to that model is refused. Choose other models in Settings → Models.
    • On a fresh desktop install, the demo report the app prepares on first launch fails: it is treated as corpus-only research against an empty corpus, so it finds no evidence. Your own research is unaffected.
    • Citation support rests on one run: ten fixed questions on one model routing. It measures whether each claim matches the evidence it cites, not whether the claim is true.
    • The share of evidence coming from primary sources is not measured, and is deliberately not estimated. The source URL on a piece of evidence is written by the model, so an invented link would score as a primary source with full confidence.
    • Three questions of the scholarly evaluation set carry citation-check records and three are unverified; the set is not yet used to grade anything.
    • Retrieval is dense-only; hybrid retrieval was measured against the baseline and did not beat it.
    • Desktop builds are unsigned and do not auto-update. macOS shows a Gatekeeper block and Windows shows SmartScreen on first launch. [Corrected 2026-09-28, in 3.0.1: on macOS this was not an ordinary Gatekeeper block. The build was signed only by the linker, so a downloaded copy failed signature verification and macOS reported it as damaged, offering no Open Anyway — clearing the download flag with the Terminal command on the download page was the only way to open it. The same was true of every macOS build since 1.0.1.]
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim verification is still not implemented, claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
  6. v2.1.0

    Two claims the product makes about itself turned out not to hold, and the things that would have caught them did not exist.

    What improved

    Airgapped corpus mode now holds on the server, not only on the desktop, and follow-up chat no longer loses your newest message past twenty turns. Retrieval quality is measured and published, documents are versioned, operators get Prometheus metrics, and database downgrades work.

    All 8 improvements
    • Airgapped corpus mode now actually holds on the server. A run you requested as corpus-only — and which was recorded as corpus-only — could still search the open web and fetch pages from it. The flag reached the database and the corpus store, but never the code that decides whether anything asks the web in the first place, so the guarantee was recorded rather than enforced. The desktop had been fixed months earlier; the server had not. The test that should have caught it was green throughout, because it built the configuration by hand and skipped the exact step that was broken.
    • Follow-up chat remembers what you just said. Both chat surfaces loaded the first twenty messages ever written to a conversation instead of the last twenty, so past turn twenty the model was answering a question it had never been shown — your new message was saved, then left out of the window assembled from it.
    • Retrieval quality is measured, and the numbers are published. Four documents called retrieval the ceiling on report quality and nothing measured it. There is now a frozen sixteen-document set and a recorded baseline: recall@1 0.792, precision@1 0.917, nDCG@10 0.944, duplicate rate 0.000.
    • A corpus can say which corpus it is, and documents have versions. Re-uploading a document supersedes the old one rather than silently sitting beside it, and a run records the corpus it read, so “which documents produced this evidence” is answerable after the fact rather than inferred from a filename.
    • Operators get real telemetry. A server-side metrics endpoint exposes seven metric families in Prometheus text on a private registry, and terminal outcomes are recorded where runs actually end rather than where they were expected to. Run identifiers were also being logged under the field reserved for session identifiers, which made a run’s logs unfindable by its own id.
    • Database downgrades work. No downgrade had ever been run against this schema, and the first one attempted failed on every database — one migration dropped a constraint under a name the naming convention had already rewritten. CI now runs a populated migration round-trip in both directions.
    • A scripted demo run can no longer pass by doing nothing. Fake mode picked its behaviour by searching the system prompt for hand-typed fragments of its own prose, falling through to an empty result when nothing matched. Rewording any prompt would have routed every scripted test to that branch and left the suite green on a pipeline producing nothing.
    • The readiness check’s tests no longer depend on the machine they run on. Whether the settings page reported you as ready to research was asserted from a live probe of the developer’s own computer, so the same commit passed or failed depending on whether Ollama happened to be running.

    Known gaps in this release

    The 90% citation-support figure is still one self-judged local-model run from before 2.0.0. Retrieval is dense-only after hybrid retrieval failed to beat it, the share of primary sources is not measured, desktop builds are unsigned, and cancelling does not interrupt research in flight.

    All 9 known gaps
    • Citation support is still measured at 90% on a single self-judged local-model run, and that measurement predates 2.0.0. Nothing in this release re-ran it, and it still needs re-running before the number is leaned on.
    • Retrieval is dense-only. Hybrid retrieval was built and measured against the baseline above, and it did not beat it — the residual gap is equal-weight fusion of two retrievers of unequal reliability, not the quality of the candidates. It was rejected and reported rather than tuned until it looked better.
    • The share of evidence coming from primary sources is not measured, and is deliberately not estimated. The source URL on a piece of evidence is written by the model, so a plausible-looking but invented link would score as a primary source with full confidence. A fakeable metric on a verifiability product is worse than none.
    • The scholarly evaluation set is drafted but unverified. Six of twelve questions survived review, and their rubrics were written without a human opening a cited paper. Until a domain reader checks them, a rubric naming the wrong study would penalize a correct answer, so the set grades nothing. [Corrected 2026-09-27, in 3.0.0: this overstated it. The repository’s own records show three of the six surviving questions carry citation-check records dated 2026-08-16 — two verified, one verified with a caveat — each stating that the works it names were looked up against the published record. The other three are unverified. The records do not say who performed the checks.]
    • Desktop builds are unsigned and do not auto-update. macOS shows a Gatekeeper block and Windows shows SmartScreen on first launch, and a new version means downloading the installer again.
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable; consolidating them is not a patch.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim verification is still not implemented, claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
  7. v2.0.2

    The desktop app stopped reimplementing the server, and four bugs that only existed because it had.

    What improved

    The desktop app now runs the server’s own code for projects, corpora and research sessions instead of a drifted copy. Desktop-only bugs are fixed too: a settings check that always 404’d, a Local preset naming a model you may not have, a routing default echoing your own preference, and a session count stuck at zero.

    All 6 improvements
    • Every desktop settings-page load stopped 404ing in the background. The readiness check the settings page fetches on every host had no route on desktop at all — the frontend called it unconditionally and only branched on what it did with the answer, so the request itself always failed silently. It has a route now, answering from this host's own keys instead of the server's.
    • Choosing the "Local" model preset on desktop now offers a model the machine actually has installed, instead of a fixed name that may never have been pulled. The server has done this since 2.0.0; the desktop build never picked it up.
    • The routing panel's "deployment default" no longer mirrors your own saved preference back at you. Saving a per-role routing choice made the two numbers identical on desktop, which defeats the reason that comparison exists — seeing what changes if you clear your preference.
    • A project containing research runs and no chat sessions no longer shows a session count of zero. The desktop's own project list only ever counted the older kind of research.
    • Stopping a run from the desktop now records why in the same place a provider error would — a client reading the failure reason from the run's event history found nothing there for a user-stopped run specifically, even though the reason was visible elsewhere on the same screen.
    • The desktop app and the server now run the same code for every project, corpus, and research-session operation that does not depend on where a secret is stored — proved by the two literally resolving to one function, not by two implementations that currently happen to agree. A fix to one of these from here on reaches both hosts by construction.

    Known gaps in this release

    Two research pipelines still exist, and follow-up chat scoped to one report works only on research recorded as a session. Cancelling does not interrupt research in flight, claims carry no per-claim verification, corpus mode has no end-to-end test, and the 90% citation figure needs re-running.

    All 6 known gaps
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable; consolidating them is not a patch.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim verification is still not implemented, claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
    • Corpus-mode research still has no end-to-end test, because it requires a local embedder and the test environment has none.
    • Citation support is still measured at 90% on a single self-judged local-model run, and that measurement predates 2.0.0. It needs re-running before the number is leaned on.
  8. v2.0.1

    Four measurements that were wrong, a feature that was inert, and one product instead of two.

    What improved

    The desktop app can start research, project memory finally indexes approved reports and retrieval returns them, and several wrong measurements are corrected. Research depth now changes how much a run does, a turn’s page reads happen at once, and there is one way to start research, with earlier work listed as Sessions.

    All 15 improvements
    • Project memory now indexes every approved report, whichever pipeline produced it. It was keyed to the older one, so a research run counted as approved and could never be indexed — the backlog only climbed and project chat answered from an empty store. Nothing failed and no test was red; the feature was simply inert for every account created since 2.0.0.
    • Retrieval stopped returning nothing. The relevance ceiling had been tightened to an unmeasured number on the reasoning that it would filter noise; it filtered the answer, so a question asked of the project that owns the report retrieved zero results.
    • A run whose evidence was never read can no longer export a bundle. That refusal only covered imported runs, so a run whose checkpoint could not be decoded produced a bundle that numbered every citation against nothing and asserted a quality nobody observed.
    • Approved reports can actually be indexed. The report splitter treated a heading and the prose beneath it as a heading alone whenever there was no blank line between them — which is what this product's own synthesizer writes — so it kept the heading and dropped the paragraph, and a full report reduced to nothing. Nothing raised an error; indexing simply logged that the report produced no chunks.
    • The memory card counts memory, not the corpus. The two were blended, so a project with uploaded documents reported reports as indexed that retrieval could not reach.
    • The verified-citation rate is measured on every approved report. It was NULL on every run ever produced — the engine measures it on a graph outcome a run never reaches, because approving at the report gate finalizes the run directly — while History offered a filter on it and every run card displayed it.
    • The standalone verifier no longer crashes on Windows. Every check passed and then printing the result raised an encoding error, because a Windows console cannot render the tick character — a traceback where the word PASS should have been. It is the one program here a stranger runs on their own machine to check an artifact they were handed.
    • A forced extraction pass no longer bills its first attempt twice, so a spend limit cannot fire on money that was never charged.
    • The desktop app can start research. It drives the run in-process against its own checkpointer, because it has no broker to hand one to; in 2.0.0 the same button answered 501. Everything downstream is the server's code — same engine, same records, same artifact, same bundle.
    • A task that fetched pages but never offered evidence no longer loses them: the engine asks for the extraction directly, from the text it already holds and nothing else. Every quotation is still checked against what the tools actually returned, and a quote found on a different fetched page is re-pointed at it with the claimed source recorded alongside.
    • Approved reports are saved into their project's corpus automatically, so follow-up questions can draw on them without a re-upload.
    • Research depth now changes the run rather than describing it. It reached the planner as a word in a prompt and nothing else, so "Fast" bought exactly as many model turns as "Comprehensive" — and turns are the whole wall-clock of a run, at minutes each on a hosted model. Fast is now 3 turns and 3 pages per task against comprehensive's 8, and the form states the numbers.
    • A turn's page reads happen at once instead of one after another, and the executor is asked to request its pages in a single turn — which removes whole model round-trips rather than shaving seconds off one.
    • One way to start research. A second start form existed on the older pipeline, labelled "legacy" in its own banner and absent from the navigation; it is gone, along with the version vocabulary that ran through the interface, the API paths and the code.
    • Research recorded before runs is still readable, chattable and exportable — listed as Sessions, rather than by a version number.

    Known gaps in this release

    Two research pipelines still exist, and follow-up chat scoped to one report works only on research recorded as a session. Cancelling does not interrupt research in flight, claims carry no per-claim verification, corpus mode has no end-to-end test, and the 90% citation figure needs re-running.

    All 6 known gaps
    • Two research pipelines still exist in the backend. The product has one, and research recorded by the earlier one stays readable; consolidating them is not a patch.
    • Follow-up chat scoped to a single report is available on research recorded as a session and not on a run. Project chat, which cites every approved report in a project, covers both.
    • Cancelling a run still does not interrupt research already in flight — it runs to its next checkpoint, and the tokens spent there are recorded because they were really spent.
    • Claim verification is still not implemented, claim lineage across revisions is still not tracked, and contradiction detection is still source-level and unscored.
    • Corpus-mode research still has no end-to-end test, because it requires a local embedder and the test environment has none.
    • Citation support is still measured at 90% on a single self-judged local-model run, and that measurement predates 2.0.0. It needs re-running before the number is leaned on.
  9. v2.0.0

    Research becomes a structured record: evidence, claims, sources, conflicts, a human decision, and an artifact anyone can verify offline.

    What improved

    A run becomes a structured record — evidence, sources, claims, conflicts and review decisions you can inspect — and approving it freezes an artifact a standalone verifier checks offline. A second human gate reviews the plan before any search spends money, reports are versioned, and a stopped run stays stopped.

    All 17 improvements
    • A research run is no longer a report with citations bolted on. Evidence, sources, claims, claim-to-evidence links, contradictions, review decisions and the approved artifact are all first-class records you can inspect and export.
    • Every claim in a report can be traced to the evidence it resolved to and the source that evidence came from — and a claim that resolved to nothing says so instead of looking supported.
    • Retrieved is not cited, and retrieved is not verified. A source the report never cites keeps no citation number, and evidence carries a three-valued provenance state where UNCHECKED means nobody checked, not that it passed.
    • Conflicting sources are surfaced as a first-class finding — two attributed quotations side by side with the reason they cannot both hold — rather than buried in prose.
    • A run workspace built around that record: plan, evidence, claims, sources, conflicts, review and artifact as views over one run, with live progress that reconnects and replays what it missed rather than restarting.
    • The review screen shows what you are approving: claims with and without evidence, cited versus retrieved-only sources, unresolved conflicts, and an unmeasured citation rate reported as unmeasured rather than as zero.
    • Approving a report freezes a verifiable artifact. The bundle it produces passes the same standalone verifier that ships with it, offline, with no network and no model.
    • A second human checkpoint before any search spends money: the research plan is reviewed on its own terms. Drop a task and it is never researched; reword one and that is what gets searched. Approving a plan never creates an artifact.
    • Reports are versioned. A rework adds a revision; it never overwrites the one a reviewer already read.
    • Follow-up questions can be pinned to this report, your corpus, the web, or everything — and the answer states which grounding produced it.
    • PDF, Markdown, text and HTML documents preview in place from the corpus list, instead of downloading and switching applications. Uploaded HTML renders inside a fully sandboxed frame.
    • History filters by verified-citation rate and by model, so a weak run is findable rather than buried.
    • A one-shot import tool for research recorded by the earlier pipeline, with three separate verdicts — does the imported record say what the original said, is the bundle internally valid, and is every imported fact traceable to something the original recorded — kept apart rather than collapsed into one number. Removed in 2.0.1, its job done.
    • Server and desktop serve the same routes, and a parity suite fails the build when one host has a route the other does not — follow-up chat and bundle export previously 404'd on desktop. Route parity is not feature parity, and this release does not claim it: executing a run was server-only, because it took a Redis lock, opened the server engine and checkpointed to Postgres. The desktop refused with 501 rather than creating a run nothing would advance. Fixed in 2.0.1.
    • Keyless demo mode (`--fake`) no longer reaches a real embedding provider. It was billing real API calls on a run the product described as free.
    • Stopping a run now sticks. Cancellation is durable state rather than an advisory event, and every writer that could move a run back out of it refuses to — a stopped run used to reappear minutes later awaiting approval. The tokens spent before the pipeline noticed are still recorded, because they were really spent.
    • A run that used scripted models says so. Fake mode is selected automatically when no provider key is configured, and runs on it were recorded as real research: the bundle named models nothing had called, at a plausible cost, and the standalone verifier passed it without its demo banner.

    Known gaps in this release

    No production database has been migrated from the earlier pipeline; the tooling is validated on disposable copies, and history it cannot recover is recorded as absent. Project memory does not yet ingest runs, claims carry no per-claim verification, and cancelling does not interrupt research in flight.

    All 10 known gaps
    • No production database has been migrated. The tooling is validated against disposable copies — including one restored from real production data, which migrated 11 of 11 sessions with no fidelity mismatch — but running it on your own data is your decision and your backup.
    • Two states are recorded as unimportable rather than repaired: evidence whose source URL was never recorded, and a plan approval for a run with no plan. Neither occurred in the restored-production run.
    • Some history cannot be recovered at all and is recorded as absent rather than filled in: superseded report drafts, whether a plan was edited, and whether a run was cancelled. The earlier pipeline overwrote the first two and never recorded the third as a state.
    • Corpus-mode research works but has no end-to-end test, because corpus mode requires a local embedder and the test environment has none.
    • Cancelling a run does not interrupt research already in flight — it runs to its next checkpoint, and the tokens it spends there are recorded rather than dropped. What the stop does guarantee is that it sticks: a cancelled run stays cancelled, and the outcome arriving afterwards can no longer overwrite it and offer the report for approval.
    • Claim verification is not implemented: claims are extracted from the report's prose and carry no per-claim judgement.
    • Claim lineage across revisions is not tracked. Nothing observes that a sentence in revision 2 is the assertion from revision 1.
    • Project memory does not yet ingest research runs. Fixed in 2.0.1.
    • The run list returns the most recent runs up to a limit and is not paginated.
    • Citation support is still measured at 90% on a single self-judged local-model run, and that measurement predates this work. It needs re-running before the number is leaned on.
  10. v1.0.2

    Budgets became opt-in, and citation snippets became verifiable.

    What improved

    Every run limit is opt-in, with 0 meaning unlimited, and a citation snippet must be text that was actually fetched. The evaluation baseline stopped scoring against placeholder text, and a flaky end-to-end run now fails CI instead of passing on a retry.

    All 4 improvements
    • Every run limit is now opt-in with 0 meaning unlimited. A hardcoded token ceiling used to kill long runs with no way to raise it.
    • A citation snippet must be text that was actually fetched, so a quote cannot be reconstructed from a model's memory of a page.
    • The evaluation baseline was corrected to stop scoring a competitor against placeholder text.
    • CI waits for the worker to be ready instead of sleeping, and a flaky end-to-end run now fails the gate rather than passing quietly on a retry.

    Known gaps in this release

    Cost caps do nothing on OpenRouter and custom providers, because the pricing catalog cannot price them.

    Read in full
    • Cost caps remain inert on OpenRouter and custom providers, because the pricing catalog cannot price them. Cap spend at the provider.
  11. v1.0.1

    Desktop distribution fixes: the bundle actually contained the app.

    What improved

    The desktop installer now contains the engine it needs to start, and release checksums name the files as they are actually served.

    All 2 improvements
    • The desktop bundle ships the sidecar it needs. The previous build produced a 5 MB app that passed CI, uploaded cleanly and died on first launch.
    • Release assets are checksummed under the names they are actually served with, so verification succeeds instead of silently checking nothing.

    Known gaps in this release

    Builds are unsigned, so macOS and Windows warn on first launch.

    Read in full
    • Builds are unsigned. macOS and Windows will both warn on first launch; the download page explains the unblock steps before you download rather than leaving the OS to explain after.
  12. v1.0.0

    First release: the pipeline, the human gate, and verifiable exports.

    What improved

    The first release: a planner, executor, critic and synthesizer pipeline with a durable human approval gate, citations that resolve to a source and a verbatim snippet, exports a standalone verifier checks offline, and self-hosting with your own keys or local models.

    All 4 improvements
    • Planner, executor, critic and synthesizer running as a graph, with a durable human approval checkpoint before anything is finalised.
    • Every citation resolves to a source and a verbatim snippet; one that cannot be verified renders a warning chip instead of rendering clean.
    • Markdown, PDF and hash-verifiable bundle exports, with a standalone offline verifier.
    • Self-hosting with Docker, bring-your-own-key, and local models through Ollama.

    Known gaps in this release

    Project memory needs Postgres, so the desktop build has no cross-report memory.

    Read in full
    • Project memory is Postgres-only, so the desktop build has no cross-report memory.