Files
Railly Hugo b041bd4c9e feat(cli): trust proxy CAs through Chromium NSS (#1669)
* feat(cli): trust proxy CAs through Chromium NSS

Replace the SPKI certificate-error bypass with a private Linux Chromium NSS database. Preserve hostname, validity, and unrelated authority verification while isolating trust per browser launch.

Propagate caCert through CLI, config, MCP, daemon identity, Eve, and documentation. Reject unsupported launch modes and clean launch-owned profiles and NSS homes across failure and shutdown paths.

Co-authored-by: Chris Tate <chris@ctate.dev>

Co-authored-by: Martín Fernández <mfernandez@crunchloop.io>

* fix(cli): retain proxy CA trust across commands

Keep the effective CA in daemon state, compare normalized certificate content, and relaunch only Chromium when trust changes or is explicitly cleared.

Prepare replacement NSS trust before closing the active browser and keep CLI, config, MCP, Eve, schemas, help, and docs aligned.

Co-authored-by: Chris Tate <chris@ctate.dev>

Co-authored-by: Martín Fernández <mfernandez@crunchloop.io>

* fix(cli): compile NSS home resolution on Linux

* fix(cli): complete CA trust setup and clear transitions

* fix(cli): reject conflicting CA transitions

* fix(docs): separate proxy CA config example

---------

Co-authored-by: Martín Fernández <mfernandez@crunchloop.io>
2026-08-20 18:07:59 -03:00
..
2026-08-10 20:03:46 -03:00

@agent-browser/eve

An eve extension that gives your agent a full browser automation tool set, backed by agent-browser running inside the agent's sandbox.

Mount it once and the agent gets ~20 namespaced tools — navigation, accessibility snapshots with stable element refs, clicking, form filling, semantic element finding, waiting, screenshots, JavaScript evaluation, tab management, network and console inspection — without writing a single tool by hand.

Install

npm install @agent-browser/eve

eve is a peer dependency; the extension runs on the eve installed in your app.

Mount

Create a mount file under agent/extensions/. The file name becomes the tool namespace:

// agent/extensions/browser.ts
import browser from "@agent-browser/eve";

export default browser({});

That's it. The agent now has browser__navigate, browser__snapshot, browser__click, and the rest, plus an instructions fragment teaching the model the snapshot-refs workflow.

On first tool use in a fresh sandbox, the extension installs agent-browser (and Chromium plus its system libraries) automatically. For production, pre-install in your sandbox bootstrap instead so sessions start from a warm template:

// agent/sandbox.ts
import { agentBrowserRevalidationKey, installAgentBrowser } from "@agent-browser/eve/sandbox";
import { defineSandbox } from "eve/sandbox";
import { vercel } from "eve/sandbox/vercel";

export default defineSandbox({
  backend: vercel({ resources: { vcpus: 2 } }),
  revalidationKey: () => agentBrowserRevalidationKey(),
  async bootstrap({ use }) {
    const sandbox = await use();
    await installAgentBrowser(sandbox);
  },
});

@agent-browser/eve/sandbox also exports runAgentBrowser for calling agent-browser from a hand-written eve tool. It derives a short, stable session name from the eve sandbox id; pass session when multiple independent browser sessions should share one sandbox.

Configuration

All fields are optional:

export default browser({
  // Safety
  allowedDomains: ["example.com", "*.example.com"], // restrict navigation and sub-resources
  caCert: "/etc/ssl/certs/proxy-ca.pem",
  clearCaCert: false,
  contentBoundaries: true, // wrap page output in markers the model can recognize
  maxOutputChars: 50_000, // truncate page output

  // Output
  inlineScreenshots: true, // embed screenshots in tool output as data URLs for channels/UIs
  // (hidden from the model via toModelOutput; capped at 4 MB per image)

  // Install behavior
  autoInstall: true, // install agent-browser on first use when missing
  installSpec: "agent-browser@0.31.2", // defaults to the version matching this package
  installBrowser: true, // download Chromium during auto-install
  installSystemDependencies: true, // apt/dnf Chromium libraries during auto-install

  // Session & runtime
  session: undefined, // fixed session name; defaults to one derived from the sandbox id
  sessionPrefix: "eve", // prefix for the derived session name
  binary: "agent-browser", // binary name or path inside the sandbox
  proxy: undefined, // proxy server URL
});

Tools

Tool Purpose
navigate Open a URL, or go back/forward/reload
snapshot Accessibility tree with @eN element refs (the primary way to see a page)
read Page as agent-friendly text/markdown, llms.txt aware
click Click or double-click an element
fill Type into an input (clearing first by default)
press_key Press a key or combination (Enter, Control+a)
hover Hover an element
select_option Pick a <select> option
set_checked Check/uncheck a checkbox or radio
scroll Scroll the page, a container, or an element into view
drag Drag and drop
upload Attach sandbox files to a file input
wait_for Wait for an element, text, URL pattern, load state, JS condition, or delay
get Read text/html/value/attribute/title/url/count/box/styles
find Semantic locator: act on an element by role, label, text, placeholder, or test id
screenshot Capture the page (full-page and annotated modes); output includes an inline data URL for UIs
evaluate Run JavaScript in the page
tabs List/open/switch/close tabs (stable ids and labels)
console Read console messages and uncaught page errors
network_requests List tracked requests or fetch one request's full detail
close Close the browser session

Cookie, storage, and saved-auth-state commands are intentionally not exposed as tools — they make credential material visible to the model. If you need them, add a scoped tool in your own agent (or an override) with the guardrails your app requires.

Overrides

Standard eve extension overrides apply. Mount as a directory to gate or replace individual tools:

// agent/extensions/browser/extension.ts
import browser from "@agent-browser/eve";

export default browser({});
// agent/extensions/browser/tools/evaluate.ts — require approval for raw JS
import { evaluate } from "@agent-browser/eve/tools";
import { defineTool } from "eve/tools";
import { always } from "eve/tools/approval";

export default defineTool({ ...evaluate, approval: always() });
// agent/extensions/browser/tools/upload.ts — or drop a tool entirely
import { disableTool } from "eve/tools";

export default disableTool();

How it works

Each tool shells out to the agent-browser CLI inside the sandbox from ctx.getSandbox(), using an isolated browser session named after the sandbox id, and returns the parsed --json payload. The browser and its state live entirely in the sandbox; the app runtime only relays commands.

Example

See examples/eve for a complete Next.js eve app with this extension mounted.

License

Apache-2.0