Skip to main content

Settings → Web

Web search lets the chat look something up live instead of answering from memory alone. It is off until you set it up here. The rail entry is Web; the page is titled Web search and its subtitle reads Opt-in, sovereign web search. Off by default — nothing leaves your machine until you configure an instance and enable it. Searches are shown under each answer.

The page has two tiers. The simple one, shown by default, is the status card, the master switch and the one credential the active provider needs. Everything else sits behind Pro mode, because a wrong value there is invisible in the interface and ruins every answer.

Every change saves at once (text fields when you leave them); a ✓ Saved line confirms it at the bottom. Any change also resets the status card to Not tested yet, so a green verdict never survives the setting it was measured on. While the configuration loads the page says Loading…. Errors from launching the container are translated; other failures are printed as returned, some in English ("Save failed", "test failed"…).

The defaults as shipped: web search off, provider Jina, no key, no instance URL, Max results 5, Reformulate the question on, Depth fast, Relevance guard on, no trigger words.

Status card

A coloured dot, a headline, a detail line and a Test button (Testing… while it runs). The button is greyed until the active provider has its credential.

VerdictDetail
Not configuredAdd the credential below, then run a test.
Configured, but switched offTurn on «Enable web search» to make the chat toggle available.
Testing… (blue)
Not tested yetRun a test to check the backend actually returns results about what you ask.
Failed (red)the error returned
Answers, but returns off-topic results (orange)The backend replied without error, but the results have nothing to do with the control query. Keep the relevance guard on, or switch provider.
Working (green){count} on-topic results in {ms} ms.

After a test, the first result's title is printed in italics: First result: {title}.

How the test judges

The app searches a fixed control query, "Electron release notes", and calls the backend working only if at least one result's title or address contains "electron". A backend that answers without error but with someone else's results is broken in the only way that matters, and this is what the orange verdict catches.

Master switch. Off by default — turn it on to make the chat toggle available. With it on, the chat gains a web toggle; with it off, nothing is ever searched, whatever the rest of the page says.

The credential

Only the active provider's credential is shown. The provider itself is chosen in Pro mode (below); Jina is the default.

Jina (default)

Jina API key: a password field, placeholder jina_…, saved when you leave it. Required for Jina Search. Get one free in ~1 min at jina.ai (10M free tokens), then paste it here. The Get a free key link opens jina.ai.

What leaves your machine with Jina

With this provider, each search sends your query to Jina's service, and only when web search is on (the Pro hint says it in as many words). The key stays in the app's settings on your machine and is sent to Jina with each request.

SearXNG

SearXNG instance URL: placeholder http://127.0.0.1:8888, saved when you leave it. Self-hosted SearXNG with JSON output enabled, e.g. http://127.0.0.1:8888. No API key, private.

Under it, a Running SearXNG panel: One click and Docker does the rest: it writes a settings file with JSON output enabled, pulls the image, starts the container and waits until it really answers. The first launch downloads ~1 GB.

  1. Have Docker running

    The panel checks Docker first and tells the two blocking cases apart, because they look identical in a terminal and need opposite fixes. Docker absent: Docker is not installed. It is the one step we cannot do for you — it is a real installation, and on Windows it needs a reboot., with four facts (About 500 MB to download, free for personal use., On Windows it enables WSL2 and asks for one reboot., Once only: after that, launching SearXNG is a single click here., Needed only for the SearXNG path. The hosted path (Jina + free key) requires none of this.) and a Download Docker Desktop button. Docker installed but stopped: Docker is installed but not running. Start Docker Desktop, then launch again., and Open Docker Desktop and wait until the whale icon stops animating (~30 s on a cold start), then press Launch again. Nothing else to configure.

  2. Launch SearXNG

    Click Launch SearXNG (greyed until Docker is ready). The phase is printed live: Checking Docker…, Downloading the image (~1 GB, first time only)…, Starting the container…, Waiting for the instance to answer…, Ready. The button reads Working… meanwhile.

  3. Let the page finish the setup

    Once the instance really answers, the page switches the provider to SearXNG, fills SearXNG instance URL on its own, and runs the Test. The container is named mnemosyne-searxng, listens on port 8888 and keeps its settings in ~/.mnemosyne/searxng.

  4. Stop or restart later

    The status line reads Running or Stopped — launch to restart it; the same button becomes Stop while the container runs.

If a launch fails, the reason is translated: Docker is not installed., Docker is installed but not running — start Docker Desktop., or The container started but never answered. Check that port 8888 is free, then look at: docker logs mnemosyne-searxng.

Or run the command yourself unfolds the manual path: Nothing to clone and nothing is bundled: SearXNG is a container you run yourself. This command starts one on port 8888 — you must then enable JSON output in its settings.yml, otherwise it serves HTML only and the app cannot read it. See docs/features/web-search.md, then hit Test., the command itself:

docker run -d --name mnemosyne-searxng --restart unless-stopped -p 8888:8080 -v ~/.mnemosyne/searxng:/etc/searxng searxng/searxng:latest

and a Copy command button that reads Copied for a moment. Updating is yours too: To update: docker pull searxng/searxng:latest, then recreate the container. It updates on your schedule, not with the app.

No Docker? The way back

While the URL field is empty, a button offers No Docker? Switch to the hosted path (Jina + free key). It exists because the provider selector is hidden inside Pro mode: without it, "SearXNG selected, no URL" was a dead end.

Pro mode

A Pro mode row unfolds the levers below. Whether it is open or closed is remembered on this machine only, as a view preference. When it is closed and a quality lever is off its recommended value, the row wears an orange modified badge: a degraded configuration must not hide behind a tidy collapsed panel.

The Pro section

Provider and quality levers. The settings above are the ones measured to work — change these only if you know why.

  • Search provider: Jina Search (hosted — free API key) (default) or SearXNG (self-hosted — sovereign). The hint follows the choice: Easiest path: paste a free Jina key below (1-min signup at jina.ai). Your query is sent to Jina's service, only when web search is on. or Maximum privacy: you run the search relay yourself. Requires a SearXNG instance below. The credential block for the provider you just chose appears in the simple tier, above this section, despite the word "below".
  • Reformulate the question: on by default. Let the AI rewrite your question into a focused search query before searching (better results). Adds ~1-2s. Off, an orange warning appears: Off: your question is sent as written. Non-English wording returns unrelated results on the hosted backend. This is the highest-leverage lever on the page.
  • Relevance guard: on by default. Drops results that share no meaningful word with the query, before they reach the model. Off: Off: unrelated results are injected into the answer. Search backends do return other people's results.
  • Depth: Fast — snippets (default, Quick: titles + snippets from the search engine.) or Deep — read full pages (slower) (Reads the full text of the top results for more exact, grounded answers — a few seconds longer.). Deep with the relevance guard off adds a warning: Deep without the relevance guard amplifies bad results: the top pages are read in full and fill the prompt.
  • Your own trigger words: a three-line text area, placeholder morgen / Wetter / BTC price. One per line (commas work too). Any question containing one of these goes to the web immediately, before the model or the score gets a say. Case and accents are ignored. And: Built-in triggers cover English, French and Spanish only — this is how you add your own language, or a topic you always want checked live (a ticker, a competitor, a flight). Applies in Auto mode; it never overrides the web toggle being Off. The list is cleaned when you leave the field (new lines, commas or semicolons; duplicates merged regardless of case and accents) and rewritten with what was kept. A word in a Latin script fires on whole words only ("prix" matches "le prix du blé", not "prixe"); other scripts match anywhere in the text.
  • Max results: 3, 5, 8 or 10, default 5. Deep mode reads the top 3 in full, whatever this number is.
  • Reset to recommended settings appears only when reformulation or the relevance guard is off, and turns both back on. Depth, count, provider and trigger words are left alone.
What leaves your machine

Web search is off by default, and with it off nothing is searched. With it on: the query goes to the provider, Jina's service or your own SearXNG instance. With Reformulate the question on, the AI rewrites your question first, on the model route the chat uses. With Deep, the pages of the top results are fetched and read in full. What was searched is shown under each answer.