@vibebrowser/mcp 0.2.3 → 0.2.5

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.
@@ -0,0 +1,351 @@
1
+ # Chrome DevTools Relay — System Design
2
+
3
+ ## Problem
4
+
5
+ Cloud AI agents (OpenClaw tenants, coding assistants, automation pipelines) need to
6
+ control a user's **local Chrome browser** — the one with their cookies, bookmarks,
7
+ logged-in sessions, and extensions. Today this requires the agent and browser to
8
+ be on the same machine or network.
9
+
10
+ The user's browser is behind NAT, on a laptop, on a home network. The agent runs
11
+ in a cloud Kubernetes pod. There is no direct path.
12
+
13
+ ## Solution
14
+
15
+ A **secure relay** that bridges the gap:
16
+
17
+ ```
18
+ ┌──────────────────────────────────────────────────────────────────┐
19
+ │ CLOUD │
20
+ │ │
21
+ │ ┌─────────────────────┐ ┌──────────────────────────┐ │
22
+ │ │ OpenClaw Skill │ │ Vibe Relay Backend │ │
23
+ │ │ (or any REST caller)│──POST─▶│ relay.vibebrowser.com │ │
24
+ │ │ │◀─resp──│ │ │
25
+ │ │ Authorization: │ │ • authenticates bearer │ │
26
+ │ │ Bearer <token> │ │ • routes by browser_uuid │ │
27
+ │ └─────────────────────┘ │ • queues tool calls │ │
28
+ │ │ • returns results │ │
29
+ │ └────────────┬─────────────┘ │
30
+ │ │ │
31
+ └───────────────────────────────────────────────│───────────────────┘
32
+ │ WSS (outbound
33
+ │ from user machine)
34
+ ┌───────────────────────────────────────────────│───────────────────┐
35
+ │ USER MACHINE │ │
36
+ │ ▼ │
37
+ │ ┌────────────────────────────────────────────────────────────┐ │
38
+ │ │ Relay Client (local process) │ │
39
+ │ │ • connects outbound to wss://relay.vibebrowser.com │ │
40
+ │ │ • registers browser_uuid │ │
41
+ │ │ • receives tool calls from relay │ │
42
+ │ │ • executes them via chrome-devtools-mcp tools │ │
43
+ │ │ • returns results through relay │ │
44
+ │ └──────────────────────────┬─────────────────────────────────┘ │
45
+ │ │ CDP (localhost:9222) │
46
+ │ ▼ │
47
+ │ ┌────────────────────────────────────────────────────────────┐ │
48
+ │ │ Chrome (user's browser) │ │
49
+ │ │ --remote-debugging-port=9222 │ │
50
+ │ │ User's cookies, sessions, extensions, bookmarks │ │
51
+ │ └────────────────────────────────────────────────────────────┘ │
52
+ │ │
53
+ └───────────────────────────────────────────────────────────────────┘
54
+ ```
55
+
56
+ ### Key properties
57
+
58
+ - **No inbound ports** on the user's machine. The relay client connects outbound.
59
+ - **Bearer token auth** on every cloud API call. The browser UUID alone is not a secret.
60
+ - **Full chrome-devtools-mcp toolset** — 27 tools: click, fill, navigate, screenshot,
61
+ snapshot, network interception, performance tracing, Lighthouse, etc.
62
+ - **User stays in control** — they start/stop the relay client, they see their browser.
63
+ - **Works with any cloud caller** — OpenClaw skills, CI pipelines, REST scripts.
64
+
65
+ ---
66
+
67
+ ## Components
68
+
69
+ ### 1. Relay Client (this repo, forked from chrome-devtools-mcp)
70
+
71
+ A local CLI process the user runs. Based on a fork of
72
+ [chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp)
73
+ (Apache 2.0, by Google/ChromeDevTools team).
74
+
75
+ **What chrome-devtools-mcp already provides:**
76
+
77
+ - 27 browser automation tools (input, navigation, emulation, performance,
78
+ network, console, debugging, Lighthouse)
79
+ - Puppeteer-based Chrome control via CDP
80
+ - Connection to running Chrome via `--browser-url` or `--autoConnect`
81
+ - WebSocket endpoint connection with custom headers
82
+ - Slim mode (3 tools) for basic tasks
83
+ - Requires Node.js v20.19+, Chrome stable+
84
+
85
+ **What we add:**
86
+
87
+ - Outbound WebSocket connection to cloud relay
88
+ - Tool call receive/execute/respond loop
89
+ - Auth handshake (browser_uuid + access_token)
90
+ - Reconnection with backoff
91
+ - Local config persistence (~/.vibe-relay/)
92
+
93
+ **CLI interface:**
94
+
95
+ ```bash
96
+ # First time: authenticate
97
+ vibe-relay login --token <access_token>
98
+
99
+ # Connect to relay (browser must be running with --remote-debugging-port)
100
+ vibe-relay connect
101
+
102
+ # Or with explicit browser URL
103
+ vibe-relay connect --browser-url http://localhost:9222
104
+
105
+ # Check status
106
+ vibe-relay status
107
+ ```
108
+
109
+ ### 2. Vibe Relay Backend (cloud service)
110
+
111
+ Stateless relay that authenticates callers and routes tool calls to connected
112
+ browser sessions.
113
+
114
+ **API endpoints:**
115
+
116
+ ```
117
+ GET /v1/browser-sessions/:uuid/status
118
+ → { connected: bool, tools: string[], connectedAt: ISO8601 }
119
+
120
+ GET /v1/browser-sessions/:uuid/tools
121
+ → { tools: [ { name, description, inputSchema } ] }
122
+
123
+ POST /v1/browser-sessions/:uuid/tools/:toolName
124
+ → { result: ... }
125
+ Body: { arguments: { ... } }
126
+
127
+ All require: Authorization: Bearer <token>
128
+ ```
129
+
130
+ **Responsibilities:**
131
+
132
+ - Validate bearer tokens (scope: user, session, optional tenant/workspace)
133
+ - Maintain WebSocket connections to relay clients
134
+ - Queue tool call requests, match to responses
135
+ - Timeout handling (30s default, configurable)
136
+ - Rate limiting per token
137
+
138
+ **Not responsible for:**
139
+
140
+ - Executing any browser commands (that's the relay client)
141
+ - Storing browser state or screenshots
142
+ - Managing Chrome processes
143
+
144
+ ### 3. OpenClaw Integration (skill + config)
145
+
146
+ OpenClaw does not speak MCP. It uses skills that call CLI tools or REST APIs.
147
+
148
+ **Skill definition:**
149
+
150
+ ```yaml
151
+ name: vibe-browser
152
+ description: Control the user's local Chrome browser through Vibe relay
153
+ tools:
154
+ - navigate_page
155
+ - take_snapshot
156
+ - take_screenshot
157
+ - click
158
+ - fill
159
+ - press_key
160
+ - evaluate_script
161
+ - list_network_requests
162
+ - get_network_request
163
+ - lighthouse_audit
164
+ # ... all 27 chrome-devtools-mcp tools
165
+ ```
166
+
167
+ Each tool in the skill calls the relay REST API:
168
+
169
+ ```bash
170
+ curl -X POST \
171
+ -H "Authorization: Bearer $VIBE_ACCESS_TOKEN" \
172
+ -H "Content-Type: application/json" \
173
+ "https://relay.vibebrowser.com/v1/browser-sessions/$BROWSER_UUID/tools/navigate_page" \
174
+ -d '{"arguments": {"url": "https://example.com", "type": "url"}}'
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Security Model
180
+
181
+ ### Identifiers vs Secrets
182
+
183
+ | Value | Purpose | Secret? | Rotatable? |
184
+ |----------------|--------------------------------|---------|------------|
185
+ | browser_uuid | Identifies which browser | No | Yes |
186
+ | access_token | Proves caller is authorized | Yes | Yes |
187
+
188
+ ### Token Scoping
189
+
190
+ Access tokens are scoped to:
191
+
192
+ - **User** — which user owns this token
193
+ - **Session** (optional) — which browser session(s) it can access
194
+ - **Tenant/Workspace** (optional) — for multi-tenant scenarios
195
+ - **Expiration** — TTL, default 24h
196
+ - **Permissions** (future) — which tools are allowed
197
+
198
+ ### Auth Flow
199
+
200
+ ```
201
+ 1. User generates access_token via Vibe dashboard or CLI
202
+ 2. User starts relay client with token (stored in ~/.vibe-relay/config.json)
203
+ 3. Relay client connects to cloud relay, sends { browser_uuid, access_token }
204
+ 4. Cloud relay validates token, registers session
205
+ 5. Cloud caller (OpenClaw) sends tool call with Authorization: Bearer <token>
206
+ 6. Cloud relay validates caller's token, checks session access, forwards to client
207
+ 7. Client executes tool locally, returns result through relay
208
+ ```
209
+
210
+ ### Threat Model
211
+
212
+ | Threat | Mitigation |
213
+ |----------------------------------|-------------------------------------------------|
214
+ | Stolen browser_uuid | UUID alone grants nothing; need valid token |
215
+ | Stolen access_token | Scoped + expiring; revocable via dashboard |
216
+ | MITM on relay connection | WSS (TLS) for client↔relay; HTTPS for API calls |
217
+ | Relay client compromise | Runs as user process; same trust as the browser |
218
+ | Cloud relay compromise | No browser access stored; just routing + auth |
219
+ | Unauthorized tool execution | Token scope + optional tool allowlists |
220
+
221
+ ---
222
+
223
+ ## Why Not Other Approaches
224
+
225
+ ### Why not HTTP MCP bridge on vibebrowser-mcp?
226
+
227
+ We explored adding `--transport http` to vibebrowser-mcp to expose a URL-addressable MCP
228
+ endpoint. This doesn't work for OpenClaw because:
229
+
230
+ 1. **OpenClaw doesn't speak MCP** — it calls CLI tools and REST APIs from skills.
231
+ 2. **MCP HTTP still requires a reachable endpoint** — the user's machine is behind
232
+ NAT, so a localhost MCP server isn't reachable from cloud.
233
+ 3. **It solves the wrong problem** — the issue isn't MCP vs HTTP, it's
234
+ cloud-to-local connectivity.
235
+
236
+ ### Why not CDP shim over Vibe browser extension?
237
+
238
+ The Vibe browser extension (`chrome.debugger` API) only exposes a restricted
239
+ subset of CDP domains:
240
+
241
+ - **Missing:** `Browser.*`, `SystemInfo.*`, `Security.*`, `ServiceWorker.*`,
242
+ `HeapProfiler`, `Memory`, `LayerTree`, `Media`
243
+ - **Conflict:** Opening Chrome DevTools terminates the extension's debugger session
244
+ - **Limited:** No `Browser.getWindowForTarget`, no full network interception
245
+
246
+ The chrome-devtools-mcp approach via Puppeteer/CDP gives full access to all
247
+ Chrome DevTools Protocol domains.
248
+
249
+ ### Why not tunnel/ngrok?
250
+
251
+ - Requires the user to install and configure a separate tunneling tool
252
+ - Exposes a raw CDP endpoint to the internet (massive attack surface)
253
+ - No built-in auth, rate limiting, or tool-level access control
254
+ - CDP is designed for localhost trust, not internet exposure
255
+
256
+ ### Why fork chrome-devtools-mcp instead of building from scratch?
257
+
258
+ - **27 production-tested tools** with proper error handling and edge cases
259
+ - **Apache 2.0 license** — fork-friendly, no copyleft concerns
260
+ - **Active maintenance** by Google/ChromeDevTools team
261
+ - **Puppeteer integration** — handles Chrome lifecycle, reconnection, tab management
262
+ - We only need to add the relay transport layer; the tool implementations stay as-is
263
+
264
+ ---
265
+
266
+ ## Data Flow: Tool Execution
267
+
268
+ ```
269
+ OpenClaw skill Cloud Relay Relay Client Chrome
270
+ │ │ │ │
271
+ │ POST /tools/take_snapshot │ │ │
272
+ │ Authorization: Bearer xxx │ │ │
273
+ │ ──────────────────────────────▶│ │ │
274
+ │ │ validate token │ │
275
+ │ │ lookup browser session │ │
276
+ │ │ │ │
277
+ │ │ WS: { call: take_snapshot } │ │
278
+ │ │ ─────────────────────────────▶│ │
279
+ │ │ │ CDP: getDocument │
280
+ │ │ │ ────────────────────▶│
281
+ │ │ │ │
282
+ │ │ │ CDP: a11y snapshot │
283
+ │ │ │◀────────────────────│
284
+ │ │ │ │
285
+ │ │ WS: { result: snapshot } │ │
286
+ │ │◀─────────────────────────────│ │
287
+ │ │ │ │
288
+ │ 200 { result: snapshot } │ │ │
289
+ │◀──────────────────────────────│ │ │
290
+ │ │ │ │
291
+ ```
292
+
293
+ ---
294
+
295
+ ## Implementation Plan
296
+
297
+ ### Phase 1: Relay Client (fork + relay layer)
298
+
299
+ 1. Fork `chrome-devtools-mcp` → `vibe-relay-client`
300
+ 2. Add WebSocket client that connects outbound to relay backend
301
+ 3. Implement tool call receive → execute → respond loop
302
+ 4. Add `login`, `connect`, `status` CLI commands
303
+ 5. Add config persistence (~/.vibe-relay/)
304
+ 6. Test locally with a mock relay server
305
+
306
+ ### Phase 2: Relay Backend (cloud service)
307
+
308
+ 1. Minimal relay server (Node.js/Bun, deployable to Fly.io or AKS)
309
+ 2. WebSocket handler for relay client connections
310
+ 3. REST API for tool calls with bearer auth
311
+ 4. Token validation + session management
312
+ 5. Timeout + error handling
313
+ 6. Deploy behind `relay.vibebrowser.com`
314
+
315
+ ### Phase 3: OpenClaw Skill
316
+
317
+ 1. Write skill that wraps relay REST API calls
318
+ 2. Include setup instructions (install relay client, get token, connect)
319
+ 3. Test with real OpenClaw tenant
320
+ 4. Ship in OpenClawBot repo or as standalone installable skill
321
+
322
+ ### Phase 4: Polish
323
+
324
+ 1. Dashboard UI for token management
325
+ 2. Session monitoring (connected browsers, active tools)
326
+ 3. Tool-level permissions
327
+ 4. Usage analytics
328
+ 5. Documentation site / blog post
329
+
330
+ ---
331
+
332
+ ## Open Questions
333
+
334
+ 1. **Relay backend hosting** — Fly.io (simple, edge-deployed) vs AKS sidecar
335
+ (co-located with OpenClaw tenants, lower latency)?
336
+ 2. **Binary vs screenshot transport** — should screenshots go through the relay
337
+ as base64, or should the relay client upload to object storage and return a URL?
338
+ 3. **Multi-tab support** — should one relay client session expose all Chrome tabs,
339
+ or should users explicitly attach to specific tabs?
340
+ 4. **Extension integration** — should the Vibe browser extension be able to act
341
+ as a relay client directly (no separate process)?
342
+
343
+ ---
344
+
345
+ ## References
346
+
347
+ - [chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp) — base for relay client
348
+ - [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) — CDP spec
349
+ - [Puppeteer](https://pptr.dev/) — Chrome automation library used by chrome-devtools-mcp
350
+ - [OpenClaw Skills](https://github.com/openclaw/openclaw) — skill system documentation
351
+ - [Vibe Browser Extension](https://github.com/AnomalyCo/AnomalyBrowser) — existing Vibe browser tools
package/docs/eval.md ADDED
@@ -0,0 +1,209 @@
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 25, 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
+ | 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 |
20
+ | 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 |
21
+
22
+ Important scope note:
23
+ - There is **not yet** a full hosted OpenClaw runtime eval in this repo.
24
+ - Current OpenClaw coverage is the **OpenClaw-compatible CLI surface** (`vibebrowser-cli`) plus the `openclaw` helper and HTTP bridge docs.
25
+ - Do not claim full hosted OpenClaw runtime parity based only on the CLI test.
26
+
27
+ ## Source Selectors
28
+
29
+ ### Browser CLI harness
30
+
31
+ `scripts/e2e-browser-cli.mjs` now supports:
32
+
33
+ - `E2E_BROWSER_CLI_SOURCE=local`
34
+ - `E2E_BROWSER_CLI_SOURCE=pack`
35
+ - `E2E_BROWSER_CLI_SOURCE=npm`
36
+
37
+ Optional override:
38
+
39
+ - `E2E_BROWSER_CLI_PACKAGE=/absolute/or/relative/path/to/package.tgz`
40
+
41
+ `pack` mode creates a temporary tarball with `npm pack --json --pack-destination ...` and runs:
42
+
43
+ ```bash
44
+ npx -y --package <local-tarball> vibebrowser-cli ...
45
+ ```
46
+
47
+ ### MCP agent harness
48
+
49
+ `scripts/e2e-mcp-agents.mjs` now supports:
50
+
51
+ - `E2E_MCP_SOURCE=local`
52
+ - `E2E_MCP_SOURCE=pack`
53
+ - `E2E_MCP_SOURCE=npm`
54
+
55
+ Optional override:
56
+
57
+ - `E2E_MCP_PACKAGE=/absolute/or/relative/path/to/package.tgz`
58
+
59
+ `pack` mode creates a temporary tarball and runs:
60
+
61
+ ```bash
62
+ npx -y --package <local-tarball> vibebrowser-mcp ...
63
+ ```
64
+
65
+ ### Cross-repo OpenCode eval
66
+
67
+ `../vibe/tests/mcp-eval.test.js` now accepts:
68
+
69
+ - `--mcp-source auto`
70
+ - `--mcp-source local`
71
+ - `--mcp-source pack`
72
+ - `--mcp-source npm`
73
+ - `--mcp-package <tarball-or-package-spec>`
74
+
75
+ Use `--mcp-source pack` when validating a release candidate before publish.
76
+
77
+ ## Required Commands
78
+
79
+ ### 1. Local regression suite
80
+
81
+ ```bash
82
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
83
+ npm run build
84
+ npm test
85
+ ```
86
+
87
+ Pass signal:
88
+
89
+ - `npm test` exits `0`
90
+ - output contains:
91
+ - `e2e ok`
92
+ - `http e2e ok`
93
+ - `browser cli e2e ok`
94
+
95
+ ### 2. Packaged CLI artifact validation
96
+
97
+ ```bash
98
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
99
+ E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs
100
+ ```
101
+
102
+ Pass signal:
103
+
104
+ - output contains `browser cli e2e ok`
105
+ - `vibebrowser-cli` is installed from a `.tgz` package artifact, not from the workspace
106
+
107
+ ### 3. Packaged binary smoke check
108
+
109
+ ```bash
110
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
111
+ TMP_DIR="$(mktemp -d)"
112
+ npm pack --json --pack-destination "$TMP_DIR"
113
+ npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-mcp --help
114
+ npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-cli --help
115
+ ```
116
+
117
+ Pass signal:
118
+
119
+ - `vibebrowser-mcp --help` prints the branded CLI
120
+ - `vibebrowser-cli --help` prints the standalone OpenClaw-compatible CLI
121
+
122
+ ### 4. Real-extension agent eval
123
+
124
+ ```bash
125
+ cd /Users/engineer/workspace/vibebrowser/vibe-mcp
126
+ E2E_MCP_SOURCE=pack node scripts/e2e-mcp-agents.mjs
127
+ ```
128
+
129
+ Pass signal:
130
+
131
+ - output contains `e2e ok`
132
+ - Codex uses `vibe-browser.*` tools
133
+ - OpenCode can resolve the same MCP config and report `vibe-browser connected`
134
+
135
+ Hard requirement:
136
+
137
+ - a live Vibe extension session must already be connected or connectable on the relay path
138
+ - this harness does **not** prove anything if the extension is absent
139
+
140
+ ### 5. Full OpenCode browser eval in sibling repo
141
+
142
+ ```bash
143
+ cd /Users/engineer/workspace/vibebrowser/vibe
144
+ node tests/mcp-eval.test.js --skip-build --model github-copilot/gpt-4.1 --mcp-source pack
145
+ ```
146
+
147
+ Pass criteria:
148
+
149
+ - `MCP External enabled: PASS`
150
+ - `Relay connected: PASS`
151
+ - `MCP tools used: PASS`
152
+ - `Tickers found: 6/6`
153
+ - process exits `0`
154
+
155
+ Note:
156
+
157
+ - this harness launches its own browser test environment from the `vibe` repo
158
+ - use it when you explicitly want the full browser-task eval, not just package smoke coverage
159
+
160
+ ## Latest Verification Snapshot
161
+
162
+ Commands executed in this session:
163
+
164
+ | Command | Result | Notes |
165
+ |---|---|---|
166
+ | `npm run build` | PASS | local TypeScript build succeeded |
167
+ | `npm test` | PASS | relay race, HTTP, and local browser CLI e2e all passed |
168
+ | `E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs` | PASS | tarball-installed `vibebrowser-cli` passed end to end |
169
+ | `npm pack --json --pack-destination <tmp>` | PASS | tarball includes both `dist/cli.js` and `dist/browser-main.js` plus docs/openclaw skill files |
170
+ | `npx -y --package <local-tarball> vibebrowser-mcp --help` | PASS | branded `vibebrowser-mcp` binary available from package artifact |
171
+ | `npx -y --package <local-tarball> vibebrowser-cli --help` | PASS | standalone `vibebrowser-cli` binary available from package artifact |
172
+ | `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 |
173
+ | `npx -y --package @vibebrowser/mcp@latest vibebrowser-mcp --help` | PASS, but stale | published npm has the `vibebrowser-mcp` alias, but not the full new standalone CLI release shape |
174
+ | `npx -y --package @vibebrowser/mcp@latest vibebrowser-cli --help` | FAIL | `vibebrowser-cli` is not present in the current npm `latest` release |
175
+ | `npm whoami` | FAIL | `ENEEDAUTH`; publish from this machine is currently blocked |
176
+
177
+ Observed real-extension agent failure:
178
+
179
+ ```text
180
+ Error: Extension did not connect to relay within 120000ms. Ensure Vibe extension has MCP External enabled in the active Chrome profile.
181
+ ```
182
+
183
+ Interpretation:
184
+
185
+ - packaged artifacts are valid locally
186
+ - the standalone CLI branding and binaries are correct in the tarball
187
+ - published npm `latest` is **not yet** updated to the new branded binaries
188
+ - real-agent validation currently depends on a live extension session and was not satisfiable in this shell session
189
+
190
+ ## Publish Reality
191
+
192
+ Current npm state:
193
+
194
+ - `npm view @vibebrowser/mcp version dist-tags.latest --json` returned `0.2.4`
195
+ - `@latest` still resolves to a partial older package surface
196
+ - `npm whoami` failed with `ENEEDAUTH`
197
+
198
+ Consequences:
199
+
200
+ - the new `vibebrowser-mcp` / `vibebrowser-cli` binaries are verified in a local tarball artifact
201
+ - they are **not yet published** to npm from this machine
202
+ - do not claim npm end-to-end availability until:
203
+ - a new version is cut
204
+ - publish auth is configured
205
+ - `npx -y --package @vibebrowser/mcp@<new-version> vibebrowser-cli --help` succeeds
206
+
207
+ ## Tracking
208
+
209
+ - Tracking issue: `VibeTechnologies/vibe-mcp#22`