What's New
- Untrusted-content safeguard against prompt injection. Tools that read page content back to the AI assistant —
browser_get_source,browser_get_text,browser_get_attribute,browser_get_storage, and the DevTools console/JS-error/report tools — now clearly mark that content as untrusted data, not instructions. This hardens the assistant against malicious or compromised pages that try to hijack it by embedding fake instructions in HTML, console output, or storage values. See the new "Security" section in the README for details. - Network BiDi availability reporting.
browser_openand the DevTools tools now report whether network-level BiDi capture (used for detecting failed/slow resources) is actually active, so you can tell when that data is trustworthy versus simply unavailable. - Configurable command timeout. WebDriver commands now default to a 60-second timeout, so a stalled geckodriver command (for example, reading the page title) can no longer hang a tool call indefinitely. Adjustable via the
WEBDRIVER_COMMAND_TIMEOUTenvironment variable.
Fixed
- Browser sessions can no longer be pointed at your real, logged-in Firefox profile through a per-call request — profile selection stays a server-launch-only setting, closing off a path a malicious page could otherwise have used to silently gain access to your live profile.
- Fixed Debian 13 packaging: added the missing
Breaks:alongsideReplaces:so upgrades from the old package name install cleanly, and corrected per-package debhelper filenames. - Added missing
python3-pydanticandpython3-typing-inspectiondependencies to the Debian package, fixing aModuleNotFoundErrorsome users hit at startup. - Removed an unused computed-style lookup in
browser_find_elements.
Other Changes
- The Debian package name dropped its
python3-prefix, since this is an application rather than a library. - Expanded test coverage and documentation for the untrusted-content handling and the Firefox-profile security decision.
Note for integrators: browser_get_storage's return shape changed from a flat {key: value} dict to {"warning": ..., "entries": {key: value}}. If you parse its output directly, read values from the nested entries key.