* feat: bootstrap 12 default agent skills for new users Seed common browser automation skills (summarize, research, extract data, fill forms, dismiss popups, screenshots, organize tabs, compare prices, save page, monitor changes, read later, manage bookmarks) into ~/.browseros/skills/ on first startup when no user skills exist. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: populate skill edit dialog with existing content The edit dialog form fields were empty because Radix Dialog's onOpenChange doesn't fire when the open prop changes programmatically. Replace the handleOpenChange wrapper with a useEffect that syncs form state whenever editingSkill changes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: correct tool names in default skill instructions - memory_save → memory_write (actual tool name in memory toolset) - delete_bookmark → remove_bookmark (actual tool name in registry) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: move skill content from TS template literals to separate SKILL.md files Replace the monolithic defaults.ts (738-line file with escaped template literals) with individual SKILL.md files per skill. Uses Bun's text import (`with { type: 'text' }`) to inline content at bundle time. Adds md.d.ts for TypeScript module resolution. Much easier to read and edit skill content as plain markdown. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add build:server:test and start:server:test scripts for local binary testing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: refresh agent skills settings UI * fix: address PR review comments for 0311-skills_ui_refresh * feat: enhance default skills with file persistence, HTML reports, and add find-alternatives Rewrite deep-research, extract-data, compare-prices, manage-bookmarks, and read-later skills to follow a structured phase-based workflow. Key changes: - All research skills now save data incrementally to disk instead of accumulating in memory - Add HTML report generation (light theme) with source links for deep-research, extract-data, and compare-prices - Use hidden windows and parallel tabs (max 10) for multi-source extraction - Simplify read-later to just bookmark + PDF save - Simplify manage-bookmarks to max 3-5 top-level folders with confirmation - Add new find-alternatives skill for product alternative research with 1-5 star ranking Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: simplify skills page rendering * fix: clean-up skill * fix: address review feedback for PR #478 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
BrowserOS Agent
Monorepo for the BrowserOS-agent -- contains 3 packages: agent-UI, server (which contains the agent loop) and controller-extension (which is used by the tools within the agent loop).
⚠️ NOTE: This is only a submodule, the main project is at -- https://github.com/browseros-ai/BrowserOS
Monorepo Structure
apps/
server/ # Bun server - MCP endpoints + agent loop
agent/ # Agent UI (Chrome extension)
controller-ext/ # BrowserOS Controller (Chrome extension for chrome.* APIs)
packages/
shared/ # Shared constants (ports, timeouts, limits)
| Package | Description |
|---|---|
apps/server |
Bun server exposing MCP tools and running the agent loop |
apps/agent |
Agent UI - Chrome extension for the chat interface |
apps/controller-ext |
BrowserOS Controller - Chrome extension that bridges chrome.* APIs (tabs, bookmarks, history) to the server via WebSocket |
packages/shared |
Shared constants used across packages |
Architecture
apps/server: Bun server which contains the agent loop and tools.apps/agent: Agent UI (Chrome extension).apps/controller-ext: BrowserOS Controller - a Chrome extension that bridgeschrome.*APIs to the server. Controller tools within the server communicate with this extension via WebSocket.
┌──────────────────────────────────────────────────────────────────────────┐
│ MCP Clients │
│ (Agent UI, claude-code via MCP) │
└──────────────────────────────────────────────────────────────────────────┘
│
│ HTTP/SSE
▼
┌──────────────────────────────────────────────────────────────────────────┐
│ BrowserOS Server (serverPort: 9100) │
│ │
│ /mcp ─────── MCP tool endpoints │
│ /chat ────── Agent streaming │
│ /health ─── Health check │
│ │
│ Tools: │
│ ├── CDP Tools (console, network, input, screenshot, ...) │
│ └── Controller Tools (tabs, navigation, clicks, bookmarks, history) │
└──────────────────────────────────────────────────────────────────────────┘
│ │
│ CDP (client) │ WebSocket (server)
▼ ▼
┌─────────────────────┐ ┌─────────────────────────────────────┐
│ Chromium CDP │ │ BrowserOS Controller Extension │
│ (cdpPort: 9000) │ │ (extensionPort: 9300) │
│ │ │ │
│ Server connects │ │ Bridges chrome.tabs, chrome.history │
│ TO this as client │ │ chrome.bookmarks to the server │
└─────────────────────┘ └─────────────────────────────────────┘
Ports
| Port | Env Variable | Purpose |
|---|---|---|
| 9100 | BROWSEROS_SERVER_PORT |
HTTP server - MCP endpoints, agent chat, health |
| 9000 | BROWSEROS_CDP_PORT |
Chromium CDP server (BrowserOS Server connects as client) |
| 9300 | BROWSEROS_EXTENSION_PORT |
WebSocket server for controller extension |
Development
Setup
Requires process-compose:
brew install process-compose
# Copy environment files for each package
cp apps/server/.env.example apps/server/.env.development
cp apps/agent/.env.example apps/agent/.env.development
cp apps/server/.env.production.example apps/server/.env.production
# Start the full dev environment
process-compose up
The process-compose up command runs the following in order:
bun install— installs dependenciesbun --cwd apps/controller-ext build— builds the controller extensionbun --cwd apps/agent codegen— generates agent codebun --cwd apps/server startandbun --cwd apps/agent dev— starts server and agent in parallel
Environment Variables
Runtime uses .env.development, while production artifact builds use .env.production:
apps/server/.env.development- Server runtime configuration for local devapps/server/.env.production- Server production artifact build configurationapps/agent/.env.development- Agent UI configuration
Server Variables (apps/server/.env.development)
| Variable | Default | Description |
|---|---|---|
BROWSEROS_SERVER_PORT |
9100 | HTTP server port (MCP, chat, health) |
BROWSEROS_CDP_PORT |
9000 | Chromium CDP port (server connects as client) |
BROWSEROS_EXTENSION_PORT |
9300 | WebSocket port for controller extension |
BROWSEROS_CONFIG_URL |
- | Remote config endpoint for rate limits |
BROWSEROS_INSTALL_ID |
- | Unique installation identifier (analytics) |
BROWSEROS_CLIENT_ID |
- | Client identifier (analytics) |
POSTHOG_API_KEY |
- | Server-side PostHog API key |
SENTRY_DSN |
- | Server-side Sentry DSN |
BROWSEROS_TEST_HEADLESS |
false | Headless mode for server tests |
Server Production Build Variables (apps/server/.env.production)
Copy from apps/server/.env.production.example before running build:server.
build:server requires all values below except R2_DOWNLOAD_PREFIX and R2_UPLOAD_PREFIX.
| Variable | Default | Description |
|---|---|---|
BROWSEROS_CONFIG_URL |
- | Remote config endpoint baked into prod binary |
CODEGEN_SERVICE_URL |
- | Graph/codegen backend URL baked into prod binary |
POSTHOG_API_KEY |
- | PostHog key baked into prod binary |
SENTRY_DSN |
- | Sentry DSN baked into prod binary |
R2_ACCOUNT_ID |
- | Cloudflare account id for production artifact downloads/uploads |
R2_ACCESS_KEY_ID |
- | Cloudflare R2 access key id |
R2_SECRET_ACCESS_KEY |
- | Cloudflare R2 secret access key |
R2_BUCKET |
- | Cloudflare R2 bucket name |
R2_DOWNLOAD_PREFIX |
- | Optional prefix prepended to third-party resource object keys |
R2_UPLOAD_PREFIX |
server/prod-resources |
Optional prefix for uploaded artifact zips |
Agent Variables (apps/agent/.env.development)
| Variable | Default | Description |
|---|---|---|
BROWSEROS_SERVER_PORT |
9100 | Passed to BrowserOS via CLI args |
BROWSEROS_CDP_PORT |
9000 | Passed to BrowserOS via CLI args |
BROWSEROS_EXTENSION_PORT |
9300 | Passed to BrowserOS via CLI args |
VITE_BROWSEROS_SERVER_PORT |
9100 | Agent UI connects to server (must match BROWSEROS_SERVER_PORT) |
BROWSEROS_BINARY |
- | Path to BrowserOS binary |
USE_BROWSEROS_BINARY |
true | Use BrowserOS instead of default Chrome |
VITE_PUBLIC_POSTHOG_KEY |
- | Agent UI PostHog key |
VITE_PUBLIC_SENTRY_DSN |
- | Agent UI Sentry DSN |
Note: Port variables are duplicated in both files and must be kept in sync when running server and agent together.
Commands
# Start
bun run start:server # Start the server
bun run start:agent # Start agent extension (dev mode)
# Build
bun run build # Build server, agent, and controller extension
bun run build:server # Build production server resource artifacts and upload zips to R2
bun run build:agent # Build agent extension
bun run build:ext # Build controller extension
# Test
bun run test # Run standard tests
bun run test:cdp # Run CDP-based tests
bun run test:controller # Run controller-based tests
bun run test:integration # Run integration tests
# Quality
bun run lint # Check with Biome
bun run lint:fix # Auto-fix
bun run typecheck # TypeScript check
build:server now emits artifacts under dist/prod/server/<target>/ and zip files under dist/prod/server/.
Direct server build script options:
bun scripts/build/server.ts --target=all
bun scripts/build/server.ts --target=darwin-arm64,linux-x64
bun scripts/build/server.ts --target=all --manifest=scripts/build/config/server-prod-resources.json
bun scripts/build/server.ts --target=all --no-upload
License
AGPL-3.0