Day-to-day use of the Enquire Chrome extension's side panel.
Day-to-day use of the Enquire Chrome extension's side panel — the agentic chat that lives in your browser, separate from any external MCP client setup.
Looking for the MCP-client setup (Claude Code, Cursor, …)? See Getting started. This guide assumes the extension is installed.
Everything in the timeline is timestamp-ordered. Bubbles show HH:MM underneath; tool calls show HH:MM:SS and a duration. When the agent says it did three things "in parallel," scroll up — the rows tell you the actual order.
The ActiveTabBar shows which Chrome tab the agent will manipulate. Three things to know:
Empty state (no tab adopted yet) → Adopt the currently-focused tab, or open a fresh DuckDuckGo tab. Pages on chrome://, chrome-extension://, or the new-tab page can't be adopted (Chrome forbids extension scripting them) — open a real URL first.
The X detaches. It removes the tab from the agent's session without closing the Chrome tab itself. The tab stays open; the agent just stops driving it.
The agent only drives the active tab. If it opened sub-tabs (open_tab), the most recent one becomes active. The list_tabs tool shows everything in the session; switch_tab hands the agent a different one.
The model picker above the input overrides Settings for this conversation only. Every preset is selectable here — including transformers.js + Ollama variants that aren't in Settings (because Settings only chooses the global default).
What you see
What it means
Default · Sonnet 4
Use whatever Settings says.
gemma4:e2b · needs setup
Local model isn't installed yet; pick to trigger the install flow.
claude-sonnet-4-…
Cloud model; uses your stored API key (or the cloud bridge if signed in).
The dot/badge next to the picker — [🔧 7/53] — is the tool surface badge. 7 is what the model can call right now under the active tier × FSM mode; 53 is the universe of tools that exist. Click for a popover showing both lists. If your tasks fail because a tool the model needs isn't visible, switch to a more capable model — the picker auto-bumps the tier.
The agent runs as a small state machine. The AgentStateBar at the top shows the current mode and plan progress:
Mode
When the agent is in it
plan
Orienting + deciding the next step (default)
interact
Clicking, typing, scrolling, filling forms
navigate
Opening URLs, switching tabs
inspect
Reading the page (text + a11y tree)
search
Web search / link crawling
devtools
Console / network logs
The agent calls request_mode to swap modes. Each mode has its own slice of tools, sized by the model's tier — small models see ≤7 tools/mode, cloud models see everything every turn. This is why a small model that "can't find the click tool" is usually one mode swap away from being able to.
Clicking segments of the AgentStateBar opens popovers:
Mode pill → the active toolset (with descriptions)
2/4 → the full plan, with done steps checked
last action → the input + result of the most recent tool call
Every time the agent finishes a step with done(summary) on a tab with a URL, the summary is stored locally keyed to that domain (eTLD+1). Next time you land on the same site — even in a fresh chat, weeks later — those summaries are folded into the agent's context as a "Prior visits to {domain}" block.
What this fixes: on first visit the agent rediscovers everything. On the second visit it skips that and acts on what it already learned.
Where to manage:
Options → Memory — list of every entry, grouped by domain. Search the summaries; export the lot as JSON; delete one or all.
Settings → Memory — toggle injection on/off (capture still runs), set auto-prune age, run prune now.
Privacy note: memory is local-only (chrome.storage.local). It is not synced to app.enqr.dev. Browsing context shouldn't bleed between devices without an explicit opt-in.
A procedure is a small YAML body that describes a repeatable browsing task. Save one once, replay it whenever.
To create: Options → Procedures → New procedure. Fill in:
Field
Example
Name
Find a HuggingFace model and summarise the README
Domain
huggingface.co
Body (YAML)
a short step list (see the template that loads when you create)
To replay: click Replay on a row. The side panel opens (auto), starts a fresh chat, and seeds it with the procedure body framed as a primer. The agent runs the steps end-to-end against the active tab.
Procedures are stored locally in chrome.storage.local. The web dashboard can show procedures synced through the API, but the extension-side procedure library remains local-first while sync hardening continues.
Local — extension runs standalone. Side panel chat works, all built-in tools work. External MCP clients can't reach this browser.
Cloud — signs you in via app.enqr.dev and dials a WebSocket tunnel to bridge.enqr.dev. External MCP clients (Claude Code, Cursor) can now drive the browser via https://bridge.enqr.dev/mcp with the bearer token from app.enqr.dev/app/setup.
Pick which LLM serves the side-panel chat. API keys are stored locally (chrome.storage.local) — never sent to enqr.dev servers. WebLLM and Ollama need no API key but do need a local install (the manager pane below the picker walks you through it).
Caps the per-turn tool surface. Auto picks based on model size; manual overrides force a specific tier. The side panel's per-conversation picker overrides this for that chat only.
Route different workloads to different models. Example: Gemini 2.0 Flash for crawl_page (cheap + 1M context), Claude Sonnet for everything else. The "Quick setup" templates (Cost-optimized, Balanced, Quality-first, Local) are reasonable starting points — pick one, tune as needed.
Optional Langfuse tracing. Self-hosted or cloud. When on, every LLM turn + tool call gets logged with token counts, durations, and model usage so you can debug or cost-analyse a run.
When you click Settings → Cloud → Sign in, the extension opens a popup at https://app.enqr.dev/sign-in?redirect_uri=.... Better Auth issues a bearer token, the popup closes, and the extension persists authToken, authUserId, and cloudMode = true. From there:
The offscreen document dials wss://bridge.enqr.dev/ws?token=<authToken> with reconnect.
External MCP clients pointing at https://bridge.enqr.dev/mcp with the same bearer get routed through your tunnel.
Settings sync to api.enqr.dev; procedure sync is still being hardened and should be treated as local-first in the extension.
Sign out from the same Settings → Cloud panel — it clears the token, drops the tunnel, and stops sync. Local data (memory, procedures, conversations) stays put; only cloud-side state is cleared.
If anything looks wrong (extension says signed in but Bridge is offline, or vice versa), the Bridge tab has a debug panel showing the live values of cloudMode, authToken, relayUrl, and recent WebSocket upgrade attempts. Most issues come down to a stale token — Reset bridge + auth in that panel + sign in again clears them.
Just ask. The agent's context already includes the active tab URL + title, with a hint to read the open page first. Cloud models do this reliably; small local models occasionally still run google_search instead — switch the picker to a more capable model, or be explicit ("read the open page").
Easier when you give the agent a specific anchor: click on the "openai/privacy-filter" link is more reliable than click the privacy link — the latter matches multiple elements.
Either save the conversation as a procedure (Procedures → New procedure, paste the steps as YAML) or rely on memory: just ask the same question again on the same domain — the prior summary is in context.
Side panel is empty / no chat input.
The extension hasn't loaded an active tab yet. Click Adopt in the ActiveTabBar, or send a message — the agent will auto-bootstrap on first navigation.
Tool calls show "Pending" or "Running" forever.
Should be impossible since v0.2 (every tool runs under a 30 s timeout — 60 s for nav/wait/screenshot/crawl). If you see it, file a bug with the session log (Options → Audit Log → Export).
Agent says "I can't find the click tool."
The active mode doesn't include click. Either tell it to request_mode("interact") explicitly, or switch the model picker to a tier where the tool surface is wide enough.
Memory recall is showing a stale or wrong entry.
Options → Memory → delete the row. The next chat on that domain will skip it.
Cloud sign-in: popup closes but Bridge stays offline.
Bridge tab → debug panel. Look for a state or tunnel mismatch between cloudMode, authToken, and tunnels. Reset bridge + auth almost always fixes it; sign in again afterwards.