使用说明
打开浏览器
OpenBrowser是人工智能代理的浏览器基础设施:真实的Chrome会话、持久配置文件、人工登录切换、远程API和MCP工具。
它允许Claude、Codex、Cursor、浏览器使用、OpenBrowser风格的代理和自定义工作人员共享真实的浏览器,而无需争夺一个CDP端口。代理租用浏览器,在需要帐户状态时使用命名配置文件,向人类手动登录挑战,并留下遥测和问题报告,这些报告可以稍后审核。当帐户需要一致的路由时,标识还可以锁定代理、区域设置和时区设置。
flowchart LR
Agent["Agent\nClaude / Codex / Cursor / worker"] --> Client["MCP or API client"]
Client --> Broker["OpenBrowser Broker"]
Broker --> Lease["Lease manager"]
Broker --> Profiles["Profile + identity manager"]
Broker --> Proxy["Proxy router"]
Broker --> Observability["Telemetry + feedback + audit"]
Lease --> Pool["Chrome pool"]
Profiles --> Pool
Proxy --> Pool
Pool --> Slots["pool-a ... pool-h\nisolated CDP sessions"]
为什么
大多数浏览器代理都以相同的方式崩溃:
- 多个代理连接到同一个Chrome实例并相互阻止
- 登录会话绑定到一个脆弱的浏览器配置文件
- 密码和2FA提示成为不安全的聊天消息
- Slack、Discord、Notion、Linear和X等富文本应用程序会忽略DOM填充调用
- 失败会消失在日志中,因此下一个代理会重复同样的错误
OpenBrowser为代理提供了一个操作合同:租赁、代理、发布、报告。
特性
- 浏览器池:多个隔离的Chrome插槽,CDP端点由一个代理管理。
- 持久配置文件:命名身份重用Chrome配置文件目录和会话Cookie。
- 配置文件副本:所选身份可以并行运行,而不会发生Chrome配置文件锁定冲突。
- 快速QA路由:将OpenBrowser与一次性浏览器工具配对,用于不需要帐户状态的公共页面检查。
- 代理路由:标识可以通过以下方式将流量固定到HTTP/SOCKS代理
proxy_ref. - 远程应用程序接口:不记名令牌受保护
/openbrowser/v1API适用于任何机器上的代理。 - MCP服务器:本地MCP用于相同的主机代理,远程MCP用于HTTPS支持的访问。
- 人工身份切换:登录、2FA、密钥和手动挑战的一次性门户链接。
- 主动租赁控制:代理已持有的浏览器选项卡的短期手动控制链接。
- 富文本键盘工具:用于拒绝简单DOM值更改的编辑器的真实键盘事件。
- 遥测和问题:经过净化的事件、反馈问题跟踪和使用审计。
- 刀具模式适配器:
openbrowser-use包括用于打开、状态、截图、点击、键入、按键、等待和选项卡的内置代理命令;可选的直通可以调用外部CLI。
用例
| 用例 | OpenBrowser为您提供 |
|---|---|
| 远程浏览器自动化 | HTTPS API和用于在其他机器上运行的代理的远程MCP。 |
| 已登录的工作流 | 具有持久配置文件状态的命名Chrome标识。 |
| 多代理工作 | 租用隔离,这样并行代理就不会窃取彼此的标签。 |
| 特定于帐户的路由 | 每个身份的代理引用、区域设置、时区和配置文件策略。 |
| 人在环身份验证 | 密码、2FA、密钥和手动检查的一次性门户链接。 |
| 可调试自动化 | 山宁泰遥测、本地反馈问题和会话日志审计。 |
建筑
sequenceDiagram
participant A as Agent
participant B as OpenBrowser Broker
participant C as Chrome slot
participant H as Human auth portal
A->>B: lease(owner, identity_id?)
B->>C: reserve isolated Chrome session
B-->>A: lease_id
A->>B: navigate / click / type / screenshot
B->>C: browser action over CDP
C-->>B: page state
B-->>A: snapshot or result
alt login or challenge required
A->>B: auth_request or lease_control_request
B-->>H: one-time portal URL
H->>C: human completes login
end
A->>B: release(lease_id)
B->>B: telemetry + feedback + audit trail
快速开始
python
git clone https://github.com/floomhq/openbrowser.git
cd openbrowser
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
playwright install chromium
cp .env.example .env
cp config/identities.example.json config/identities.local.json
启动代理:
openbrowser-broker
对于同一主机上的第二个实例,隔离浏览器插槽端口:
OPENBROWSER_BROKER_PORT=8876 \
OPENBROWSER_SLOT_PORT_START=19223 \
OPENBROWSER_BROKER_ROOT=/tmp/openbrowser-demo/root \
OPENBROWSER_BROWSER_POOL_DIR=/tmp/openbrowser-demo/pool \
openbrowser-broker
代理将其Chrome池启动器脚本安装到 OPENBROWSER_BROWSER_POOL_DIR/bin 在启动时,当第一个租约到达时,懒洋洋地启动一个中立的Chrome插槽。
码头工人
git clone https://github.com/floomhq/openbrowser.git
cd openbrowser
OPENBROWSER_API_KEYS="$(openssl rand -base64 48)" docker compose up --build
租用浏览器:
curl -fsS http://127.0.0.1:8767/lease \
-H "content-type: application/json" \
-d '{"owner":"demo","ttl_seconds":300}'
使用返回的 lease_id:
curl -fsS http://127.0.0.1:8767/browser/navigate \
-H "content-type: application/json" \
-d '{"lease_id":"<lease_id>","url":"https://example.com"}'
curl -fsS http://127.0.0.1:8767/browser/snapshot \
-H "content-type: application/json" \
-d '{"lease_id":"<lease_id>"}'
curl -fsS -X POST http://127.0.0.1:8767/release/<lease_id>
远程应用程序接口
暴露HTTPS代理或隧道后面的代理,并配置:
OPENBROWSER_API_KEYS="your-long-random-api-key"
OPENBROWSER_PUBLIC_OPENBROWSER_BASE_URL="https://browser.example.com/openbrowser/v1"
然后拨打:
BASE=https://browser.example.com/openbrowser/v1
KEY=your-long-random-api-key
curl -fsS "$BASE/docs" \
-H "authorization: Bearer $KEY" \
-H "user-agent: openbrowser-client/1.0"
API涵盖租赁、导航、快照、屏幕截图、点击、打字、键盘事件、选项卡、授权切换、租赁控制、配置文件、反馈问题、遥测和审计。
flowchart TD
RemoteAgent["Remote agent"] -->|Bearer token| API["/openbrowser/v1"]
API --> Lease["POST /leases"]
API --> Browser["POST /browser/*"]
API --> Auth["POST /auth/request"]
API --> Issues["POST /feedback/issues"]
API --> Audit["GET /audit"]
主控程序
本地MCP,用于在代理主机上运行的代理:
{
"mcpServers": {
"openbrowser-broker": {
"command": "openbrowser-mcp"
}
}
}
远程MCP,适用于在任何地方运行的代理:
{
"mcpServers": {
"openbrowser-remote": {
"command": "openbrowser-remote-mcp",
"env": {
"OPENBROWSER_API_KEY": "<OPENBROWSER_API_KEY>",
"OPENBROWSER_BASE_URL": "https://browser.example.com/openbrowser/v1"
}
}
}
}
核心MCP工具:
browser_lease,browser_release,browser_heartbeatbrowser_navigate,browser_snapshot,browser_screenshotbrowser_click,browser_type,browser_keyboard_type,browser_keyboard_pressbrowser_tabs,browser_new_tab,browser_switch_tab,browser_waitauth_request,auth_status,lease_control_requestfeedback_report_issue,feedback_list_issues,feedback_update_issuetelemetry_record_event,telemetry_list_events,telemetry_summarybroker_audit,broker_docs,profile_status
持久配置文件
标识在中配置 config/identities.local.json:
{
"identities": {
"work-main": {
"label": "Work account",
"site": "example.com",
"slot": "auto",
"profile_dir": "/var/lib/openbrowser-broker/profiles/work-main",
"proxy_ref": "residential:work-main",
"timezone": "America/New_York",
"lang": "en-US",
"policy": {
"max_parallel_sessions": 1,
"requires_human_auth": true
}
}
}
}
当身份需要登录时:
curl -fsS "$BASE/auth/request" \
-H "authorization: Bearer $KEY" \
-H "content-type: application/json" \
-d '{"owner":"setup","identity_id":"work-main","url":"https://example.com/login","reason":"initial_login"}'
打开返回的 portal_url,在浏览器视图中完成登录,然后将请求标记为完成。该身份的未来租约将重用已保存的配置文件状态。
对于并行工作,设置 policy.max_parallel_sessions 上方 1.OpenBrowser然后为每个插槽的副本播种,而不是对一个配置文件目录启动多个Chrome进程。这很重要:桌面Chrome配置文件中的几个窗口是一个Chrome进程,但几个AX41代理是独立的Chrome进程。直接共享相同内容 profile_dir 在这些进程中,Chrome单例锁失败和配置文件数据库损坏的风险。
flowchart LR
Identity["identity_id=work-main"] --> Profile["Chrome profile dir"]
Identity --> Policy["parallel-session policy"]
Identity --> ProxyRef["optional proxy_ref"]
ProxyRef --> Forwarder["local proxy forwarder"]
Profile --> Chrome["leased Chrome slot"]
Forwarder --> Chrome
代理路由
在中添加代理凭据 secrets/proxies.json:
{
"proxies": {
"residential:work-main": {
"scheme": "http",
"host": "proxy.example.net",
"port": 12345,
"username": "user",
"password": "pass"
}
}
}
然后设置 "proxy_ref": "residential:work-main" 关于身份。代理启动本地代理转发器,并使用该配置文件的匹配代理启动Chrome。
安全模型
- 工具永远不会返回原始Cookie、密码、令牌、代理凭据和VNC密码。
- 遥测技术会编辑敏感密钥和秘密形状的字符串。
- 浏览器键入遥测存储的是文本长度,而不是键入的文本。
- 登录和挑战处理使用人工切换门户,而不是聊天中的秘密。
- 验证码解决和禁令规避自动化不在项目范围内。
这不是什么
- 不是验证码求解器。
- 不是令牌提取器。
- 不是每个代理都有一个共享的全局Chrome选项卡。
- 不是一个抓取旁路工具包。
- 当存在稳定的API时,不能替代产品API。
运营
openbrowser-audit --json
openbrowser-adapter status
openbrowser-use --json open https://example.com
openbrowser-use --json state
openbrowser-adapter status 和共同 openbrowser-use 工具命令内置于此包中。不支持 openbrowser-use 命令可以传递到外部 browser-use 安装CLI时。可以使用与OpenBrowser兼容的直通运行 OPENBROWSER_CLI;它们是可选的兼容性挂钩,不是核心安装路径的一部分。
系统化示例 systemd/详细的运行手册在 docs/.
品牌和产品规格
真理的产品和视觉来源存在于 docs/brand/该仓库包含OpenBrowser徽标、favicon、引用英雄和JSON令牌 docs/assets/brand/,加上下的包服务运行时资产 ax_browser_broker/static/brand/.
发展
python3 -m compileall ax_browser_broker tests
pytest -q
项目状态
OpenBrowser是面向生产的浏览器基础架构的alpha公开版本。测试涵盖了核心租赁管理器、配置文件标识、远程API、MCP表面、人工授权切换、遥测、反馈问题、审计和适配器包装器。新的部署可以使用上述通用命令和环境变量;遗产 ax-* 命令包装器仍用于现有安装。
许可证
麻省理工学院
