@mseep/vessel-browser 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,578 @@
1
+ <div align="center">
2
+
3
+ ![quanta-intellect-logo-transparent](https://cdn-uploads.huggingface.co/production/uploads/686c460ba3fc457ad14ab6f8/gB6J60f9Yeyb3Thop2dUa.png)
4
+
5
+ <a href="https://snapcraft.io/vessel-browser">
6
+ <img alt="Get it from the Snap Store" src=https://snapcraft.io/en/dark/install.svg />
7
+ </a>
8
+ <a href="https://www.producthunt.com/products/quanta-intellect?embed=true&amp;utm_source=badge-featured&amp;utm_medium=badge&amp;utm_campaign=badge-vessel-browser-from-quanta-intellect" target="_blank" rel="noopener noreferrer"><img alt="Vessel Browser from Quanta Intellect - The browser where agents drive and humans supervise | Product Hunt" width="250" height="54" src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1107491&amp;theme=dark&amp;t=1774779141692"></a>
9
+
10
+ # Vessel: Your Agent's Browser
11
+ </div>
12
+
13
+ Open source chromium-based browser for persistent web agents. Linux is the most mature install target today, and macOS release packaging is available from source.
14
+
15
+ Vessel gives external agent harnesses a real browser with durable state, MCP control, and a human-visible supervisory UI. It is built for long-running workflows where the agent drives and the human audits, intervenes, and redirects when needed.
16
+
17
+ - **Built for agent harnesses** such as Hermes Agent, OpenClaw, and other MCP clients
18
+ - **Keeps browser state alive** with named sessions, pinned tabs, editable/exportable bookmarks, annotated checkpoints, action undo, and structured page visibility
19
+ - **Keeps humans in the loop** with approvals, runtime controls, and a visible browser instead of a headless black box
20
+
21
+ *Vessel is in active development and currently makes no security assurances. Use and deploy it with care.*
22
+
23
+ https://github.com/user-attachments/assets/0a72b48a-873a-4eb0-b8f2-23e34d8472c4
24
+
25
+ ## Quick Start
26
+
27
+ Want the full agent toolkit from day one? [Start a 7-Day Free Trial of Vessel Premium — $5.99/mo](https://vesselpremium.quantaintellect.com/checkout).
28
+
29
+ ### Fastest Install Today
30
+
31
+ Linux AppImage from GitHub Releases:
32
+
33
+ 1. Download the latest `Vessel-<version>-x64.AppImage`
34
+ 2. Mark it executable: `chmod +x Vessel-*.AppImage`
35
+ 3. Launch it: `./Vessel-*.AppImage`
36
+ 4. Open Settings (`Ctrl+,`) and confirm the MCP endpoint shown there
37
+
38
+ ### Install via npm
39
+
40
+ ```bash
41
+ npm install -g @quanta-intellect/vessel-browser
42
+ vessel-browser
43
+ ```
44
+
45
+ Or run it directly without installing:
46
+
47
+ ```bash
48
+ npx @quanta-intellect/vessel-browser
49
+ ```
50
+
51
+ ### Source Install
52
+
53
+ ```bash
54
+ curl -fsSL https://raw.githubusercontent.com/unmodeled-tyler/vessel-browser/main/scripts/install.sh | bash
55
+ ```
56
+
57
+ ### Development From Source
58
+
59
+ Vessel development uses Node.js 22. If you use `fnm`, run `fnm use` from the repo root to pick up `.node-version`.
60
+
61
+ ```bash
62
+ fnm use
63
+ npm install
64
+ npm run dev
65
+ ```
66
+
67
+ If you want extra local AI tracing in development, create an optional `src/main/telemetry/trace-logger.local.cjs` file. Vessel will load it only in local dev builds, and packaged production builds ignore it.
68
+
69
+ ### Why Vessel?
70
+
71
+ Most browser automation stacks are either headless, stateless, or designed around a human as the primary operator. Vessel is built around the opposite model: the browser is the agent's operating surface, and the human stays in the loop through a visible interface with clear supervisory controls.
72
+
73
+ <img width="1280" height="800" alt="Vessel Browser supervisor sidebar showing agent workflow controls" src="https://github.com/user-attachments/assets/8e208ee1-cb89-4318-87a2-9561a7d9aecf" />
74
+ <img width="1280" height="800" alt="Vessel Browser command bar and agent-driven page interaction" src="https://github.com/user-attachments/assets/da7b28ea-6c5f-4aa7-909e-0a255c80d508" />
75
+ <img width="1280" height="800" alt="Vessel Browser persistent session and checkpoint interface" src="https://github.com/user-attachments/assets/3b3d2033-5a59-4806-bbc1-359efb7b43a9" />
76
+
77
+ <img width="1280" height="800" alt="Vessel Browser integrated chat assistant with browser tools" src="https://github.com/user-attachments/assets/b1c08d6c-bcdf-4c9a-8429-a71a23a61903" />
78
+
79
+ Vessel is built for persistent web agents that need a real browser, durable state, and a human-visible interface. The agent is the primary operator. The human follows along in the live browser UI, audits what the agent is doing, and steers when needed.
80
+
81
+ Today, Vessel provides the browser shell, page visibility, and supervisory surfaces needed to support that model. The long-term goal is not "a browser with AI features," but a browser runtime for autonomous agents with a clear supervisory experience for humans.
82
+
83
+ ## Features
84
+
85
+ - **Agent-first browser model** — Vessel is designed around an agent driving the browser while a human watches, intervenes, and redirects
86
+ - **Human-visible browser UI** — pages render like a normal browser so agent activity stays legible instead of disappearing into a headless run
87
+ - **Command Bar** (`Ctrl+L`) — a secondary operator surface for harness-driven workflows and future runtime commands
88
+ - **Supervisor Sidebar** (`Ctrl+Shift+L`) — live supervision across eight tabs: Supervisor, Bookmarks, Checkpoints, Chat, Skills, History, Changes, and Research
89
+ - **Chat Assistant** — built-in conversational AI in the sidebar Chat tab; supports Anthropic, OpenAI, Ollama, llama.cpp, Mistral, xAI, Google Gemini, OpenRouter, and any OpenAI-compatible endpoint; reads the current page automatically; has full access to the same browser tools as external agents; multi-turn session history; configure provider, model, and API key in Settings
90
+ - **Skills** (Premium) — reusable browser skills in the sidebar Skills tab; import, view, run, or delete skills the built-in agent can use for research, shopping, and site-specific workflows
91
+ - **Research Desk** (Beta) — a dedicated sidebar Research tab for structured research reports; start with a topic, complete an in-tab briefing, let Vessel draft research objectives, approve the plan, then dispatch browser sub-agents to collect source-backed claims and synthesize a markdown-exportable report. Starting the brief is free; plan approval, sub-agent execution, and report export require Vessel Premium.
92
+ - **Dev Tools Panel** (`F12`) — inspect console output, network requests, and MCP/agent activity in a resizable panel at the bottom of the window; export logs by category and date range as JSON
93
+ - **Browser Basics For Long Runs** — pinned tabs stay compact at the front of the tab strip and are protected from accidental close; tab groups can be color-coded and collapsed; audible tabs show audio indicators with mute controls; open additional browser windows with `Ctrl+N`; print the active page with `Ctrl+P` or save it directly as PDF with `Ctrl+Shift+P`
94
+ - **Action Undo / Rollback** — restore the browser to the session snapshot captured immediately before the last successful mutating agent action; available from the Supervisor tab and through the `undo_last_action` tool
95
+ - **Agent-Meaningful Bookmarks** — bookmarks carry structured context the agent can read and act on: `intent` (what the page is for), `expectedContent` (what to expect on the page), `keyFields` (important form fields), `agentHints` (arbitrary directives), and a stored `pageSchema`; humans can create and edit this metadata directly in the Bookmarks tab, and all fields are searchable
96
+ - **Portable Bookmark Export** — export browser-compatible Netscape HTML for import into Chrome, Firefox, Safari, Edge, Brave, and other browsers; optionally include Vessel notes/agent metadata, or export a full-fidelity Vessel JSON archive
97
+ - **Page Schema Inference** — Vessel automatically infers a typed schema for every page: `pageType` (article, product, form, search, checkout, login, dashboard), `primaryEntity` (structured fields for products and articles), `formFields` (with names, types, labels, selectors), and `actionButtons` (with inferred intents: submit, addToCart, login, etc.); schema is attached to every content extraction result
98
+ - **Bookmarks for Agents** — save pages into folders, attach one-line folder summaries, and search bookmarks over MCP instead of dumping the entire library
99
+ - **Named Session Persistence** — save cookies, localStorage, and current tab layout under a reusable name, then reload it after a restart
100
+ - **Annotated Checkpoints** — capture and restore short-lived browser recovery points with names and editable notes, so humans and agents can mark why a checkpoint matters before risky flows
101
+ - **Page Highlights** — agents can visually highlight text or elements on any page with labeled, color-coded markers that persist across navigation; highlight count and navigation controls appear in the sidebar; cleared explicitly or via tool call
102
+ - **Agent Transcript Dock** — floating transcript overlay anchored to the browser chrome; configurable display modes (off, summary, full) set in Settings; shows live agent thinking and status updates without occupying sidebar space
103
+ - **Workflow Flow Tracking** — agents can declare a named multi-step workflow at runtime using `flow_start`; progress is tracked step-by-step with `flow_advance` and visible in the sidebar throughout execution
104
+ - **Structured Page Visibility Context** — extraction can report in-viewport elements, obscured controls, active overlays, and dormant consent/modal UI
105
+ - **Popup Recovery Tools** — agents can explicitly dismiss common popups, newsletter gates, and consent walls instead of brute-forcing generic clicks
106
+ - **Form Autofill Profiles** — save reusable personal or work profiles in Settings and fill common contact, address, and organization fields on the current page; Vessel matches fields using labels, names, placeholders, and autocomplete hints
107
+ - **Page Diff / "What Changed?"** — Vessel remembers the last snapshot of a page and surfaces a `Changed` badge in the address bar when the title, headings, or main content differ on a later visit; expand it to see a compact summary of what changed since the last snapshot
108
+ - **What Changed Timeline** (Premium) — the sidebar Changes tab keeps a per-page history of recent change bursts, showing when each update was detected and a compact summary of what changed
109
+ - **Per-Tab Ad Blocking Controls** — tabs default to ad blocking on, but agents can selectively disable and re-enable blocking when a page misbehaves
110
+ - **Domain Policy** — allowlist or blocklist domains globally in Settings; agents cannot navigate to blocked domains
111
+ - **Agent Credential Vault** (Premium) — encrypted credential storage for agent-driven logins; credentials are filled directly into login forms via a "blind fill" pattern and are never sent to AI providers; user consent dialog before every use; TOTP 2FA support; domain-scoped access; append-only audit log
112
+ - **Screenshot & Visual Analysis** (Premium) — take a full-page screenshot and pass the image directly to the AI for visual layout analysis; useful when text extraction fails on heavy or canvas-rendered pages
113
+ - **Obsidian Memory Hooks** (Premium) — optional vault path for agent-written markdown notes, page captures, and research breadcrumbs
114
+ - **Runtime Health Checks** — startup warnings for MCP port conflicts, unreadable settings, and user-data write failures
115
+ - **Reader Mode** — extract article content into a clean, distraction-free view; toggle on and off from the address bar
116
+ - **Focus Mode** (`Ctrl+Shift+F`) — hide all chrome, content fills the screen
117
+ - **Resizable Panels** — drag the sidebar edge to resize; width persists across sessions
118
+ - **Minimal Dark Theme** — warm dark grays, restrained accent color, and no pure black/white
119
+
120
+ ## Positioning
121
+
122
+ Most browsers treat automation as secondary and assume a human is the primary actor. Vessel is the opposite: it is the browser for the agent, with a visible interface that keeps the human in the loop.
123
+
124
+ That means the product should optimize for:
125
+
126
+ - persistent browser state across tasks and sessions
127
+ - clear visibility into what the agent is doing right now
128
+ - lightweight human intervention instead of constant manual driving
129
+ - a browser runtime that can serve long-lived agent systems such as Hermes Agent or OpenClaw-style harnesses
130
+
131
+ ## Stack
132
+
133
+ | Layer | Technology |
134
+ |-------|-----------|
135
+ | Engine | Chromium (Electron 40) |
136
+ | UI Framework | SolidJS |
137
+ | Language | TypeScript |
138
+ | Build | electron-vite + Vite |
139
+ | AI Control | External agent harnesses (Hermes Agent, OpenClaw, MCP clients) + built-in chat (Anthropic, OpenAI, Ollama, llama.cpp, and any OAI-compatible endpoint) |
140
+ | Content Extraction | @mozilla/readability |
141
+
142
+ ## Architecture
143
+
144
+ ```
145
+ Main Process Renderer (SolidJS)
146
+ ├── TabManager (WebContentsView[]) ├── TabBar, AddressBar
147
+ ├── AgentRuntime (session + supervision) ├── CommandBar (secondary surface)
148
+ ├── MCP server for external agents ├── AI Sidebar (Supervisor/Bookmarks/Checkpoints/Chat/Automate/History/Changes/Research)
149
+ ├── AI providers (Anthropic + OAI-compat) ├── DevTools Panel (Console/Network/Activity)
150
+ ├── Supervision, bookmarks, checkpoints ├── Agent Transcript Dock
151
+ └── IPC Handlers ◄──contextBridge──► ──► └── Signal stores (tabs, ai, ui)
152
+ └── IPC Handlers ◄──contextBridge──► Preload API
153
+ ```
154
+
155
+ Each browser tab is a separate `WebContentsView` managed by the main process. The browser chrome (SolidJS) runs in its own view layered on top. All communication between renderer and main goes through typed IPC channels via `contextBridge`.
156
+
157
+ The sidebar Skills tab renders skill forms entirely in the renderer and passes the rendered prompt to the built-in agent via the same `query()` path used by the Chat tab — no additional IPC surface is needed. The Changes tab reads the current page's diff timeline through IPC and unlocks persisted history for Premium users. The Research tab has a dedicated IPC surface for its state machine: briefing is available to everyone, while objective approval, parallel browser sub-agents, report synthesis, and markdown export are Premium-gated during the beta.
158
+
159
+ ## Getting Started
160
+
161
+ The installer:
162
+
163
+ - clones or updates Vessel into `~/.local/share/vessel-browser`
164
+ - installs dependencies and builds the app
165
+ - creates a `vessel-browser` launcher in `~/.local/bin`
166
+ - creates a `vessel-browser-launch` helper in `~/.local/bin`
167
+ - creates a `vessel-browser-update` helper in `~/.local/bin`
168
+ - creates a `vessel-browser-status` helper in `~/.local/bin`
169
+ - creates a desktop entry for Linux app launchers
170
+ - writes `~/.config/vessel/vessel-settings.json` with MCP port `3100`
171
+ - writes `~/.config/vessel/mcp-stdio-snippet.json`
172
+ - writes `~/.config/vessel/mcp-http-snippet.json`
173
+ - installs a `vessel-browser-mcp` helper that can run as a stdio-to-HTTP proxy (`--stdio`) or print config snippets
174
+ - prints the exact recommended stdio MCP snippet to paste into your harness config
175
+
176
+ The packaged AppImage path:
177
+
178
+ - does not require a local Node/Electron toolchain
179
+ - uses the packaged Vessel app icon and metadata
180
+ - is the recommended path for early adopters who just want to run Vessel
181
+
182
+ Windows packaged releases:
183
+
184
+ - use the `Vessel-<version>-x64-setup.exe` NSIS installer
185
+ - can be installed over an existing Vessel install when upgrading
186
+ - preserve Vessel app data during the normal upgrade path
187
+
188
+ You do not need to uninstall Vessel before installing a newer Windows release. Uninstall first only if you are recovering from a broken install or intentionally removing local Vessel data.
189
+
190
+ After install:
191
+
192
+ ```bash
193
+ vessel-browser
194
+ ```
195
+
196
+ ```bash
197
+ # Use the pinned Node.js 22 runtime
198
+ fnm use
199
+
200
+ # Install dependencies
201
+ npm install
202
+
203
+ # If Electron download fails, use a mirror:
204
+ ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" npm install
205
+
206
+ # Development (with HMR)
207
+ npm run dev
208
+
209
+ # Production build
210
+ npm run build
211
+
212
+ # Smoke-test the MVP release path
213
+ npm run smoke:test
214
+
215
+ # Package an unpacked Linux app
216
+ npm run dist:dir
217
+
218
+ # Package a Linux AppImage
219
+ npm run dist
220
+
221
+ # Package an unpacked universal macOS app bundle (run on macOS)
222
+ npm run dist:mac:dir
223
+
224
+ # Package universal macOS DMG + ZIP artifacts (run on macOS)
225
+ npm run dist:mac
226
+
227
+ # Verify a universal macOS build contains Intel and Apple Silicon slices
228
+ npm run verify:mac:universal
229
+
230
+ # Package signed macOS DMG + ZIP artifacts (run on macOS with signing set up)
231
+ npm run dist:mac:signed
232
+ ```
233
+
234
+ Notes:
235
+
236
+ - `npm run dev` still launches the stock Electron binary, so Linux may continue showing the default Electron gear icon in development
237
+ - packaged builds created with `npm run dist` / `npm run dist:dir` use the Vessel app icon
238
+ - `npm run build:icon:mac` regenerates `resources/vessel-icon.icns` from `resources/vessel-icon.png` for macOS packaging
239
+ - `npm run dist:mac` and `npm run dist:mac:dir` build universal macOS artifacts by default, so the same app runs natively on Intel and Apple Silicon Macs
240
+ - `npm run dist:mac:x64` and `npm run dist:mac:arm64` are available when you need smaller architecture-specific test artifacts
241
+ - `npm run verify:mac:universal` uses `lipo` to confirm the packaged app executable and Electron framework include both `x86_64` and `arm64` slices
242
+ - `npm run dist:mac`, `npm run dist:mac:dir`, `npm run dist:mac:x64`, and `npm run dist:mac:arm64` intentionally disable auto-signing so local packaging works on any Mac without keychain setup
243
+ - `npm run dist:mac:signed` and `npm run dist:mac:dir:signed` build universal artifacts and use normal `electron-builder` signing discovery; if your login keychain has duplicate Apple certs, clean those up or use a dedicated keychain before running the signed path
244
+ - signed builds are still not notarized by this repo out of the box, so Gatekeeper warnings remain until notarization is added for release publishing
245
+ - the tracked smoke test runs typecheck, build, the MCP stdio proxy regression check, and the Electron navigation regression harness
246
+ - for headless CI, run the smoke test under `xvfb-run -a npm run smoke:test`
247
+
248
+ ### Setting up Vessel for Hermes Agent or OpenClaw
249
+
250
+ Vessel is designed to act as the browser runtime that your external agent harness drives.
251
+
252
+ 1. Launch Vessel
253
+ 2. Open Settings (`Ctrl+,`) to confirm MCP status, copy the endpoint, or change the MCP port
254
+ 3. Optional: set an Obsidian vault path, create autofill profiles, or adjust session preferences
255
+ 4. Start Hermes Agent or OpenClaw and point it at Vessel — the easiest way is `vessel-browser-mcp --stdio` as the MCP command (auth is resolved automatically), or connect directly to `http://127.0.0.1:<mcpPort>/mcp` with the bearer token from `~/.config/vessel/mcp-auth.json`
256
+ 5. Use the Supervisor panel in Vessel's sidebar to pause the agent, change approval mode, review pending approvals, checkpoint, undo the last mutating action, or restore the browser session while the harness runs
257
+ 6. Use the Bookmarks panel to organize saved pages into folders, edit agent-facing bookmark metadata, export bookmarks for other browsers, and expose saved pages back to the agent over MCP
258
+
259
+ Notes:
260
+
261
+ - Vessel exposes browser control to external agents through its local MCP server
262
+ - The default MCP port is `3100`
263
+ - Hermes Agent and OpenClaw should treat Vessel as the persistent, human-visible browser rather than launching their own separate browser session
264
+ - Vessel supports a built-in Chat tab with configurable AI provider; open Settings (`Ctrl+,`) and enable Chat Assistant to set a provider and model
265
+ - The sidebar Research tab is marked Beta; use it to turn a broad research topic into a brief, approve a multi-thread plan, run browser sub-agents, and export the final report as markdown. Briefing is free, while full execution and export require Premium.
266
+ - `llama.cpp (Local)` is a first-class chat provider in Settings and targets `http://localhost:8080/v1` by default; Vessel auto-fetches the active model from `llama-server`
267
+ - For `llama-server`, use `--ctx-size 16384` minimum and `32768` recommended for reliable Vessel agent loops; lower values often fail once prompt, tool schema, and tool history accumulate
268
+ - Approval policy is controlled live from the sidebar Supervisor panel rather than a separate global settings screen
269
+ - Settings now show MCP runtime status, active endpoint, startup warnings, and allow changing the MCP port with an immediate server restart
270
+ - Settings also include reusable Form Autofill profiles for one-click filling of common contact and address forms on the active page
271
+ - The address bar can also show a `Changed` badge when Vessel detects that a previously visited page has meaningfully changed since the last saved snapshot
272
+ - Premium users can open the sidebar Changes tab for the full What Changed timeline for the active page
273
+ - The Bookmarks tab can export browser-compatible HTML, HTML with Vessel notes, or a full Vessel JSON archive with agent metadata intact
274
+ - Agents can selectively disable ad blocking for a problematic tab, reload, retry the flow, and turn blocking back on later
275
+ - Agents can persist authenticated state with named sessions, for example `github-logged-in`, and reload that state in later runs
276
+ - The intended control plane is an external harness driving Vessel through MCP
277
+ - If you set an Obsidian vault path in Settings, harnesses can write markdown notes directly into that vault via Vessel memory MCP tools
278
+
279
+ ### Using llama.cpp as the built-in chat provider
280
+
281
+ Vessel can talk directly to a local `llama-server` through its OpenAI-compatible API.
282
+
283
+ Example:
284
+
285
+ ```bash
286
+ llama-server -m /path/to/model.gguf --port 8080 --ctx-size 32768
287
+ ```
288
+
289
+ Then in Vessel:
290
+
291
+ 1. Open Settings (`Ctrl+,`)
292
+ 2. Enable Chat Assistant
293
+ 3. Choose `llama.cpp (Local)` as the provider
294
+ 4. Click refresh if needed; Vessel will auto-detect the active model from `http://localhost:8080/v1`
295
+
296
+ Notes:
297
+
298
+ - `--ctx-size 16384` is the minimum practical setting for Vessel agent loops
299
+ - `--ctx-size 32768` is the recommended default for longer browsing sessions
300
+ - Vessel will warn in Settings if it detects a `llama-server` context size below the recommended floor, or if it cannot detect the ctx size from the running server
301
+
302
+ Initial memory tools:
303
+
304
+ - `vessel_memory_note_create`
305
+ - `vessel_memory_append`
306
+ - `vessel_memory_list`
307
+ - `vessel_memory_search`
308
+ - `vessel_memory_page_capture`
309
+ - `vessel_memory_link_bookmark`
310
+
311
+ Bookmark and folder tools exposed today include:
312
+
313
+ - `vessel_bookmark_list`
314
+ - `vessel_bookmark_search`
315
+ - `vessel_bookmark_open`
316
+ - `vessel_bookmark_save`
317
+ - `vessel_bookmark_remove`
318
+ - `vessel_create_folder`
319
+ - `vessel_folder_rename`
320
+ - `vessel_folder_remove`
321
+
322
+ Page interaction and recovery tools exposed today include:
323
+
324
+ - `vessel_extract_content`
325
+ - `vessel_read_page`
326
+ - `vessel_scroll`
327
+ - `vessel_dismiss_popup`
328
+ - `vessel_set_ad_blocking`
329
+ - `vessel_wait_for`
330
+ - `vessel_screenshot` (Premium) — capture the full page as an image for visual AI analysis
331
+ - `undo_last_action` — restore the browser to the snapshot captured before the last successful mutating agent action
332
+
333
+ Page highlight tools:
334
+
335
+ - `vessel_highlight` — visually mark text or an element on the page with a labeled, color-coded overlay; persists until cleared
336
+ - `vessel_clear_highlights` — remove all highlights from the current page
337
+
338
+ Workflow tracking tools:
339
+
340
+ - `vessel_flow_start` — begin a named multi-step workflow and declare its steps upfront; progress appears in the sidebar throughout execution
341
+ - `vessel_flow_advance` — mark the current step complete and advance to the next
342
+ - `vessel_flow_status` — check current workflow progress
343
+ - `vessel_flow_end` — clear the active workflow tracker
344
+
345
+ Data extraction tools (Premium):
346
+
347
+ - `vessel_extract_table` — extract a page table as structured JSON rows with column headers
348
+
349
+ Named session tools exposed today include:
350
+
351
+ - `vessel_save_session`
352
+ - `vessel_load_session`
353
+ - `vessel_list_sessions`
354
+ - `vessel_delete_session`
355
+
356
+ Session files are sensitive because they may contain login cookies and tokens. Vessel stores them under the app user-data directory with restrictive file permissions.
357
+
358
+ Agent Credential Vault tools (Premium):
359
+
360
+ - `vessel_vault_status` — check whether stored credentials exist for a domain (returns labels/usernames, never passwords)
361
+ - `vessel_vault_login` — fill a login form using stored credentials (blind fill — credentials go directly into the page, never into the AI conversation)
362
+ - `vessel_vault_totp` — generate and fill a TOTP 2FA code from a stored secret
363
+
364
+ Session performance tools (Premium):
365
+
366
+ - `vessel_metrics` — show per-tool call counts, average durations, error rates, and total session stats
367
+
368
+ Vault security model:
369
+
370
+ - Credentials are encrypted at rest using AES-256-GCM with a key protected by the OS keychain (Electron safeStorage)
371
+ - Credential values are **never** sent to AI providers — they flow only through the main process to the content script
372
+ - Every credential use triggers a user consent dialog ("Allow Once" / "Allow for Session" / "Deny")
373
+ - All credential access is recorded in an append-only audit log
374
+ - Credentials are domain-scoped — they can only be used on matching domains
375
+ - Users manage credentials in Settings > Agent Credential Vault
376
+
377
+ Notable extraction modes include:
378
+
379
+ - `visible_only` — only currently visible, in-viewport, unobstructed interactive elements plus active overlays
380
+ - `results_only` — likely primary search/result links only
381
+ - `full` / `summary` / `interactives_only` / `forms_only` / `text_only`
382
+
383
+ The extraction output can distinguish:
384
+
385
+ - active blocking overlays
386
+ - dormant consent/modal UI present in the DOM but not active for the current session or region
387
+
388
+ Stdio proxy MCP config (recommended — resolves auth automatically):
389
+
390
+ ```json
391
+ {
392
+ "mcpServers": {
393
+ "vessel": {
394
+ "command": "vessel-browser-mcp",
395
+ "args": ["--stdio"]
396
+ }
397
+ }
398
+ }
399
+ ```
400
+
401
+ The stdio proxy reads the bearer token from `~/.config/vessel/mcp-auth.json` at connection time, so no manual token management is needed.
402
+ Vessel must already be running when your MCP client connects, and `~/.config/vessel/mcp-auth.json` must exist from install or first launch.
403
+
404
+ Generic HTTP MCP config (requires copying the token manually):
405
+
406
+ ```json
407
+ {
408
+ "mcpServers": {
409
+ "vessel": {
410
+ "type": "http",
411
+ "url": "http://127.0.0.1:3100/mcp",
412
+ "headers": {
413
+ "Authorization": "Bearer <token from ~/.config/vessel/mcp-auth.json>"
414
+ }
415
+ }
416
+ }
417
+ }
418
+ ```
419
+
420
+ Hermes Agent `config.yaml` MCP config:
421
+
422
+ ```yaml
423
+ mcp_servers:
424
+ vessel:
425
+ url: "http://127.0.0.1:3100/mcp"
426
+ headers:
427
+ Authorization: "Bearer <token from ~/.config/vessel/mcp-auth.json>"
428
+ timeout: 180
429
+ connect_timeout: 30
430
+ ```
431
+
432
+ ## Configuration
433
+
434
+ The installer writes three snippets to:
435
+
436
+ - `~/.config/vessel/mcp-stdio-snippet.json`
437
+ - `~/.config/vessel/mcp-http-snippet.json`
438
+ - `~/.config/vessel/mcp-hermes-snippet.yaml`
439
+
440
+ It also installs a helper command:
441
+
442
+ ```bash
443
+ vessel-browser-mcp
444
+ ```
445
+
446
+ Helper examples:
447
+
448
+ ```bash
449
+ # Run as stdio-to-HTTP proxy (for MCP client integration)
450
+ vessel-browser-mcp --stdio
451
+
452
+ # Recommended stdio MCP snippet
453
+ vessel-browser-mcp
454
+
455
+ # Generic JSON snippet with Authorization header
456
+ vessel-browser-mcp --format json
457
+
458
+ # Hermes-ready YAML snippet with Authorization header
459
+ vessel-browser-mcp --format hermes
460
+
461
+ # Raw MCP endpoint URL
462
+ vessel-browser-mcp --format url
463
+
464
+ # Raw MCP bearer token
465
+ vessel-browser-mcp --format token
466
+ ```
467
+
468
+ Source install update helpers:
469
+
470
+ ```bash
471
+ # Check whether a source-install update is available
472
+ vessel-browser-update --check
473
+
474
+ # Fetch, rebuild, and update the local source install
475
+ vessel-browser-update
476
+ ```
477
+
478
+ Status helper:
479
+
480
+ ```bash
481
+ # Human-readable local install + MCP status
482
+ vessel-browser-status
483
+
484
+ # Machine-readable status for harnesses
485
+ vessel-browser-status --json
486
+ ```
487
+
488
+ Smart launch helper:
489
+
490
+ ```bash
491
+ # Launch Vessel using the best available local install
492
+ vessel-browser-launch
493
+
494
+ # Show the chosen launch path without starting anything
495
+ vessel-browser-launch --dry-run
496
+ ```
497
+
498
+ `vessel-browser-launch` prefers a healthy source install and falls back to the newest local AppImage when the source install is likely blocked by Electron sandbox permissions.
499
+
500
+ ## Keyboard Shortcuts
501
+
502
+ | Shortcut | Action |
503
+ |----------|--------|
504
+ | `Ctrl+L` | AI Command Bar |
505
+ | `Ctrl+Shift+L` | Toggle AI Sidebar |
506
+ | `Ctrl+Shift+F` | Toggle Focus Mode |
507
+ | `F12` | Toggle Dev Tools Panel |
508
+ | `Ctrl+N` | New Window |
509
+ | `Ctrl+T` | New Tab |
510
+ | `Ctrl+W` | Close Tab |
511
+ | `Ctrl+Shift+T` | Reopen Closed Tab |
512
+ | `Ctrl+Shift+N` | New Private Window |
513
+ | `Ctrl+F` | Find in Page |
514
+ | `Ctrl++` / `Ctrl+=` | Zoom In |
515
+ | `Ctrl+-` | Zoom Out |
516
+ | `Ctrl+0` | Reset Zoom |
517
+ | `Ctrl+P` | Print Active Page |
518
+ | `Ctrl+Shift+P` | Save Active Page as PDF |
519
+ | `Ctrl+,` | Settings |
520
+
521
+ ## Project Structure
522
+
523
+ ```
524
+ src/
525
+ ├── main/ # Electron main process
526
+ │ ├── ai/ # Agent tools, query flow, and AI provider implementations
527
+ │ ├── tabs/ # Tab + TabManager (WebContentsView)
528
+ │ ├── agent/ # Agent runtime, checkpoints, supervision, flow tracking
529
+ │ ├── content/ # Readability extraction, reader mode, screenshot, page snapshots/diff
530
+ │ ├── config/ # Settings persistence
531
+ │ ├── autofill/ # Autofill profile persistence and form-field matching
532
+ │ ├── ipc/ # IPC handler registry
533
+ │ ├── vault/ # Agent Credential Vault (encrypted storage, consent, audit)
534
+ │ ├── mcp/ # MCP server for external agent control
535
+ │ ├── devtools/ # CDP session management for Dev Tools panel
536
+ │ ├── highlights/ # Page highlight capture, injection, and persistence
537
+ │ ├── health/ # Runtime health monitoring (MCP, settings, ports)
538
+ │ ├── premium/ # Subscription management, feature gating, Stripe integration
539
+ │ ├── bookmarks/ # Bookmark and folder persistence
540
+ │ ├── history/ # Browse history
541
+ │ ├── memory/ # Obsidian vault hooks
542
+ │ ├── network/ # Ad blocking, URL safety, link validation, downloads
543
+ │ ├── sessions/ # Named session save/load/delete
544
+ │ ├── startup/ # App initialization, menu, shortcuts, renderer bootstrap
545
+ │ ├── telemetry/ # PostHog analytics (opt-in)
546
+ │ ├── tools/ # Tool definitions, input coercion, pruning
547
+ │ ├── window.ts # Window layout manager
548
+ │ └── index.ts # App entry point
549
+ ├── preload/ # contextBridge scripts
550
+ │ ├── index.ts # Chrome UI preload
551
+ │ └── content-script.ts # Web page preload (readability)
552
+ ├── renderer/ # SolidJS browser UI
553
+ │ └── src/
554
+ │ ├── components/
555
+ │ │ ├── chrome/ # TitleBar, TabBar, AddressBar, AgentTranscriptDock
556
+ │ │ ├── ai/ # CommandBar, Sidebar (Supervisor/Bookmarks/Checkpoints/Chat/Automate/History/Changes/Research)
557
+ │ │ ├── devtools/ # DevTools panel (Console, Network, Activity)
558
+ │ │ └── shared/ # Settings panel
559
+ │ ├── stores/ # SolidJS signal stores (tabs, ai, ui, runtime, bookmarks, etc.)
560
+ │ ├── styles/ # Theme, global CSS
561
+ │ └── lib/ # Keybindings, markdown, skills registry
562
+ └── shared/ # Types + IPC channel constants
563
+ ```
564
+
565
+ ## Design Principles
566
+
567
+ - **Agent first** — the browser is the agent's operating surface, not just a human tool with automation bolted on
568
+ - **Human visible** — the UI should make agent behavior easy to follow, audit, and steer
569
+ - **Persistent by default** — browser state should survive long-running workflows and repeated sessions
570
+ - **Content first** — chrome is 110px, everything else is your page
571
+ - **Easy on the eyes** — warm dark grays, muted text, no visual noise
572
+ - **Linux-native** — frameless window, system font fallbacks, XDG conventions
573
+
574
+ ## License
575
+
576
+ MIT
577
+
578
+ *Developed by Tyler Williams in Portland, Oregon (2026)*
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ const { spawn } = require("child_process");
3
+ const path = require("path");
4
+
5
+ let electronPath;
6
+ try {
7
+ electronPath = require("electron");
8
+ } catch {
9
+ console.error(
10
+ 'Error: "electron" is required but not installed.\n' +
11
+ "Install it with: npm install -g electron"
12
+ );
13
+ process.exit(1);
14
+ }
15
+
16
+ const appPath = path.resolve(__dirname, "..");
17
+
18
+ const child = spawn(electronPath, [appPath], {
19
+ stdio: "inherit",
20
+ env: { ...process.env, ELECTRON_IS_NPM_LAUNCH: "1" },
21
+ });
22
+
23
+ child.on("close", (code) => {
24
+ process.exit(code ?? 0);
25
+ });