/ CHANGELOG.md
CHANGELOG.md
  1  # agent-browser
  2  
  3  ## 0.26.0
  4  
  5  <!-- release:start -->
  6  ### New Features
  7  
  8  - **`doctor` command** - Added `agent-browser doctor` for one-shot diagnosis of an install. Checks environment, Chrome, running daemons, config files, security, providers, and network connectivity; auto-cleans stale daemon sidecar files on every run; and performs a live headless launch test. Supports `--offline` to skip network probes, `--quick` to skip the launch test, `--fix` for opt-in repairs (install missing Chrome, close version-mismatched daemons, prune expired state files), and `--json` for structured output (#1254)
  9  - **Stable tab ids and labels** - Tabs now have stable string ids like `t1`, `t2`, `t3` that don't shift when other tabs close or popups appear. Tabs can be created with a memorable label via `tab new --label <name> [<url>]`, and labels are interchangeable with `t<N>` ids everywhere a tab ref is accepted (`tab <id|label>`, `tab close <id|label>`). Bare-integer input is rejected with a teaching error so agents can't mistake stable handles for positional indices (#892, #1249, #1250)
 10  - **`core` skill** - Renamed the built-in `agent-browser` skill to `core` and replaced its ~40-line discovery stub with a ~420-line usage guide covering the core snapshot-ref-act loop, reading, interacting, waiting, common workflows, troubleshooting, and global flags. `agent-browser skills get core` now returns content agents can use directly; `--full` adds references and templates. Added a `hidden:` frontmatter flag so the original `agent-browser` stub stays reachable for `npx skills add` discovery without polluting `skills list` (#1253)
 11  - **JSON Schema for config files** - Added `agent-browser.schema.json` describing every config option with types and descriptions, enabling IDE autocomplete and validation when referenced via `$schema` in `agent-browser.json` or `~/.agent-browser/config.json`. The schema is served from the docs site at `https://agent-browser.dev/schema.json` (#1242, #1248)
 12  
 13  ### Bug Fixes
 14  
 15  - Fixed **`--state` / `AGENT_BROWSER_STATE`** not actually loading saved browser state (cookies and localStorage) at launch. The flag had been fully plumbed through parsing, env propagation, and validation since the native Rust rewrite, but the load step was never wired up. Storage state now loads after launch across all four paths: explicit launch, auto-connect, provider, and local Chrome (#1241)
 16  
 17  ### Documentation
 18  
 19  - `--help` output now shows the **skills** section first so agents discover `skills get core` (the canonical usage guide) before the core command list (#1251)
 20  
 21  ### Contributors
 22  
 23  - @ctate
 24  - @DJRHails
 25  - @michael-farah
 26  - @tomdale
 27  <!-- release:end -->
 28  
 29  ## 0.25.5
 30  
 31  ### Bug Fixes
 32  
 33  - Fixed **`--auto-connect` CDP discovery** preferring HTTP endpoint discovery over the DevToolsActivePort websocket path, which could fail on some setups. The CLI now reads the websocket path from DevToolsActivePort first and only falls back to HTTP discovery (#1218)
 34  - Fixed **recording context viewport** not inheriting the active viewport dimensions, causing recordings to use default resolution instead of the configured viewport (#1208)
 35  - Fixed **`get box` and `get styles`** printing no data in text mode (#1231, #1233)
 36  - Fixed **active page changing** when closing or removing earlier tabs. The previously focused page is now preserved correctly (#1220)
 37  
 38  ### Contributors
 39  
 40  - @ctate
 41  - @jin-2-kakaoent
 42  - @officialasishkumar
 43  
 44  ## 0.25.4
 45  
 46  ### New Features
 47  
 48  - **`skills` command** - Added `agent-browser skills` command for discovering and installing agent skills, with built-in evaluation support for testing skills against live browser sessions (#1225, #1227)
 49  
 50  ### Bug Fixes
 51  
 52  - Fixed **custom viewport dimensions** not being used in streaming frame metadata and image resolution (#1033)
 53  - Fixed **`--ignore-https-errors`** not being re-applied to recording contexts, causing TLS errors during screen recordings (#1178)
 54  - Fixed **duplicate option numbering** in the auth skill documentation (#1161)
 55  
 56  ### Documentation
 57  
 58  - The docs site header now **dynamically fetches** the GitHub star count (#1202)
 59  
 60  ### Contributors
 61  
 62  - @ctate
 63  - @jin-2-kakaoent
 64  - @juniper929
 65  - @Marshall-Sun
 66  
 67  ## 0.25.3
 68  
 69  ### Bug Fixes
 70  
 71  - Fixed **hidden radio/checkbox inputs missing from snapshot refs** when a `<label>` wraps a `display:none` `<input type="radio">` or `<input type="checkbox">`. Chrome excludes these inputs from the accessibility tree entirely, making it impossible for AI agents to identify radio buttons and checkboxes via refs. Hidden inputs inside elements are now detected during cursor-interactive scanning and their parent nodes are promoted to the correct role with proper name and checked state (#1085)
 72  
 73  ### Documentation
 74  
 75  - Added **clickable heading anchors** to the docs site, making it easy to link directly to any section (#1175)
 76  
 77  ### Contributors
 78  
 79  - @ctate
 80  - @jin-2-kakaoent
 81  - @hyunjinee
 82  
 83  ## 0.25.2
 84  
 85  ### Bug Fixes
 86  
 87  - Fixed **Chrome being killed after ~10s idle on Linux** caused by `PR_SET_PDEATHSIG` tracking the blocking thread that spawned Chrome rather than the daemon process. When Tokio reaped the idle thread, the kernel sent SIGKILL to Chrome even though the daemon was still alive. Orphan cleanup is handled by the existing process-group kill in `ChromeProcess::kill()` (#1157, #1173)
 88  
 89  ### Contributors
 90  
 91  - @ctate
 92  
 93  ## 0.25.1
 94  
 95  ### Improvements
 96  
 97  - **Embedded dashboard** - The observability dashboard is now bundled directly into the CLI binary using `rust-embed`, eliminating the need for `dashboard install`. The dashboard is available immediately after installing agent-browser (#1169)
 98  
 99  ### Contributors
100  
101  - @ctate
102  
103  ## 0.25.0
104  
105  ### New Features
106  
107  - **AI chat command** - Added `chat` command for AI-powered browser automation. Supports single-shot mode (`chat "open google.com"`) and an interactive REPL. The AI agent can execute any agent-browser command via tool calls. Requires `AI_GATEWAY_API_KEY`. Configure the model with `--model` or `AI_GATEWAY_MODEL` (#1160, #1163)
108  - **Dashboard AI chat** - The observability dashboard now includes a built-in AI chat interface for conversational browser control alongside live session views (#1160, #1163)
109  - **`snapshot --urls`** - New `-u`/`--urls` flag to include href URLs for link elements in snapshot output, giving agents direct access to link targets without additional queries (#1160)
110  - **Batch argument mode** - The `batch` command now accepts commands as inline arguments in addition to reading from stdin, simplifying single-invocation multi-command workflows (#1160)
111  
112  ### Bug Fixes
113  
114  - Fixed **`getByRole`** matching wrong elements (e.g. `<link>` stylesheet elements instead of `<a>` anchors) by rewriting the implementation to use the CDP accessibility tree with ref-based element resolution instead of CSS selectors (#1145)
115  - Fixed **`upload` command** not supporting accessibility tree refs (`@eN`) for file upload element selection (#1156)
116  - Fixed **`AGENT_BROWSER_DEFAULT_TIMEOUT`** not being applied to `wait` commands. The environment variable now propagates to all wait variants (`wait`, `wait --url`, `wait --text`, `wait --load`, `wait --fn`, `wait --download`) (#1153)
117  - Fixed **dashboard download** error handling with improved retry logic for more reliable dashboard installation (#1154)
118  
119  ### Tests
120  
121  - Fixed CI test failures on Windows and E2E (#1165)
122  
123  ### Contributors
124  
125  - @ctate
126  - @jin-2-kakaoent
127  - @hyunjinee
128  
129  ## 0.24.1
130  
131  ### New Features
132  
133  - **Chrome profile login state reuse** - `--profile <name>` now resolves Chrome profile names (e.g. `Default`, `Profile 1`) and copies the profile to a temp directory to reuse login state, cookies, and extensions without modifying the original. Added `profiles` command to list available Chrome profiles with `--json` support (#1131)
134  
135  ### Bug Fixes
136  
137  - Fixed **`--ignore-https-errors`** not passing `--ignore-certificate-errors` as a Chrome launch flag, causing TLS errors like `ERR_SSL_PROTOCOL_ERROR` to be rejected at the network layer before CDP could intervene (#1132)
138  - Fixed **orphaned Chrome processes** on daemon exit by spawning Chrome in its own process group and killing the entire group on shutdown. On Linux, `PR_SET_PDEATHSIG` ensures Chrome is killed even if the daemon is OOM-killed (#1137)
139  - Fixed **CDP attach hang on Chrome 144+** when connecting to real browser sessions. Targets paused waiting for the debugger after attach are now resumed with `Runtime.runIfWaitingForDebugger` (#1133)
140  - Fixed **stale daemon after upgrade** silently reusing the old daemon process with broken CDP behavior. The daemon now writes a `.version` sidecar file and auto-restarts on version mismatch (#1134)
141  - Fixed **stale daemon/socket recovery** where `close --all` failed to clean up zombie daemons and stale files. Unreachable daemons are now force-killed and orphaned socket/pid files are removed (#1136)
142  - Fixed **idle timeout** not being respected because the sleep future was recreated on every select loop iteration, preventing the deadline from being reached (#1110)
143  - Fixed **browser not relaunching** when launch options change (e.g. adding extensions to `config.json`) between consecutive launch commands (#996)
144  - Fixed **`auto_launch()`** not honouring `AGENT_BROWSER_PROVIDER` for cloud providers, causing non-launch commands to fall back to local Chrome instead of connecting via the provider API (#1126)
145  - Fixed **HAR capture missing API requests** under heavy traffic by increasing the CDP broadcast buffer from 256 to 4096 events, reducing the drain interval from 500ms to 100ms, and enabling network tracking in cross-origin iframes (#1135)
146  
147  ### Tests
148  
149  - Fixed **`e2e_relaunch_on_options_change`** launching headed Chrome on CI where no display is available. The test now stays headless and only changes extensions to trigger the relaunch (#996)
150  - Fixed **`e2e_auth_login`** flake by reducing the SPA render delay from 1200ms to 800ms, giving more headroom within the selector wait window on slower CI runners
151  
152  ### Contributors
153  
154  - @ctate
155  - @desenmeng
156  - @jin-2-kakaoent
157  - @snese
158  
159  ## 0.24.0
160  
161  ### New Features
162  
163  - **AWS Bedrock AgentCore provider** - Added AWS Bedrock AgentCore as a cloud browser provider. Connect with `--provider agentcore` or `AGENT_BROWSER_PROVIDER=agentcore`. Uses lightweight manual SigV4 signing for authentication with support for the full AWS credential provider chain (environment variables, AWS CLI, SSO, IAM roles). Configure with `AGENTCORE_REGION`, `AGENTCORE_PROFILE_ID`, and `AGENTCORE_BROWSER_ID` environment variables. Returns session ID and Live View URL in the launch response (#397)
164  
165  ### Documentation
166  
167  - Added AgentCore provider page to docs site, README options table, SKILL.md, and dashboard provider icons (#1120)
168  
169  ### Contributors
170  
171  - @ctate
172  - @pahud
173  
174  ## 0.23.4
175  
176  ### Bug Fixes
177  
178  - Fixed **daemon hang on Linux** caused by a `waitpid(-1)` race condition in the SIGCHLD handler that stole exit statuses from Rust's `Child` handles, leaving the daemon in a broken state. Replaced the global signal handler with targeted crash detection via the existing drain interval (#1098)
179  
180  ## 0.23.3
181  
182  ### Bug Fixes
183  
184  - Fixed **drag and drop** not working because `mouseMoved` events during the drag omitted the `buttons` bitmask, causing the browser to see `event.buttons === 0` and never fire `dragstart`/`dragover`/`drop` (#1087)
185  
186  ## 0.23.2
187  
188  ### Patch Changes
189  
190  - 3c942e2: ### New Features
191  
192    - **Dashboard session creation** - Sessions can now be created directly from the dashboard UI. A new session dialog provides a unified selector grid for local engines (Chrome, Lightpanda) and cloud providers (Browserbase, Browserless, Browser Use, Kernel) with async creation, loading state, and error display (#1092)
193    - **Dashboard provider icons** - The session sidebar now shows the provider or engine icon for each session, making it easy to identify which backend a session is using (#1092)
194  
195    ### Bug Fixes
196  
197    - Fixed **Browser Use** provider using an intermediate API call instead of connecting directly via WSS (`wss://connect.browser-use.com`), which caused connection failures (#1092)
198    - Fixed **Browserbase** provider not sending an explicit JSON body and `Content-Type` header, causing session creation to fail (#1092)
199    - Fixed **provider navigation** hanging because `wait_for_lifecycle` waited for page load events that remote providers may not emit. Navigation with `--provider` now automatically sets `waitUntil=none` (#1092)
200    - Fixed **remote CDP connections** timing out by increasing the CDP connect timeout from 10s to 25s for cloud providers (#1092)
201    - Fixed **zombie daemon processes** not being cleaned up when a provider connection fails during session creation from the dashboard (#1092)
202  
203  ## 0.23.1
204  
205  ### Patch Changes
206  
207  - fbcab37: ### New Features
208  
209    - **Auto-dismissal for alert and beforeunload dialogs** - JavaScript `alert()` and `beforeunload` dialogs are now automatically accepted to prevent the agent from blocking indefinitely. `confirm` and `prompt` dialogs still require explicit `dialog accept/dismiss` commands. Disable with `--no-auto-dialog` flag or `AGENT_BROWSER_NO_AUTO_DIALOG` environment variable (#1075)
210    - **Puppeteer browser cache fallback** - Chrome discovery now searches `~/.cache/puppeteer/chrome/` (or `PUPPETEER_CACHE_DIR`) for Chrome binaries, so users with an existing Puppeteer installation can use agent-browser without a separate install step (#1088)
211    - **Console output improvements** - `console.log` of objects now shows the actual object preview (e.g. `{userId: "abc", count: 42}`) instead of `"Object"`. JSON output includes a raw `args` array for programmatic access (#1040)
212  
213    ### Bug Fixes
214  
215    - Fixed **same-document navigation** (e.g. SPA hash routing) hanging forever because `wait_for_lifecycle` waited for a `Page.loadEventFired` that never fires on same-document navigations (#1059)
216    - Fixed **save_state** only capturing cookies and localStorage for the current origin, silently dropping cross-domain data (e.g. SSO/CAS auth cookies). Now uses `Network.getAllCookies` and collects localStorage from all visited origins (#1064)
217    - Fixed **externally opened tabs** not appearing in `tab list` when using `--cdp` mode. Tabs opened by the user or another CDP client are now detected and tracked (#1042)
218    - Fixed **dashboard server** not picking up installed files without a restart. `dashboard install` now takes effect immediately on a running server (#1066)
219    - Fixed **Windows Chrome extraction** failing because zip path normalization used forward slashes while the extraction code expected backslashes (#1088)
220  
221  ## 0.23.0
222  
223  ### Minor Changes
224  
225  - 0f0f300: ### New Features
226  
227    - **Observability dashboard** - Added a local web UI (`dashboard`) that shows live browser viewports, command activity feeds, console output, network requests, storage, and extensions for all sessions. Manage it with `dashboard start`, `dashboard stop`, and `dashboard install`. The dashboard runs as a standalone background process and all sessions stream to it automatically (#1034)
228    - **Runtime stream management** - Added `stream enable`, `stream disable`, and `stream status` commands to control WebSocket streaming at runtime. Streaming is now always enabled by default; `AGENT_BROWSER_STREAM_PORT` overrides the port instead of toggling the feature (#951)
229    - **Close all sessions** - Added `close --all` flag to close every active browser session at once
230  
231    ### Bug Fixes
232  
233    - Fixed **Lightpanda engine** compatibility (#1050)
234    - Fixed **Windows daemon TCP bind** failing when Hyper-V reserves the port by falling back to an OS-assigned port and writing it to a `.port` file (#1041)
235    - Fixed **Windows dashboard relay** using Unix socket instead of TCP (#1038)
236    - Fixed **radio/checkbox elements** being dropped from compact snapshot tree because the `ref=` check required a leading `[` that those elements lack (#1008)
237  
238  ## 0.22.3
239  
240  ### Patch Changes
241  
242  - eb64ca4: ### Bug Fixes
243  
244    - **Re-apply download behavior on recording context** - Fixed an issue where downloads were silently dropped in recording contexts because `Browser.setDownloadBehavior` set at launch only applied to the default context. The download behavior is now re-applied when a new recording context is created (#1019)
245    - **Reap zombie Chrome process and fast-detect crash for auto-restart** - Added a non-blocking process-exit check before attempting CDP connection checks. This prevents a 3-second CDP timeout when Chrome has already crashed or exited, enabling faster detection and auto-restart of the browser (#1023)
246    - **Route keyboard `type` through text input** - Fixed keyboard `type` subaction to correctly route through the text input handler, and added support for an `insertText` subaction using `Input.insertText` (#1014)
247    - **Handle `--clear` flag in `console` command** - Fixed the `console` command to accept and process a `clear` parameter, allowing console event history to be cleared (#1015)
248  
249  ## 0.22.2
250  
251  ### Patch Changes
252  
253  - a098197: ### New Features
254  
255    - **Dialog status command** - Added `dialog status` command to check whether a JavaScript dialog is currently open (#999)
256    - **Dialog warning field** - Command responses now include a `warning` field when a JavaScript dialog is pending, indicating the dialog type and message (#999)
257  
258    ### Improvements
259  
260    - **Standard proxy environment variables** - The proxy setting now automatically falls back to standard environment variables (`HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, and their lowercase variants), with `NO_PROXY`/`no_proxy` respected for bypass rules (#1000)
261    - **Font packages for `--with-deps`** - Installing with `--with-deps` now includes CJK and emoji font packages on Linux (Debian, RPM, and yum-based distros) to prevent missing glyphs when rendering international content (#1002)
262  
263    ### Bug Fixes
264  
265    - Fixed `state show` always failing with "Missing 'path' parameter" due to a mismatched JSON field name (`filename` → `path`) (#994)
266    - Fixed `console` command returning only `Done` due to a JSON field name mismatch in the response (#986)
267    - Fixed browser-domain CDP events being dropped during downloads due to a `sessionId` mismatch (#998)
268    - Fixed proxy authentication by handling credentials via the CDP `Fetch.authRequired` event rather than passing them inline (#1000)
269  
270  ## 0.22.1
271  
272  ### Patch Changes
273  
274  - 3a3317b: ### Bug Fixes
275  
276    - Fixed **modifier key chords** (e.g. `Control+a`, `Shift+Enter`, `Control+Shift+a`) not being handled correctly when using `press`. Modifier keys (`Alt`, `Control`/`Ctrl`, `Meta`/`Cmd`, `Shift`) are now parsed and forwarded as CDP modifier bitmasks rather than treated as part of the key name (#980)
277    - Fixed **query parameters being dropped** from `--cdp` HTTP URLs (e.g. `http://host:9222?mode=Hello`). Query strings are now preserved and forwarded to the remote CDP endpoint (#982)
278  
279  ## 0.22.0
280  
281  ### Minor Changes
282  
283  - be30bc9: ### New Features
284  
285    - **Cross-origin iframe support** - Added support for snapshots and interactions within cross-origin iframes via `Target.setAutoAttach` (#949)
286    - **Network request detail and filtering** - Added `network request <requestId>` command to view full request/response detail, and new filtering options for `network requests` including `--type` (e.g. `xhr,fetch`), `--method` (e.g. `POST`), and `--status` (e.g. `2xx`, `400-499`) (#935)
287  
288    ### Improvements
289  
290    - **Snapshot usability** - Reduced AI cognitive load by filtering semantic noise from snapshot output; cursor-interactive elements are now included by default, making the `-C` flag unnecessary (#968)
291    - **Upgrade command** - Improved robustness of installation method detection in the upgrade command (#960)
292    - **Target tracking** - Enhanced target tracking and page information handling for more reliable browser session management (#969)
293  
294    ### Bug Fixes
295  
296    - Fixed **viewport dimensions** being reported incorrectly in streaming status messages and screencast (#952)
297    - Fixed **`find` command** flags such as `--exact` and `--name` leaking into fill values when used with fill actions (#955)
298    - Fixed **state commands** incorrectly starting the daemon when no `session_name` is provided (#677, #964)
299    - Fixed **auto-connect** triggering when the daemon is already running, preventing duplicate connections (#971)
300    - Fixed **Enter key press** not working by adding a text field to `keyDown` events (#972)
301    - Fixed **download command** to properly handle absolute paths and correctly click target elements (#970)
302  
303    ### Breaking Changes
304  
305    - The `-C` / `--cursor` flag for `snapshot` is deprecated; cursor-interactive elements are now included by default and the flag has no additional effect (#968)
306  
307    ### Documentation
308  
309    - Updated `README.md` with new `network requests` filtering options and `network request <requestId>` command usage
310    - Removed references to the deprecated `-C` / `--cursor` snapshot flag from docs and command reference
311  
312  ## 0.21.4
313  
314  ### Patch Changes
315  
316  - aed466b: ### Bug Fixes
317  
318    - **Auth login readiness** - `agent-browser auth login` now navigates with `load`, waits for usable login form selectors, and uses staged username detection (targeted email/username selectors first, then broad text-input fallback). This reduces SPA timing failures, avoids false matches on unrelated text fields, and prevents `networkidle` hangs on pages with continuous background requests.
319  
320  ## 0.21.3
321  
322  ### Patch Changes
323  
324  - 6daad22: ### Bug Fixes
325  
326    - **WebSocket keepalive for remote browsers** - Added WebSocket Ping frames and TCP `SO_KEEPALIVE` to prevent CDP connections from being silently dropped by intermediate proxies (reverse proxies, load balancers, service meshes) during idle periods (#936)
327    - **XPath selector support** - Fixed element resolution to correctly handle the `xpath=` selector prefix (#908)
328  
329    ### Performance
330  
331    - **Fast-path for identical snapshots** - Short-circuits the Myers diff algorithm when comparing a snapshot to itself, avoiding unnecessary computation in retry and loop workloads where repeated identical snapshots are common (#922)
332  
333    ### Documentation
334  
335    - Migrated page metadata from MDX files to `layout.tsx` (#904)
336    - Added search functionality and color improvements to docs (#927)
337    - Fixed desktop browser list in the iOS comparison table (#926)
338    - Created a new `providers/` section with dedicated provider pages (#928)
339  
340  ## 0.21.2
341  
342  ### Patch Changes
343  
344  - 757626f: ### Bug Fixes
345  
346    - **Deduplicate text content in snapshots** - Fixed an issue where duplicate text content appeared in page snapshots (#909)
347    - **Native mouse drag state** - Fixed incorrect raw native mouse drag state not being properly tracked across `down`, `move`, and `up` events (#872)
348    - **Chrome headless launch failures** - Fixed browser launch failures caused by the `--enable-unsafe-swiftshader` flag in Chrome headless mode (#915)
349    - **Origin-scoped `--headers` persistence** - Restored correct persistence of origin-scoped headers set via `--headers` across navigation commands (#894)
350    - **Relative URLs in WebSocket domain filter** - Fixed handling of relative URLs in the WebSocket domain filter script (#624)
351  
352  ## 0.21.1
353  
354  ### Patch Changes
355  
356  - 1e7619d: ### New Features
357  
358    - **HAR 1.2 network capture** - Added commands to capture and export network traffic in HAR 1.2 format, including accurate request/response timing, headers, body sizes, and resource types sourced from Chrome DevTools Protocol events (#864)
359    - **Built-in `upgrade` command** - Added `agent-browser upgrade` to self-update the CLI; automatically detects your installation method (npm, Homebrew, or Cargo) and runs the appropriate update command (#898)
360  
361    ### Documentation
362  
363    - Added `upgrade` command to the README command reference and installation guide
364    - Added a dedicated **Updating** section to the README with usage instructions for `agent-browser upgrade`
365  
366  ## 0.21.0
367  
368  ### Minor Changes
369  
370  - c6de80b: ### New Features
371  
372    - **`batch` command** -- Execute multiple commands from stdin in a single invocation. Accepts a JSON array of string arrays and returns results sequentially. Supports `--bail` to stop on first error and `--json` for structured output (#865)
373    - **iframe support** -- CLI interactions and snapshots now traverse into iframe content, enabling automation of cross-frame pages (#869)
374    - **`network har start/stop` command** -- Capture and export network traffic in HAR 1.2 format (#874)
375    - **WebSocket fallback for CDP discovery** -- When HTTP-based CDP endpoint discovery fails, the CLI now falls back to a WebSocket connection automatically (#873)
376  
377    ### Improvements
378  
379    - **`--full`/`-f` refactored to command-level flag** -- Moved from a global flag to a per-command flag for clearer scoping (#877)
380    - **Enhanced Chrome launch** -- Added `--user-data-dir` support and configurable launch timeout for more reliable browser startup (#852)
381  
382    ### Bug Fixes
383  
384    - Fixed `/json/list` fallback when `/json/version` endpoint is unavailable, improving compatibility with non-standard CDP implementations (#861)
385    - Fixed daemon liveness detection for PID namespace isolation (e.g. `unshare`). Uses socket connectivity as the sole liveness check instead of `kill(pid, 0)`, which fails when the caller cannot see the daemon's PID (#879)
386    - Fixed Ubuntu dependency install accidentally removing system packages (#884)
387  
388  ## 0.20.14
389  
390  ### Patch Changes
391  
392  - c0d4cf6: ### New Features
393  
394    - **Idle timeout for daemon auto-shutdown** - Added `--idle-timeout` CLI flag (and `AGENT_BROWSER_IDLE_TIMEOUT_MS` environment variable) to automatically shut down the daemon after a period of inactivity. Accepts human-friendly formats such as `10s`, `3m`, `1h`, or raw milliseconds (#856)
395    - **Cursor-interactive elements in snapshot tree** - Cursor-interactive elements are now embedded directly into the snapshot tree for richer context (#855)
396  
397    ### Bug Fixes
398  
399    - Fixed **remote host support** in CDP discovery, enabling connection to browsers running on non-local hosts (#854)
400    - Fixed **CDP flag propagation** to the daemon process, ensuring reliable CDP reconnection across sessions (#857)
401    - Fixed **Windows auto-connect profiling** to correctly handle browser connection on Windows (#835, #840)
402    - Fixed **Windows transient error detection** by recognising Windows-specific socket error codes (`os error 10061` connection refused, `os error 10054` connection reset) during daemon reconnection attempts
403  
404  ## 0.20.13
405  
406  ### Patch Changes
407  
408  - eda956b: ### Bug Fixes
409  
410    - **Network idle detection for cached pages** - Fixed an issue where `poll_network_idle` could return immediately when no network events were observed (e.g. pages served from cache). The idle timer is now only satisfied after a consistent **500 ms idle period** has elapsed, preventing false-positive idle detection. The core polling logic has also been extracted into a standalone `poll_network_idle` function to improve testability (#847)
411  
412  ## 0.20.12
413  
414  ### Patch Changes
415  
416  - 5fa2396: ### Bug Fixes
417  
418    - Fixed **`snapshot -C`** and **`screenshot --annotate`** hanging when connected over WSS (WebSocket Secure) due to sequential CDP round-trips per interactive element (#842)
419  
420    ### Performance
421  
422    - **`snapshot -C` (cursor-interactive mode)** now batches CDP calls instead of issuing N×2 sequential round-trips per cursor-interactive element, preventing timeouts on high-latency WSS connections (#842)
423    - **`screenshot --annotate`** now batches element queries, reducing completion time from potentially 20–40s (e.g. 50+ buttons over WSS) to within expected bounds (#842)
424  
425  ## 0.20.11
426  
427  ### Patch Changes
428  
429  - 4b5fc78: ### Bug Fixes
430  
431    - **Material Design checkbox/radio parity** - Restored Playwright-parity behavior for `check`/`uncheck` actions on Material Design controls. These components hide the native `<input>` off-screen and use overlay elements that intercept coordinate-based clicks; the actions now detect this pattern and fall back to a JS `.click()` to correctly toggle state. Also improves `ischecked` to handle nested hidden inputs and ARIA-only checkboxes (#837)
432    - **Punctuation handling in `type` command** - Fixed incorrect virtual key (VK) codes being used for punctuation characters (e.g. `.`, `@`) in the `type` action, which previously caused those characters to be dropped or mistyped (#836)
433  
434  ## 0.20.10
435  
436  ### Patch Changes
437  
438  - a3d9662: ### Bug Fixes
439  
440    - **Restored WebSocket streaming** - Fixed broken WebSocket streaming in the native daemon by keeping the **StreamServer** instance alive so the broadcast channel remains open, and ensuring CDP session IDs and connection status are correctly propagated to stream clients (#826)
441    - **Filtered internal Chrome targets** - Fixed auto-connect discovery incorrectly attempting to attach to Chrome-internal pages (e.g. `chrome://`, `chrome-extension://`, `devtools://` URLs), which could cause unexpected connection failures (#827)
442  
443  ## 0.20.9
444  
445  ### Patch Changes
446  
447  - 51d9ab4: ### Bug Fixes
448  
449    - **Appium v3 iOS capabilities** - Added `appium:` vendor prefix to iOS capabilities (e.g., `appium:automationName`, `appium:deviceName`, `appium:platformVersion`) to comply with the Appium v3 WebDriver protocol requirements (#810)
450    - **Snapshot `--selector` scoping** - Fixed `snapshot --selector` so that the output is properly scoped to the matched element's subtree rather than returning the full accessibility tree. The selector now resolves the target DOM node's backend IDs and filters the accessibility tree to only include nodes within that subtree (#825)
451  
452  ## 0.20.8
453  
454  ### Patch Changes
455  
456  - daf7263: ### Bug Fixes
457  
458    - Fixed **video duration** being reported incorrectly when using real-time ffmpeg encoding for screen recording (#812)
459    - Removed obsolete **`BrowserManager` TypeScript API** references that no longer reflect the current CLI-based usage model (#821)
460  
461    ### Documentation
462  
463    - Updated README to replace outdated **`BrowserManager` programmatic API** examples with the current CLI-based approach using `execSync` and `agent-browser` commands (#821)
464    - Removed the **Programmatic API** section covering `BrowserManager` screencast and input injection methods, which are no longer part of the public API (#821)
465  
466  ## 0.20.7
467  
468  ### Patch Changes
469  
470  - 25a1526: ### New Features
471  
472    - **Brave Browser support** - Added auto-discovery of Brave Browser for CDP connections on macOS, Linux, and Windows. The agent will now automatically detect and connect to Brave alongside Chrome, Chromium, and Canary installations (#817)
473  
474    ### Improvements
475  
476    - **Postinstall message** - The post-install message now detects existing Chrome installations on the system. If a compatible browser is found, it confirms the path and notes it will be used automatically instead of prompting an install. If no browser is detected, the warning is clearer and mentions that installation can be skipped when using `--cdp`, `--provider`, `--engine`, or `--executable-path` (#815)
477  
478  ## 0.20.6
479  
480  ### Patch Changes
481  
482  - fa91c22: ### Bug Fixes
483  
484    - **Stale accessibility tree reference fallback** - Fixed an issue where interacting with an element whose **`backend_node_id`** had become stale (e.g. after the DOM was replaced) would fail with a `Could not compute box model` CDP error. Element resolution now re-queries the accessibility tree using role/name lookup to obtain a fresh node ID before retrying the operation (#806)
485  
486  ## 0.20.5
487  
488  ### Patch Changes
489  
490  - fc091d2: ### Bug Fixes
491  
492    - **Daemon panic on broken stderr pipe** - Replaced all `eprintln!` calls with `writeln!(std::io::stderr(), ...)` wrapped in `let _ =` to silently discard write errors, preventing the daemon from panicking when the parent process drops the stderr pipe during Chrome launch (#802)
493  
494  ## 0.20.4
495  
496  ### Patch Changes
497  
498  - e2ebde2: ### Bug Fixes
499  
500    - **Broadcast channel lag handling** - Fixed an issue where **broadcast channel lag** errors were incorrectly treated as stream closure, causing premature termination of event listeners in reload, response body, download, and navigation wait operations. Lagged messages are now skipped and the loop continues instead of breaking (#797)
501  
502    ### Improvements
503  
504    - Removed unused **pnpm setup** steps from the `global-install` CI job, simplifying the workflow configuration (#798)
505  
506  ## 0.20.3
507  
508  ### Patch Changes
509  
510  - e365909: ### Bug Fixes
511  
512    - **Chrome launch retry** - Chrome will now retry launching up to 3 times with a 500ms delay between attempts, improving resilience against transient startup failures (#791)
513    - **Remote CDP snapshot hang** - Resolved an issue where snapshots would hang indefinitely over remote CDP (WSS) connections by removing WebSocket message and frame size limits to accommodate large responses (e.g. `Accessibility.getFullAXTree`), accepting binary frames from remote proxies such as Browserless, and immediately clearing pending commands when the connection closes rather than waiting for the 30-second timeout (#792)
514  
515  ## 0.20.2
516  
517  ### Patch Changes
518  
519  - 944fa01: ### New Features
520  
521    - **Linux musl (Alpine) builds** - Added pre-built binaries for **linux-musl** targeting both **x64** and **arm64** architectures, enabling native support for Alpine Linux and other musl-based distributions without requiring glibc (#784)
522  
523    ### Improvements
524  
525    - **Consecutive `--auto-connect` commands** - Added support for issuing multiple consecutive `--auto-connect` commands without requiring a full browser relaunch; external connections are now correctly identified and reused (#786)
526    - **External browser disconnect behavior** - When using `--auto-connect` or `--cdp`, closing the agent session now disconnects cleanly without shutting down the user's browser process
527  
528    ### Bug Fixes
529  
530    - **Restored `refs` dict in `--json` snapshot output** - The `refs` map containing role and name metadata for referenced elements is now correctly included in JSON snapshot responses (#787)
531    - Fixed e2e test assertions for `diff_snapshot` and `domain_filter` to correctly reflect expected behavior (#783)
532    - Fixed Chrome temp-dir cleanup test failing on Windows (#766)
533  
534  ## 0.20.1
535  
536  ### Patch Changes
537  
538  - bd05917: ### Bug Fixes
539  
540    - Fixed **AX tree deserialization** to accept integer `nodeId` and `childIds` values for compatibility with Lightpanda, which sends numeric IDs where Chrome sends strings (#775)
541    - Fixed **misleading SIGPIPE comment** to accurately describe the default Rust SIGPIPE behavior and why it is reset to `SIG_DFL` (#776)
542    - Fixed **WebM recording output** to use the VP9 codec (`libvpx-vp9`) instead of H.264, producing valid WebM files; also adds a padding filter to ensure even frame dimensions (#779)
543  
544  ## 0.20.0
545  
546  ### Minor Changes
547  
548  - 235fa88: ### Full Native Rust
549  
550    - **100% native Rust** -- Removed the entire Node.js/Playwright daemon. The Rust native daemon is now the only implementation. No Node.js runtime or Playwright dependency required. (#754)
551    - **99x smaller install** -- Install size reduced from 710 MB to 7 MB by eliminating the Node.js dependency tree.
552    - **18x less memory** -- Daemon memory usage reduced from 143 MB to 8 MB.
553    - **1.6x faster cold start** -- Cold start time reduced from 1002ms to 617ms.
554    - **Benchmarks** -- Added benchmark suite comparing native vs Node.js daemon performance.
555    - **Chromium installer hardened** -- Fixed zip path traversal vulnerability in Chrome for Testing installer.
556  
557    ### Bug Fixes
558  
559    - Fixed `--headed false` flag not being respected in CLI (#757)
560    - Fixed "not found" error pattern in `to_ai_friendly_error` incorrectly catching non-element errors (#759)
561    - Fixed storage local key lookup parsing and text output (#761)
562    - Fixed Lightpanda engine launch with release binaries (#760)
563    - Hardened Lightpanda startup timeouts (#762)
564  
565  ## 0.19.0
566  
567  ### Minor Changes
568  
569  - 56bb92b: ### New Features
570  
571    - **Browserless.io provider** -- Added browserless.io as a browser provider, supported in both Node.js and native daemon paths. Connect to remote Browserless instances with `--provider browserless` or `AGENT_BROWSER_PROVIDER=browserless`. Configurable via `BROWSERLESS_API_KEY`, `BROWSERLESS_API_URL`, and `BROWSERLESS_BROWSER_TYPE` environment variables. (#502, #746)
572    - **`clipboard` command** -- Read from and write to the browser clipboard. Supports `read`, `write <text>`, `copy` (simulates Ctrl+C), and `paste` (simulates Ctrl+V) operations. (#749)
573    - **Screenshot output configuration** -- New global flags `--screenshot-dir`, `--screenshot-quality`, `--screenshot-format` and corresponding `AGENT_BROWSER_SCREENSHOT_DIR`, `AGENT_BROWSER_SCREENSHOT_QUALITY`, `AGENT_BROWSER_SCREENSHOT_FORMAT` environment variables for persistent screenshot settings. (#749)
574  
575    ### Bug Fixes
576  
577    - Fixed `wait --text` not working in native daemon path (#749)
578    - Fixed `BrowserManager.navigate()` and package entry point (#748)
579    - Fixed extensions not being loaded from `config.json` (#750)
580    - Fixed scroll on page load (#747)
581    - Fixed HTML retrieval by using `browser.getLocator()` for selector operations (#745)
582  
583  ## 0.18.0
584  
585  ### Minor Changes
586  
587  - 942b8cd: ### New Features
588  
589    - **`inspect` command** - Opens Chrome DevTools for the active page by launching a local proxy server that forwards the DevTools frontend to the browser's CDP WebSocket. Commands continue to work while DevTools is open. Implemented in both Node.js and native paths. (#736)
590    - **`get cdp-url` subcommand** - Retrieve the Chrome DevTools Protocol WebSocket URL for the active page, useful for external debugging tools. (#736)
591    - **Native screenshot annotate** - The `--annotate` flag for screenshots now works in the native Rust daemon, bringing parity with the Node.js path. (#706)
592  
593    ### Improvements
594  
595    - **KERNEL_API_KEY now optional** - External credential injection no longer requires `KERNEL_API_KEY` to be set, making it easier to use Kernel with pre-configured environments. (#687)
596    - **Browserbase simplified** - Removed the `BROWSERBASE_PROJECT_ID` requirement, reducing setup friction for Browserbase users. (#625)
597  
598    ### Bug Fixes
599  
600    - Fixed Browserbase API using incorrect endpoint to release sessions (#707)
601    - Fixed CDP connect paths using hardcoded 10s timeout instead of `getDefaultTimeout()` (#704)
602    - Fixed lone Unicode surrogates causing errors by sanitizing with `toWellFormed()` (#720)
603    - Fixed CDP connection failure on IPv6-first systems (#717)
604    - Fixed recordings not inheriting the current viewport settings (#718)
605  
606  ## 0.17.1
607  
608  ### Patch Changes
609  
610  - 94cd888: Added support for device scale factor (retina display) in the viewport command via an optional scale parameter. Also added webview target type support for better Electron application compatibility, and the pages list now includes target type information.
611  
612  ## 0.17.0
613  
614  ### Minor Changes
615  
616  - 94521e7: ### New Features
617  
618    - **Lightpanda browser engine support** - Added `--engine <name>` flag to select the browser engine (`chrome` by default, or `lightpanda`), implying `--native` mode. Configurable via `AGENT_BROWSER_ENGINE` environment variable (#646)
619    - **Dialog dismiss command** - Added support for `dismiss` subcommand in dialog command parsing (#605)
620  
621    ### Improvements
622  
623    - **Daemon startup error reporting** - Daemon startup errors are now surfaced directly instead of showing an opaque timeout message (#614)
624    - **CDP port discovery** - Replaced broken hand-rolled HTTP client with `reqwest` for more reliable CDP port discovery (#619)
625    - **Chrome extensions** - Extensions now load correctly by forcing headed mode when extensions are present (#652)
626    - **Google Translate bar suppression** - Suppressed the Google Translate bar in native headless mode to avoid interference (#649)
627    - **Auth cookie persistence** - Auth cookies are now persisted on browser close in native mode (#650)
628  
629    ### Bug Fixes
630  
631    - Fixed native auth login failing due to incompatible encryption format (#648)
632  
633    ### Documentation
634  
635    - Improved snapshot usage guidance and added reproducibility check (#630)
636    - Added `--engine` flag to the README options table
637  
638    ### Performance
639  
640    - Added benchmarks to the CLI codebase (#637)
641  
642  ## 0.16.3
643  
644  ### Patch Changes
645  
646  - 7d2c895: Fixed an issue where the --native flag was being passed to child processes even when not explicitly specified on the command line. The flag is now only forwarded when the user explicitly provides it, consistent with how other CLI flags like --allow-file-access and --download-path are handled.
647  
648  ## 0.16.2
649  
650  ### Patch Changes
651  
652  - 01ac557: Added AGENT_BROWSER_HEADED environment variable support for running the browser in headed mode, and improved temporary profile cleanup when launching Chrome directly. Also includes documentation clarification that browser extensions work in both headed and headless modes.
653  
654  ## 0.16.1
655  
656  ### Patch Changes
657  
658  - c4180c8: Improved Chrome launch reliability by automatically detecting containerized environments (Docker, Podman, Kubernetes) and enabling --no-sandbox when needed. Added support for discovering Playwright-installed Chromium browsers and enhanced error messages with helpful diagnostics when Chrome fails to launch.
659  
660  ## 0.16.0
661  
662  ### Minor Changes
663  
664  - 05018b3: Added experimental native Rust daemon (`--native` flag, `AGENT_BROWSER_NATIVE=1` env, or `"native": true` in config). The native daemon communicates with Chrome directly via CDP, eliminating Node.js and Playwright dependencies. Supports 150+ commands with full parity to the default Node.js daemon. Includes WebDriver backend for Safari/iOS, CDP protocol codegen, request tracking, frame context management, and comprehensive e2e and parity tests.
665  
666  ## 0.15.3
667  
668  ### Patch Changes
669  
670  - 62241b5: Fixed Windows compatibility issues including proper handling of extended-length path prefixes from canonicalize(), prevention of MSYS/Git Bash path translation that could mangle arguments, and improved daemon startup reliability. Also added ARM64 Windows support in postinstall shims and expanded CI testing with a full daemon lifecycle test on Windows.
671  
672  ## 0.15.2
673  
674  ### Patch Changes
675  
676  - 6aea316: Documentation site improvements and internal tooling updates including enhanced code blocks, mobile navigation, and docs chat components. CLI connection and output handling refinements. Skill creator reference documentation and scripts have been reorganized.
677  
678  ## 0.15.1
679  
680  ### Patch Changes
681  
682  - 7bd8ce9: Added support for chrome:// and chrome-extension:// URLs in navigation and recording commands. These special browser URLs are now preserved as-is instead of having https:// incorrectly prepended.
683  
684  ## 0.15.0
685  
686  ### Minor Changes
687  
688  - 2e38882: - Added security hardening: authentication vault, content boundary markers, domain allowlist, action policy, action confirmation, and output length limits.
689    - Added `--download-path` flag (and `AGENT_BROWSER_DOWNLOAD_PATH` env / `downloadPath` config key) to set a default download directory.
690    - Added `--selector` flag to `scroll` command for scrolling within specific container elements.
691  
692  ## 0.14.0
693  
694  ### Minor Changes
695  
696  - b7665e5: - Added `keyboard` command for raw keyboard input -- type with real keystrokes, insert text, and press shortcuts at the currently focused element without needing a selector.
697    - Added `--color-scheme` flag and `AGENT_BROWSER_COLOR_SCHEME` env var for persistent dark/light mode preference across browser sessions.
698    - Fixed IPC EAGAIN errors (os error 35/11) by adding backpressure-aware socket writes, command serialization, and lowering the default Playwright timeout to 25s (configurable via `AGENT_BROWSER_DEFAULT_TIMEOUT`).
699    - Fixed remote debugging (CDP) reconnection.
700    - Fixed state load failing when no browser is running.
701    - Fixed `--annotate` flag warning appearing when not explicitly passed via CLI.
702  
703  ## 0.13.0
704  
705  ### Minor Changes
706  
707  - ebd8717: Added new diff commands for comparing snapshots, screenshots, and URLs between page states. You can now run visual pixel diffs against baseline images, compare accessibility tree snapshots with customizable depth and selectors, and diff two URLs side-by-side with optional screenshot comparison.
708  
709  ## 0.12.0
710  
711  ### Minor Changes
712  
713  - 69ffad0: Add annotated screenshots with the new --annotate flag, which overlays numbered labels on interactive elements and prints a legend mapping each label to its element ref. This enables multimodal AI models to reason about visual layout while using the same @eN refs for subsequent interactions. The flag can also be set via the AGENT_BROWSER_ANNOTATE environment variable.
714  
715  ## 0.11.1
716  
717  ### Patch Changes
718  
719  - c6fc7df: Added documentation for command chaining with && across README, CLI help output, docs, and skill files, explaining how to efficiently chain multiple agent-browser commands in a single shell invocation since the browser persists via a background daemon.
720  
721  ## 0.11.0
722  
723  ### Minor Changes
724  
725  - 5dc40b4: Added configuration file support with automatic loading from user and project directories, new profiler commands for Chrome DevTools profiling, computed styles getter, browser extension loading, storage state management, and iOS device emulation. Expanded click command with new-tab option, improved find command with additional actions and filtering options, and enhanced CDP connection to accept WebSocket URLs. Documentation has been significantly expanded with new sections for configuration, profiling, and proxy support.
726  
727  ## 0.10.0
728  
729  ### Minor Changes
730  
731  - 1112a16: Added session persistence with automatic save/restore of cookies and localStorage across browser restarts using --session-name flag, with optional AES-256-GCM encryption for saved state data. New state management commands allow listing, showing, renaming, clearing, and cleaning up old session files. Also added --new-tab option for click commands to open links in new tabs.
732  
733  ## 0.9.4
734  
735  ### Patch Changes
736  
737  - 323b6cd: Fix all Clippy lint warnings in the Rust CLI: remove redundant import, use `.first()` instead of `.get(0)`, use `.copied()` instead of `.map(|s| *s)`, use `.contains()` instead of `.iter().any()`, use `then_some` instead of lazy `then`, and simplify redundant match guards.
738  
739  ## 0.9.3
740  
741  ### Patch Changes
742  
743  - d03e238: Added support for custom executable path in CLI browser launch options. Documentation site received UI improvements including a new chat component with sheet-based interface and updated dependencies.
744  
745  ## 0.9.2
746  
747  ### Patch Changes
748  
749  - 76d23db: Documentation site migrated to MDX for improved content authoring, added AI-powered docs chat feature, and updated README with Homebrew installation instructions for macOS users.
750  
751  ## 0.9.1
752  
753  ### Patch Changes
754  
755  - ae34945: Added --allow-file-access flag to enable opening and interacting with local file:// URLs (PDFs, HTML files) by passing Chromium flags that allow JavaScript access to local files. Added -C/--cursor flag for snapshots to include cursor-interactive elements like divs with onclick handlers or cursor:pointer styles, which is useful for modern web apps using custom clickable elements.
756  
757  ## 0.9.0
758  
759  ### Minor Changes
760  
761  - 9d021bd: Add iOS Simulator and real device support for mobile Safari testing via Appium. New CLI commands include `device list` to show available simulators, `tap` and `swipe` for touch interactions, and the `--device` flag to specify which iOS device to use. Configure with `-p ios` provider flag or `AGENT_BROWSER_PROVIDER=ios` environment variable.
762  
763  ## 0.8.10
764  
765  ### Patch Changes
766  
767  - 17dba8f: Add --stdin flag for eval command to read JavaScript from stdin, enabling heredoc usage for multiline scripts
768  - daeede4: Add --stdin flag for the eval command to read JavaScript from stdin, enabling heredoc usage for multiline scripts. Also fix binary permission issues on macOS/Linux when postinstall scripts don't run (e.g., with bun).
769  
770  ## 0.8.9
771  
772  ### Patch Changes
773  
774  - 0dc36f2: Add --stdin flag for eval command to read JavaScript from stdin, enabling heredoc usage for multiline scripts
775  
776  ## 0.8.8
777  
778  ### Patch Changes
779  
780  - 2771588: Added base64 encoding support for the eval command with -b/--base64 flag to avoid shell escaping issues when executing JavaScript. Updated documentation with AI agent setup instructions and reorganized the docs structure by consolidating agent mode content into the installation page.
781  
782  ## 0.8.7
783  
784  ### Patch Changes
785  
786  - d24f753: Fixed browser launch options not being passed correctly when using persistent profiles, ensuring args, userAgent, proxy, and ignoreHTTPSErrors settings now work properly. Added pre-flight checks for socket path length limits and directory write permissions to provide clearer error messages when daemon startup fails. Improved error handling to properly exit with failure status when browser launch fails.
787  
788  ## 0.8.6
789  
790  ### Patch Changes
791  
792  - d75350a: Improved daemon connection reliability by adding automatic retry logic for transient errors like connection resets, broken pipes, and temporary resource unavailability. The CLI now cleans up stale socket and PID files before starting a new daemon, and includes better detection of daemon responsiveness to handle race conditions during shutdown.
793  
794  ## 0.8.5
795  
796  ### Patch Changes
797  
798  - cb2f8c3: Fixed version synchronization to automatically update Cargo.lock alongside Cargo.toml during releases, and made the CLI binary executable. This ensures the Rust CLI version stays in sync with the npm package version.
799  
800  ## 0.8.4
801  
802  ### Patch Changes
803  
804  - 759302e: Fixed "Daemon not found" error when running through AI agents (e.g., Claude Code) by resolving symlinks in the executable path. Previously, npm global bin symlinks weren't being resolved correctly, causing intermittent daemon discovery failures.
805  
806  ## 0.8.3
807  
808  ### Patch Changes
809  
810  - 4116a8a: Replaced shell-based CLI wrappers with a cross-platform Node.js wrapper to enable npx support on Windows. Added postinstall logic to patch npm's bin entry on global installs, allowing the native binary to be invoked directly with zero overhead. Added CI tests to verify global installation works correctly across all platforms.
811  
812  ## 0.8.2
813  
814  ### Patch Changes
815  
816  - 7e6336f: Fixed the Windows CMD wrapper to use the native binary directly instead of routing through Node.js, improving startup performance and reliability. Added retry logic to the CI install command to handle transient failures during browser installation.
817  
818  ## 0.8.1
819  
820  ### Patch Changes
821  
822  - 8eec634: Improved release workflow to validate binary file sizes and ensure binaries are executable after npm install. Updated documentation site with a new mobile navigation system and added v0.8.0 changelog entries. Reformatted CHANGELOG.md for better readability.
823  
824  ## v0.8.0
825  
826  ### New Features
827  
828  - **Kernel cloud browser provider** - Connect to Kernel (https://kernel.sh) for remote browser infrastructure via `-p kernel` flag or `AGENT_BROWSER_PROVIDER=kernel`. Supports stealth mode, persistent profiles, and automatic profile find-or-create.
829  - **Ignore HTTPS certificate errors** - New `--ignore-https-errors` flag for working with self-signed certificates and development environments
830  - **Enhanced cookie management** - Extended `cookies set` command with `--url`, `--domain`, `--path`, `--httpOnly`, `--secure`, `--sameSite`, and `--expires` flags for setting cookies before page load
831  
832  ### Bug Fixes
833  
834  - Fixed tab list command not recognizing new pages opened via clicks or `target="_blank"` links (#275)
835  - Fixed `check` command hanging indefinitely (#272)
836  - Fixed `set device` not applying deviceScaleFactor - HiDPI screenshots now work correctly (#270)
837  - Fixed state load and profile persistence not working in v0.7.6 (#268)
838  - Screenshots now save to temp directory when no path is provided (#247)
839  
840  ### Security
841  
842  - Daemon and stream server now reject cross-origin connections (#274)
843  
844  ## 0.7.6
845  
846  ### Patch Changes
847  
848  - a4d0c26: Allow null values for the screenshot selector field. Previously, passing a null selector would fail validation, but now it is properly handled as an optional value.
849  
850  ## 0.7.5
851  
852  ### Patch Changes
853  
854  - 8c2a6ec: Fix GitHub release workflow to handle existing releases. If a release already exists, binaries are uploaded to it instead of failing.
855  
856  ## 0.7.4
857  
858  ### Patch Changes
859  
860  - 957b5e5: Fix binary permissions on install. npm doesn't preserve execute bits, so postinstall now ensures the native binary is executable.
861  
862  ## 0.7.3
863  
864  ### Patch Changes
865  
866  - 161d8f5: Fix native binary distribution in npm package. Native binaries for all platforms (Linux x64/arm64, macOS x64/arm64, Windows x64) are now correctly included when publishing.
867  
868  ## 0.7.2
869  
870  ### Patch Changes
871  
872  - 6afede2: Fix native binary distribution in npm package
873  
874    Native binaries for all platforms (Linux x64/arm64, macOS x64/arm64, Windows x64) are now included in the npm package. Previously, the release workflow published to npm before building binaries, causing "No binary found" errors on installation.
875  
876  ## 0.7.1
877  
878  ### Patch Changes
879  
880  - Fix native binary distribution in npm package. Native binaries for all platforms (Linux x64/arm64, macOS x64/arm64, Windows x64) are now included in the npm package. Previously, the release workflow published to npm before building binaries, causing "No binary found" errors on installation.
881  
882  ## 0.7.0
883  
884  ### Minor Changes
885  
886  - 316e649: ## New Features
887  
888    - **Cloud browser providers** - Connect to Browserbase or Browser Use for remote browser infrastructure via `-p` flag or `AGENT_BROWSER_PROVIDER` env var
889    - **Persistent browser profiles** - Store cookies, localStorage, and login sessions across browser restarts with `--profile`
890    - **Remote CDP WebSocket URLs** - Connect to remote browser services via WebSocket URL (e.g., `--cdp "wss://..."`)
891    - **Download commands** - New `download` command and `wait --download` for file downloads with ref support
892    - **Browser launch configuration** - New `--args`, `--user-agent`, and `--proxy-bypass` flags for fine-grained browser control
893    - **Enhanced skills** - Hierarchical structure with references and templates for Claude Code
894  
895    ## Bug Fixes
896  
897    - Screenshot command now supports refs and has improved error messages
898    - WebSocket URLs work in `connect` command
899    - Fixed socket file location (uses `~/.agent-browser` instead of TMPDIR)
900    - Windows binary path fix (.exe extension)
901    - State load and path-based actions now show correct output messages
902  
903    ## Documentation
904  
905    - Added Claude Code marketplace plugin installation instructions
906    - Updated skill documentation with references and templates
907    - Improved error documentation