Skip to content

User guide

Troubleshooting

Causes and fixes for common problems with setup, pairing, agent CLIs, page tools and the optional MCP endpoint, listed by the symptom or message you see. For what an error code means, see reference/errors.md.

15 min read Edit this page on GitHub

Start here

browsentic status      # the Bridge, each paired browser and its store, the agent
browsentic agent       # which agents are installed, which one runs the side panel
browsentic logs        # run starts, routed skills, every tool call and its outcome

Those three answer most questions. The Bridge's log is at ~/.browsentic/daemon.log.


Setup and connection

Symptom Cause Fix
The popup says protocol version mismatch: daemon speaks v20 (any number below 22) Browsentic Bridge is older than 0.7.14, too old for this extension Update the Bridge (Update now in the app, or npx browsentic@latest update), then enter a new pairing code in the popup: after a refusal, this version of the extension waits for one
The popup says protocol version mismatch: Browsentic Bridge speaks v22 and takes extensions from v22 on The extension is older than 0.7.14, usually an unpacked copy that was never updated Remove it and install the extension from its store, or run browsentic update and press ↻ on its card
The store copy is a version behind the Bridge The browser has not checked for updates yet Nothing breaks meanwhile, because the two work across versions. To update now, turn on Developer mode at chrome://extensions and press Update
browsentic status says two copies of Browsentic answer in one browser An unpacked copy and a store copy are both installed, and both inject into every page Remove the unpacked copy on the browser's extensions page
Edge will not install from the Chrome Web Store Edge blocks other stores until you allow them Install from Edge Add-ons instead. Or press Allow extensions from other stores in the bar at the top of the store page, confirm, then press Add to Chrome
browsentic setup keeps waiting for the browser The extension is installed but not paired yet Click Browsentic in the toolbar and enter the code setup printed. Ctrl-C stops the wait without undoing anything
Popup shows Expected {op:…} Stale service worker after a rebuild At chrome://extensions, press ↻ on Browsentic
"That pairing code is wrong or expired" Codes are single-use and last 10 minutes Run browsentic pair for a new code. A failed attempt does not use up the outstanding code
"No Browsentic daemon is running" Browsentic Bridge is not installed, or not running on 8765–8767 Install it, open the app, or run browsentic start. Then check browsentic status and browsentic logs
browsentic: command not found The global npm prefix is not on PATH Run npm prefix -g and add its bin directory to your PATH
"Browsentic has not been given the microphone yet" Browsers cannot show the microphone prompt inside a side panel or a popup, so a fresh install has never asked Press Allow microphone and choose Allow in the tab that opens
"Microphone access is blocked" Microphone permission was refused for the extension Press Allow microphone, then click the icon at the left of that tab's address bar and set Microphone to Allow
"This browser has no speech service" Brave and some Chromium builds ship speech recognition without a transcription service behind it Type instead, or use Chrome or Edge for dictation
No detach button in the panel's header, and no /hands-free Hands-free is offered only where speech can be transcribed: never in Firefox or Brave, and not in a browser whose speech service failed before it ever worked Use Chrome or Edge. If the service was only out of reach, dictate in the panel once: the first word it transcribes brings the button back
"Hands-free is not available here", and the mic left the page The speech service failed before it had ever transcribed a word in this browser As above. Open Browsentic from the toolbar to continue by typing
The hands-free mic says speech recognition stopped The recognizer stopped for a reason other than a missing service: a language the service does not take, a moment offline, or the page it listens from could not start Press the mic to try again. Unlike "no speech service", this never hides hands-free
The hands-free mic turns amber and says another page took the microphone Chrome runs one speech recognizer at a time, and another page or the panel started one Press the mic to take it back
Holding Control does nothing Hold to talk is off; the key went to a frame embedded in the page (some editors); another key or a click joined it; or the mic is muted Turn on Hold to talk in the mic's menu, click the page outside any embedded editor, and hold left Control on its own
EXTENSION_OFFLINE The browser is closed, or not paired Open the browser, then run browsentic sessions to check pairing
After a reboot the panel stays offline until you run a command The browser has no native messaging host registered to start the Bridge, or has one registered by a Bridge older than 0.8, which lets in only the unpacked copy Run browsentic setup once, or start Browsentic Bridge 0.8 once; either rewrites the registration. browsentic status then lists the browsers under wake-up:
The panel stays offline after browsentic stop stop also holds the browser's wake-up, so the Bridge stays down as asked Run browsentic start. Until then, browsentic status shows held
A scheduled task shows Missed The browser was closed, the computer was asleep, or no Bridge was running at that time Nothing to fix: the task runs once when they are back, unless it is set to Skip it. browsentic status shows whether the browser can start the Bridge itself
"Load unpacked" cannot see ~/browsentic The browser is a Flatpak or Snap, sandboxed away from your home directory (Snap Chromium is the Ubuntu default) Install the extension from the Chrome Web Store instead, which needs no folder. Or grant access: flatpak override --user --filesystem=~/browsentic com.google.Chrome. Or install where the sandbox can read: browsentic setup --unpacked --dir ~/snap/chromium/common/browsentic-extension
The folder picker does not show ~/browsentic The folder exists; some pickers open elsewhere by default macOS: press ⇧⌘G and paste the path. Linux: press Ctrl+L. Windows: paste %USERPROFILE%\browsentic\extension\chrome-mv3 into the picker's address bar
Updated, but an unpacked copy still runs the old build A browser never reloads an unpacked extension by itself Press ↻ on the Browsentic card; browsentic status shows both versions. A store copy updates itself
browsentic update says "already current" forever, and reinstalling still lands on an old build npm's npx cache serves the version it first resolved and never asks the registry again Run browsentic update, which now replaces the cached command before installing. To clear the cache by hand, delete every ~/.npm/_npx/* directory containing node_modules/browsentic
Deleted ~/.browsentic, but a daemon is still holding port 8765 The lockfile was deleted, but the process did not notice Run browsentic stop: it probes the ports rather than reading the lockfile, so it finds the process. browsentic uninstall does the same as part of its sweep

Agents

Symptom Cause Fix
AGENT_MISSING The chosen CLI is not on the Bridge's PATH Run browsentic agent to see every agent, and set agents.<name>.bin to an absolute path in config.json
AGENT_NEEDS_PERMISSION Antigravity has no rule allowing Browsentic's page tools Press the button in the popup, or run browsentic agent fix antigravity
AGENT_NEEDS_PERMISSION for Grok Build Grok Build is not signed in Run grok login, or set XAI_API_KEY
"does not understand the flags Browsentic uses" The agent CLI is too old Update the CLI
The model select says built-in list, with a reason Browsentic could not read that CLI's own model list, usually because the CLI is signed out Sign the CLI in, then press Recheck. browsentic agent models <name> --refresh shows the full reason
Mistral Vibe fails with has no API key Vibe was never set up, or its key lives only in a shell the Bridge was not started from Run vibe --setup, which stores the key in ~/.vibe/.env
Antigravity answers but never touches the page Its permission rule was removed Run browsentic agent, which reports needs setup again, then restore the rule with browsentic agent fix antigravity
Antigravity: a follow-up turn searches the web, or ends with no answer, instead of reading the page An older Browsentic gave each turn its own folder, and Antigravity re-reads the first turn's, so later turns carried a run id that had ended Update Browsentic, then start a new conversation; one begun before the update stays broken
Codex fails with "not logged in" The Bridge inherits no session Run codex login, then retry
Codex answers about the page without opening it, or from a web search Codex defers an MCP server's tools until the model searches for them, so web search is the tool it can see; an older Browsentic also failed to switch that search off Update Browsentic. A run now tells Codex where its browser tools are and switches web search off
Codex sees only part of a long page Codex cuts a tool result over 25,000 tokens; an older Browsentic left its 10,000 default in place Update Browsentic, then read less at a time: a smaller maxPerKind, or page_extractText one group at a time
Codex in the side panel ignores an MCP server from your config.toml By design: its MCP servers would start beside the browser with no approval gate, so each is switched off for the run Nothing to fix; a run uses only the browser tools
Codex ignores a profile or custom model provider, and replies arrive whole It is running through codex exec, either because "transport": "exec" is set or because its app-server was refused (the daemon log says so), and exec leaves config.toml out Update Codex, then run browsentic restart. The model and model_reasoning_effort at the top of config.toml still apply
Claude Code or Codex stops with could not start Browsentic's browser tools The run's browser tools did not start, often because a Bridge is still running from files an update replaced Run browsentic restart, then send the message again
A follow-up on Claude Code or Codex ignores a pick, an attached skill or new site notes Both keep the prompt a conversation began with, and an older Browsentic changed only that prompt Update Browsentic. Each message now carries what changed
Mistral Vibe: every action on a follow-up turn fails with RUN_INACTIVE Vibe re-reads a resumed session from the folder it began in, and an older Browsentic wrote each turn to a folder of its own Update Browsentic, then start a new conversation; one begun before the update keeps its first folder
Grok Build sits silent for minutes, then fails with xAI did not answer The Grok account is rate-limited, as a free one is, and Grok retries quietly before giving up Wait, or upgrade the account
Cursor CLI fails with Authentication required The Bridge inherits no session Run cursor-agent login, or set CURSOR_API_KEY
Cursor CLI answers without ever touching the page, or searches and greps until Agent Looping Detected The run's MCP server was never approved, so Cursor gave the model no browser tools; an older Browsentic did not approve it Update Browsentic. Each turn now approves its own server with cursor-agent mcp enable browsentic
Cursor CLI fails with could not be set up for this turn cursor-agent mcp enable browsentic failed in the run's folder Run cursor-agent update. The error includes what Cursor printed
Cursor CLI asks for the same approval again after a minute Cursor abandons a tool call at 60 s, so an unanswered approval is handed back and the agent calls again under the same card Nothing to fix: answer the card when you are ready
Cursor CLI reaches an MCP server you did not expect A project .cursor/mcp.json does not replace your global one, so every server you gave Cursor loads too, as does every plugin's Update Browsentic and report it. Browsentic denies each server by name for the run, and all plugin servers as one; if one still answers, the run is stopped (AGENT_UNSAFE)
Cursor CLI is less fenced off on Windows Cursor's kernel sandbox has no Windows backend Nothing to fix: the deny rules still apply. Treat a Windows run as host-class
Windows: AGENT_UNUSABLE, a batch file Browsentic cannot see through The agent's command is a batch file that is not an npm or pnpm shim, and Browsentic never runs one through cmd.exe Set agents.<name>.bin to the .exe it runs
Windows: This turn is too long for Windows to start Codex's exec fallback, Qwen Code and Grok Build pass the prompt as an argument, and Windows caps a command line at 32,767 characters Start a new conversation, or leave out long site notes, attached files or fetched data. Claude Code is not affected
Windows: Windows protected your PC when opening the installer The installer is not code-signed yet, and SmartScreen checks every file a browser downloaded Press More info → Run anyway, or install with irm https://browsentic.com/install.ps1 | iex, which leaves no download mark
Windows: browsentic is not recognized, though the app put it on the PATH The terminal was already open and keeps the PATH it started with Open a new terminal
Windows: the app says another browsentic is on your PATH An npm install --global browsentic comes first on the PATH and would run an older copy than the app's Run npm rm -g browsentic
AGENT_UNSAFE: Grok Build offered this run … Grok offered tools Browsentic never asks for, so the run was stopped before the model saw them Update Grok Build and Browsentic, and report it if it persists
Qwen Code fails with No auth type is selected Qwen has no provider configured, and its OAuth free tier ended on 2026-04-15 Run qwen and use /auth, or export OPENAI_API_KEY with OPENAI_BASE_URL
Qwen Code cannot see an API key you exported Only QWEN_*, DASHSCOPE_*, BAILIAN_* and OPENAI_* reach a run; the rest are sealed away Point Qwen at one of those four providers
AGENT_UNSAFE: Qwen Code registered … / loaded the MCP server … Qwen's own startup line named a tool or a server Browsentic denied, so the run was stopped before the model saw it Update Qwen Code and Browsentic, and report it if it persists
OpenCode fails with free models refuse a run whose tools Browsentic has narrowed to the browser OpenCode Zen's free tier serves only requests carrying OpenCode's own built-in tools Run opencode auth login, then pick that provider's model in the popup
OpenCode fails with could not start this turn Usually a model OpenCode does not know Pick a model exactly as opencode models lists it, provider/model
OpenCode cannot see an API key you exported Only OPENCODE_* reaches a run; the rest are sealed away Run opencode auth login, which keeps the key in OpenCode's own file
AGENT_UNSAFE: OpenCode ran its own … tool A tool outside the browser ran despite the run's rules, so the run was stopped Update OpenCode and Browsentic, and report it

Pages and tabs

Symptom Cause Fix
TAB_UNREACHABLE on a normal site The extension needs reloading Turn Browsentic off and on at chrome://extensions (press ↻ on an unpacked copy). Ordinary sites otherwise recover by themselves
TAB_UNREACHABLE on chrome://, the Web Store, the new-tab page Those pages cannot host a content script Go to an http(s) page with page_navigate, which still works on these pages
TARGET_NOT_FOUND for something clearly on screen The page changed since the snapshot, or the element is inside a captcha widget's shadow root Take a new snapshot with page_getPageInfo. For a captcha, use page_solveCaptcha
A captcha keeps setting new image challenges The vendor distrusts the browser, however well each round is answered; this is common with automated or headless browsers Solve one round yourself in the page; a person's answer usually clears the distrust. See Captchas
DEBUGGER_UNAVAILABLE DevTools is open on that tab Close DevTools, or use page_clickElement instead of page_trustedClick
RUN_IN_PROGRESS A tab runs one instruction at a time Cancel the running one, or use another tab
TAB_IN_USE That tab belongs to another Browsentic conversation Switch to that conversation from the Sessions strip
A tool set to run on every visit never runs Chrome keeps user scripts off until you allow them for the extension Open chrome://extensions → Browsentic → Details and turn on Allow User Scripts. See Running one on every visit
A tool set to run on every visit ran but changed nothing It ran before the site had drawn what it changes, or the site changed its markup Check the page's console for a Browsentic: line, which appears if it threw. Run the tool with / to check it still works; if it does not, make a new one with the Live tool switch

MCP clients

These apply only when another tool drives Browsentic through its optional MCP endpoint.

Symptom Cause Fix
Tools missing from a session The server was registered mid-session Restart the client session: MCP servers load when it starts
A tool call is refused as needing approval External callers cannot answer a prompt, so confirm becomes deny Do it from the side panel, or set guardrails.unattended: "allow" (read this first)
page_extractText with format: "html" is denied raw-html-read is denied by default Use the default text format, or allow it with {"guardrails":{"rules":{"raw-html-read":"allow"}}}
page_readNetwork with includeBodies is denied network-body-read is denied by default Read status, timing and includeHeaders instead, or allow it with {"guardrails":{"rules":{"network-body-read":"allow"}}}
page_readConsole comes back empty Nothing was attached when the error happened Call page_startDiagnostics first, then reproduce the error. Pass reload: true to catch load-time errors
DEBUGGER_UNAVAILABLE on page_startDiagnostics DevTools is open on that tab, and Chrome allows one debugger per tab Close DevTools and retry
tools: the extension's own list The extension and Browsentic Bridge are different versions, so their tool lists differ Nothing to fix while one of them waits for an update: the tools come from the extension, which runs them. From a clone, run yarn build && yarn daemon:restart, then reload the extension

Behaviour that looks wrong but is not

Symptom Why
An action ran but nothing appears in logs It matched the local intent grammar and never reached the Bridge; such actions carry a ⚡ on the timeline. yarn check:intent "<what you said>" explains any single routing decision
page_awaitMonitor returns settled: false The poll window ended while the watch continues. Call again; the monitor is still running in the browser
A theme change vanished Themes do not survive a reload or a navigation. Reapply it
A site map was written but nothing changed Maps are staged for review. Open Skills in the panel and press Activate
The panel switched conversations on its own The panel follows the tab in front, and each tab has its own conversation
A recording's typed values came back as `` That is the default. Tick Save what I type to keep literal values

Useful commands

browsentic status      # daemon, extension and agent state
browsentic agent       # which agents are installed, and which one runs the side panel
browsentic sessions    # which browsers are paired
browsentic revoke      # unpair everything, or one origin
browsentic skills      # every skill in scope, and where it came from
browsentic approvals   # the "always on this site" grants
browsentic tools       # the tool manifest, no browser needed
browsentic logs        # run starts, routed skills, every tool call
browsentic token       # the control token, for MCP clients
browsentic restart     # swap the running daemon for a fresh one
browsentic stop

Full descriptions are in reference/cli.md.


Still stuck

  • Report a bug on the About page (in the extension's settings page, or the About tab of the Mac or Windows app) opens GitHub's issue form with your versions filled in
  • Limits: it may be a known limit rather than a bug
  • reference/errors.md: every error code, and what it means for your next step
  • internals/: how each component works