The Problem

Developers need a locally‑run AI‑augmented browser that can host multiple autonomous agents without sending user data to a remote service. Existing commercial options lock users into proprietary clouds, making privacy, compliance, and custom model integration difficult.

What This Does

browser-operator-core ships a Chromium‑based front‑end (front_end/entrypoints/main/main.ts) together with an agent server (agent-server/nodejs/src/api‑server.js) that exposes a JSON‑RPC API for AI providers. The UI loads front_end/core/common/App.ts, which registers panels such as front_end/panels/ai_chat/cdp/index.ts.

Configuration lives in .env.example (root) and agent-server/.env.example; they define provider URLs and model keys. The Docker assets (docker/Dockerfile, docker/docker‑compose.yml) allow the whole stack to be built into a single container for reproducible deployment.

How It Is Wired

  1. Startup – The container entry point runs docker/Dockerfile → node agent-server/nodejs/start.js. That script loads agent-server/nodejs/src/config.js (reads .env.example) and starts the HTTP server (src/api‑server.js).
  2. Browser launch – The front‑end is served by the same Node process; the browser loads extensions/cxx_debugging/src/index.html or the packaged UI entry front_end/entrypoints/main/main.ts.
  3. Panel activation – When the user opens the AI Chat panel, front_end/panels/ai_chat/a11y/index.ts registers UI callbacks that eventually call src/lib/BrowserAgentServer.js.
  4. Agent request flow – BrowserAgentServer.js builds a request object and forwards it to the selected LLM judge (src/lib/judges/LLMJudge.js). The judge uses the provider key from the environment to call the external API.
  5. Response handling – The result is streamed back through HTTPWrapper.js → RequestStack.js → the UI panel, where it is rendered.

The static call‑graph only resolved four intra‑repo edges (e.g., test → getX), indicating that most of the runtime path traverses external libraries or dynamically loaded modules, which are not captured by the current analysis.

How To Use It

# Clone the repo
git clone https://github.com/moses-y/browser-operator-core
cd browser-operator-core

# Install Node dependencies (uses lockfile)
npm ci

# Copy example env and edit provider keys
cp .env.example .env
# edit .env to add OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.

# Build and run the Docker composition (includes UI and API server)
docker compose -f docker/docker-compose.yml up --build

The UI is reachable at http://localhost:3000 (port defined in docker/nginx.conf). To run the server without Docker:

cd agent-server/nodejs
node start.js   # reads ./nodejs/.env.example if present

Real‑World Use

A compliance team can launch the container on an isolated workstation, point the UI to an internal LLM endpoint (configured in .env), and create an “audit agent” that crawls a corporate intranet, extracts policy statements, and stores results in a local SQLite file (implemented by a custom extension that calls BrowserAgentServer.js).

Code Health & Issues

  • Critical – Secrets in workflow: .github/workflows/claude.yml contains CLAUDE_CODE_OAUTH_TOKEN.
  • High – node_modules/ committed (23953 files).
  • High – Unpinned GitHub Action: anthropics/claude-code-action@beta.
  • High – Wildcard CORS (*) with credentials in scripts/component_server/server.js.
  • Medium – No Dependabot/Renovate configuration.
  • Medium – CI uses npm install instead of npm ci.
  • Medium – Docker base images not pinned by digest.
  • Medium – No dependency‑vulnerability scan in CI.
  • Medium – Large binaries (e.g., third_party/image_diff/mac/libbase.dylib) exceed 5 MiB.
  • Medium – Checkout persists credentials in .git/config (.github/workflows/claude.yml).

All findings are from the deterministic static analysis; no additional issues were invented.

The Bottom Line

browser-operator-core provides a functional, locally hosted AI browser with a clear separation between UI and agent server, but the repo suffers from serious security hygiene problems (exposed secrets, committed dependencies, permissive CORS). It is suitable for teams that can remediate these issues and need an extensible, privacy‑first AI browsing platform.