Docs

Page Assist

Page Assist was built for a local Ollama, and the same screen takes a hosted endpoint: Settings → OpenAI Compatible API → Add Provider → Custom, three fields, and the sidebar is summarising the tab you are on with Claude or Gemini instead of whatever fits in your laptop's RAM.

Settings → OpenAI Compatible API → Add Provider → Custom: Provider Name, a Base URL that keeps /v1, and the key — then tick model ids from the list Page Assist fetches for itself.

Settings → OpenAI Compatible API → Add Provider → Custom
Provider Name   Kunavo
Base URL        https://api.kunavo.com/v1
API Key         sk-kn-...
                [ Save ]

Model List      (appears after Save — fetched from GET /v1/models)
  [x] claude-haiku-4-5
  [x] claude-sonnet-5
  [x] gemini-3-8-flash
The Base URL keeps its /v1 suffix. The OpenAI Compatible API page does not say so itself — the field does. Its help text reads “The base URL of the OpenAI API provider. eg (http://localhost:1234/v1)”, and the two sibling provider pages that print a concrete URL for the same field agree: LM Studio's “by default it is http://localhost:1234/v1” and LLaMA.cpp's http://localhost:8080/v1. Page Assist appends only the route, so the bare origin gets you a 404 rather than a 401 — the opposite of the Anthropic-style clients, which want the origin alone.
The Model List is fetched, not typed — usually. After Save, Page Assist opens a Model List with “Please select the chat models you want to use with this provider”, populated from the endpoint. Kunavo answers GET /v1/models, so the list fills itself. If it comes back empty the extension says “No model found. Make sure you have added correct provider with base URL and API key”, which is accurate: an empty list is a Base URL or key problem far more often than a catalog one. Settle it with the curl below before touching the extension. Ids can also be added by hand through Add Custom Model, whose Model ID field takes a slug from the table on this page verbatim.
Pick Chat Model, not the other radio. The Add Custom Model form has a Model Type choice, and Kunavo serves no embedding model — nothing in the catalog answers that endpoint, so the second option has nothing to point at here. The Knowledge Base feature depends on it: the vendor's own page says you must set one in RAG Settings and recommends nomic-embed-text. Keep a local Ollama configured alongside this provider for that job — Page Assist holds many providers at once, and the two roles do not have to come from the same place.
The audio settings are a separate shopping trip. Page Assist's Text-to-Speech section offers an OpenAI TTS provider with its own API Key, Base URL and TTS Model, and Kunavo serves no text-to-speech model. The same is true in the other direction: Kunavo serves no speech-to-text model, and Page Assist's voice input is the browser's own recogniser configured under Speech Recognition Language rather than an API call at all. Leave both sections pointed wherever they already point.
This configuration is read off the vendor's documentation and its own interface strings on the date below. Kunavo has not run Page Assist against its endpoint — no extension build pinned, no sidebar session, no streamed reply, no tool round-trip. A published setup page is not a test, and nothing here should be read as one. What you can settle by yourself in ten seconds is the curl; how the extension behaves on top of a working endpoint is between you and Page Assist.

Step by step

  1. Create a key at /app/keys and copy it — it is shown once.
  2. Click the Page Assist icon on the browser toolbar, then the Settings icon, and go to the OpenAI Compatible API tab.
  3. Click Add Provider. Kunavo is not one of the presets in the dropdown, so choose Custom — that is the branch the vendor's step 5 describes for anything not on its list.
  4. Fill in Provider Name, Base URL = https://api.kunavo.com/v1 and API Key, then Save.
  5. In the Model List that opens, tick the ids you want. Two is usually the right number: something cheap for page summaries and something strong for the questions that follow.
  6. Open the sidebar on a real page — Ctrl+Shift+L opens the Web UI — pick the model from the selector and ask it about the tab. A page with actual content tells you more than a greeting does, because the page text is the part that costs money.

Checked against Page Assist’s OpenAI Compatible API page on September 21, 2026. Third-party settings move; if a field name here no longer matches what you see, that page is the authority, not this one.

Verify before you debug the client

One request settles whether a failure is the endpoint, the key, or the configuration file. If this returns JSON, the same base URL and key work in Page Assist.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
  -H "Authorization: Bearer sk-kn-..."

Which model id to put in the field

Every text model is reachable as a model id — the live list is GET /v1/models, and the catalog with prices is on the models page. Rates are USD per 1M tokens, input / output.

Model idKunavo in / outWhere it fits in Page Assist
claude-haiku-4-5$0.40 / $2.00the default for a sidebar: page summaries and follow-ups, where volume dominates
gemini-3-8-flash$0.525 / $2.625long pages — documentation, threads, transcripts — sent whole rather than trimmed
claude-sonnet-5$2.00 / $10.00the question after the summary, when the answer has to be right
gpt-5-6-sol$2.00 / $12.00a second opinion from another family; add it as a second ticked id, same provider
Billing is per token from a prepaid balance with no monthly fee — see billing. On repeated context — which is most of what an editor or a chat client sends — prompt caching moves the bill more than the model choice does.

What the page costs, and what leaves the browser

A sidebar client bills differently from an editor, and the difference is the page. Every turn where Page Assist is chatting with the tab carries that tab's extracted text as input tokens — a documentation page or a long thread can be tens of thousands of them, and it is re-sent with each follow-up in the same conversation. That is why the model table above leads with the cheap ids: on this client the input side usually outweighs the output side by an order of magnitude, and claude-haiku-4-5 or gemini-3-8-flash reading a whole page beats a stronger model reading a truncated one.

Three settings add traffic you did not explicitly ask for, and all three are listed on the vendor's Settings page:

  • Generate Title using AI — “Automatically generates a chat title from the conversation”. One extra call per conversation, on whichever model is selected.
  • Internet Search, with Internet Search ON by default and Total Search Results — fetched pages join the prompt, so the token bill scales with the result count.
  • Page Action, the companion extension — the model “starts by reading the page, then performs the actions one step at a time”, which is a read of the DOM per step rather than per conversation. Its own Require approval before each action is on by default and worth leaving on.

The privacy boundary follows the same line. Page Assist stores chats, knowledge base and settings locally in browser storage; what crosses the network is what you send. Once this provider is selected, that means the page text, your message and the conversation so far go to api.kunavo.com, and from there to whichever upstream serves the model id — see the privacy policy for what is kept at this end. A page you would not paste into a chat window is a page to switch back to a local Ollama for; the extension keeps both providers configured at the same time precisely so that switch is one dropdown.

If you came here from the OpenRouter preset

OpenRouter does not need the Custom branch. It is one of the presets listed on the vendor's OpenAI Compatible API page — alongside Ollama, LM Studio, Groq, Together, Mistral, xAI and about twenty more — so the path is the same first four clicks, then OpenRouter from the dropdown instead of Custom, its key in API Key, and Save. The preset carries its own Base URL, and OpenRouter's model ids are vendor-prefixed — anthropic/claude-sonnet-4.5 shaped — where the ids in the table above are bare. Picking a provider here is picking which id namespace you type.

Worth switching for, on this client specifically: you want one screen that also reaches models Kunavo does not carry, or you are already keyed in and the marginal setup is zero. Worth switching to Kunavo for: the ids in the table are the ones you use in the coding tools too, so one key covers both, and prompt caching on re-sent page context is where a sidebar's bill actually lives — see caching. Nothing stops you keeping both providers: Page Assist lists them together, and the model selector does not care which row a model came from.

FAQ

How do I use a custom API with Page Assist?

Click the Page Assist icon on the browser toolbar, open Settings, go to the OpenAI Compatible API tab and click Add Provider. If your endpoint is not one of the presets in the dropdown, select Custom and fill in Provider Name, Base URL and API Key, then Save. Page Assist then opens a Model List fetched from the endpoint, where you tick the chat models you want to use with that provider. Ids can also be entered by hand through Add Custom Model if the fetch returns nothing.

Does the Page Assist base URL need /v1?

Yes for an OpenAI-compatible endpoint. The OpenAI Compatible API page does not state it, but the Base URL field's own help text does — "The base URL of the OpenAI API provider. eg (http://localhost:1234/v1)" — and the LM Studio and LLaMA.cpp pages print the same suffix on the same field, http://localhost:1234/v1 and http://localhost:8080/v1. For Kunavo that makes it https://api.kunavo.com/v1. Page Assist appends only the route, so dropping the suffix produces a 404 rather than an authentication error.

Why does Page Assist show no models after I add a provider?

The list is fetched from the endpoint with the key you just entered, and the extension's own message says what to check: "No model found. Make sure you have added correct provider with base URL and API key." Test the same pair outside the extension with a curl against /v1/models — JSON back means the problem is in the provider entry, a 401 means the key, a 404 usually means a missing /v1 on the Base URL. Failing that, add ids manually through Add Custom Model, which does not depend on the fetch.

Can Page Assist use Claude or Gemini instead of a local model?

Yes. "OpenAI Compatible API" names the wire format, not the vendor, and the model id is passed through to whatever Base URL you configured — so a Claude or Gemini id resolves at that endpoint rather than inside the extension. The local-model features are unaffected: Page Assist holds several providers at once, so an Ollama entry and a hosted entry can sit side by side and you switch between them in the model selector.

Which model is cheapest for Page Assist?

On this client the input side dominates, because chatting with a tab re-sends that tab's extracted text with every turn in the conversation. That makes a cheap high-context model the right default — claude-haiku-4-5 for ordinary pages, gemini-3-8-flash for long ones — with a stronger id like claude-sonnet-5 ticked as a second option for the questions where the answer matters. Per-million rates for each are in the table on this page, and prompt caching moves a sidebar's bill more than the model choice does.

Can Page Assist's Knowledge Base use Kunavo?

Not for the indexing half. The Knowledge Base is a RAG feature and the vendor's documentation says you must set an embedding model in RAG Settings, recommending nomic-embed-text; Kunavo serves no embedding model, so that slot needs a different provider — a local Ollama is the usual answer and runs alongside this one without conflict. The chat half is unaffected: once documents are indexed, the model answering questions about them can be any chat id from this provider.

Has Kunavo tested Page Assist?

No. What was checked, on September 21 2026, is Page Assist's own OpenAI Compatible API documentation and the extension's English interface strings — the route through Settings, the field labels and their order, the Base URL example and the empty-list message are quoted from those. Kunavo has not installed the extension, pinned a build or sent a request through it, and makes no claim about streaming, page extraction or the Model List fetch behaving in any particular build. The curl on this page is the part you can verify independently.