Built from the ground-up for agents, Vessel Browser is an open source AI browser for Linux/Mac/Windows that provides a durable state, MCP control, and BYOK with full autonomous browsing. Use with Hermes Agent, OpenClaw, or connect to your favorite API provider.
SaferSkills independently audited Vessel Browser (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center">

<a href="https://snapcraft.io/vessel-browser"> <img alt="Get it from the Snap Store" src=https://snapcraft.io/en/dark/install.svg /> </a> <a href="https://www.producthunt.com/products/quanta-intellect?embed=true&utm_source=badge-featured&utm_medium=badge&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&theme=dark&t=1774779141692"></a>
</div>
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.
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.
Vessel is in active development and currently makes no security assurances. Use and deploy it with care.
https://github.com/user-attachments/assets/0a72b48a-873a-4eb0-b8f2-23e34d8472c4
Want the full agent toolkit from day one? Start a 7-Day Free Trial of Vessel Premium — $5.99/mo.
Linux AppImage from GitHub Releases:
Vessel-<version>-x64.AppImagechmod +x Vessel-*.AppImage./Vessel-*.AppImageCtrl+,) and confirm the MCP endpoint shown therenpm install -g @quanta-intellect/vessel-browser
vessel-browserOr run it directly without installing:
npx @quanta-intellect/vessel-browsercurl -fsSL https://raw.githubusercontent.com/unmodeled-tyler/vessel-browser/main/scripts/install.sh | bashVessel development uses Node.js 22. If you use fnm, run fnm use from the repo root to pick up .node-version.
fnm use
npm install
npm run devIf 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.
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.
<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" /> <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" /> <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" />
<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" />
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.
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.
Ctrl+L) — a secondary operator surface for harness-driven workflows and future runtime commandsCtrl+Shift+L) — live supervision across eight tabs: Supervisor, Bookmarks, Checkpoints, Chat, Skills, History, Changes, and ResearchF12) — 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 JSONCtrl+N; print the active page with Ctrl+P or save it directly as PDF with Ctrl+Shift+Pundo_last_action toolintent (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 searchablepageType (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 resultflow_start; progress is tracked step-by-step with flow_advance and visible in the sidebar throughout executionChanged 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 snapshotCtrl+Shift+F) — hide all chrome, content fills the screenMost 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.
That means the product should optimize for:
| Layer | Technology |
|---|---|
| Engine | Chromium (Electron 40) |
| UI Framework | SolidJS |
| Language | TypeScript |
| Build | electron-vite + Vite |
| AI Control | External agent harnesses (Hermes Agent, OpenClaw, MCP clients) + built-in chat (Anthropic, OpenAI, Ollama, llama.cpp, and any OAI-compatible endpoint) |
| Content Extraction | @mozilla/readability |
Main Process Renderer (SolidJS)
├── TabManager (WebContentsView[]) ├── TabBar, AddressBar
├── AgentRuntime (session + supervision) ├── CommandBar (secondary surface)
├── MCP server for external agents ├── AI Sidebar (Supervisor/Bookmarks/Checkpoints/Chat/Automate/History/Changes/Research)
├── AI providers (Anthropic + OAI-compat) ├── DevTools Panel (Console/Network/Activity)
├── Supervision, bookmarks, checkpoints ├── Agent Transcript Dock
└── IPC Handlers ◄──contextBridge──► ──► └── Signal stores (tabs, ai, ui)
└── IPC Handlers ◄──contextBridge──► Preload APIEach 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.
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.
The installer:
~/.local/share/vessel-browservessel-browser launcher in ~/.local/binvessel-browser-launch helper in ~/.local/binvessel-browser-update helper in ~/.local/binvessel-browser-status helper in ~/.local/bin~/.config/vessel/vessel-settings.json with MCP port 3100~/.config/vessel/mcp-stdio-snippet.json~/.config/vessel/mcp-http-snippet.jsonvessel-browser-mcp helper that can run as a stdio-to-HTTP proxy (--stdio) or print config snippetsThe packaged AppImage path:
Windows packaged releases:
Vessel-<version>-x64-setup.exe NSIS installerYou 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.
After install:
vessel-browser# Use the pinned Node.js 22 runtime
fnm use
# Install dependencies
npm install
# If Electron download fails, use a mirror:
ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" npm install
# Development (with HMR)
npm run dev
# Production build
npm run build
# Smoke-test the MVP release path
npm run smoke:test
# Package an unpacked Linux app
npm run dist:dir
# Package a Linux AppImage
npm run dist
# Package an unpacked universal macOS app bundle (run on macOS)
npm run dist:mac:dir
# Package universal macOS DMG + ZIP artifacts (run on macOS)
npm run dist:mac
# Verify a universal macOS build contains Intel and Apple Silicon slices
npm run verify:mac:universal
# Package signed macOS DMG + ZIP artifacts (run on macOS with signing set up)
npm run dist:mac:signedNotes:
npm run dev still launches the stock Electron binary, so Linux may continue showing the default Electron gear icon in developmentnpm run dist / npm run dist:dir use the Vessel app iconnpm run build:icon:mac regenerates resources/vessel-icon.icns from resources/vessel-icon.png for macOS packagingnpm 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 Macsnpm run dist:mac:x64 and npm run dist:mac:arm64 are available when you need smaller architecture-specific test artifactsnpm run verify:mac:universal uses lipo to confirm the packaged app executable and Electron framework include both x86_64 and arm64 slicesnpm 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 setupnpm 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 pathxvfb-run -a npm run smoke:testVessel is designed to act as the browser runtime that your external agent harness drives.
Ctrl+,) to confirm MCP status, copy the endpoint, or change the MCP portvessel-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.jsonNotes:
3100Ctrl+,) and enable Chat Assistant to set a provider and modelllama.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-serverllama-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 accumulateChanged badge when Vessel detects that a previously visited page has meaningfully changed since the last saved snapshotgithub-logged-in, and reload that state in later runsVessel can talk directly to a local llama-server through its OpenAI-compatible API.
Example:
llama-server -m /path/to/model.gguf --port 8080 --ctx-size 32768Then in Vessel:
Ctrl+,)llama.cpp (Local) as the providerhttp://localhost:8080/v1Notes:
--ctx-size 16384 is the minimum practical setting for Vessel agent loops--ctx-size 32768 is the recommended default for longer browsing sessionsllama-server context size below the recommended floor, or if it cannot detect the ctx size from the running serverInitial memory tools:
vessel_memory_note_createvessel_memory_appendvessel_memory_listvessel_memory_searchvessel_memory_page_capturevessel_memory_link_bookmarkBookmark and folder tools exposed today include:
vessel_bookmark_listvessel_bookmark_searchvessel_bookmark_openvessel_bookmark_savevessel_bookmark_removevessel_create_foldervessel_folder_renamevessel_folder_removePage interaction and recovery tools exposed today include:
vessel_extract_contentvessel_read_pagevessel_scrollvessel_dismiss_popupvessel_set_ad_blockingvessel_wait_forvessel_screenshot (Premium) — capture the full page as an image for visual AI analysisundo_last_action — restore the browser to the snapshot captured before the last successful mutating agent actionPage highlight tools:
vessel_highlight — visually mark text or an element on the page with a labeled, color-coded overlay; persists until clearedvessel_clear_highlights — remove all highlights from the current pageWorkflow tracking tools:
vessel_flow_start — begin a named multi-step workflow and declare its steps upfront; progress appears in the sidebar throughout executionvessel_flow_advance — mark the current step complete and advance to the nextvessel_flow_status — check current workflow progressvessel_flow_end — clear the active workflow trackerData extraction tools (Premium):
vessel_extract_table — extract a page table as structured JSON rows with column headersNamed session tools exposed today include:
vessel_save_sessionvessel_load_sessionvessel_list_sessionsvessel_delete_sessionSession files are sensitive because they may contain login cookies and tokens. Vessel stores them under the app user-data directory with restrictive file permissions.
Agent Credential Vault tools (Premium):
vessel_vault_status — check whether stored credentials exist for a domain (returns labels/usernames, never passwords)vessel_vault_login — fill a login form using stored credentials (blind fill — credentials go directly into the page, never into the AI conversation)vessel_vault_totp — generate and fill a TOTP 2FA code from a stored secretSession performance tools (Premium):
vessel_metrics — show per-tool call counts, average durations, error rates, and total session statsVault security model:
Notable extraction modes include:
visible_only — only currently visible, in-viewport, unobstructed interactive elements plus active overlaysresults_only — likely primary search/result links onlyfull / summary / interactives_only / forms_only / text_onlyThe extraction output can distinguish:
Stdio proxy MCP config (recommended — resolves auth automatically):
{
"mcpServers": {
"vessel": {
"command": "vessel-browser-mcp",
"args": ["--stdio"]
}
}
}The stdio proxy reads the bearer token from ~/.config/vessel/mcp-auth.json at connection time, so no manual token management is needed. Vessel must already be running when your MCP client connects, and ~/.config/vessel/mcp-auth.json must exist from install or first launch.
Generic HTTP MCP config (requires copying the token manually):
{
"mcpServers": {
"vessel": {
"type": "http",
"url": "http://127.0.0.1:3100/mcp",
"headers": {
"Authorization": "Bearer <token from ~/.config/vessel/mcp-auth.json>"
}
}
}
}Hermes Agent config.yaml MCP config:
mcp_servers:
vessel:
url: "http://127.0.0.1:3100/mcp"
headers:
Authorization: "Bearer <token from ~/.config/vessel/mcp-auth.json>"
timeout: 180
connect_timeout: 30The installer writes three snippets to:
~/.config/vessel/mcp-stdio-snippet.json~/.config/vessel/mcp-http-snippet.json~/.config/vessel/mcp-hermes-snippet.yamlIt also installs a helper command:
vessel-browser-mcpHelper examples:
# Run as stdio-to-HTTP proxy (for MCP client integration)
vessel-browser-mcp --stdio
# Recommended stdio MCP snippet
vessel-browser-mcp
# Generic JSON snippet with Authorization header
vessel-browser-mcp --format json
# Hermes-ready YAML snippet with Authorization header
vessel-browser-mcp --format hermes
# Raw MCP endpoint URL
vessel-browser-mcp --format url
# Raw MCP bearer token
vessel-browser-mcp --format tokenSource install update helpers:
# Check whether a source-install update is available
vessel-browser-update --check
# Fetch, rebuild, and update the local source install
vessel-browser-updateStatus helper:
# Human-readable local install + MCP status
vessel-browser-status
# Machine-readable status for harnesses
vessel-browser-status --jsonSmart launch helper:
# Launch Vessel using the best available local install
vessel-browser-launch
# Show the chosen launch path without starting anything
vessel-browser-launch --dry-runvessel-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.
| Shortcut | Action |
|---|---|
Ctrl+L | AI Command Bar |
Ctrl+Shift+L | Toggle AI Sidebar |
Ctrl+Shift+F | Toggle Focus Mode |
F12 | Toggle Dev Tools Panel |
Ctrl+N | New Window |
Ctrl+T | New Tab |
Ctrl+W | Close Tab |
Ctrl+Shift+T | Reopen Closed Tab |
Ctrl+Shift+N | New Private Window |
Ctrl+F | Find in Page |
Ctrl++ / Ctrl+= | Zoom In |
Ctrl+- | Zoom Out |
Ctrl+0 | Reset Zoom |
Ctrl+P | Print Active Page |
Ctrl+Shift+P | Save Active Page as PDF |
Ctrl+, | Settings |
src/
├── main/ # Electron main process
│ ├── ai/ # Agent tools, query flow, and AI provider implementations
│ ├── tabs/ # Tab + TabManager (WebContentsView)
│ ├── agent/ # Agent runtime, checkpoints, supervision, flow tracking
│ ├── content/ # Readability extraction, reader mode, screenshot, page snapshots/diff
│ ├── config/ # Settings persistence
│ ├── autofill/ # Autofill profile persistence and form-field matching
│ ├── ipc/ # IPC handler registry
│ ├── vault/ # Agent Credential Vault (encrypted storage, consent, audit)
│ ├── mcp/ # MCP server for external agent control
│ ├── devtools/ # CDP session management for Dev Tools panel
│ ├── highlights/ # Page highlight capture, injection, and persistence
│ ├── health/ # Runtime health monitoring (MCP, settings, ports)
│ ├── premium/ # Subscription management, feature gating, Stripe integration
│ ├── bookmarks/ # Bookmark and folder persistence
│ ├── history/ # Browse history
│ ├── memory/ # Obsidian vault hooks
│ ├── network/ # Ad blocking, URL safety, link validation, downloads
│ ├── sessions/ # Named session save/load/delete
│ ├── startup/ # App initialization, menu, shortcuts, renderer bootstrap
│ ├── telemetry/ # PostHog analytics (opt-in)
│ ├── tools/ # Tool definitions, input coercion, pruning
│ ├── window.ts # Window layout manager
│ └── index.ts # App entry point
├── preload/ # contextBridge scripts
│ ├── index.ts # Chrome UI preload
│ └── content-script.ts # Web page preload (readability)
├── renderer/ # SolidJS browser UI
│ └── src/
│ ├── components/
│ │ ├── chrome/ # TitleBar, TabBar, AddressBar, AgentTranscriptDock
│ │ ├── ai/ # CommandBar, Sidebar (Supervisor/Bookmarks/Checkpoints/Chat/Automate/History/Changes/Research)
│ │ ├── devtools/ # DevTools panel (Console, Network, Activity)
│ │ └── shared/ # Settings panel
│ ├── stores/ # SolidJS signal stores (tabs, ai, ui, runtime, bookmarks, etc.)
│ ├── styles/ # Theme, global CSS
│ └── lib/ # Keybindings, markdown, skills registry
└── shared/ # Types + IPC channel constantsMIT
Developed by Tyler Williams in Portland, Oregon (2026)
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.