@vibebrowser/mcp 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/eval.md ADDED
@@ -0,0 +1,294 @@
1
+ # vibebrowser-mcp Evaluation Process
2
+
3
+ This document tracks the current validation matrix for the `vibebrowser-mcp` and `vibebrowser-cli` binaries, with an explicit split between:
4
+
5
+ - local workspace validation
6
+ - packed package artifact validation (`npm pack`)
7
+ - published npm validation (`@vibebrowser/mcp@latest`)
8
+ - real-extension browser evals versus fake-extension protocol evals
9
+
10
+ Evaluation date: **March 26, 2026 (America/Los_Angeles)**.
11
+
12
+ ## Coverage Matrix
13
+
14
+ | Surface | Harness | Source Modes | Backend | What It Proves |
15
+ |---|---|---|---|---|
16
+ | Relay race regression | `npm run test:e2e:relay-race` | local | fake extension socket | relay preserves in-flight tool calls across extension reconnects |
17
+ | HTTP MCP transport | `npm run test:e2e:http` | local | fake extension socket | streamable HTTP MCP path works end to end |
18
+ | OpenClaw-compatible browser CLI | `npm run test:e2e:browser-cli` | `local`, `pack`, `npm` | fake extension socket | `vibebrowser-cli` command shape, JSON output, and tool routing work end to end |
19
+ | Live browser CLI regression | `npm run test:e2e:browser-cli-live` | local | real extension session | validates `open`/`snapshot` behavior on a real URL against the connected Vibe extension |
20
+ | Codex + OpenCode MCP bridge | `npm run test:e2e:agents` | `local`, `pack`, `npm` | real extension session | packaged `vibebrowser-mcp` can be launched by Codex/OpenCode tooling and route MCP traffic to a real Vibe-connected browser |
21
+ | OpenCode financial eval (`../vibe`) | `node tests/mcp-eval.test.js --skip-build --model github-copilot/gpt-4.1 --mcp-source ...` | `auto`, `local`, `pack`, `npm` | harness-managed browser + extension | full OpenCode browser task execution against the Vibe extension |
22
+
23
+ Important scope note:
24
+ - There is **not yet** a full hosted OpenClaw runtime eval in this repo.
25
+ - Current OpenClaw coverage is the **OpenClaw-compatible CLI surface** (`vibebrowser-cli`) plus the `openclaw` helper and HTTP bridge docs.
26
+ - Do not claim full hosted OpenClaw runtime parity based only on the CLI test.
27
+
28
+ ## Source Selectors
29
+
30
+ ### Browser CLI harness
31
+
32
+ `scripts/e2e-browser-cli.mjs` now supports:
33
+
34
+ - `E2E_BROWSER_CLI_SOURCE=local`
35
+ - `E2E_BROWSER_CLI_SOURCE=pack`
36
+ - `E2E_BROWSER_CLI_SOURCE=npm`
37
+
38
+ Optional override:
39
+
40
+ - `E2E_BROWSER_CLI_PACKAGE=/absolute/or/relative/path/to/package.tgz`
41
+
42
+ `pack` mode creates a temporary tarball with `npm pack --json --pack-destination ...` and runs:
43
+
44
+ ```bash
45
+ npx -y --package <local-tarball> vibebrowser-cli ...
46
+ ```
47
+
48
+ ### MCP agent harness
49
+
50
+ `scripts/e2e-mcp-agents.mjs` now supports:
51
+
52
+ - `E2E_MCP_SOURCE=local`
53
+ - `E2E_MCP_SOURCE=pack`
54
+ - `E2E_MCP_SOURCE=npm`
55
+
56
+ Optional override:
57
+
58
+ - `E2E_MCP_PACKAGE=/absolute/or/relative/path/to/package.tgz`
59
+
60
+ `pack` mode creates a temporary tarball and runs:
61
+
62
+ ```bash
63
+ npx -y --package <local-tarball> vibebrowser-mcp ...
64
+ ```
65
+
66
+ ### Cross-repo OpenCode eval
67
+
68
+ `../vibe/tests/mcp-eval.test.js` now accepts:
69
+
70
+ - `--mcp-source auto`
71
+ - `--mcp-source local`
72
+ - `--mcp-source pack`
73
+ - `--mcp-source npm`
74
+ - `--mcp-package <tarball-or-package-spec>`
75
+
76
+ Use `--mcp-source pack` when validating a release candidate before publish.
77
+
78
+ ## Required Commands
79
+
80
+ ### 1. Local regression suite
81
+
82
+ ```bash
83
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
84
+ npm run build
85
+ npm test
86
+ ```
87
+
88
+ Pass signal:
89
+
90
+ - `npm test` exits `0`
91
+ - output contains:
92
+ - `e2e ok`
93
+ - `http e2e ok`
94
+ - `browser cli e2e ok`
95
+
96
+ ### 2. Packaged CLI artifact validation
97
+
98
+ ```bash
99
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
100
+ E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs
101
+ ```
102
+
103
+ Pass signal:
104
+
105
+ - output contains `browser cli e2e ok`
106
+ - `vibebrowser-cli` is installed from a `.tgz` package artifact, not from the workspace
107
+
108
+ ### 3. Packaged binary smoke check
109
+
110
+ ```bash
111
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
112
+ TMP_DIR="$(mktemp -d)"
113
+ npm pack --json --pack-destination "$TMP_DIR"
114
+ npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-mcp --help
115
+ npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-cli --help
116
+ ```
117
+
118
+ Pass signal:
119
+
120
+ - `vibebrowser-mcp --help` prints the branded CLI
121
+ - `vibebrowser-cli --help` prints the standalone OpenClaw-compatible CLI
122
+
123
+ ### 4. Published npm CLI validation
124
+
125
+ ```bash
126
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
127
+ npx -y --package @vibebrowser/mcp@latest vibebrowser-mcp --version
128
+ npx -y --package @vibebrowser/mcp@latest vibe-mcp --version
129
+ npx -y --package @vibebrowser/mcp@latest vibebrowser-cli --version
130
+ E2E_BROWSER_CLI_SOURCE=npm node scripts/e2e-browser-cli.mjs
131
+ ```
132
+
133
+ Pass signal:
134
+
135
+ - all three binaries print the published version
136
+ - `browser cli e2e ok` proves `vibebrowser-cli` works from the npm registry package, not only from a local tarball
137
+
138
+ ### 5. Real-extension agent eval
139
+
140
+ ```bash
141
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
142
+ E2E_MCP_SOURCE=pack node scripts/e2e-mcp-agents.mjs
143
+ ```
144
+
145
+ Pass signal:
146
+
147
+ - output contains `e2e ok`
148
+ - Codex uses `vibe-browser.*` tools
149
+ - OpenCode can resolve the same MCP config and report `vibe-browser connected`
150
+
151
+ Hard requirement:
152
+
153
+ - a live Vibe extension session must already be connected or connectable on the relay path
154
+ - this harness does **not** prove anything if the extension is absent
155
+ - default Codex settings are tuned for current CLI compatibility:
156
+ - `E2E_CODEX_MODEL=gpt-5`
157
+ - `E2E_CODEX_REASONING_EFFORT=low`
158
+ - `E2E_CODEX_TIMEOUT_MS=480000`
159
+
160
+ ### 5a. Live browser CLI regression (real extension)
161
+
162
+ ```bash
163
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
164
+ npm run test:e2e:browser-cli-live
165
+ ```
166
+
167
+ Optional env overrides:
168
+
169
+ - `BROWSER_LIVE_URL` (default: X search URL from issue repro)
170
+ - `BROWSER_LIVE_TIMEOUT_MS` (default: `60000`)
171
+ - `BROWSER_LIVE_MIN_CONTENT_CHARS` (default: `200`)
172
+
173
+ Pass signal:
174
+
175
+ - output contains `live browser cli e2e ok`
176
+ - output prints measured `open latency`, content lengths, and matched `pageId`
177
+ - test proves real-extension `open` + page-content + `snapshot --page-id` flow (not mocked)
178
+
179
+ ### 5b. Latest built extension eval via Chrome for Testing
180
+
181
+ Build the dev extension first:
182
+
183
+ ```bash
184
+ cd /Users/engineer/workspace/vibebrowser/vibe
185
+ npm run build:extension:dev
186
+ ```
187
+
188
+ Use the direct script form when debugging the isolated path, especially from a detached worktree where `../vibe` discovery may not point at the intended sibling repo:
189
+
190
+ ```bash
191
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
192
+ E2E_DEBUG=1 \
193
+ E2E_TEST_BROWSER=1 \
194
+ E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe \
195
+ E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev \
196
+ E2E_MCP_SOURCE=npm \
197
+ node scripts/e2e-mcp-agents.mjs
198
+ ```
199
+
200
+ Use the package-script entrypoint for the canonical repo-level check:
201
+
202
+ ```bash
203
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
204
+ E2E_TEST_BROWSER=1 \
205
+ E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe \
206
+ E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev \
207
+ E2E_MCP_SOURCE=npm \
208
+ npm run test:e2e:agents
209
+ ```
210
+
211
+ Pass signal:
212
+
213
+ - output contains `e2e ok`
214
+ - the eval launches a separate Chrome for Testing instance
215
+ - the loaded extension comes from `../vibe/dist/extension/dev`, not the user’s daily Chrome profile
216
+
217
+ ### 6. Full OpenCode browser eval in sibling repo
218
+
219
+ ```bash
220
+ cd /Users/engineer/workspace/vibebrowser/vibe
221
+ node tests/mcp-eval.test.js --skip-build --model github-copilot/gpt-4.1 --mcp-source pack
222
+ ```
223
+
224
+ Pass criteria:
225
+
226
+ - `MCP External enabled: PASS`
227
+ - `Relay connected: PASS`
228
+ - `MCP tools used: PASS`
229
+ - `Tickers found: 6/6`
230
+ - process exits `0`
231
+
232
+ Note:
233
+
234
+ - this harness launches its own browser test environment from the `vibe` repo
235
+ - use it when you explicitly want the full browser-task eval, not just package smoke coverage
236
+
237
+ ## Latest Verification Snapshot
238
+
239
+ Commands executed in this session:
240
+
241
+ | Command | Result | Notes |
242
+ |---|---|---|
243
+ | `npm run build` | PASS | local TypeScript build succeeded |
244
+ | `npm test` | PASS | relay race, HTTP, and local browser CLI e2e all passed |
245
+ | `E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs` | PASS | tarball-installed `vibebrowser-cli` passed end to end |
246
+ | `npm pack --json --pack-destination <tmp>` | PASS | tarball includes both `dist/cli.js` and `dist/browser-main.js` plus docs/openclaw skill files |
247
+ | `npx -y --package <local-tarball> vibebrowser-mcp --help` | PASS | branded `vibebrowser-mcp` binary available from package artifact |
248
+ | `npx -y --package <local-tarball> vibebrowser-cli --help` | PASS | standalone `vibebrowser-cli` binary available from package artifact |
249
+ | `gh workflow run "Publish to npm" --ref release/vibebrowser-cli-0.2.5` | PASS | GitHub publish workflow completed successfully |
250
+ | `npm view @vibebrowser/mcp version dist-tags.latest bin --json` | PASS | npm `latest` is now `0.2.5` and includes `vibebrowser-mcp`, `vibe-mcp`, and `vibebrowser-cli` |
251
+ | `npx -y --package @vibebrowser/mcp@latest vibebrowser-mcp --version` | PASS | published npm binary resolves to `0.2.5` |
252
+ | `npx -y --package @vibebrowser/mcp@latest vibe-mcp --version` | PASS | legacy alias still resolves to `0.2.5` |
253
+ | `npm run test:e2e:agents` | PASS | local `dist/cli.js` path completed all three MiniWoB tasks with Codex + OpenCode against the live extension session |
254
+ | `E2E_MCP_SOURCE=npm npm run test:e2e:agents` | PASS | published npm binary path completed the same three MiniWoB tasks end to end |
255
+ | `E2E_DEBUG=1 E2E_TEST_BROWSER=1 E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev E2E_MCP_SOURCE=npm node scripts/e2e-mcp-agents.mjs` | PASS | debug run against a separate Chrome for Testing instance with the unpacked extension build |
256
+ | `E2E_TEST_BROWSER=1 E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev E2E_MCP_SOURCE=npm npm run test:e2e:agents` | PASS | canonical repo entrypoint passed against the latest built extension in isolated browser mode |
257
+ | `npx -y --package @vibebrowser/mcp@latest vibebrowser-cli --version` | PASS | standalone CLI is now available from npm `latest` |
258
+ | `E2E_BROWSER_CLI_SOURCE=npm node scripts/e2e-browser-cli.mjs` | PASS | npm-installed `vibebrowser-cli` passed end to end |
259
+ | `npm run test:e2e:browser-cli-live` | PASS | real extension run against X search URL; reported open latency `60718ms`, open content `9119` chars, snapshot content `9564` chars |
260
+ | `E2E_MCP_SOURCE=pack node scripts/e2e-mcp-agents.mjs` | FAIL (environment) | timed out waiting for a live Vibe extension connection on the relay path |
261
+
262
+ Observed real-extension agent failure:
263
+
264
+ ```text
265
+ Error: Extension did not connect to relay within 120000ms. Ensure Vibe extension has MCP External enabled in the active Chrome profile.
266
+ ```
267
+
268
+ Interpretation:
269
+
270
+ - packaged artifacts are valid locally
271
+ - the standalone CLI branding and binaries are correct in the tarball
272
+ - published npm `latest` is now updated to `0.2.5` with all intended binaries
273
+ - real-agent validation currently depends on a live extension session and was not satisfiable in this shell session
274
+
275
+ ## Publish Reality
276
+
277
+ Current npm state:
278
+
279
+ - `npm view @vibebrowser/mcp version dist-tags.latest bin --json` returns `0.2.5`
280
+ - `@latest` now includes:
281
+ - `vibebrowser-mcp`
282
+ - `vibe-mcp`
283
+ - `vibebrowser-cli`
284
+ - publish succeeded via GitHub Actions workflow `Publish to npm`
285
+
286
+ Consequences:
287
+
288
+ - the new `vibebrowser-mcp` / `vibebrowser-cli` binaries are published to npm and verified from the registry
289
+ - the remaining non-green item is the real-extension agent eval, which still requires a live Vibe extension session on the relay path
290
+
291
+ ## Tracking
292
+
293
+ - Tracking issue: `VibeTechnologies/vibe-mcp#22`
294
+ - Release PR: `VibeTechnologies/vibe-mcp#23`
@@ -0,0 +1,264 @@
1
+ ---
2
+ title: "Use Vibe Co-Pilot to Let Cloud OpenClaw Control Your Local Browser"
3
+ description: "How to connect a cloud OpenClaw agent to a user's local browser with the Vibe Co-Pilot extension, remote relay mode, and the new vibebrowser-mcp HTTP bridge."
4
+ date: "2026-03-15"
5
+ author: "Dzianis Vashchuk"
6
+ published: true
7
+ ---
8
+
9
+ If you are running OpenClaw in the cloud, one of the most useful upgrades is giving it access to a real browser.
10
+
11
+ But there are actually two different browser problems hiding inside that sentence:
12
+
13
+ - **tenant browser**: a browser that lives inside the hosted OpenClaw runtime
14
+ - **local browser**: the user's actual Chrome or Chromium profile on their own machine
15
+
16
+ Those are not the same product problem, and they should not use the same architecture.
17
+
18
+ For the tenant browser, the right answer is still the hosted browser stack inside the tenant.
19
+
20
+ For the user's local browser, the right answer is the Vibe Co-Pilot extension plus `vibebrowser-mcp` in remote relay mode.
21
+
22
+ That is what this setup enables.
23
+
24
+ ## The architecture that works
25
+
26
+ The flow looks like this:
27
+
28
+ ```text
29
+ Cloud OpenClaw agent
30
+ |
31
+ | MCP over HTTP
32
+ v
33
+ local vibebrowser-mcp bridge
34
+ |
35
+ | secure outbound relay connection
36
+ v
37
+ Vibe remote relay
38
+ |
39
+ v
40
+ Vibe Co-Pilot browser extension
41
+ |
42
+ v
43
+ User's local Chrome / Chromium browser
44
+ ```
45
+
46
+ The important point is that the browser still stays on the user's machine.
47
+
48
+ The cloud runtime does not need direct access to the user's laptop, an exposed CDP port, or a custom reverse tunnel into Chrome. The Vibe extension connects outward to the relay, and `vibebrowser-mcp` exposes a local MCP HTTP endpoint that OpenClaw can attach to.
49
+
50
+ ## Why we added HTTP mode to `vibebrowser-mcp`
51
+
52
+ Before this change, `vibebrowser-mcp` worked well for local MCP clients such as Claude Desktop, Cursor, OpenCode, and VS Code because they can launch an MCP server over stdio.
53
+
54
+ Cloud OpenClaw is different.
55
+
56
+ In OpenClawBot and similar hosted deployments, MCP servers are configured as URLs. That means a stdio-only MCP bridge is not enough. We needed `vibebrowser-mcp` to expose a proper network MCP endpoint.
57
+
58
+ So the missing piece was a streamable HTTP MCP transport.
59
+
60
+ That is what `vibebrowser-mcp start --transport http` now provides.
61
+
62
+ ## Prerequisites
63
+
64
+ You need:
65
+
66
+ 1. **Node.js 18+** - `vibebrowser-mcp` requires Node.js
67
+ 2. **Chrome/Brave/Chromium** with the Vibe extension installed
68
+ 3. **OpenClaw** configured with an MCP server URL
69
+
70
+ ## What gets installed
71
+
72
+ The user needs three pieces:
73
+
74
+ 1. the Vibe Co-Pilot browser extension
75
+ 2. `vibebrowser-mcp` on the same machine as the browser
76
+ 3. an OpenClaw MCP server entry pointing to the local `vibebrowser-mcp` HTTP endpoint
77
+
78
+ ## Step 1: Install the Vibe extension
79
+
80
+ 1. Install the Vibe Co-Pilot extension from [Chrome Web Store](https://chromewebstore.google.com/detail/vibe-ai-browser-co-pilot/djodpgokbmobeclicaicnnidccoinado)
81
+ 2. Open Chrome and click the Vibe extension icon
82
+ 3. Go to **Settings** (gear icon)
83
+ 4. Find **MCP External** (or "MCP External Control")
84
+ 5. Enable it and select **Remote** mode
85
+ 6. Copy the **Extension UUID** shown - you'll need this for the next step
86
+
87
+ > **Note**: The Extension UUID is a unique identifier that allows `vibebrowser-mcp` to connect to your specific browser session through the Vibe relay.
88
+
89
+ ## Step 2: Start the local HTTP bridge
90
+
91
+ On the same machine where the browser extension is installed, run:
92
+
93
+ **Option A: Using the helper command (recommended)**
94
+
95
+ ```bash
96
+ npx -y --package @vibebrowser/mcp vibebrowser-mcp openclaw --remote <extension-uuid>
97
+ ```
98
+
99
+ This prints the exact commands and MCP URL you need.
100
+
101
+ **Option B: Manual command**
102
+
103
+ ```bash
104
+ npx -y --package @vibebrowser/mcp vibebrowser-mcp start --transport http --remote <extension-uuid>
105
+ ```
106
+
107
+ By default this starts a local MCP endpoint at:
108
+
109
+ ```
110
+ http://127.0.0.1:8788/mcp
111
+ ```
112
+
113
+ Keep this terminal open - the bridge must stay running for OpenClaw to connect.
114
+
115
+ For operator workflows and OpenClaw skills, you can also use the OpenClaw-compatible browser CLI surface directly:
116
+
117
+ ```bash
118
+ npx -y --package @vibebrowser/mcp vibebrowser-cli sessions
119
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> status
120
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> tabs
121
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> snapshot --json
122
+ ```
123
+
124
+ `snapshot` in `vibebrowser-cli` is tool-only and maps directly to extension snapshot tools:
125
+
126
+ - default (`--format ai`) -> `take_md_snapshot`
127
+ - ARIA (`--format aria`) -> `take_a11y_snapshot`
128
+
129
+ Use `--page-id <id>` (or `--pageId <id>`) to target a specific tab without switching user focus.
130
+
131
+ For local relay mode with multiple connected browsers/profiles:
132
+
133
+ - run `vibebrowser-cli sessions` to list available local session IDs
134
+ - pass `--session <id>` to target one explicitly
135
+ - if omitted, the CLI uses the first connected local session
136
+
137
+ `open` and `navigate` responses include extracted page content in JSON output (`pageContent`) when page state is modified, so agents can continue without an immediate extra snapshot call.
138
+
139
+ That CLI accepts the same style of verbs and flags OpenClaw operators expect, but it still targets the Vibe real-browser path rather than an isolated OpenClaw-managed browser profile.
140
+
141
+ ## Step 3: add the MCP server to OpenClaw
142
+
143
+ Register the bridge URL in OpenClaw:
144
+
145
+ ```json
146
+ {
147
+ "mcpServers": {
148
+ "vibe": {
149
+ "url": "http://127.0.0.1:8788/mcp"
150
+ }
151
+ }
152
+ }
153
+ ```
154
+
155
+ Once that is configured, the cloud OpenClaw agent can use the Vibe browser tools through the local bridge.
156
+
157
+ ## Optional: Use the OpenClaw skill for local agents
158
+
159
+ For OpenClaw agents running locally (not in the cloud) that need access to your real browser, you can use the Vibe skill instead of configuring an MCP server URL.
160
+
161
+ ### Install the skill
162
+
163
+ Copy `openclaw/vibebrowser/SKILL.md` from this package to your OpenClaw skills directory. The skill provides OpenClaw-compatible CLI commands that target your Vibe-connected browser.
164
+
165
+ ### Configure environment
166
+
167
+ Set the extension UUID in your shell:
168
+
169
+ ```bash
170
+ export VIBE_EXTENSION_UUID="<your-extension-uuid>"
171
+ ```
172
+
173
+ ### Available commands
174
+
175
+ ```bash
176
+ # Check status
177
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json status
178
+
179
+ # List tabs
180
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json tabs
181
+
182
+ # Open a page
183
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json open https://example.com
184
+
185
+ # Click element by index
186
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json click 12
187
+
188
+ # Type into element
189
+ npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json type 23 "hello"
190
+ ```
191
+
192
+ See [`openclaw/vibebrowser/SKILL.md`](../openclaw/vibebrowser/SKILL.md) for the full command reference.
193
+
194
+ ## When to use this setup
195
+
196
+ This architecture is the right fit when the agent needs the **user's own browser context**, for example:
197
+
198
+ - websites where the user is already logged in locally
199
+ - workflows that depend on cookies or browser extensions
200
+ - tasks on tabs the user already opened
201
+ - browsing in the exact local profile the user uses every day
202
+
203
+ ## When not to use this setup
204
+
205
+ Do **not** use this as a replacement for the hosted tenant browser.
206
+
207
+ If the user wants a browser that lives inside the OpenClaw tenant itself, keep using the existing tenant browser stack. That remains the correct architecture for hosted cloud browsing because it is reproducible, self-contained, and lives entirely inside the tenant runtime.
208
+
209
+ So the rule is simple:
210
+
211
+ - **tenant browser in cloud** -> tenant `/browser` stack
212
+ - **user's real local browser** -> Vibe extension + relay + `vibebrowser-mcp` HTTP bridge
213
+
214
+ ## Why this split matters
215
+
216
+ Trying to force one model to solve both cases creates product confusion.
217
+
218
+ The tenant browser is about a cloud runtime having its own browser environment.
219
+
220
+ The Vibe extension path is about letting a cloud agent borrow the user's real browser safely and intentionally.
221
+
222
+ They sound similar from the outside, but they optimize for different things:
223
+
224
+ - tenant browser -> repeatability, isolation, hosted runtime control
225
+ - local browser bridge -> real sessions, real profile, real user context
226
+
227
+ That distinction is what made the implementation plan finally click.
228
+
229
+ ## What this unlocks
230
+
231
+ With this bridge, OpenClaw users can keep the intelligence and orchestration in the cloud while still letting the agent act inside the browser they already use.
232
+
233
+ That is a much better fit than asking users to move their life into a fresh cloud browser profile just to get browser automation.
234
+
235
+ The end result is simple:
236
+
237
+ **OpenClaw stays in the cloud. The browser stays local. Vibe MCP connects them cleanly.**
238
+
239
+ ## Troubleshooting
240
+
241
+ ### "Extension UUID not found"
242
+
243
+ Make sure you've enabled **Remote** mode in the Vibe extension settings. The UUID only appears when Remote mode is active.
244
+
245
+ ### "Connection refused" errors
246
+
247
+ 1. Ensure the `vibebrowser-mcp` process is still running
248
+ 2. Check the terminal for error messages
249
+ 3. Verify the MCP URL matches exactly (including the `/mcp` path)
250
+
251
+ ### "No extension connected"
252
+
253
+ 1. Open Chrome and click the Vibe extension icon
254
+ 2. Verify MCP External is enabled in Settings
255
+ 3. Check the extension shows "Connected" status
256
+
257
+ ### MCP URL format
258
+
259
+ The correct format is:
260
+ ```
261
+ http://127.0.0.1:8788/mcp
262
+ ```
263
+
264
+ Not `http://127.0.0.1:8788` (missing `/mcp` path).