Reference
CLI Changelog
What changed in each release, and why β this page is the full version history, grouped by minor version, newest first. chrome-use's own feature work lives in the v1.x line; further back is the fork era that predates the rebrand, plus the version numbers merged in periodically from upstream agent-browser.
chrome-use command line) history. The
ab-connect extension that drives real Chrome has its own version numbers
(0.5.x) on a separate page:
Extension Changelog.
v1.5.x
- v1.5.123 (September 10, 2026): v1.5.122's fix for #319 did not work; this is the real one.
statusprints "driving A" above "profile: B" with two different ids. v1.5.122 moved the extension version into a per-profile file but still looked it up with the wrong id, so the same mistake entered somewhere else and the symptom survived β onestatusrun after upgrading showed it unchanged. The actual defect is larger than the original diagnosis: "which profile is driving" had two unrelated implementations. The one deciding which browser is actually bound picks by window focus; the ones that report it β theprofile:line,drivingProfileId,browsers' default column,doctor, and the version resolver β all used the other, "whichever worker connected last". With two profiles connected those disagree. They are now a single resolver, preferring the focus-based answer the endpoint selection actually uses and falling back to the generic sidecar only where the focus answer is deliberately absent (fewer than two profiles, an extension too old to report focus, a tie) β exactly the cases where the generic one is right. Honest limitation: this is not verified. The symptom only appears with two Chrome profiles connected and that environment was not available. What is established is that the two notions are unified in code and the suite passes β the same evidence v1.5.122 offered before turning out to be ineffective. #319 is left open rather than closed. If you have two profiles, runchrome-use statusand check whether thedrivingandprofile:lines name the same id. - v1.5.122 (September 10, 2026): with two Chrome profiles connected,
statusreported the other profile's extension version (#319). It printed "driving 27ade1bc-β¦" next to "extension: live 0.5.21, expected 0.5.26", where the0.5.21belonged to a different profile β telling the reader to update an extension that was already current. The cause was a missing dimension rather than a race: the version sidecar is a single file written by whichever worker senthellolast, while "which profile is driving" is decided separately by focus timestamp. #60 had already given the endpoint per-profile treatment for exactly this reason ("regardless of who last clobbered the generic file"); the version never followed. It now has its own per-profile sidecar, written next to the endpoint onhelloand removed with it on disconnect, and the places that print a version beside a profile read the driving profile's copy. An extension too old to report a profile id still writes only the generic file, so those keep working rather than degrading to "unknown". CLI-side only β no extension update needed. Note: failures where commands break right afteropenin this state have been reported, but their cause is not established and this release does not claim to fix them. - v1.5.121 (September 10, 2026):
keepnow says why a tab was left behind, and can be undone (#290).keepexempts a tab from the shutdown sweep by dropping ownership, which erased the only record we had β afterwards the tab was indistinguishable from one we never touched, sotab listshowed it asforeignand could not answer "why is this still open?". It now takes a reason:keep --as deliverablefor a tab that IS the result (an edited document, a checkout the user must finish),keep --as handofffor one a later turn resumes from (waiting on a login, an approval, a code). Barekeepstill meansdeliverable, so existing callers are unchanged, andtab listmarks them[kept: deliverable]/[kept: handoff].keep --releasetakes a tab back so it closes with the session again β and only works on a tab this session created and then kept, because the recorded keep is the proof it was ours to close; without it the command would claim the right to close a tab it never opened. Releasing does not rejoin the session's tab group: ungrouping is one-way today, and the message says so rather than implying otherwise.keepalso gained the--helpit never had. Separately, the per-KB cost quoted in the insert-timeout hint is now the measured one: it said~0.45-0.53s/KBfrom an early small sample, while 60 KB measured 37s (0.62s/KB) and 90 KB measured 88s (0.98s/KB). The point is not that the constant was low β the per-KB cost rises with size, so a flat range invites extrapolating from it, which is how a "roughly 226 KB" ceiling got published and then corrected. - v1.5.120 (September 10, 2026): the insert-timeout hint no longer recommends the one
thing that corrupts text. It told the caller to "split the text and send it as separate
keyboard inserttextcalls" β the exact pattern #301 was filed for: a call returns when Chrome dispatched the insert, not when the editor committed it, so the next piece races the uncommitted tail and scrambles the text while preserving the total length, which is why a character-count check passes and the damage ships.commands.rsalready said so in the repo; the error message said the opposite. If a split is mentioned at all, the hint now says to compare the field's content between pieces, never just its length. The hint also now says the insert was not cancelled: losing the timeout race cancels nothing β the command was dispatched before the race began, and CDP has no primitive to recall it. A renderer was measured still working roughly 14 minutes after the caller got the error, memory still climbing, so a command sent right after the failure lands on a tab that is still busy. It now says to let the tab go quiet and re-read the field first, because some or all of the text may have landed (#315). The per-character cost quoted is now the measured range,~0.45-0.53s/KB. - v1.5.119 (September 10, 2026): a large insert no longer dies at ~55s while looking like a dead session. Three layers budget the same CDP command β the extension (8s + 2ms/byte, capped at 120s), the daemon (30s + 4ms/byte, capped at 180s), and the client's socket read. v1.5.117/118 scaled the first two by payload but left the read budget flat at 45s, so the outermost layer cut first and the inner, more specific "the payload needed more time" error never reached the caller. That flat 45s plus the 8s
DAEMON_SHUTDOWN_GRACEis exactly the ~55s wall reported from live use (measured 53.6s / 54.0s / 55.6s). The read budget now scales by the same rule, with a test pinning it against the budget the CDP client actually enforces so the two cannot drift. Commands without a payload keep the flat 45s, so a genuinely hung session still fails just as fast. The real ceiling is now the extension's 120s cap. Measured on chatgpt.com it falls between 90 KB and 120 KB (60 KB passed in 37s, 90 KB in 88s, 120 KB hit the cap). Note the per-KB cost rises with size β 0.62s/KB at 60 KB, 0.98s/KB at 90 KB β so extrapolating from one small sample overestimates the ceiling, which is exactly what an earlier draft of this entry did. Separately, the "session unresponsive" message no longer guesses at a cause: it used to assert the page was still finishing a long command, which fit one reproduction and not another (60 seconds versus over an hour), and the mechanism was never observed. It now states only what was observed β the name has been seen to free up on its own, so it is not permanently taken β and gives a move that works immediately: use a different--sessionname, oradoptthe tab into a fresh session. - v1.5.118 (September 10, 2026): ships the half v1.5.117 missed. That release artifact was cut 36 seconds before the fix merged, so it carried only the extension side β producing exactly the failure the fix had predicted: a 150 KB
keyboard inserttext --filewas cut off at 30.170s by the daemon's hard-coded budget while the extension would have allowed 308s. The daemon budget now scales with the payload too (30s + 4ms/byte, capped at 180s), with a cross-side test pinning the invariant that the daemon always outlasts the extension β otherwise the daemon cuts first and the relay's more specific error never reaches the caller. Separately, a payload-sized timeout no longer claims the connection is dead:CDP command timed out: Input.insertTextused to add "the session's browser connection is unresponsive β¦ reconnect withconnect", sending the caller after a stale worker that is not there. The connection is fine;Input.insertTextcosts time per character (~0.45s/KB in a rich editor) and this payload exceeded the budget. It now says this is a size limit, says explicitly not to reconnect, and suggests inserting less at once; every other command keeps the connection diagnosis. - v1.5.117 (September 10, 2026): from the chatgpt-use session's heavy live use of the real ChatGPT composer.
keyboard inserttextgains--file/--stdin: back-to-back chunked inserts scrambled text at every chunk boundary while preserving total length (so a char-count check passed and the scrambled text shipped). The cause is thatInput.insertTextreturns when Chrome dispatched the insert, not when the editor (e.g. ProseMirror) committed it, so the next chunk races the uncommitted tail; sending the whole payload in one insert removes the boundary entirely and the caller no longer needs to chunk (#301).site --helpprints its own help instead of falling through to the 534-line top-level help β an agent runs<cmd> --helpby reflex, sees no site, and reads that as "the command does not exist", falling back to the expensive snapshot+click path (#299).site listfilters_-prefixed loader internals (such as the auto-injected_helper) and*.test.js, leaving only runnable adapters (#302). A purely numericclickargument is no longer sent to the DOM as a selector with the misleading "selector matched nothing"; it now says the argument looks like a coordinate and points atclick x y/--coords x,y. Thepresshelp documents the popover trap:--selectorfocuses through the selector and dismisses an open menu, so a control inside one needs a coordinate click first, then a barepress. - v1.5.116 (September 10, 2026): ab-connect 0.5.25 adds one generic door,
ABExt.call: a CLI feature that only needs an allow-listedchrome.tabs / tabGroups / windows / downloads / webNavigationmethod no longer needs a new extension release; mutating calls are allowed only on tabs the agent created, adopted tabs stay read-only,windows.create/removeare refused, anddebugger / identity / storage / runtime / managementare never reachable this way.ABExt.statereturns everything the extension holds, owns and is configured to in one call. New CLI commandsextension call <ns.method> [json]andextension state; on an older extension they say "requires 0.5.25" instead of Chrome's wasn't found. Manifest permissions are unchanged, so the update installs without re-approval. The docs site gains a ChooseBrowser page (zh/en), and the permissions count in the README and docs is corrected to the actual 12. - v1.5.115 (September 10, 2026): what came out of reading the 26 documents of the browser-use plugin bundled with Codex. The core loop is one round trip per step:
click @e3 --observe+snapshot -i --diff; a newcore/behaviourreference (read thewhy:line before retrying, never drop to coordinates,reloadinstead of re-opening the page you are on, one direct navigation for a lookup, the page's own signal ends verification,keeponly deliverables, an empty tab list is not a disconnect);trust-boundariesgains three tiers of side effects (hand back / confirm at the step / task-level pre-approval).--observereturns the new tree when a click replaced the whole page instead of a diff that is the old page struck through;snapshot --diffwith nothing changed prints(no change since the last snapshot)on stdout;console --level/--filternarrow before--limit, and an empty result says that capture is off. The skill stub's description now leads with "Browser automation in the user's real, logged-in Chrome", and the docs say that on Codex one line inAGENTS.mdis what routes browser work here. Fix: embedded skill content is re-extracted when it changes, not only when the version does. README trimmed to about 290 lines. - v1.5.114 (September 9, 2026): macOS binaries are now Developer ID signed and notarized:
spctlgoes from rejected to accepted, so a browser-downloaded (quarantined) copy runs without a Gatekeeper refusal (#283). Repeated control names carry the text that separates them, so three identical βθΏε ₯β buttons read ascontext="ι£θ‘ζ£"and so on; added only when a name repeats, and dropped when it fails to distinguish (#284).--observeexplains an empty delta (disabled / no box / covered / off-screen / present and fine) and states that an empty delta is not failure (#277).reportstates what it includes and excludes, notes that screenshots are a separate decision, and reads the extension and relay state itself (#278).tabsreports the tab the relay is actually attached to and speaks up when it disagrees with the session's pin (needs ab-connect 0.5.24, #279). Fixes:typewith no target is a usage error rather than βselector matched nothingβ (#282);fillno longer loses the value on a React combobox that resets on focus (#282); policy-installed extensions are no longer pointed at an Update button that does not exist (#284). - v1.5.113 (September 9, 2026): ab-connect 0.5.23 asks Chrome to check the Web Store itself and applies an update while no tab is attached (no new permission, #272); a relay failure now says whether the installed extension is behind the published one β on the failure path only, and only when a newer build is actually installable (#271);
--observecarriestarget(session / tabId / targetId / url, ids only) so a caller can tell whether the page under it changed (#270);frame <index>accepts the numberframesprints, which previously came back as a raw querySelector error (#269). Fixes:domarks actions whose outcome the tree cannot decide (showMenu,toggle, stepping) asΒ·withconfirmed: nullinstead ofβ(#266); a failed explicit rebinding keeps the session on the browser it had rather than leaving it onabout:blank(#268); a blocked debugger access names the pinned tab and its url (#267); the socket-path limit explains where the 103 bytes went instead of blaming a session name the user never chose (#265). - v1.5.112 (September 9, 2026):
open --browser <profile> --rememberasks ChooseBrowser to route that site to that profile from now on β a proposal only, saved after ChooseBrowser's own confirmation; invalid requests are refused before navigating with the reason; needs ChooseBrowser 0.2.1+ (#257).doctorreports which ChooseBrowser rules file is read and how many rules it holds, unreadable versions, a second copy that is not being read, and whether the installed app accepts rule requests (#253, #257).session stop --forcedrops a stale tab-ownership record without closing tabs (#263). Fixes: one upload fires onechange, no more phantom 0% entries on React/Livewire uploaders (#261);read <url>refuses a client-rendered app shell instead of returning an empty page and points toopen+text(#262);session stopafter an upgrade no longer asks for a browser that is gone, andchrome-extension://access errors mention that another session daemon may hold the tab (#263). - v1.5.111 (September 9, 2026): Interactive snapshots retain bounded local context such as prices and omit repeated descriptions on product links. Status receipts appear in action observations while clickable status nodes keep their refs. Launched-browser drag routing uses the current connection (#246). Existing ChooseBrowser rules can select a connected profile when opening sites; explicit
--browserwins and--no-choosebrowseropts out. Unavailable rule targets fall back to normal selection; verify account identity when needed (#247). Release validation precedes platform builds (#249). Contributors: @leeguooooo. - v1.5.110 (September 9, 2026): picks the right Chrome profile automatically. It reads ChooseBrowser's per-site rules and selects the profile that site should use, instead of falling back to whichever profile connected last (#244).
- v1.5.109 (September 9, 2026): Relay recovery no longer repeats actions with unknown outcomes. Observation capture failures preserve action results and report complete, partial, or unavailable evidence instead of fabricating an empty page. Fixes child-frame recovery, replacement tab references, and lifecycle lock release. Protected extension content reports explicit access denial. Navigation detects confirmed debugger access denial early while retaining normal page-load waits. Request summaries are bounded with omission counts;
CHROME_USE_RELAY_DIRisolates relay discovery. Bundled ab-connect 0.5.22 confirms host responses before showing Connected; Chrome Web Store distribution is separate (#242). Contributors: @leeguooooo. - v1.5.108 (September 9, 2026): never reports an unverified result as success. An
unconfirmed tab switch, a browser replacement, or a frame miss could all end in a
ββ and an agent handed a false success keeps going, wrongly. All three now fail honestly. Also corrected: a cross-origin redirect is legitimate navigation and is no longer counted as a failed switch, and serving askillsreference is a success and now reports as one. - v1.5.107 (September 8, 2026): a tab group label a person can read, and documentation
that no longer costs 70 KB up front.
chrome-use session name "π track a parcel"replaces the routing-key session id on the tab group with something legible; renaming affects no routing, the session id remains the identity. Andskills get corewent from 70,691 bytes to 34,393 β the four heaviest sections moved out to references you pull one at a time, andSKILL.md's index is now organised by symptom rather than by topic, because an agent has a symptom, not a category. - v1.5.106 (September 8, 2026): adaptive settling before an observation, so a read is
less likely to catch a page mid-transition. Adds
select-textandpaste --format, and restores@refre-anchoring for controls with no accessible name β re-anchoring matches on role + name, so when the name was empty every control of that role matched equally and it gave up, with wording that read as "the element is gone" (#215 #224 #226 #227 #228 #229 #231). - v1.5.105 (September 8, 2026):
actions/doβ the things an element does besides click.expand/collapse,showMenu,increment/decrement,toggle, all derived from the element's computed accessibility properties. Three deliberate constraints: the set is read live, never carried over from the snapshot that minted the ref; an action outside the set is refused, with the list; and after acting it re-reads the set and says plainly when a control did not move, rather than reporting success (#225). - v1.5.104 (September 8, 2026):
snapshot --diffβ re-read a page for a few bytes. On a 143 KB Hacker News thread: full tree 143,490 bytes;--diffwith the page unchanged, 1 byte; after collapsing one comment, 31,370. With no valid baseline it returns the full tree and says which, because an empty diff and an unchanged page are indistinguishable. Also,tab select/tab adoptno longer report a switch that did not happen: the liveness probe wasevaluate("1"), which any page satisfies β including the wrong one. It now readslocation.hrefand compares scheme + host (#223). - v1.5.103 (September 8, 2026): the
@refs--observeprints are now real. They were minted into a throwaway map, so every[ref=eN]came backUnknown refwhen you tried to use it β the flag cost a round trip and then made you spend another onsnapshotanyway. Separately, the baseline snapshot used a virgin ref map whilebegin_snapshotpreserves refs by backend-node identity; the two numberings disagreed, so diffing reported every node as removed-and-added (a sort that changed one row read as1 added, 29 removed).navigate/reload/back/forwardtake--observetoo, returning a snapshot rather than a delta across a page swap. - v1.5.102 (September 7, 2026): a built-in accessibility audit,
chrome-use a11y(axe-core), plus roughly half the browsing round trips and a controllable observation budget on large pages (#219 #220 #221). Fixes: nested cross-origin iframes can now be attached, drilled into and clicked; navigating to a privilegedchrome://page over the relay is refused instead of killing the tab; and when Chrome is not running it is launched for the right profile directly, rather than waiting 98 seconds on the relay and giving up. Note: this release's--observeprints refs you cannot use β install v1.5.103 instead. - v1.5.101 (2026-09-04) β
uploadsucceeds with a verification warning when a React dropzone consumes files and clears or replaces its input (#208). Nativeselectuses platform setters plus input/change events so controlled forms commit the selection (#209). Idle daemon recycling preserves external Chrome tabs, URLs and in-page state; explicit close/session stop still clean up created tabs (#210). Bundled ab-connect 0.5.20 uses browser-level navigation first and diagnoses rapid same-URL reload loops. App Store Connect still needs a signed-in regression check, and Web Store publication is separate (#211). Added browser and extension regression tests. Contributor: @leeguooooo. - v1.5.100 (2026-09-02) β A batch of interaction-reliability fixes (#202 to #206). DOM-dispatched clicks over the relay now move keyboard focus like a real click, so
clickfollowed bypressno longer lands on the previous field (#204).typereads the field back and prints a β warning withreadBackwhen the page rewrote or dropped the input;fillverification errors quote both values and say when the page filtered non-Latin text (#203).pressprobes for keydown/keyup/keypress listeners for keys whose only effect depends on page JavaScript (arrows on a text field, Escape, Enter on a bare input) and warns when none exist; bare XPath (//β¦) is detected automatically, a missedtext()explains the first-text-node rule, and "Element not found" keeps the selector and the specific diagnosis (#202). An agent that changes directory reuses its live session, and "Unknown ref" names the session and whether it has any refs (#205). When the accessibility tree is empty,snapshotfalls back to a DOM walk through shadow roots;snapshot --domforces it (#206). The bundled ab-connect is now 0.5.19: a tab's debugger is released after 30 s of inactivity so the banner no longer stays up, and the next command re-attaches (#201, pending Web Store publish). Contributor: @leeguooooo. - v1.5.99 (2026-08-31) β
screenshot --annotateno longer clears the current session's ref map; unchanged nodes in the same document retain the@reffrom the preceding snapshot. The original minimal regression now keeps@e82as@e82in the annotated legend, and the subsequent click succeeds; #197 remains open until the installed v1.5.99 release passes the same retest. If a page renderer blocksPage.navigate, the extension relay falls back to browser-level navigation without raising the global 8-second budget. Reconnect drops phantom tabs that no longer exist in Chrome, whiletab inspectprefers a live replacement tabId (fixes #193 and #196). Launched Chrome on macOS disablesMacAppCodeSignCloneso interrupted automation sessions do not leave APFS clones that grow after later Chrome updates (fixes #195). The bundled ab-connect is now 0.5.18. Contributor: @leeguooooo. - v1.5.98 (2026-08-27) β Relay command timeouts now include the number of in-flight commands, the age of the oldest command, and the current MV3 service-worker age, with the latest 20 timeout records retained in the extension. Those fields distinguish a blocked renderer from relay head-of-line blocking and worker-lifecycle failures; the global 8-second budget was deliberately left unchanged (#193). Contributor: @leeguooooo.
- v1.5.97 (2026-08-25) β External and extension-connected Chrome tabs now have explicit
created,adopted, andforeignownership. A session may drive tabs it created or explicitly adopted, but may close only tabs it created; adoption never grants deletion rights. Created target IDs persist per session and browser endpoint, so daemon restarts retain orphan cleanup without mistaking an adopted user tab for a created tab. Deletion authority is removed only afterTarget.closeTargetboth completes and returnssuccess: true. Selecting a pre-existing target now requirestab adopt <targetId>beforetab select. Contributors: @forsakesoul, @leeguooooo. - v1.5.96 (2026-08-25) β Reverts an ownership rule from v1.5.95. That release let a reconnecting daemon reclaim every relay-scoped tab as session-created, and therefore close it on
session stop. The reasoning was wrong: scoping is decided by the relay's owntarget_group, andTarget.attachToTargetβ the calladoptmakes β re-tags a target into the adopter's group, so a user tab this session adopted sits in that same list. Once a restart drops the in-memory ownership set, the two are indistinguishable, so adopting a user tab and then restarting could letsession stopclose the user's page. A reconnecting daemon now reclaims nothing until authorship is recorded durably. Users on v1.5.95 should upgrade. The root-cause half of #192 is unaffected and stays: thesession stopgrace period is 1s β 8s (the relay allows each command 8s, so the daemon was reliably SIGKILLed mid-cleanup), and the cleanup loop now fires concurrently under one 5s budget instead of awaiting each close in turn, where a single wedged tab consumed every other tab's chance. Contributors: @forsakesoul (found it), @leeguooooo. - v1.5.95 (2026-08-24) β Restarting a named session no longer strands its tabs in the user's Chrome, so a long-running collector stops climbing toward 20GB (fixes #192). The cleanup existed; two clocks defeated it.
session stopsent SIGTERM and force-killed after 1s, while everyTarget.closeTargettravels over the relay, whose per-command budget is 8s β so the daemon was reliably killed mid-cleanup (the grace period is now 8s, and since the poll returns the moment the process exits, a healthy stop still finishes in a fraction of a second). The cleanup loop also awaited each close in turn, letting one wedged tab consume every other tab's chance; the closes now fire together under one 5s budget. The third gap was that a restarted daemon no longer recognised the tabs its own previous incarnation had opened, becausecreated_targetslives only in process memory. It now reclaims them through Chrome's tab group: the group title is the session name, and the only ways into that group areTarget.createTargetcarryingagentGroupandABExt.duplicateTab(adoptdeliberately neither groups nor marks ownership), so a grouped tab was necessarily created by a session of this name. Nothing is reclaimed without relay scoping, which keeps the user's own tabs from ever being mistaken for ours.extension statusnow splits its behind-the-Store hint by install route: a policy force-installed extension has no per-extension update control and has its permissions granted by Chrome, so those users are no longer sent after a button their greyed-out row does not have (fixes #190). Contributors: @leeguooooo. - v1.5.94 (2026-08-24) β A uniform-color fallback check for
screenshot: the #184 URL-drift guard only caught the case where the capturing session itself admits the drift β when the nextevalreads back the right URL but the pixels come from somewhere else, the guard stays quiet and the agent still gets a β plus a blank image. When a capture is a single solid color while the page reports real layout height and text length, the command now prints β with an actionable warning instead of a clean β;[selector]/--clippartial captures and--annotate(which skips downscaling and would otherwise decode a full-size page image just for this check) are exempt (fixes #184). The integration docs used to list only Claude Code / Cursor / Codex, reading like an allowlist when the real rule is just "can run shell β install the CLI + skill; can't run shell but can configure an MCP server β point it at the same command + args" β that rule is now spelled out on the MCP page, with CodeBuddy / Trae / Windsurf / Cline added to the list (fixes #172). The ab-connect extension shipped 0.5.17 to the Chrome Web Store, catching this release's bundled version up to the Store, soextension statusno longer misreports a freshly published build (#189). Contributors: @leeguooooo. - v1.5.93 (2026-08-20) β The macOS silent-install policy profile puts Chrome into a "managed by your organization" state, and the cost was never disclosed: Chrome disables and locks Secure DNS (DoH), and the extension is marked "installed by your administrator" with no manual update/remove controls. Added
extension install --no-profile, which never writes the policy profile and installs from the Store instead; the approval prompt now states both costs and the opt-out command up front, andextension status/uninstallexplain the same tradeoff whenever the policy is active (fixes #187). The extension version in this repo routinely runs ahead of what the Web Store has published (0.5.16 bundled against a Store still serving 0.5.12, at one point), which madestatus/doctorcall every Store user OUTDATED and point them at an update that doesn't exist yet; they now ask the Store's updatecheck endpoint on demand and distinguish four cases β genuinely behind, already the newest published build, an intermediate unpacked build ahead of the Store, or Store unreachable (fixes #186). Contributors: @leeguooooo. - v1.5.92 (2026-08-19) β On the extension relay, a page-injected extension frame could make
screenshot's CDP session land on the extension's ownabout:blankrenderer while tabs/eval/get-text kept reporting the real page β the result was a β next to a blank image with nothing for the agent to doubt. The command now compares the tab URL the session is driving against the livelocation.hrefon the capturing session right before shooting; a mismatch is reported as drift with instructions to re-bind the tab, and no file is written (fixes #184). On Windows, Chrome's user data lives underLOCALAPPDATArather than the Roaming AppData pathconfig_dir()returns, soextension statusreported "0 profiles found" even with a relay actively driving one; a behind-bundled extension version also stops printing a bare β that makes the reader diff two version strings themselves and now says OUTDATED explicitly (fixes #183). Contributors: @leeguooooo. - v1.5.91 (2026-08-13) β
testused the literalflags.session == "default"to infer whether the user had explicitly picked a session β wrong both ways:--session defaultis indistinguishable from not passing the flag at all, while an agent-derived session name got treated as explicit.test suite.yaml --session defaulttherefore silently launched a brand-new isolated browser, throwing away the logged-in state of the real Chrome the user had already connected. Fixed by tracking onFlagswhether the session actually came from the user (--session/AGENT_BROWSER_SESSION/ config file);testnow decides between reusing that session and spinning up its owncu-testbased on that flag, and only closes a browser it launched itself.--browser/--as/--as-strictare now forwarded to every step in a suite (fixes #181). Contributors: @leeguooooo. - v1.5.90 (2026-08-12) β
SessionLifecycleLock/RelayRecoveryLockwere no-op stubs on Windows, so two concurrent invocations each spawned their own daemon and raced on the same socket/port files; switched to real cross-platform advisory locking viastd::fs::File::lock(flock on Unix, LockFileEx on Windows), printing a status line before blocking so a lock wait isn't mistaken for a hang (fixes #177). The MCPscreenshottool used to return only a server-local path the client had no way to open β captures are now inlined as an image block (magic-byte MIME sniff, 2MB cap, overridable or disable-able viaCHROME_USE_MCP_MAX_INLINE_IMAGE_BYTES) (fixes #178). DOM-dispatched clicks never produce a mirrorInput.dispatchMouseEvent, so the on-page cursor didn't move and a click looked like nothing happened; the cursor is now driven explicitly at the resolved element'sgetBoundingClientRect(no extra resolve just for the visual), and hidden around a capture so it isn't baked into an image the agent later reads (fixes #179). Two agents sharing one terminal tab shareWT_SESSION/TMUX_PANEand collapsed onto one daemon, fighting over tabs β session names now resolve in tiers (explicit agent id β<PRODUCT>_SESSION_ID-convention scan β per-terminal id), anddoctorreports which environment variable the current session name was derived from (fixes #180). Contributors: @Ishannaik, @leeguooooo. - v1.5.89 (2026-08-10) β
download-urlused to reject theblob:scheme outright β a blob URL belongs to the document that created it, and the extension'schrome.downloadsAPI can't reach it, so a resource already rendered on the page (e.g. a canvas export before re-encoding) was simply unreachable. It now fetches the bytes from inside the page and writes them to disk directly β byte-for-byte, unliketoDataURL, which re-encodes and silently drops metadata such as C2PA provenance manifests; when the top frame can't fetch it, each child frame is retried and the result reports which frame the bytes came from; a 32MB cap applies since the bytes travel base64-encoded in a single CDP message and going over hangs the session rather than just failing the download (fixes #169). The daily version-check upgrade notice used to share stderr with real errors, so a tool wrapping chrome-use that "reports failure with attached stderr" got unrelated housekeeping mixed in β it now only prints where a human can see it (TTY, not--json, andCHROME_USE_NO_UPDATE_NOTICEunset); the background check and opt-in auto-upgrade themselves are unaffected (fixes #170). Contributors: @leeguooooo. - v1.5.88 (2026-08-10) β
fillends by callingel.blur()to trigger a site's blur validation, which drops focus back to<body>; the very nextpress Enterthen dispatches to the document, the form never submits, and the CLI still printedβ Done.fillnow returns focus to the field it just filled (only when blur didn't hand focus somewhere else deliberately, checked by walking down to the true deepest activeElement across shadow roots);pressgained--selector(alias--on) to focus a target first, its result now reports thetargetit landed on, and Enter dispatched to<body>gets a warning (arrow keys/Tab/Backspace landing there is normal and stays silent);press <chord> --holdused to drop its modifiers, actually holding a bare key while reporting the chord back unchanged β fixed (fixes #167). Contributors: @leeguooooo. - v1.5.87 (2026-08-05) β Fixed
@refsilently activating a different element. A timed-out, failed, or absent identity probe used to count as "confirmed", and the extension relay's multi-hop transport blew the 1s budget routinely β soclick @e273opened an unrelated message menu and printedDone. The probe budget is now transport-aware (2s direct CDP, 5s over the relay, tunable withAGENT_BROWSER_VERIFY_REF_TIMEOUT_MS), and a ref that cannot be confirmed is re-anchored on the snapshot's exact role + name (keeping the cached node when it still matches), then by fingerprint, and refused if neither lands β there is no "act on the cached node anyway" branch left. Fingerprint relocation gained an accessible-name floor: role, ancestors, and sibling position are worth 0.60 on their own, so two sibling<button>s cleared the 0.70 threshold on shape alone and relocatedbutton "ζη agent"onto a message overflow button. Candidates whose label bears no resemblance are now excluded, while a recognisable rename (Submit β Submit now) still self-heals. Reusing a@refacross snapshots additionally requires the role + name to be unchanged, so a node React handed to another component gets a fresh ref (fixes #162). The skill stub droppedhidden: true: pi and other harnesses read it as "never load this skill", which made chrome-use invisible to the agents it exists for β the CLI now hides stubs by directory, and the stub description has a regression test for pi's 1024-character limit (fixes #165, #164). Contributors: @leeguooooo, @beilo. - v1.5.86 (2026-07-31) β Fixed older ab-connect builds making a failed
tab selectliveness probe look like proof that the renderer was unresponsive. The warning now reports the live and bundled extension versions and states that probe failure alone is not a renderer diagnosis. On old extensions,tab inspectnow replaces the raw-32601CDP error with its 0.5.16 minimum, the current and bundled versions, and actionable update or reload steps atchrome://extensions(fixes #157). Contributors: @leeguooooo. - v1.5.85 (2026-07-31) β
record startnow records the current session-owned tab in extension-connected real Chrome instead of calling the forbiddenTarget.createBrowserContext(fixes #151).snapshot -iadds non-default cursor, id, data-testid, compact class, and fallback-name anchors; the same DOM node now keeps its@refacross consecutive snapshots and modal churn, with hard resets only on navigation or tab changes (fixes #154 and #155). A barefind "natural-language description"returns ranked semantic/context candidates with selectors and scores and never acts automatically (fixes #156). ab-connect 0.5.16 reattaches white-screen or frozen tabs through the browser-level target registry without waiting for an unresponsive renderer to identify itself; newtab select, in-session no-navigationtab adopt, and page-JavaScript-freetab inspectoperations distinguish renderer timeouts from a genuinely missing tab (fixes #157). Contributors: @leeguooooo. - v1.5.84 (2026-07-29) β Fixed sessions becoming permanently unusable with
No such file or directory (os error 2)when the daemon process remained alive after its Unix socket disappeared. Cross-process locks now serialize relay teardown and daemon startup for each session, while global native-host recovery runs in only one process. The next browser command allows a concurrent startup window, reclaims the unreachable worker, and starts a clean daemon for the same session. If the socket disappears during an in-flight command, the error names the exact endpoint, stops the orphan, removes stale sidecars, and asks the caller to rerun (fixes #152). Contributors: @leeguooooo. - v1.5.83 (2026-07-28) β Fixed concurrent Codex tasks sharing the bare
defaultdaemon and overwriting one active tab: unset sessions now recognizeCODEX_THREAD_IDand derive a distinct tab group per task. If a relay session's pinned tab disappears, chrome-use now preserves that target as a recovery tombstone and fails or reattaches to the same target instead of silently switching to a survivingabout:blankscratch tab; mixed concurrentevalandsnapshotflows therefore keep SPA in-memory login state intact (fixes #149). Contributors: @leeguooooo. - v1.5.82 (2026-07-28) β Completed the v1.5.81 review follow-up:
statusnow verifies that the native-host launcher resolves to an executable and exposesextension.hostHealthyin JSON; automatic stale-daemon recovery gives one consistent next action; ab-connect 0.5.15 identifies timeouts with a stableRelayTimeoutError; and the confirm E2E plus command help now match the behavior they document. Contributors: @leeguooooo. - v1.5.81 (2026-07-28) β Added daemon-free
chrome-use statusfor a single CLI, extension, relay, profile, and session health snapshot (fixes #145). Clicks that open nativeconfirm()/prompt()now return a pending dialog immediately, so the same session can accept or dismiss it (fixes #144). ab-connect 0.5.14 bounds Chrome debugger calls at 8 seconds, while the CLI resets a stuck daemon when an older relay stays silent through the socket deadline, preventing indefinite HTTP-to-HTTPS process-swap hangs (fixes #146). The official chrome-use-sites source now provides Twitter search/thread engagement adapters with stable replies, bookmarks, and numeric views (fixes #124). Contributors: @leeguooooo. - v1.5.80 (2026-07-26) β Fixed
session stop [name]andsession prunebeing intercepted by the ownership-command path. Both lifecycle commands now reach the daemon handler again,session --helpclearly distinguishes ownership and lifecycle operations, and named stops validate the session name before touching daemon state (#142, fixes #140). Contributors: @leeguooooo. - v1.5.79 (2026-07-26) β Added a Nix flake with a package, development shell, NixOS module, and home-manager module (#136). Native Duplicate tab transactions are now bounded, so late extension replies cannot outlive a timed-out request or corrupt later session state (#137).
fillnow resolves Monaco through global and AMD model APIs, performs an atomicsetValueor trusted clipboard fallback, and verifies the authoritative model readback before reporting success; the Synology DSM empty-editor false success now fails safely (#139). Contributors: @M4jor-Tom, @forsakesoul, @leeguooooo. - v1.5.78 (2026-07-24) β Native downloads:
download-url,download-start,downloads, and matching MCP tools; dynamic-link downloads no longer navigate the active tab by mistake. The local service now exposes a loopback- and origin-protected/api/v1, with stablecode/retryableerror fields across CLI, MCP, daemon, and HTTP responses (#132).network requests --type websocketobserves WebSocket connection metadata from pages and cross-origin iframes without recording frame payloads (#131).site updatenow syncs both theepiral/bb-sitescommunity source and theleeguooooo/chrome-use-sitesofficial source by default, with no manual registration required (#133). - v1.5.77 (2026-07-21) β Site-adapter application errors now return a non-zero exit code; the installer works in non-interactive environments without
/dev/tty; reserved global-flag collisions produce an actionable warning; heavy-pagePage.navigatetimeouts degrade to a warning after navigation is confirmed; configurable private adapter sources addsite sources/add/remove(#122, #123, #125, #126, #127). - v1.5.76 (2026-07-16) β New
chrome-use tab duplicate [ref] [--label <name>]: uses Chrome's native Duplicate tab (preserving full navigation history) and is also exposed through thechrome_use_tabsMCP. It works only on extension-connected real Chrome β--launch, raw CDP, Lightpanda, cloud providers, and old extensions all get a clear unsupported error, with no URL-based recreation fallback (that would lose Duplicate semantics); the extension negotiates anativeTabDuplicatecapability viahello. The duplicate becomes chrome-use's internal active target while restoring your previously focused window and tab; output exposes only tab/target ids, never the URL, and orphaned duplicates are rolled back if attach, grouping, or setup fails. - v1.5.75 (2026-07-10) β Fixed extension-relay auto-connect creating two
about:blanktabs for a new session. The connection now reuses the session-owned scratch tab created during target discovery and creates a fallback only when the page count is zero, so read-only commands, status checks, and pre-navigation failures no longer leave paired blank tabs behind. - v1.5.74 (2026-07-08) β Skill distribution v2: new
chrome-use skill installas the one entry point β it delegates to skills.sh (npx skills add β¦ -g) to install across 20+ runners and never writes runner dirs itself;curl β¦ | shnow installs the skill after the binary and finishes with adoctorself-check plus a copy-paste first prompt for your agent;doctorgains a read-only "is the agent skill installed?" probe (warn, never fail); the stub routing table grows from 5 to 11 symptomβcommand rows (canvas/network/react/real-chrome/sessions/test, β¦). Also fixed:skills/chrome-use/SKILL.md'sdescriptionwas invalid YAML (a bare:), which madenpx skills addinstallcore/test/β¦ instead ofchrome-useβ fixed with a folded block scalar. - v1.5.73 (2026-07-07) β Four issue fixes:
extract --schemano longer silently returns[]on a plain repeating list (auto-detects the repeating container + a diagnostic on no match + accepts an array-shaped schema, #96);siteadapters inject the family_helperbefore running (twitter/* etc. no longerReferenceError, #99);console --limit Ntails the last N entries (#110); real skill tiering (<!-- full -->marker β lean default,--fullfor everything) + dedup +session handoffsynced into the sessions skill (#100). - v1.5.72 (2026-07-07) β Native commands survive shadow-DOM-heavy apps:
select/fillnow handle react-select, module-scoped Monaco, and controlled inputs whose @ref anchored a wrapper (#105); sharper on Element-Plus modals βsnapshot -itags controls inside the top modal/drawer withmodal, a closest-text hint on selector misses, and a newdiagnoseverb for blank SPAs (#90).curl β¦ | shsets up the extension and handles the debugging banner in one command (consent at install β auto-silence at runtime). The skill steers agents toread/click/fillover hand-rolled eval. - v1.5.71 (2026-07-07) β Docs: new How It Works (with an SVG pipeline diagram), Lineage & Upstream, and Single-pass Scripting chapters, plus a full doc-site audit sweep. No functional change.
- v1.5.70 (2026-07-07) β
chrome-use scriptsingle-pass scripting (#101): a JSON op-list (value bus + loops + asserts) and synchronous JS (cu.*helpers); a daemon-resident boa engine survives hard navigations, running many steps in one tool call. Also: connect detects enterprise-blocked extensions and guides the escape hatches; opt-in background auto-update (CHROME_USE_AUTO_UPGRADE=1); one-click Web Store install. - v1.5.69 (2026-07-07) β
snapshot -imerges presentation-role / AX-stripped cross-origin iframes (the reCAPTCHA case, #92); snapshot/eval resync before resolving the active tab so they don't drift to about:blank (#93); unlabeled interactive controls named from placeholder / nearest label (#90.2); screenshot resync captures the active tab (#91). - v1.5.68 (2026-07-02) β Session ownership + human handoff:
session handoff/resume/status/list(#89, ported from ego-lite);whoamiper-site identity + a global--asaccount guard. - v1.5.67 (2026-07-02) β Guided multi-profile extension install: enumerate all profiles, detect stale policy, deep-link Settings + wait for approval + auto-restart; setup wizard localized zh/en;
connect <port>/--cdprebind when the endpoint changes. - v1.5.66 (2026-07-02) β
selectno longer silently selects nothing when no<option>matches; it now errors and lists every available option. Default action timeout dropped from 30s to 25s. - v1.5.65 (2026-07-02) β
network route --set-json: structured JSON-field edits on the real response; newchrome-use reportpackages a de-identified friction log into a paste-ready GitHub issue; MCP--tools all(24 tools). - v1.5.64 (2026-07-01) β
chrome-use mcp: a stdio MCP server (12-tool core profile) for MCP-only hosts like Claude Desktop that can't run a shell command. - v1.5.63 (2026-07-01) β
read [url]: fetch a URL β or, with no URL, the active tab β as agent-readable text; supports--llms/--outline/--filter/--raw. - v1.5.62 (2026-07-01) β fixed
type --clear/--delayparsing;find labelnow also matchesaria-label/aria-labelledby. - v1.5.61 (2026-07-01) β React renderer fix: pick the actual react-dom renderer instead of hardcoding id 1 (was reading an empty tree on Next.js 16.3 Turbopack RSC apps).
- v1.5.60 (2026-07-01) β
network route: edit the real response at the response stage (status/headers/body substring replace). - v1.5.59 (2026-07-01) β
network route: mock responses and rewrite requests via the CDP Fetch domain β no proxy, no cert, no JS injection. - v1.5.58 (2026-07-01) β
chrome-use test: per-case account switching for multi-account YAML suites (account:). - v1.5.55 (2026-06-29) β friction auto-reporting.
- v1.5.54 (2026-06-29) β form fill can select by visible option text; fixed self-heal on the
--launchpath. - v1.5.53 (2026-06-29) β
form fill --map: bulk-mapped form filling. - v1.5.52 (2026-06-29) β
--observe: capture the a11y-tree delta around an action; auto ref-heal docs. - v1.5.51 (2026-06-29) β action guards
--if-present/--optional. - v1.5.50 (2026-06-29) β
extract --schema: schema-driven structured scrape to JSON. - v1.5.49 (2026-06-29) β
expect: assertion verb with a matching exit code. - v1.5.48 (2026-06-29) β ab-connect 0.5.7: wake-from-sleep reconnect via
chrome.idle. - v1.5.47 (2026-06-29) β ab-connect 0.5.6: adopt no longer persists; clears the stuck debugger banner.
- v1.5.46 (2026-06-29) β relay self-heal: a dropped relay recovers on its own, no hang or manual reconnect.
- v1.5.45 (2026-06-28) β fixed adopt-tab command resolution (a regression from #68).
- v1.5.44 (2026-06-28) β adopt switched to on-demand attach (ext 0.5.5): no more debugger banner on user tabs.
- v1.5.43 (2026-06-27) β #65
snapshot --filter+ eval top-level-await hint. - v1.5.42 (2026-06-27) β #60 browser/profile selection:
browserslisting +--browser. - v1.5.41 (2026-06-26) β #60 driving-profile observability + #53 canvas/closed-shadow skill docs.
- v1.5.40 (2026-06-26) β #58
eval --frame, reconnect alias, actionable stale-target errors. - v1.5.39 (2026-06-26) β
snapshot -inow surfaces inline form-validation errors. - v1.5.38 (2026-06-26) β #52 tab routing scoped to the session group + CI format fix.
- v1.5.37 (2026-06-25) β solve-slider robustness (wait for slices) + pluggable detector hook.
- v1.5.34 (2026-06-25) β solve-slider (NetEase Yidun slider captcha) + drag offset mode.
- v1.5.32 (2026-06-24) β sunny extension UX: friendlier icon, polished popup, options page, agent cursor.
- v1.5.31 (2026-06-24) β fail loudly on relay tab-drift instead of clicking the wrong tab.
- v1.5.30 (2026-06-24) β relay-down guidance + canvas/closed-shadow skill playbook.
- v1.5.29 (2026-06-24) β silenced the
chrome.debuggerbanner + fixed a leftover about:blank scratch tab. - v1.5.28 (2026-06-22) β the chrome-use skill now prefers live web checks.
- v1.5.27 (2026-06-19) β gated the about:blank cleanup to the relay case only.
- v1.5.26 (2026-06-18) β
session stop <name>+session prune+ lifecycle docs. - v1.5.25 (2026-06-18) β default idle-shutdown +
keep: stop leaving scratch tabs/groups behind. - v1.5.24 (2026-06-18) β build fix: include browser.rs's clear_viewport/via_relay + cargo fmt.
- v1.5.23 (2026-06-17) β
adopt: drive a pre-existing tab without opening a new one. - v1.5.22 (2026-06-17) β group-scoped
Target.getTargetson the relay: restores follow-popup + cross-session adopt under isolation. - v1.5.21 (2026-06-17) β rich-editor fill, box centers, screenshot downscale, disabled handling + docs (#41-#45).
- v1.5.20 (2026-06-17) β
site: adapter auto-sync + auto-suggest. - v1.5.19 (2026-06-17) β
site: bb-sites adapters β turn any site into a structured-data CLI. - v1.5.18 (2026-06-17) β issue-reporting guidance + a clear error for
data:URLs over the relay. - v1.5.17 (2026-06-17) β complete multi-agent isolation: clicks no longer adopt foreign tabs/pop-ups.
- v1.5.16 (2026-06-17) β strict multi-agent tab isolation on the relay.
- v1.5.15 (2026-06-17) β trusted activation for in-iframe buttons.
- v1.5.14 (2026-06-17) β fixed the eval-await regression (replMode) + default scroll; green CI (#36, #38).
- v1.5.13 (2026-06-17) β eval replMode (re-declarable let/const) + the snapshot-first skill rule (#37, #38).
- v1.5.12 (2026-06-17) β relay-safe hover/dblclick/drag, deeper iframe snapshot, key-events-based typing.
- v1.5.11 (2026-06-16) β cross-origin iframe scroll/click +
openauto-reattach (#35, #36). - v1.5.10 (2026-06-16) β warn when launching via debug-port while the relay is up.
- v1.5.9 (2026-06-16) β strip zero-width unicode from titles +
screenshot --clip/element. - v1.5.8 (2026-06-16) β file upload over the extension relay.
- v1.5.7 (2026-06-16) β
cf-status: a Cloudflare clearance preflight check. - v1.5.6 (2026-06-15) β pin the adopted tab against transient relay snapshots.
- v1.5.5 (2026-06-15) β a diagnostic log for the remote-debugging consent modal in connect mode.
- v1.5.4 (2026-06-15) β
get text --pierce: pierce closed shadow DOM (#30). - v1.5.3 (2026-06-15) β
get textnow defaults to cross-frame; #29 (sessions/did-you-mean/tab liveness); CI changelog fix. - v1.5.1 (2026-06-15) β frame-aware text extraction (
get text --all-frames/--main,frames) + #27, ab-connect 0.4.9 targetId recovery. - v1.5.0 (2026-06-15) β text-selector click,
get textdefaults to body,tab --activate,click --follow/openedTab;fillnow fires input/change/blur;closewording +chrome-use current.
v1.4.x
- v1.4.1 (2026-06-14) β hold-to-move (full keydown/keyup descriptor, #game); requires ab-connect 0.4.8 (#23 reattach hardening).
- v1.4.0 (2026-06-13) β
openno longer hijacks focus;tab adopt-by-targetId; keydown/keyup docs; canvas hint;doctorchecks version coherence across components.
v1.3.x
- v1.3.0 (2026-06-13) β daemon restart/status (#20.2) + live tab resync, adopt-by-targetId,
open --reuse-tab.
v1.0.x β v1.2.x
- v1.2.3 (2026-06-13) β
bringToFrontcommand +tab list --fullshows untruncated URLs. - v1.2.2 (2026-06-12) β a non-blocking "update available" notice + release changelogs.
- v1.2.1 (2026-06-12) β relay tab-drift pin on open (#14/#18) + a stable per-tab relay session.
- v1.2.0 (2026-06-12) β
chrome-use test: browser test suites. - v1.1.0 (2026-06-12) β cross-profile cookie export/transfer.
- v1.0.0 (2026-06-12) β rebrand: agent-browser-stealth β chrome-use, de-fork, version reset to 1.0.0.
v0.27.0-fork.x (the fork era before the rebrand)
- v0.27.0-fork.51 (2026-06-12) β rustfmt fix for the issue #7 regression tests (CI format gate).
- v0.27.0-fork.50 (2026-06-11) β tab-title truncation + multi-agent/eval/type docs.
- v0.27.0-fork.49 (2026-06-11) β embedded stealth-status + multi-agent skill guidance.
- v0.27.0-fork.48 (2026-06-11) β iframe-proxy toggle + stealth status.
- v0.27.0-fork.47 (2026-06-11) β tab-drift pin,
snapshot -ckeeps interactive elements, stale-ref guidance. - v0.27.0-fork.46 (2026-06-11) β capped the
--annotatelegend. - v0.27.0-fork.45 (2026-06-11) β
pickcombobox as an atomic op. - v0.27.0-fork.44 (2026-06-11) β eval origin stamp,
type --focused, humanize argument validation warning. - v0.27.0-fork.43 (2026-06-11) β a batch of issue/Hermes fixes (silent-click, live env,
eval --file, tab-list, docs). - v0.27.0-fork.42 (2026-06-11) β close session-owned tabs on exit β no more tab leak.
- v0.27.0-fork.41 (2026-06-11) β relay self-heals silently, no user action needed on a blip.
- v0.27.0-fork.40 (2026-06-11) β no more consent-dialog fallback when the extension is installed.
- v0.27.0-fork.39 (2026-06-11) β
cookies set --curlpreserves the full set of cookie attributes. - v0.27.0-fork.38 (2026-06-11) β silent operation β no foreground tab stealing.
- v0.27.0-fork.37 (2026-06-11) β completed humanize (bbox jitter + wheel/drag easing).
- v0.27.0-fork.36 (2026-06-11) β human-like input stealth (humanize).
- v0.27.0-fork.35 (2026-06-11) β skill docs embed Store-install, feedback channel, and stale-binary guidance.
- v0.27.0-fork.34 (2026-06-11) β Web Store live: store-targeted force-install + skill store-install guidance.
- v0.27.0-fork.33 (2026-06-10) β polished two Hermes-found cosmetic issues (invalid-selector wording, empty-URL glob).
- v0.27.0-fork.32 (2026-06-10) β resolved Hermes-found CLI bugs (
wait --url,find role, invalid selector, and more). - v0.27.0-fork.31 (2026-06-10) β Web Store submission ready + two install paths.
- v0.27.0-fork.30 (2026-06-10) β stealth: navigator overrides moved onto the prototype, not the instance.
- v0.27.0-fork.29 (2026-06-10) β fixed the plugin overflowTest, popup-free auto-connect, ab-connect rebrand+icon, README.
- v0.27.0-fork.28 (2026-06-10) β skill docs: headed-by-default, tab groups.
- v0.27.0-fork.27 (2026-06-10) β forbid headless β always headed, for stealth.
- v0.27.0-fork.26 (2026-06-10) β stealth:
navigator.platformfixed to MacIntel (anti-detection fix). - v0.27.0-fork.25 (2026-06-10) β fixed the relay liveness check (answer
Browser.getVersionlocally) β stops the reconnect-storm drift. - v0.27.0-fork.24 (2026-06-10) β passive tab discovery no longer hijacks the active tab (per-session control).
- v0.27.0-fork.23 (2026-06-10) β tolerate minimal targetInfo from the relay (extension connect's getTargets).
- v0.27.0-fork.22 (2026-06-09) β extension connect uses the relay URL, fixing a
--session connecthang. - v0.27.0-fork.21 (2026-06-09) β multi-client relay (concurrent agents).
- v0.27.0-fork.20 (2026-06-09) β per-session tab groups (ab-connect 0.4.0).
- v0.27.0-fork.19 (2026-06-09) β a new extension id (Web Store signing key) + store-aware install.
- v0.27.0-fork.18 (2026-06-09) β extension connect: zero-token native-messaging control of real Chrome + click reliability + eval-first/find-url/site-notes.
- v0.27.0-fork.17 (2026-06-05) β the eval-first skill + find-url (local bookmark search) + the site-notes convention.
- v0.27.0-fork.16 (2026-06-05) β click reliability (scroll-into-view + DOM fallback) + skill docs (console opt-in, CLICK_MODE, form/hidden-input eval).
- v0.27.0-fork.15 (2026-06-04) β stealth hardening (lazy
Runtime.enable, native timezone/WebRTC, opt-in canvas noise) + adaptive @ref relocation. - v0.27.0-fork.14 (2026-06-01) β upgrade fix + CI on Node 24.
- v0.27.0-fork.13 (2026-06-01) β
--profile auto. - v0.27.0-fork.12 (2026-06-01) β embedded skill docs.
- v0.27.0-fork.11 (2026-06-01) β stealth is now fully applied on the FullLaunch path (previously only on some launch paths).
- v0.27.0-fork.10 (2026-06-01) β a UX batch + stealth coverage/webdriver handling.
- v0.27.0-fork.9 (2026-06-01) β routine fix iteration.
- v0.27.0-fork.8 (2026-05-09) β built-in retry for transient overlay occlusion.
- v0.27.0-fork.7 (2026-05-09) β catch transient overlay occlusion before mis-clicking.
- v0.27.0-fork.6 (2026-05-09) β capped defensive CDP timeouts, fixed a misleading chrome://inspect tip.
- v0.27.0-fork.5 (2026-05-09) β fixed a misleading warning + a connect liveness probe +
wait @ref. - v0.27.0-fork.4 (2026-05-09) β fixed the SPA click race + @ref identity verification +
wait --gone. - v0.27.0-fork.3 (2026-05-09) β SPA click race fix + the
wait --goneprimitive. - v0.27.0-fork.2 (2026-05-09) β a friendlier find error + restore the URL after a version-mismatch restart.
- v0.27.0-fork.1 (2026-05-09) β synced with upstream v0.27.0, added skills.sh support.
Earlier history
chrome-use periodically merges in upstream agent-browser releases (v0.27βv0.31, e.g. glob support in --wait from v0.30.0, a sandbox-package publish-metadata fix from v0.29.0). chrome-use's own development sits on top of these and diverges heavily, so the two version lines aren't in lockstep.
Earlier v0.x releases (v0.6.0 β v0.26.0, JanuaryβApril 2026) inherit from the upstream agent-browser base; they're not worth listing individually here.