docs(browser-use): point users at the Chrome Web Store listing (#12510)

* docs(browser-use): point users at the Chrome Web Store listing

The extension is published, but every place that tells someone how to get
it still said there was no store listing: the user guide, the bundled skill
the model reads — so it actively told users to build from source — and the
"not connected" error, which sent them to chrome://extensions, where nothing
can be installed. All three now lead with the listing. Building from source
stays documented as the fallback where the listing is not available in the
user's region.

The extension README drops the side-loading id from its `qwen serve
--allow-origin` example, which a store install would have been rejected by,
for the placeholder the rest of that page already uses.

Refs #12240

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01JHhPsocuEvo8UAQkrjtiAD

* docs(browser-use): state the minimum Qwen Code version and one copy per profile

Only 0.24.2 and later trust the store extension's id, so an older Qwen Code
cannot connect to it; the guide now says so and names the version check in
its troubleshooting.

It also asks anyone who loaded the extension unpacked to remove or disable
that copy before using the store version. Measured in one Chromium profile
with both enabled: each extension launches its own Host, and
browsers.list() returns two browsers for the same profile, so which one a
session gets is arbitrary.

Refs #12240

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01JHhPsocuEvo8UAQkrjtiAD

---------

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
tanzhenxinandClaude Opus 5.5 authored and GitHub committed 2026-09-23 03:13:28 +00:00
1 parent be1dc925dc
commit afd7236298
7 files changed
+44 -18

No files matched your search

+22 -12
View File
@@ -5,14 +5,23 @@ existing tabs and signed-in sessions.
## Use
Use macOS or Linux with Chrome 125 or later. **Install and enable the Qwen
Chrome extension in the Chrome profile you want to use.** The extension is
required and is not installed by the Qwen Code package. There is no Chrome Web
Store listing yet. Build it from the `packages/chrome-extension` directory of
the Qwen Code repository by following its
[README](https://github.com/QwenLM/qwen-code/tree/main/packages/chrome-extension#readme),
then open `chrome://extensions`, enable Developer mode, choose **Load
unpacked**, and pick the built `dist/extension` directory.
Use macOS or Linux with Chrome 125 or later and Qwen Code 0.24.2 or later
(check with `qwen --version`). **Install the
[Qwen Code extension from the Chrome Web Store](https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph)
in the Chrome profile you want to use.** The extension is required and is not
installed by the Qwen Code package. Chrome keeps it up to date once installed.
**Use one copy of the extension per profile.** If you previously loaded it
unpacked, remove or disable that copy in `chrome://extensions` before using the
store version. With both enabled, Qwen sees two browsers for the same profile
and may connect to either.
If the Chrome Web Store says the extension is not available in your region,
build it from source instead: follow the
[README](https://github.com/QwenLM/qwen-code/tree/main/packages/chrome-extension#readme)
of the `packages/chrome-extension` directory in the Qwen Code repository, then
open `chrome://extensions`, enable Developer mode, choose **Load unpacked**, and
pick the built `dist/extension` directory.
Describe your browser task directly, for example:
@@ -21,10 +30,11 @@ Describe your browser task directly, for example:
Qwen selects the Browser Use skill when appropriate. The first browser task
automatically registers a small local connection program in your user directory;
later tasks reuse it. Qwen confirms the connection with the extension before
operating pages. If it cannot connect, open Chrome and check that the extension
is enabled in the intended profile, then retry. If a runtime dependency
needs configuration on first use, Qwen will guide you and may ask you to restart.
No separate Browser Use Qwen extension or `qwen serve` process is needed.
operating pages. If it cannot connect, open Chrome and check that Qwen Code is
0.24.2 or later and that the extension is enabled in the intended profile, then
retry. If a runtime dependency needs configuration on first use, Qwen will guide
you and may ask you to restart. No separate Browser Use Qwen extension or
`qwen serve` process is needed.
## Disable
@@ -25,6 +25,11 @@ export const CHROME_NATIVE_HOST_REVISION = 2;
// rather than replaced, so without the bump it would keep rejecting the id.
export const CHROME_EXTENSION_ID = 'idkijaaipeeinemigojbjkmfmabokbdk';
export const CHROME_WEB_STORE_EXTENSION_ID = 'hdhmmjclhibojdddmancfgbkleahfaph';
// Where users install the extension. The store resolves any slug to the
// listing's current one by id, so this link survives a rename.
export const CHROME_WEB_STORE_URL =
'https://chromewebstore.google.com/detail/qwen-code/' +
CHROME_WEB_STORE_EXTENSION_ID;
export const CHROME_EXTENSION_IDS: readonly string[] = [
CHROME_EXTENSION_ID,
CHROME_WEB_STORE_EXTENSION_ID,
@@ -421,7 +421,7 @@ it.skipIf(process.platform === 'win32')(
await expect(transport.start()).rejects.toMatchObject({
code: 'BROWSER_DISCONNECTED',
message: expect.stringContaining(
'Open Chrome and install or enable the Qwen extension in the profile you want to use (chrome://extensions), then retry.',
'install the extension from https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph or enable it at chrome://extensions',
),
});
expect(transport.isConnected()).toBe(false);
@@ -11,6 +11,7 @@ import {
CDP_REQUEST_TIMEOUT_MS,
CHROME_BRIDGE_PROTOCOL_VERSION,
CHROME_EXTENSION_IDS,
CHROME_WEB_STORE_URL,
defaultChromeBridgeSocketPath,
type BridgeEvent,
type BridgeHello,
@@ -329,7 +330,7 @@ export class ChromeExtensionTransport implements ChromeBridge {
} while (Date.now() < deadline);
if (mismatch !== undefined) throw mismatch;
throw disconnectedError(
`Qwen Chrome extension is not connected. Open Chrome and install or enable the Qwen extension in the profile you want to use (chrome://extensions), then retry. ${errorMessage(lastError)}`,
`Qwen Chrome extension is not connected. Open Chrome and, in the profile you want to use, install the extension from ${CHROME_WEB_STORE_URL} or enable it at chrome://extensions, then retry. ${errorMessage(lastError)}`,
);
}
+6 -1
View File
@@ -20,6 +20,11 @@ It provides:
## Build
To use the extension, install it from the
[Chrome Web Store](https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph).
The steps below build it from source, for development or where the listing is
not available.
```bash
npm run build # -> dist/extension (static assets + bundled service worker)
```
@@ -98,7 +103,7 @@ The pinned adapter requires Node.js 22.12 or newer.
```bash
npm install -g [email protected]
QWEN_CDP_MCP_COMMAND=chrome-devtools-mcp \
qwen serve --allow-origin chrome-extension://idkijaaipeeinemigojbjkmfmabokbdk
qwen serve --allow-origin chrome-extension://<this-extension-id>
```
The separately installed adapter is not included in the Qwen Code npm package
@@ -19,8 +19,11 @@ The SDK checks the actual connection and protocol instead of reading Chrome's
extension preferences.
If the extension does not connect, ask the user to open Chrome and check the
extension in the intended profile. There is no store listing yet: build the
extension from `packages/chrome-extension` in the Qwen Code repository (its
extension in the intended profile. It installs from the Chrome Web Store:
https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph
If the store reports it is not available in the user's region, they can build
it from `packages/chrome-extension` in the Qwen Code repository (its
README) and load `dist/extension` through `chrome://extensions` (Developer mode
→ Load unpacked). After installation or enabling it, retry the connection.
@@ -60,7 +60,9 @@ describe('bundled browser-use skill', () => {
});
it('names where the Qwen Chrome extension comes from', () => {
expect(skill).toContain('no store listing yet');
expect(skill).toContain(
'https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph',
);
expect(skill).toContain('`packages/chrome-extension`');
expect(skill).toContain('`dist/extension`');
expect(skill).toContain('Load unpacked');