How Ask Anything Uses TinyFish to Answer with Fresh Web Results
Snipset's Ask Anything can ground voice answers in live web results through TinyFish Search and Fetch. How the flow works, what leaves your device, and setup.

Ask Anything lets you speak a question and read the answer in an overlay, answered by your local Ollama model or, if you switch it on, by Claude. A language model only knows what it saw during training, so questions about this week's release, a price, or a changed API often get a confident but stale answer. Since Windows 0.6.857 and Linux 0.6.873, Snipset can ground those answers in live web results from TinyFish Search and TinyFish Fetch.
This post walks through what happens between your question and the answer, what leaves your computer, and what Snipset does when the web is slow or a key is wrong.
Why Ask Anything Needs Fresh Facts
A voice question is short and usually about something you need right now. That is the worst case for a model's training cutoff: a model rarely says that it does not know, and often fills the gap with something plausible.
Web search grounding fixes that by putting a few current search results into the prompt before the model answers. Snipset supports four other providers for this (DuckDuckGo, Tavily, Brave Search and a self-hosted SearXNG instance). TinyFish is the fifth. We added it because it pairs two steps we wanted in one place: Search finds the pages, and Fetch reads them. According to TinyFish's documentation, Search returns structured results with titles, snippets and URLs, and Fetch renders JavaScript-heavy pages and returns clean extracted text, in Markdown by default. A search snippet is often one sentence; the page behind it is where the actual answer lives.
Web search is off by default, and DuckDuckGo stays the default provider. TinyFish only runs if you pick it and give it your own key.
What Happens When You Ask: TinyFish Search, Fetch and Grounding
When web search is on, Ask Anything searches for every question. There is no per-question switch, so if you want an answer from the model alone, turn web search off.
Here is the path a question takes with TinyFish selected:
your voice question
-> masked with your sensitive-data rules
-> TinyFish Search: 3 results (title, snippet, URL)
-> TinyFish Fetch: page text of the top 2 results, as Markdown
-> each page cut to about 600 characters
-> grounding block added to the system prompt
-> Ollama or Claude answers, citing the numbered sources
-> footnotes added for the sources the answer cited
A few details matter here.
Short excerpts on purpose. Snipset keeps about 600 characters of each fetched page, cutting at a word boundary when one is near the end. The whole grounding block for Ask Anything has a budget of about 400 tokens (roughly 1600 characters, counted at four characters per token), and the block's own instructions take part of that. In practice the first result usually keeps its page excerpt, and later results go in with their title, link and snippet only. If a result does not fit with its excerpt, Snipset drops the excerpt before it drops the result; a result is left out only when even its short form no longer fits.
Citations you can follow. The grounding block is titled "Live Web Search Grounding Context" and asks the model to cite sources with bracketed numbers and to write links as Markdown. After the answer arrives, Snipset adds footnotes in the form [1]: url "title", but only for sources the answer actually cited. A number glued to a word, like arr[1], does not count as a citation.
The same path for both models. The grounding block goes into the system prompt, and that same prompt is sent whether the answer comes from local Ollama or from Claude.
Timing
A voice overlay should not hang while a website loads, so every step has a limit:
| Step | Limit |
|---|---|
| One search request | 5 seconds |
| All search attempts, retry wait and Fetch together | 6 seconds |
| Retry after a temporary failure | 1 retry, after 200 ms |
| Start Fetch only if this much time is left | 1.5 seconds |
| Whole web search step in Ask Anything | 8 seconds |
Fetch is the extra step, so it only gets the time the search left over. If Search took most of the six seconds, Snipset skips Fetch and uses the search snippets alone.
What Leaves Your Computer
We treat a search provider as one more outside party, so we limit what it sees.
The query is masked first. Before the question goes to any search provider, Snipset runs it through the same sensitive-data masking it applies to chat text, using your masking settings. A search provider never sees what the model route would not. Snipset also sends at most 2000 characters of query to TinyFish.
Fetch never sees your question. The Fetch request carries only the URLs of the top results, the format and a timeout. TinyFish Search sees the masked query; TinyFish Fetch sees a list of public web addresses.
Your key stays in the keychain. TinyFish needs your own API key, and it has its own slot in Snipset's secret store: encrypted with your Windows account through DPAPI on Windows, or kept in the Secret Service keychain on Linux. The settings screen only learns whether a key exists, never the key itself. We wrote about how that store works in our post on API keys in the system keychain.
Web results are untrusted input. A web page can contain text written to steer an AI ("ignore your instructions and..."). The grounding block tells the model that the results are untrusted web content, to use them as reference material only, and to ignore any instructions inside them. That is an instruction to the model, not a guarantee, which is one more reason the footnotes point you back to the source.
When the Web Is Slow or the Key Is Wrong
Grounding is a bonus, so Ask Anything never waits for it forever and never fails because of it.
- An error or a timeout: Ask Anything answers without grounding and writes a warning to the log. With no results, it simply answers without grounding. Either way you still get an answer, just from the model alone.
- Temporary Search problems (a rate limit, a request timeout, a server error) get one retry within the deadline.
- A rejected key (HTTP 401 or 403) is not retried. Retrying a wrong key only wastes time.
- A missing key makes the search fail, and Ask Anything answers without grounding. The overlay does not show this error; it goes to the log as a warning that points to the web search settings. Snipset does not quietly switch you to another provider, so your choice of provider stays your choice.
- Fetch fails but Search worked: Snipset keeps the search snippets and grounds the answer on those.
On cost: TinyFish announced on 2026-05-04 that Search and Fetch are free, with no credit card needed to start. The exact limits are in TinyFish's documentation, and they can change, so check there rather than relying on a number in this post.
How to Turn It On
- Create a key at agent.tinyfish.ai/api-keys.
- In Snipset, open Settings, go to the AI & Models tab, and find the Web Search Grounding group.
- Turn on Enable Web Search.
- Choose TinyFish Search as the provider.
- Paste your key into TinyFish API Key.
Then ask a question about something recent. The answer should carry numbered citations with footnotes underneath.
This is in the Windows and Linux desktop apps (Windows 0.6.857 and Linux 0.6.873 or later).
Summary
With TinyFish selected, Ask Anything searches for up to three current results, reads the top two pages, and fits as much of that as a block of about 400 tokens allows, dropping page excerpts before whole results. The model gets it clearly marked as untrusted, with numbers to cite. Your question is masked before it leaves, Fetch only sees URLs, your key sits in the system keychain, and a slow or failed search falls back to a plain answer within seconds.
Want answers that cite today's web instead of last year's training data? See the Snipset plans.
