diff --git a/skills/web-access/SKILL.md b/skills/web-access/SKILL.md
index 5238d5c..2669e9a 100644
--- a/skills/web-access/SKILL.md
+++ b/skills/web-access/SKILL.md
@@ -15,7 +15,8 @@ description: >-
新闻、网址、URL、找一下、搜一下、查一下、小红书、B站、微博、飞书、Twitter、
推特、X、知乎、公众号、已登录、登录状态。
license: MIT
-version: 3.4.5
+version: 3.5.0
+compatibility: Requires a DesireCore build with the bundled external-browser Playwright runtime; Chrome/Edge/Chromium remains separately installed and manually started with CDP.
type: procedural
risk_level: low
status: enabled
@@ -43,7 +44,7 @@ provides:
- LocalBookmarks
metadata:
author: desirecore
- updated_at: '2026-10-03'
+ updated_at: '2026-10-14'
i18n:
default_locale: en-US
source_locale: zh-CN
@@ -55,14 +56,14 @@ metadata:
short_desc: 联网搜索、网页抓取、内置受管浏览器登录态访问与取文、研究调研工作流
description: 联网访问工具包——搜索公开页面、Jina 优化抓取、内置受管浏览器完成登录态访问与取文,以及用户点名时接管他自己的 Chrome/Edge/Chromium。
body: ./SKILL.zh-CN.md
- source_hash: sha256:5a2d3f06ce8eca10
+ source_hash: sha256:f623f9ef0bebcd16
translated_by: human
en-US:
name: Web Access
short_desc: Web search, page fetching, logged-in access via the governed built-in browser, research workflows
description: A web-access toolkit — search public pages, fetch heavy pages via Jina Reader, reach and read logged-in sites through the governed built-in browser, and drive the user's named Chrome/Edge/Chromium over CDP on request.
body: ./SKILL.md
- source_hash: sha256:5a2d3f06ce8eca10
+ source_hash: sha256:f623f9ef0bebcd16
translated_by: human
market:
icon: >-
@@ -80,7 +81,7 @@ market:
fill-opacity="0.12"/>
category: research
- required_client_version: 10.0.128
+ required_client_version: 10.0.181
maintainer:
name: DesireCore Official
verified: true
@@ -128,7 +129,7 @@ When you call `Skill('web-access')`, the following tools are injected into the c
> **Important**: before `Skill('web-access')` is called, none of these tools appear in the LLM tools list — default conversations don't pay their token cost. See [references/browser-tools.md](references/browser-tools.md).
>
-> **Removed in v2.1**: `BrowserListTabs` / `BrowserNavigate` / `BrowserEval` / `BrowserClick` / `BrowserScreenshot` / `BrowserScroll` / `BrowserSetFiles` / `BrowserCloseTab` and the cdp-proxy behind them are retired. Calling them now returns "该旧 BrowserXxx/cdp-proxy 入口已停用". This skill version requires client v10.0.128+; `page.extract-text` / `page.element` / `page.wait` / inline wait blocks / cross-origin iframe snapshots were introduced in v10.0.112+, and `BrowserScript` needs a build containing S17/S18.
+> **Removed in v2.1**: `BrowserListTabs` / `BrowserNavigate` / `BrowserEval` / `BrowserClick` / `BrowserScreenshot` / `BrowserScroll` / `BrowserSetFiles` / `BrowserCloseTab` and the cdp-proxy behind them are retired. Calling them now returns "该旧 BrowserXxx/cdp-proxy 入口已停用". This skill version requires client v10.0.181+ with the bundled external-browser runtime; `page.extract-text` / `page.element` / `page.wait` / inline wait blocks / cross-origin iframe snapshots were introduced in v10.0.112+, and `BrowserScript` needs a build containing S17/S18.
### Use Cases
@@ -143,7 +144,7 @@ When you call `Skill('web-access')`, the following tools are injected into the c
- **Layered progression**: from lightweight search to heavy JS rendering to logged-in access — pick on demand; plus the user's own browser whenever they name it
- **Token optimization**: Jina Reader cuts token usage by 50–80% by default; `page.extract-text`'s maxBytes/cursor paging keeps even long logged-in articles under control
- **Logged-in session reuse**: where the Host has granted `browser.import.*`, BrowserImport brings the user's Cookies into an isolated Space — no re-login required
-- **Zero external dependencies by default**: the built-in browser needs no Python/Playwright install and no manually launched external Chromium browser (L3-external does, and only after explicit user intent)
+- **Zero user package installation**: the built-in browser needs no Python/Playwright; the external route uses the client-bundled runtime and a separately installed, user-started Chromium browser, only after explicit user intent
## L2: Detailed Specification
@@ -221,10 +222,14 @@ invalid, or mismatched endpoint, call the probe again and follow its status guid
Only for advanced interaction after a `ready` probe, identify the current OS **before** creating or running an attach script:
-1. **Create or select the DesireCore-owned isolated venv first.** Do not probe a global interpreter
- for Playwright. A system/bootstrap Python may only run `-m venv` when the venv does not exist.
-2. From that point onward, use only the venv interpreter for import, pinned install, re-import, and
- attach. Never use bare `python`, bare `pip`, `pip --user`, a global install, or `playwright install`.
+1. **For advanced interaction, call `BrowserExternalProbe` with `prepareAutomationRuntime: true` and require both browser `status: ready` and `automationRuntime.status: ready`. Use the returned `automationRuntime.pythonExecutable`.** Simple opening/navigation uses the default probe and does not wait for Python.
+
+ **Use the application-prepared venv at `/runtime/external-browser-playwright`.**
+ DesireCore prepares its Python, Playwright and dependencies from the installation package, including offline.
+ Do not create a workspace venv or select system/global Python.
+2. Use only this venv interpreter with `-B` for import and attach. Do not run pip installation,
+ change package indexes/proxies, or run `playwright install`. Missing runtime files indicate a client
+ preparation failure: report the exact error rather than asking the user to install dependencies.
A missing dependency is separate from browser readiness: report it explicitly and do not attach yet.
3. On Unix-like hosts, use Bash paths and shell syntax. On Windows, every command in this flow must use
the `PowerShell` tool and the venv's `Scripts\python.exe`; do not call the `Bash` tool. Use a
@@ -234,7 +239,7 @@ Only for advanced interaction after a `ready` probe, identify the current OS **b
`Scripts\python.exe` on Windows), remove only the temporary script you created, and leave the
external browser running.
-If the platform cannot be determined or no isolated runtime can be created safely, stop and report
+If the platform cannot be determined or the prepared runtime is unavailable, stop and report
the missing prerequisite. Do not improvise a cross-shell command and do not fall back to BrowserManage.
---
diff --git a/skills/web-access/SKILL.zh-CN.md b/skills/web-access/SKILL.zh-CN.md
index 736cfe8..bf83c93 100644
--- a/skills/web-access/SKILL.zh-CN.md
+++ b/skills/web-access/SKILL.zh-CN.md
@@ -41,7 +41,7 @@ web-access 是一个**流程型技能(Procedural Skill)**,提供四层互
> **重要**:未调用 Skill('web-access') 之前,这些工具**不会**出现在 LLM 的 tools 列表里——默认对话不消耗其 token。详见 [references/browser-tools.md](references/browser-tools.md)。
>
-> **v2.1 已移除**:`BrowserListTabs` / `BrowserNavigate` / `BrowserEval` / `BrowserClick` / `BrowserScreenshot` / `BrowserScroll` / `BrowserSetFiles` / `BrowserCloseTab` 及其背后的 cdp-proxy 已停用,调用会返回「该旧 BrowserXxx/cdp-proxy 入口已停用」。本技能版本要求客户端 v10.0.128+;`page.extract-text` / `page.element` / `page.wait` / 内联 wait 块 / 跨源 iframe 快照自 v10.0.112 起可用,`BrowserScript` 需包含 S17/S18 的更新版本。
+> **v2.1 已移除**:`BrowserListTabs` / `BrowserNavigate` / `BrowserEval` / `BrowserClick` / `BrowserScreenshot` / `BrowserScroll` / `BrowserSetFiles` / `BrowserCloseTab` 及其背后的 cdp-proxy 已停用,调用会返回「该旧 BrowserXxx/cdp-proxy 入口已停用」。本技能版本要求带预置外部浏览器运行时的客户端 v10.0.181+;`page.extract-text` / `page.element` / `page.wait` / 内联 wait 块 / 跨源 iframe 快照自 v10.0.112 起可用,`BrowserScript` 需包含 S17/S18 的更新版本。
### 使用场景
@@ -56,7 +56,7 @@ web-access 是一个**流程型技能(Procedural Skill)**,提供四层互
- **分层递进**:从轻量搜索到重度 JS 渲染到登录态访问,按需选择;用户点名时还可直接用他自己的浏览器
- **Token 优化**:Jina Reader 默认减少 50-80% Token 消耗;`page.extract-text` 的 maxBytes/cursor 分页让登录态长文也可控
- **登录态复用**:Host 授予 `browser.import.*` 时用 BrowserImport 把 Cookie 导入隔离 Space,不必重新登录
-- **默认零外部依赖**:内置浏览器不要求 Python/Playwright,也不要求用户手工启动调试外部 Chromium 浏览器(L3-external 需要,且仅在明确用户意图后才用)
+- **用户无需安装依赖包**:内置浏览器不要求 Python/Playwright;外部路线使用客户端预置运行时,外部 Chromium 浏览器本身仍需单独安装、由用户手动启动调试,且仅在明确用户意图后使用
## L2:详细规范
@@ -133,13 +133,13 @@ ready grant 有短时、一次性、精确 browser+port 绑定。宿主会在同
仅在 probe 返回 `ready` 后需要高级交互时,创建或执行 attach 脚本前**必须先确认当前操作系统**:
-1. **必须先创建或选择 DesireCore 拥有的隔离 venv**,不得先用全局解释器探测 Playwright。venv 不存在时,系统/引导 Python 只能用于执行 `-m venv`。
-2. 此后 import、固定版本安装、重新 import 与 attach 全部只能调用 venv 解释器;严禁裸 `python`、裸 `pip`、`pip --user`、全局安装或 `playwright install`。依赖缺失与浏览器 ready 是两件事:明确报告缺失,暂不 attach。
+1. **使用客户端已准备的 `/runtime/external-browser-playwright` 专属 venv**。推荐 Python、Playwright 和依赖从安装包离线准备,用户不需要手动安装;不得另建工作区 venv 或选用系统/全局 Python。Chrome/Edge/Chromium 本身仍需单独安装并由用户手动启动 CDP。
+2. import 与 attach 只调用这个 venv 的解释器并加 `-B`;不得执行 pip 安装、切换索引/代理或 `playwright install`。运行时缺失属于客户端准备失败:报告原始错误,不要求用户安装依赖;依赖状态与浏览器 ready 状态分别报告。
3. Unix-like 主机使用 Bash 路径和语法;Windows 的整个流程必须使用 `PowerShell` 工具和 venv 的 `Scripts\python.exe`,不得调用 `Bash` 工具。以 PowerShell here-string 和
`[IO.File]::WriteAllText(...)` 创建临时 `.py`。**绝不能把 `cat < **范围**:本文只描述 DesireCore **内置**受管浏览器,所以 v10.0.98+ 是本层基础能力的最低版本,
-> 不是整个 web-access v3.4.5 的兼容门槛。用户点名自己的外部 Chrome/Edge/Chromium 时需要
-> 客户端 v10.0.128+;简单打开走 `BrowserExternalProbe → BrowserExternalOpen`,高级 CDP/Playwright
+> 不是整个 web-access v3.5.0 的兼容门槛。外部 Chrome/Edge/Chromium 高级操作需要带预置
+> external-browser 运行时的客户端;简单打开走 `BrowserExternalProbe → BrowserExternalOpen`,高级 CDP/Playwright
> 交互见 [cdp-browser.md](cdp-browser.md)。不要把本文的 BrowserManage/Act 路线用于冒充外部浏览器。
>
> v2.1 起本层从「cdp-proxy 驱动用户自己的 Chrome」改为「DesireCore 内置受管浏览器」;v3.0 补全能力面(批量取文 / 元素操作 / 等待 / 代码模式)并移除 Python Playwright 回落。
diff --git a/skills/web-access/references/cdp-browser.md b/skills/web-access/references/cdp-browser.md
index f66b23a..7a9b6d9 100644
--- a/skills/web-access/references/cdp-browser.md
+++ b/skills/web-access/references/cdp-browser.md
@@ -325,19 +325,18 @@ The approved external Chromium browser is running but no windows are open. Ask t
### Playwright not installed
-First ensure the isolated venv exists, then run the import-only check with **that venv's interpreter**.
-Do not generate or execute the attach script until this succeeds.
+DesireCore prepares `/runtime/external-browser-playwright` from the installation
+package using its bundled Python and complete local wheel profile. No user package installation,
+network index, or browser download is needed. Chrome/Edge/Chromium remains separately installed,
+subject to its own terms, and manually started with CDP. Run the import-only check with the prepared
+interpreter. Missing files or import errors are client preparation failures: report the original
+error and do not install packages, create another venv, or attach until the runtime is available.
#### Unix-like hosts
```bash
-test -x "/runtime/external-browser-playwright/bin/python" || \
- python3 -m venv "/runtime/external-browser-playwright"
-if ! "/runtime/external-browser-playwright/bin/python" -c 'import playwright'; then
- "/runtime/external-browser-playwright/bin/python" -m pip install 'playwright==1.55.0' beautifulsoup4
-fi
-"/runtime/external-browser-playwright/bin/python" -c 'import playwright' || {
- echo 'Playwright is still unavailable in the isolated venv' >&2
+"/runtime/external-browser-playwright/bin/python" -B -c 'import playwright.sync_api, bs4' || {
+ echo 'The bundled external-browser runtime is unavailable' >&2
exit 1
}
# No need for `playwright install` — we're attaching to an existing browser, not downloading one
@@ -346,26 +345,19 @@ fi
#### Windows hosts
Use the `PowerShell` tool. Resolve `` from the current DesireCore instance; do not
-guess another instance's directory. The only permitted system/bootstrap `python.exe` use is running
-`-m venv` when the isolated venv is missing. Never use the `Bash` tool, bare `python`, bare `pip`,
-`pip --user`, or a global interpreter for any Playwright import, install, re-check, or attach step;
-all of those steps must use the venv's `Scripts\python.exe`.
+guess another instance's directory. Never use the `Bash` tool, bare `python`, bare `pip`,
+`pip --user`, or a global interpreter. Import and attach use the prepared venv's `Scripts\python.exe`
+with `-B`. Keep stdout UTF-8 when returning text, or use JSON ASCII escapes to avoid code-page confusion.
```powershell
$venv = Join-Path '' 'runtime\external-browser-playwright'
$python = Join-Path $venv 'Scripts\python.exe'
if (-not (Test-Path -LiteralPath $python)) {
- $bootstrapPython = (Get-Command python.exe -ErrorAction Stop).Source
- & $bootstrapPython -m venv $venv
- if ($LASTEXITCODE -ne 0) { throw 'Failed to create the isolated Playwright venv.' }
+ throw 'The client-prepared external-browser runtime is missing.'
}
-& $python -c "import playwright"
+& $python -B -c "import playwright.sync_api, bs4"
if ($LASTEXITCODE -ne 0) {
- # Explain the missing dependency and obtain any required install approval first.
- & $python -m pip install 'playwright==1.55.0' beautifulsoup4
- if ($LASTEXITCODE -ne 0) { throw 'Failed to install Playwright in the isolated venv.' }
- & $python -c "import playwright"
- if ($LASTEXITCODE -ne 0) { throw 'Playwright is still unavailable in the isolated venv.' }
+ throw 'The bundled external-browser runtime failed its import check.'
}
# Do NOT run `playwright install`; CDP attach uses the already-running external browser.
```
@@ -380,7 +372,7 @@ $script = @'
'@
try {
[IO.File]::WriteAllText($scriptPath, $script, (New-Object Text.UTF8Encoding($false)))
- & $python $scriptPath
+ & $python -B $scriptPath
if ($LASTEXITCODE -ne 0) { throw "Playwright attach failed with exit code $LASTEXITCODE." }
} finally {
Remove-Item -LiteralPath $scriptPath -ErrorAction SilentlyContinue
@@ -427,3 +419,5 @@ ask before changing the execution route.
- **You need thousands of pages** → CDP is not built for scale; look into proper scrapers
CDP is specifically the "right tool" for: **small number of pages + login required + human-like behavior needed**.
+
+Before advanced interaction, probe with `prepareAutomationRuntime: true`; require `automationRuntime.status: ready` and use its returned `pythonExecutable`. Ordinary external URL opening does not require this runtime.