用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Sanuu7/AndroidHarness --skill browser命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | browser |
| description | Drive the in-app browser: navigate, click, type, scroll, inspect DOM and logs. |
Drive the in-app WebView with the browser_* tools when a task needs a real rendered page: testing workspace HTML or localhost previews, clicking through UI, filling forms, reading what JavaScript rendered.
The user sees every action live in the web preview sheet, with an "Agent is controlling the browser" banner and an activity trail. Say what you are about to do before you do it.
shell_background (for example python3 -m http.server 8000, npx serve, or dev servers like npm run dev) before navigating.browser_navigate first. It accepts external URLs and localhost dev servers (e.g. http://localhost:8000). Local workspace files can also be opened directly via workspace-relative files (served under https://harness.workspace/ws/...), but hosting on localhost is preferred for full client-server behavior. It returns URL, title, scroll position, text excerpt, and interactive elements numbered [1], [2], ... with [offscreen] / [DISABLED] markers. Those numbers are your handles.browser_click, browser_type (set clear_first to replace text). Missing ids and selectors are hard errors, not silent no-ops; on "not found" re-run browser_get_dom and pick the fresh number instead of retrying blind.scrollY, so verify a jump actually happened. If a click "did nothing", check browser_get_logs for JS errors before retrying; an unchanged URL does not mean the click failed.browser_wait_for (selector / text / url_contains) instead of guessing delays.browser_back / browser_forward / browser_refresh. These preserve console logs and are preferable to re-navigating, which resets app state.browser_get_url is the cheap way to confirm where you are (it reads the page's own location, so it is accurate for local and synthetic pages alike).browser_eval is synchronous and sandboxed: the last expression's value (or an explicit return) comes back as the result, and both runtime throws and syntax errors are reported as tool failures with the real message. There is no await; for async work, kick off the request, then browser_wait_for on the state it produces (stash results in localStorage and read them in a follow-up eval).browser_scroll then browser_get_dom for content below the fold.browser_screenshot captures the viewport and shows the image inline in the chat. Use it when layout or styling is the question, not for routine checks.python3 -m http.server) before testing in browser when possible.browser_get_dom and browser_back over re-navigating; re-navigation resets app state.