opencli-adapter-author
Use when writing an OpenCLI adapter for a new site or adding a new command to an existing site. Guides end-to-end from first…
Use when driving the user's already-connected browser through the bsk command surface (the `browser` tool with argv arrays, or `browser.command({args})` inside code_mode). Covers reusing the existing agent window instead of spawning new ones, the command set that actually works,
$ npx -y skills add owwzo/cute-agent --skill bsk-browser --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/bsk-browserContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when driving the user's already-connected browser through the bsk command surface (the `browser` tool with argv arrays, or `browser.command({args})` inside code_mode). Covers reusing the existing agent window instead of spawning new ones, the command set that actually works,
name: bsk-browser
description: Use when driving the user's already-connected browser through the bsk command surface (the `browser` tool with argv arrays, or `browser.command({args})` inside code_mode). Covers reusing the existing agent window instead of spawning new ones, the command set that actually works, verified quirks/failures, and how to run a full command-surface test.`bsk` drives a real browser the user already has open. The user is already connected — treat that connection as a shared, precious resource.
| Command | Notes | | --- | --- | | `session start` | once per task; returns `session_id`, `agent_window_id` | | `navigate <url>` | returns `final_url`, `reached: "load"`, `tab_id` | | `navigate-back` / `navigate-forward` | return `final_url` + `previous_url` | | `reload` | same envelope as navigate | | `observe` | accessibility/VOM tree with `@eN` refs + `ref_count` | | `snapshot` | byte-identical output to `observe` on the same page | | `get-html` | full DOM string + `byte_size` | | `screenshot` | `image_base64`, `width`, `height` (PNG, device-scale ~1.5x) | | `evaluate <expr>` | returns `{ok, value}`; read-only DOM queries only | | `click <ref\|--selector>` | returns click `x`/`y`; does **not** prove navigation | | `hover <ref>` | returns hover coordinates | | `focus <ref>` / `blur <ref>` | `focused` / `was_focused` booleans | | `fill <ref> --value <text>` | returns `value_length` | | `select <ref> --value <v>` | returns `selected_values` + `selected_labels` | | `press <key>` | e.g. `Tab`; returns `key`, `code`, `modifiers` | | `scroll-to <ref>` | scroll element into view | | `tab list` | `tab_id`, `scope` (`user`/`agent`), `active`, `window_id`, `title`, `url` | | `tab create` / `tab close` / `tab select --tab-id <id>` | see quirks | | `wait-for-navigation` | blocks until navigation settles |
Use `code_mode` with `browser.command({ args: [...] })` — note the object wrapper; a bare array argument throws `browser.command 需要非空 args 数组`.
async function main(ctx) {
const out = {};
const run = async (k, args) => {
try {
const r = await ctx.browser.command({ args });
let s = r.stdout || "", p = null; try { p = JSON.parse(s); } catch (e) {}
let summary = p ? { ...p } : s.slice(0, 300);
for (const key of ["image_base64", "html", "text"])
if (typeof summary[key] === "string") summary[key] = `<len ${summary[key].length}>`;
out[k] = { ok: r.ok, res: summary, err: (r.stderr || "").slice(0, 200) };
} catch (e) { out[k] = { error: String(e) }; }
};
await run("nav", ["navigate", "https://example.com"]);
await run("observe", ["observe"]);
return out;
}Always truncate `html` / `text` / `image_base64` before returning — otherwise a single call floods the conversation.
1. `session start` once, `tab list` to record baseline. 2. Read-only: `navigate`, `observe`, `snapshot`, `get-html`, `screenshot`, `evaluate`, `tab list`. 3. Navigation: `navigate-back`, `navigate-forward`, `reload`, `wait-for-navigation`. 4. Interaction on a form fixture (`https://www.selenium.dev/selenium/web/web-form.html` or `https://httpbin.org/forms/post`): `fill`, `click` (radio/checkbox), `select --value`, `focus`, `blur`, `hover`, `press`, `scroll-to`. 5. After each mutation verify with a read-only `evaluate` (`input.value`, `:checked`). 6. Report per command: works / fails / needs different args / unknown, with exact error text. Never report a click as "successful navigation".
Lead with the verdict, then a compact table of command → result → exact error. Separate "genuinely broken", "argument contract differs from docs", and "expected validation error".
一个面向全网研究与复杂数据分析的云端智能体,能在公开网络、YouTube、BiliBili、X、小红书、Hacker News上研究任何主题 。项目wiki:https://zread.ai/OWWZO/ai-agent
Use when writing an OpenCLI adapter for a new site or adding a new command to an existing site. Guides end-to-end from first…
Automatically fix broken OpenCLI adapters when commands fail. Load this skill when an opencli command fails — it guides you…
Use when driving a website with opencli browser and sitemap context is available, requested, or needed to avoid blind navigation.…
Use when an agent needs to drive a real Chrome window via opencli — inspect a page, fill forms, click through logged-in flows, or…
Use when creating or maintaining OpenCLI site sitemaps: agent-facing navigation, page-state, action, workflow, API-reference,…
Use at the start of any OpenCLI session — this is the top-level map of what `opencli` can do, how to discover adapters, what…