A private AI assistant, tested end to end

Confidential Research is a desktop app that runs an open model on your own computer, encrypts the chats you save and, when you allow it, searches the web through Tor or your own VPN. Before calling it ready I tested it the way a new user meets it: a clean profile, every screen driven automatically, and the app’s network connections captured at the system level while it searched.

Stack
Rust + Tauri 2 · Svelte 5 · llama.cpp in-process
Private search
Built-in Tor or in-app WireGuard, no admin rights
Status
Beta on Linux · open source (AGPL-3.0)

What I found

  1. The earlier build passed hundreds of unit tests while its Tor mode fetched pages from the real IP address.

  2. After the fixes, every remote endpoint the app opened during a search was a Tor relay, and none was a website.

  3. After an encrypted session, a search of the whole profile directory for the chat’s name, question and answer found nothing.

  4. On a 32-case grounded-answer benchmark run twice per model, Gemma 4 E4B scored 98.4% and Qwen3.8 27B 96.9%, at 223 and 56 tokens/s.

The central idea

A privacy feature is a claim about network traffic, so the test has to capture the traffic. The earlier build passed hundreds of unit tests while its Tor mode fetched pages from the real IP address.

  1. 01Clean profile
  2. 02Drive every screen
  3. 03Capture connections
  4. 04Fix
  5. 05Re-run and re-capture
How each fix was accepted · the same automated run, plus a capture of the app’s connections
Contents
  1. What I found
  2. The test: a new user and a packet-level witness
  3. What the first run found
  4. After the fixes: evidence instead of assertions
  5. Choosing the model with the app’s own benchmark
  6. Which search engines answer over Tor
  7. What this does not claim
  8. Sources & scope

The test: a new user and a packet-level witness

The harness drives the real desktop app through WebDriver: it installs, chats, turns on private search, creates an encrypted chat and restarts, taking a screenshot at each step. While the app searched, a root-level socket capture listed every remote endpoint it had open, and each address was looked up in the Tor Project’s relay directory.

The capture matters because it does not trust the app. A badge that says Tor, a log line that says the tunnel is up and a passing unit test are all things the code says about itself. The socket table is what the operating system says.

What the first run found

The earlier build did not work as a product, and its privacy features protected no one. The Tor leak came down to one line: the HTTP client was given the Tor proxy and then told to ignore proxies, which in the current version of the library clears the proxy it had just been given. Pages went out directly while Tor sat idle.

Clean-profile run on the earlier build · September 24, 2026
AreaResultWhat happened
First-run installBrokenThe installer stepped through its screens without downloading anything
ChatBrokenRaw reasoning shown, answers cut off at 512 tokens, everyday questions refused
Web search over TorLeaked the real IPPage fetches bypassed Tor; the capture showed direct connections to the sites
VPNNever routedNeeded root to create a network device and sent no traffic through it
EncryptionCould not be enabledSetting a passphrase always failed; saved chats were plain text on disk

After the fixes: evidence instead of assertions

Tor is now built in, and searches go to DuckDuckGo’s onion service, so the query never reaches an exit relay. In the re-run, every remote endpoint the app opened during a search was a Tor relay and none was a website. The VPN is WireGuard running inside the app, with no admin rights and no system changes. Its only non-loopback socket is the WireGuard connection, so if the tunnel drops, requests fail instead of leaking.

Saved chats are encrypted with the user’s passphrase. After a session, a search of the whole profile directory for the chat’s name, question and answer found nothing. Documents attached to an encrypted chat go into an encrypted index: questions about a PDF lease were answered exactly, citing the page, with none of the lease text readable on disk.

Choosing the model with the app’s own benchmark

The benchmark runs 32 cases through the app’s real prompts, each model’s own chat template and the same inference loop: answering from given sources with correct citations, saying so when the sources do not contain the answer, conflicting sources, a prompt-injection trap inside a source, a Spanish source, formatting and date arithmetic. Every model ran twice with fixed seeds, and every failure was read by hand. Several were the scorer’s fault rather than the model’s, and the scorer was fixed before any ranking was trusted.

The table is not the whole decision. Small models do well on grounded answering, which is what this benchmark measures, while larger models are far ahead on general knowledge and reasoning. So setup recommends Qwen3.8 27B wherever it fits, a 2-bit version of it on 12 to 16 GB graphics cards, and the small Gemma 4 E4B only on 8 GB machines.

Grounded-answer benchmark · 32 cases × 2 seeds · 8 of the 14 models tested · one RTX PRO 6000
ModelScoreTokens/s
Gemma 4 E4B98.4%223
Qwen3.8 27B96.9%56
Qwen3.6 35B-A3B96.9%182
Qwen3.8 27B, 2-bit93.8%75
Qwen3.5 9B93.8%163
Ornith 1.5 35B-A3B92.2%184
Nemotron 3.5 Lightning 30B-A3B84.4%248
MiniCPM5 2B75.0%308

What this does not claim

The boundaries, stated the way I would want to read them on anyone else’s privacy tool:

  • Linux is the tested platform. Mac and Windows builds are not produced yet.
  • There has been no external security audit.
  • Private search hides your address from websites. It does not hide from your internet provider that you use Tor, and it cannot protect identifying details you type into a question.
  • Nothing here protects against malware already on the computer.
  • The benchmark measures grounded answering, citation and abstention on 32 cases, not general intelligence, and every speed comes from one workstation.

Questions about this note? Get in touch.

sipratt@gmail.com