Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
FROM alpine AS context
WORKDIR /ctx
COPY . .
RUN mkdir -p ee
RUN mkdir -p ee/frontend

# Stage 1: Build frontend (with optional EE components)
FROM node:22-slim AS frontend
Expand Down
15 changes: 5 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,17 @@ Requires **Docker** (with Compose v2).
git clone https://github.com/NoDeskAI/browser-pilot.git
cd browser-pilot

# Build all images and start services
docker compose build && docker compose up -d
# Apple Silicon / ARM users — run this first:
# echo 'SELENIUM_BASE_IMAGE=seleniarm/standalone-chromium:latest' > .env

# Build all images (including the Selenium browser image) and start services
docker compose --profile build build && docker compose up -d
```

Open **[http://localhost:8000](http://localhost:8000)** — you'll see the web UI with session management and a live browser viewer (noVNC).

![Dashboard](docs/screenshots/dashboard.png)

### Apple Silicon / ARM users

Before building, create a `.env` file:

```bash
echo 'SELENIUM_BASE_IMAGE=seleniarm/standalone-chromium:latest' > .env
```

## CLI

Install the `bpilot` command-line tool to drive the browser from your terminal or integrate with external Agent frameworks like OpenClaw. The web UI includes a **CLI Access** button that generates a ready-to-paste command reference for your AI agent.
Expand Down
15 changes: 5 additions & 10 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,17 @@
git clone https://github.com/NoDeskAI/browser-pilot.git
cd browser-pilot

# 构建镜像并启动服务
docker compose build && docker compose up -d
# Apple Silicon / ARM 用户请先执行:
# echo 'SELENIUM_BASE_IMAGE=seleniarm/standalone-chromium:latest' > .env

# 构建所有镜像(包括 Selenium 浏览器镜像)并启动服务
docker compose --profile build build && docker compose up -d
```

打开 **[http://localhost:8000](http://localhost:8000)** — 即可看到带会话管理和实时浏览器查看器(noVNC)的 Web UI。

![Dashboard](docs/screenshots/dashboard.png)

### Apple Silicon / ARM 用户

构建前先创建 `.env` 文件:

```bash
echo 'SELENIUM_BASE_IMAGE=seleniarm/standalone-chromium:latest' > .env
```

## 命令行工具

安装 `bpilot` 命令行工具,可以从终端驱动浏览器,也可以对接 OpenClaw 等外部 Agent 框架。Web UI 中有一个 **CLI Access** 按钮,可一键生成完整的 CLI 命令参考文档,直接粘贴给你的 AI Agent 使用。
Expand Down
1 change: 0 additions & 1 deletion cli/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ classifiers = [
"Development Status :: 3 - Alpha",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Topic :: Software Development :: Testing",
]
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ services:
backend:
build: .
ports:
- "8000:8000"
- "${APP_PORT:-8000}:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
extra_hosts:
Expand Down
18 changes: 15 additions & 3 deletions frontend/vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
import { existsSync } from 'fs'
import path from 'node:path'
import { resolve } from 'path'
import { defineConfig } from 'vite'
import { defineConfig, type Plugin } from 'vite'
import vue from '@vitejs/plugin-vue'
import tailwindcss from '@tailwindcss/vite'

const eeDir = resolve(__dirname, '../ee/frontend')
const hasEE = existsSync(eeDir)
const hasEE = existsSync(resolve(eeDir, 'routes.ts')) || existsSync(resolve(eeDir, 'routes/index.ts'))

function eeStubPlugin(): Plugin {
return {
name: 'ee-stub',
resolveId(id) {
if (!hasEE && id.startsWith('@ee/')) return '\0' + id
},
load(id) {
if (!hasEE && id.startsWith('\0@ee/')) return 'export default {}'
},
}
}

export default defineConfig({
plugins: [vue(), tailwindcss()],
plugins: [eeStubPlugin(), vue(), tailwindcss()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
Expand Down