navette — the browser for agents

io.github.slabbdevv1.4.1更新于 Oct 4, 2026

A 659 KB Rust binary driving the OS WebView — no Chromium. 16 MCP tools for AI agents.

概览

AI 生成的概览

一个本地 Rust 浏览器服务器,通过操作系统 WebView 为助手提供 16 个工具,用于导航、读取、截图和操作 JavaScript 网页。

功能
Navette 在操作系统自带的 WebView 上运行一个小型本地浏览器引擎,并通过 MCP stdio 暴露出来。它提供 16 个工具,包括 navigate、read(markdown、文本或 HTML)、以图像内容返回的 screenshot、click、hover、type、key、evaluate JavaScript、wait、scroll、upload、viewport、会话列表与关闭,以及 cookie 状态导出/导入。会话按需创建,仅在需要截图时才附加幽灵窗口,因此助手可以处理登录、表单和 JavaScript 构建的页面。
适用场景
当助手需要操作普通抓取无法处理的页面时使用:JavaScript 渲染的内容、需要登录的会话、填写表单、点击,以及通过截图进行视觉检查。对于静态页面则不需要,此时 fetch 加 readability 更简单。
运行要求
作为本地进程在用户机器上运行(仅限桌面)。可通过 Homebrew 或 cargo install navette-browser 安装,或用 Rust 从源码构建;使用操作系统 WebView,Windows 上为 WebView2,Linux 上为 WebKitGTK。MCP 模式通过 mcp 参数启动,若没有服务在监听会自动启动本地回环 HTTP 服务器。未声明任何账户、API 密钥或环境变量。
安装前请注意
本地 HTTP 服务器仅绑定 127.0.0.1 且没有身份验证,不应暴露到网络。会话使用非持久化存储,但 cookie 状态可以导出和导入,这意味着已登录的会话数据可被读取和写入,应视为敏感信息。evaluate 工具会在页面上下文中执行任意 JavaScript,click、type、upload 和 scroll 会改变页面状态或提交数据。已知不足包括没有操作系统级键盘或鼠标输入、没有网络请求拦截,也没有操作系统文件对话框自动化。

安装

在 SourceWeft 中

  1. 打开 控制台中的 navette — the browser for agents,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

navette — v1.4.0

[navette — the browser for agents]

The browser for agents. One tiny Rust binary driving the WebView your OS already ships — no Chromium, no download, no RAM bonfire.

Navette is French for shuttle — the small vessel that carries your agent from page to page. Always fueled (the engine ships with your OS), light enough to ignore, and it skips the human web's garbage so your agent doesn't have to.

Single Rust binary, three modes:

$ ls -lh target/release/navette-rwxr-xr-x  1 user  staff   626K  navette

626 KB installed on macOS (release binaries: 658 KB darwin-arm64, ~1.2 MB windows-x64 / linux-x64 — the wry backends carry their bindings). Playwright ships 218 MB. Lightpanda ships 96 MB (and cannot screenshot). Measured claims, reproducible with one command (BENCHMARKS.md):

  • Faster than Playwright + Chromium on every metric we measured — install, cold start, navigate→read (8 ms), act (1 ms), peak RAM, 100-page crawl (0.9–2.8 s, parity with Lightpanda within variance and ~2–3x faster than Playwright), real-web success rate (95–100% vs 85%).
  • Crawls at Lightpanda's speed while rendering (parity within variance through the zero-bias raw-CDP probe, where Lightpanda is the fastest page-reader at 3.3–3.4 ms — it parses a partial DOM and cannot render — and navette is the fastest full-rendering reader: 17.9–19.4 ms vs Chromium's 28–34 ms through the identical client).
  • The two rows Lightpanda wins — fresh-process boot and peak RAM — are the price of rendering. If your agent only reads static pages, use fetch + readability; if it needs JS, sessions, actions and vision, that price is the product.

FAQ

Why not Apple's Safari MCP server (2026)? Same thesis, different scope: navette is agent-first (8 primitives, ghost windows, resident daemon), open source, and cross-platform by design (WebView2 on Windows is Chromium — preinstalled). Apple's is macOS-and-Safari-shaped.

Why not just fetch + readability? For static pages, do that — it beats everyone. navette exists for what fetch can't do: JS-built pages, logins, sessions, forms, screenshots, acting like a human.

Security? The server binds 127.0.0.1 only, has no auth (do not expose it), and sessions use a non-persistent store — no cookies leak between runs. The agent's JS executes in the OS WebKit sandbox, not in your terminal.

Build & run

sh
brew install slabbdev/navette/navette   # macOS arm64cargo install navette-browser   # any platform, from sourcenavette serve --port 8765       # HTTP API on loopbacknavette mcp                     # MCP stdio for agent hostsnavette install-daemon          # resident: warm from login

Or build from source:

sh
cargo build --release          # rustup; macOS fully shipped — Windows (WebView2) / Linux (WebKitGTK) backends aboard./target/release/navette serve --port 8765   # HTTP API on loopback./target/release/navette mcp                 # MCP stdio for agent hosts./target/release/navette install-daemon      # resident: warm from login, 24 ms first page./target/release/navette uninstall-daemon

The mcp mode auto-starts serve if nothing is listening (it idles politely if the port is already served by another navette). The resident daemon is a LaunchAgent with KeepAlive — the cold start an agent feels drops to 24–37 ms, forever.

HTTP API (127.0.0.1 only, JSON)

RouteBodyReturns
GET /health—{ok, name, engine}
GET /sessions—sessions with url + title
POST /navigate{url, session?, with_content?, format?}{ok, url, title[, content]} — with_content folds the read into one round-trip
POST /read{session?, format?} markdown/text/html{ok, content}
POST /screenshot{session?}PNG bytes
POST /click{selector, session?, wait_navigation?}{ok} (real mouse events; opt-in auto-wait for form-POST navigations)
POST /type{selector, value, session?}{ok} (React-safe native setter)
POST /evaluate{js, session?}{ok, result}
POST /wait{selector, ms?, session?}{ok}
POST /sessions/state{session}cookies JSON — the logged-in state
POST /sessions/load{session, cookies}{ok, imported} restore a logged-in state
POST /sessions/viewport{width, height, session?}{ok, width, height} set the viewport (default 1280x800)
POST /hover{selector, session?}{ok} (mouseover/mousemove at the element's center)
POST /key{key, selector?, session?}{ok} (keydown+keyup on the focused element)
POST /scroll{y?, selector?, session?}{ok, y} absolute scroll or scrollIntoView
POST /upload{selector, filename, content_base64, mime?, session?}{ok, files} — fills a file input with in-memory content (DataTransfer; no OS dialog)
POST /sessions/close{session}{ok}

Sessions are created lazily; ghost windows are attached only when a screenshot needs them.

JS dialogs (alert/confirm/prompt) are auto-handled in-page: alert logs and no-ops, confirm accepts, prompt returns its default — agents never deadlock on a hidden modal.

MCP for agent hosts

Register once (ZCode example, workspace .zcode/config.json):

json
{ "mcp": { "servers": { "navette": {    "command": "/abs/path/to/navette/target/release/navette",    "args": ["mcp"]} } } }

The host gets 16 tools: navigate, read, screenshot (returned as MCP image content — the agent sees the page), click, hover, type, key, evaluate, wait, scroll, upload, viewport, sessions, session_close, state_export / state_import (cookies — the Playwright storageState equivalent).

Architecture

src/main.rs          HTTP server (std::net), routes, agent-first JS snippetssrc/mcp.rs           MCP stdio adapter + serve auto-startsrc/backend_macos.rs WKWebView via raw objc2 — ghost windows, lazy attach,                     measured cold-start ordering (AppKit -> listener -> pre-warm)src/backend_wry.rs   Windows (WebView2) / Linux (WebKitGTK) via wry + tao —                     same surface, IPC-shim results, URL-matched navigationsrc/backend_stub.rs  fallback for other targets (placeholder)

The 8 primitives are engine-agnostic; each platform backend is a thin layer over the system WebView behind this exact surface. Engine strategy: system-first, embedded fallback (WebView2 Fixed Version / WebKitGTK via apt / WPE) — see ONEPAGER.md.

Status

v1.4.0 (2026-10-04) — current. 16 MCP tools including file upload (page-side DataTransfer — no OS dialog) and scroll; published on crates.io as navette-browser (cargo install navette-browser → navette); a bench workflow measures navigate/read/screenshot on all three engines. CI green on all three OSes: macOS (WKWebView), Windows (WebView2), Linux (WebKitGTK).

Recent releases: v1.3.0 — full platform parity (native screenshots per engine, cookie state export/import, viewport control, resident daemon everywhere, hover + key, auto-handled dialogs) · v1.2.1 — hardening (five root-cause fixes, boot-time session pre-warm: first navigate 38 s → 83 ms on a cold CI VM).

Known gaps, stated plainly: real (OS-level) keyboard/mouse input, request/response network interception, OS file-dialog automation. MIT.

来源:README.md,提交 87a3ab8

工具

0
工具元数据尚未被收录。

版本历史

1
  1. v1.4.1最新Oct 4, 2026