Skip to content

Commit cc44f40

Browse files
committed
Add Go SDK
1 parent a428b28 commit cc44f40

12 files changed

Lines changed: 1240 additions & 12 deletions

File tree

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
[![Release](https://img.shields.io/github/v/release/iFurySt/open-codex-browser-use)](https://github.com/iFurySt/open-codex-browser-use/releases)
66
[![npm SDK](https://img.shields.io/npm/v/open-browser-use-sdk?label=npm%20SDK)](https://www.npmjs.com/package/open-browser-use-sdk)
77
[![PyPI SDK](https://img.shields.io/pypi/v/open-browser-use-sdk?label=PyPI%20SDK)](https://pypi.org/project/open-browser-use-sdk/)
8+
[![Go SDK](https://pkg.go.dev/badge/github.com/ifuryst/open-browser-use/packages/open-browser-use-go.svg)](https://pkg.go.dev/github.com/ifuryst/open-browser-use/packages/open-browser-use-go)
89
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/iFurySt/open-codex-browser-use)
910

1011
---
@@ -18,7 +19,7 @@ capability recently shipped in Codex.app. For the story behind it, see the
1819
[Browser Use Deep Dive](https://www.ifuryst.com/en/blog/2026/open-browser-use/).
1920

2021
Under the hood, it pairs a browser extension with the `open-browser-use` CLI.
21-
You can integrate it through the JavaScript SDK, the Python SDK, or the CLI.
22+
You can integrate it through the JavaScript SDK, Python SDK, Go SDK, or the CLI.
2223

2324
https://github.com/user-attachments/assets/bcfba878-f6a8-44b9-b84b-29c7e0285687
2425

@@ -71,10 +72,14 @@ npm install open-browser-use-sdk
7172

7273
# Python
7374
pip install open-browser-use-sdk
75+
76+
# Go
77+
go get github.com/ifuryst/open-browser-use/packages/open-browser-use-go
7478
```
7579

7680
The SDK package name is `open-browser-use-sdk` on both npm and PyPI. Python
77-
code imports it as `open_browser_use`.
81+
code imports it as `open_browser_use`; Go code imports the SDK package as
82+
`obu`.
7883

7984
#### Skill
8085

README.zh-CN.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
[![Release](https://img.shields.io/github/v/release/iFurySt/open-codex-browser-use)](https://github.com/iFurySt/open-codex-browser-use/releases)
66
[![npm SDK](https://img.shields.io/npm/v/open-browser-use-sdk?label=npm%20SDK)](https://www.npmjs.com/package/open-browser-use-sdk)
77
[![PyPI SDK](https://img.shields.io/pypi/v/open-browser-use-sdk?label=PyPI%20SDK)](https://pypi.org/project/open-browser-use-sdk/)
8+
[![Go SDK](https://pkg.go.dev/badge/github.com/ifuryst/open-browser-use/packages/open-browser-use-go.svg)](https://pkg.go.dev/github.com/ifuryst/open-browser-use/packages/open-browser-use-go)
89
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/iFurySt/open-codex-browser-use)
910

1011
---
1112

1213
> [!TIP]
1314
> 对 Computer Use 感兴趣的话,可以看看 [open-computer-use](https://github.com/iFurySt/open-codex-computer-use)
1415
15-
`open-browser-use` 是平台中立的浏览器操作方案,也是Codex.app最新发布的Chrome Browser Use的开源替代方案。背后的故事可以看这篇[Browser Use详解](https://www.ifuryst.com/blog/2026/open-browser-use/)文章。 技术方案采用的是浏览器插件和open-browser-use cli结合,可通过JS/PYTHON SDK或CLI的方式接入
16+
`open-browser-use` 是平台中立的浏览器操作方案,也是Codex.app最新发布的Chrome Browser Use的开源替代方案。背后的故事可以看这篇[Browser Use详解](https://www.ifuryst.com/blog/2026/open-browser-use/)文章。 技术方案采用的是浏览器插件和open-browser-use cli结合,可通过 JS/Python/Go SDK 或 CLI 的方式接入
1617

1718
https://github.com/user-attachments/assets/bcfba878-f6a8-44b9-b84b-29c7e0285687
1819

@@ -59,10 +60,13 @@ npm install open-browser-use-sdk
5960

6061
# Python
6162
pip install open-browser-use-sdk
63+
64+
# Go
65+
go get github.com/ifuryst/open-browser-use/packages/open-browser-use-go
6266
```
6367

6468
SDK 在 npm 和 PyPI 上统一叫 `open-browser-use-sdk`。Python 代码里的 import
65-
模块名保持 `open_browser_use`
69+
模块名保持 `open_browser_use`;Go 代码通常把 SDK import 为 `obu`
6670

6771
#### Skill
6872

docs/ARCHITECTURE.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ debugger、history 和 tab groups。
3636
名为 `open-browser-use-sdk`
3737
- `packages/open-browser-use-python/`:Python SDK,PyPI distribution 名为
3838
`open-browser-use-sdk`,import 模块名为 `open_browser_use`
39+
- `packages/open-browser-use-go/`:Go SDK,Go import path 为
40+
`github.com/ifuryst/open-browser-use/packages/open-browser-use-go`,package
41+
name 为 `obu`
3942
- `skills/open-browser-use/`:面向 AI Agent 的 Open Browser Use skill,说明
4043
如何安装、验证和使用浏览器插件、CLI、SDK 与 Browser Use 风格协议。
4144
- `packages/`:其他跨应用复用的库、契约和共享能力。
@@ -171,15 +174,17 @@ dot;hyphen 版本 `com.ifuryst.open-computer-use.extension` 会被
171174
暴露给 SDK;agent-facing Browser Use command rewrite 还覆盖 DOM CUA、media
172175
download、element info/screenshot、locator bulk reads、generic tab export 和
173176
clipboard commands。
174-
- JS 和 Python SDK:直接连接 Unix socket 发送 Browser Use JSON-RPC。
177+
- JS、PythonGo SDK:直接连接 Unix socket 发送 Browser Use JSON-RPC。
175178
JS SDK 支持订阅 native socket 上的 JSON-RPC notification;Python SDK 会在
176-
同步 request loop 中分发并跳过 notification,避免 CDP event 插队破坏响应读取。
177-
两个 SDK 都在原子 client 之外提供高层 browser/tab API,可直接使用
179+
同步 request loop 中分发并跳过 notification,避免 CDP event 插队破坏响应读取;
180+
Go SDK 同样在同步 request loop 中分发 notification,并可自动读取 active
181+
socket registry。三个 SDK 都在原子 client 之外提供高层 browser/tab API,可直接使用
178182
`tab.goto``tab.waitForLoadState`/`tab.wait_for_load_state`
179183
`tab.playwright.domSnapshot`/`tab.playwright.dom_snapshot` 这类 Browser Use
180184
风格封装;Python SDK 还提供 `title``url``wait_for_timeout`
181-
`locator(...).inner_text(...)` 等适合 Jupyter/Python REPL 编排的薄封装。
182-
两个 SDK 同时提供核心 Browser Use method wrappers、download/clipboard
185+
`locator(...).inner_text(...)` 等适合 Jupyter/Python REPL 编排的薄封装,Go SDK
186+
提供对应的 `Title``URL``WaitForTimeout``Locator(...).InnerText(...)`
187+
helper。三个 SDK 同时提供核心 Browser Use method wrappers、download/clipboard
183188
convenience wrappers,也保留 unrestricted `request`
184189

185190
当前 SDK 不内置 Codex 风格的站点限制、turn policy 或二次确认。上层应用

docs/QUALITY_SCORE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
| 区域 | 评分 | 原因 | 下一步 |
1515
| --- | --- | --- | --- |
16-
| 产品面 | B | Chrome extension、Go native host/CLI、JS SDK、Python SDK、file chooser、Chrome Web Store 发布链路、SDK registry 发布链路和真实 Chrome smoke 记录已成形。 | 补首轮用户安装说明和更多失败场景验收。 |
16+
| 产品面 | B | Chrome extension、Go native host/CLI、JS SDK、Python SDK、Go SDK、file chooser、Chrome Web Store 发布链路、SDK registry 发布链路和真实 Chrome smoke 记录已成形。 | 补首轮用户安装说明和更多失败场景验收。 |
1717
| 架构文档 | B | Chrome route completed plan、架构、安全、发布和 reference 文档已覆盖主要边界。 | 把 extension-host runtime 的状态机和错误恢复策略补成单独文档。 |
1818
| 插件 UI | B | MV3 popup、icons、content cursor 和基础打包校验已具备。 | 补 popup 截图 smoke 和权限状态展示验收。 |
19-
| 测试 | B | `make ci` 覆盖 docs/repo hygiene、action pinning、extension 打包、脚本语法、Go 测试、SDK/协议测试、Python SDK smoke 和 fake native host/extension peer relay 测试。 | 补真实 Chrome 自动化 smoke 和 popup 截图 smoke。 |
19+
| 测试 | B | `make ci` 覆盖 docs/repo hygiene、action pinning、extension 打包、脚本语法、Go 测试、JS/Python/Go SDK 协议测试、Python SDK smoke 和 fake native host/extension peer relay 测试。 | 补真实 Chrome 自动化 smoke 和 popup 截图 smoke。 |
2020
| 可观测性 | C | native host 和 extension 已有基础错误传播,但跨 Native Messaging、Unix socket 和 SDK 的关联日志仍不足。 | 增加 request id、事件分层日志和可脱敏 debug trace。 |
2121
| 安全 | C | Chrome route 明确不内置上层站点策略,manifest origin 限制和本地 socket 文件权限已有默认约束。 | 补 socket token/peer 授权、失败路径安全测试和安装权限审计说明。 |
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
## [2026-05-10 13:39] | Task: Add Go SDK
2+
3+
### 🤖 Execution Context
4+
5+
- **Agent ID**: `Codex`
6+
- **Base Model**: `GPT-5`
7+
- **Runtime**: `Codex CLI`
8+
9+
### 📥 User Query
10+
11+
> JS/Python SDK 已经有了,增加 Go SDK;校验后提交、推送、发版,并用本地 Go 拉取验证能否成功使用 OBU。
12+
13+
### 🛠 Changes Overview
14+
15+
**Scope:** Go SDK, docs, release notes
16+
17+
**Key Actions:**
18+
19+
- **Go SDK**: 新增 `packages/open-browser-use-go`,提供 native frame socket client、active socket discovery、Browser Use method wrappers、CDP helpers 和 browser/tab helper。
20+
- **Tests**: 新增 fake Unix socket 测试,覆盖 frame encode、request round trip、notification dispatch、高层 tab flow、download/clipboard wrappers。
21+
- **Docs**: 同步 README、架构、skill SDK reference、质量评分和功能发布记录。
22+
23+
### 🧠 Design Intent (Why)
24+
25+
Go SDK 直接复用仓库现有 Go module 和 native socket 协议,避免引入额外发布系统;用户可以通过 Go module tag 拉取,并用 `obu.ConnectActive` 直接连接当前 Chrome native host 写入的 active socket registry。
26+
27+
### 📁 Files Modified
28+
29+
- `packages/open-browser-use-go/client.go`
30+
- `packages/open-browser-use-go/browser.go`
31+
- `packages/open-browser-use-go/client_test.go`
32+
- `packages/open-browser-use-go/README.md`
33+
- `README.md`
34+
- `README.zh-CN.md`
35+
- `docs/ARCHITECTURE.md`
36+
- `docs/QUALITY_SCORE.md`
37+
- `docs/releases/feature-release-notes.md`
38+
- `skills/open-browser-use/references/sdk-and-protocol.md`

docs/releases/feature-release-notes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
| 日期 | 功能域 | 用户价值 | 变更摘要 |
66
| --- | --- | --- | --- |
7+
| 2026-05-10 | Go SDK | Go 用户可以直接通过 Go module 接入 Open Browser Use,不必绕 JS/Python SDK 或 shell CLI。 | 新增 `packages/open-browser-use-go`,覆盖 active socket discovery、Browser Use JSON-RPC wrappers、CDP helpers、browser/tab/playwright-like helper、download/clipboard wrappers 和 fake socket 协议测试。 |
78
| 2026-05-10 | Deliverable Group Emoji | Chrome tab group 中的 Open Browser Use 交付组不再因为使用过新的 emoji 而显示成 `[?]`,保留绿色分组和清晰的完成标记。 | 发布 `0.1.26` patch 版本,将 shared deliverable group、skill display name 和文档统一改为兼容性更好的 `✅ Open Browser Use`|
89
| 2026-05-10 | Skill Session Hygiene | Agent 使用 Open Browser Use 时会被引导为每个任务或会话使用唯一 session id,并按更严格的 cleanup 规则默认清理无用标签页,减少跨任务复用旧 tab group 的风险。 | 发布 `0.1.25` patch 版本,更新 bundled skill 的 CLI、MCP、SDK 示例,明确不要依赖 fallback `obu-cli` session,补充官方 Chrome skill 0.1.7 参考快照,并收紧 deliverable、handoff、finalize 语义。 |
910
| 2026-05-10 | Skill SDK Guidance | Agent 用户通过 bundled skill 使用 SDK 时,可以直接复制当前 npm/PyPI 发布包的安装和 JS/Python 示例,不会再看到旧 scoped npm 包名或混淆的 client/browser 变量。 | 发布 `0.1.24` patch 版本,补强 `skills/open-browser-use` 的 SDK reference,新增 JS `connectOpenBrowserUse` 高层示例,保留低层 `OpenBrowserUseClient` 示例,并统一说明 `open-browser-use-sdk` distribution 与 Python `open_browser_use` import。 |
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Open Browser Use Go SDK
2+
3+
Go client for controlling a real Chrome profile through Open Browser Use. The
4+
package keeps the low-level JSON-RPC/CDP surface available and also provides
5+
higher-level browser/tab helpers for common agent workflows.
6+
7+
## Installation
8+
9+
```sh
10+
go get github.com/ifuryst/open-browser-use/packages/open-browser-use-go
11+
```
12+
13+
The SDK expects the `open-browser-use` CLI and Chrome extension to already be
14+
installed and connected:
15+
16+
```sh
17+
open-browser-use ping
18+
open-browser-use info
19+
```
20+
21+
## Usage
22+
23+
```go
24+
package main
25+
26+
import (
27+
"fmt"
28+
"log"
29+
"time"
30+
31+
obu "github.com/ifuryst/open-browser-use/packages/open-browser-use-go"
32+
)
33+
34+
func main() {
35+
browser, err := obu.ConnectActive(obu.Options{
36+
SessionID: "go-sdk-example",
37+
Timeout: 20 * time.Second,
38+
})
39+
if err != nil {
40+
log.Fatal(err)
41+
}
42+
defer browser.Close()
43+
44+
defer browser.Client.FinalizeTabs(nil)
45+
46+
if _, err := browser.Client.NameSession("Go SDK example - OBU"); err != nil {
47+
log.Fatal(err)
48+
}
49+
50+
tab, err := browser.NewTab()
51+
if err != nil {
52+
log.Fatal(err)
53+
}
54+
55+
if _, err := tab.Goto("https://example.com", obu.GotoOptions{
56+
WaitUntil: obu.LoadStateDOMContentLoaded,
57+
Timeout: 15 * time.Second,
58+
}); err != nil {
59+
log.Fatal(err)
60+
}
61+
62+
title, err := tab.Title()
63+
if err != nil {
64+
log.Fatal(err)
65+
}
66+
fmt.Println(title)
67+
}
68+
```
69+
70+
Use `Client.Request(method, params)` when you need an unrestricted Browser Use
71+
JSON-RPC call, or `Client.ExecuteCDP` / `Browser.CDP.Call` for raw CDP commands.

0 commit comments

Comments
 (0)