Enquire docs
    Enquire docs
    Getting startedUser guide
    ArchitectureBrowser toolsProcedures
    Claude Code integrationExtension guide
    DeploymentRoadmapBenchmarks
    Get Started

    User guide

    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.


    The side panel at a glance

    Open it with the Enquire toolbar icon → Open side panel. You'll see:

    Edit on GitHub

    Getting started

    5-minute setup — extension, sign-in, MCP client, first call.

    Architecture

    System design, tiered router, procedure mode, trust boundaries.

    On this page

    The side panel at a glanceActive tab — what the agent is drivingPicking a model per chatModes — what is the agent doing right nowMemory — what the agent remembers across visitsProcedures — replayable recipesSettings tourMode (Local vs Cloud)LLM Provider + per-provider credentialsAgent toolsetDiscoveryMemoryModel Routing (advanced)ObservabilityHow sign-in to app.enqr.dev worksCommon patterns"Read this page and answer""Click the X link""Repeat what I did last time""Run this on a different tab"TroubleshootingWhere to next
    ┌────────────────────────────────────────┐
    │  ←History  Enquire           +New chat │  ← header
    ├────────────────────────────────────────┤
    │  [interact] · 2/4 · find_and_click …   │  ← AgentStateBar
    ├────────────────────────────────────────┤
    │  ⌐  github.com — "your repos"      ✕   │  ← ActiveTabBar
    ├────────────────────────────────────────┤
    │                                        │
    │   user message bubble        09:42    │
    │                                        │
    │  09:42:13  ✓ navigate → github.com  1.2s│  ← tool row (timestamped)
    │  09:42:18  ✓ read_page → "Repos…"   3.4s│
    │                                        │
    │   assistant bubble           09:42    │
    │   …                                    │
    │                                        │
    │                              [scroll]  │
    ├────────────────────────────────────────┤
    │  Default · Sonnet 4         [🔧 7/53]  │  ← model picker + tool badge
    │  ┌──────────────────────────────────┐  │
    │  │ Send a message…                  │  │
    │  └──────────────────────────────────┘  │
    └────────────────────────────────────────┘

    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.


    Active tab — what the agent is driving

    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.

    Picking a model per chat

    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 seeWhat it means
    Default · Sonnet 4Use whatever Settings says.
    gemma4:e2b · needs setupLocal 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.


    Modes — what is the agent doing right now

    The agent runs as a small state machine. The AgentStateBar at the top shows the current mode and plan progress:

    ModeWhen the agent is in it
    planOrienting + deciding the next step (default)
    interactClicking, typing, scrolling, filling forms
    navigateOpening URLs, switching tabs
    inspectReading the page (text + a11y tree)
    searchWeb search / link crawling
    devtoolsConsole / 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

    Memory — what the agent remembers across visits

    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.


    Procedures — replayable recipes

    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:

    FieldExample
    NameFind a HuggingFace model and summarise the README
    Domainhuggingface.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.


    Settings tour

    Open via the toolbar icon → Settings (also Options → Settings).

    Mode (Local vs Cloud)

    • 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.

    LLM Provider + per-provider credentials

    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).

    Agent toolset

    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.

    Discovery

    • Auto-discover MCP servers on page load — when a page advertises /.well-known/mcp.json (and similar), the extension picks up its tools.
    • Tier 0 notifications — show a banner for read-only tool calls (off by default — they're noisy).
    • Debug mode — surface the discovery trace inside server cards.

    Memory

    See the Memory section above.

    Model Routing (advanced)

    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.

    Observability

    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.


    How sign-in to app.enqr.dev works

    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:

    1. The offscreen document dials wss://bridge.enqr.dev/ws?token=<authToken> with reconnect.
    2. External MCP clients pointing at https://bridge.enqr.dev/mcp with the same bearer get routed through your tunnel.
    3. 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.


    Common patterns

    "Read this page and answer"

    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").

    "Click the X link"

    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.

    "Repeat what I did last time"

    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.

    "Run this on a different tab"

    Switch tabs in Chrome, then click Adopt in the ActiveTabBar (or call switch_tab from chat). The side panel only operates on the adopted tab.


    Troubleshooting

    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.


    Where to next

    If you want toRead
    Add Enquire to Claude Code / Cursor as MCPGetting started
    Understand how the loop is wiredArchitecture
    See the MCP tool catalogBrowser tools
    See what's plannedRoadmap