Browser harness
Production-proven agent skills: agent-swarm, asset-validation, browser-harness, awesome-presentation, workspace-knowledge-graph.
npx -y skills add MarioJames/skill-foundry --skill browser-harnessAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when validating frontend changes in a browser via vercel-labs/agent-browser, preparing dev server / login state per target shape (URL / *.html / project dir), collecting screenshot+console+network evidence, injecting APP_URL into project test commands, or driving interactive exploration.
SKILL.md
10.5 KB, ~3.4k tokens by cl100k_base, as published. Nobody here has run it
Browser Harness
Overview
本技能是前端验收的浏览器脚手架:自动按 target 形态决定要不要起 dev server,准备登录态,采集复合证据。逐步浏览器动作(点、填、等、看)由 agent 直接调 vercel-labs/agent-browser CLI 完成;本技能不替你写 Playwright 脚本,也不封装项目自己的测试命令(journey 等由项目 testing-suite 承担,本技能只负责把 APP_URL 准备好)。
核心原则:在一轮验收里先用 bh prepare 取到稳定 APP_URL、必要时 bh login 准备登录态;然后视场景选择 bh collect-evidence 或直接调 agent-browser 原始 CLI;结束统一 bh cleanup。
下文
bh ...均为bash "$BH_DIR/bh.sh" ...的速记。agent 的每次 shell 调用都是新进程,alias 不会生效,请始终用完整形式。
When to Use
- A. 一次性烟测 / 线上巡检:开页面 → 一键收齐 screenshot + console + 网络证据
- B. Journey / 项目测试跑测:
bh prepare拿APP_URL,注入项目自带的tnpm run test:journey(测试本体由项目 testing-suite 执行) - C. 交互式探索:连续点 / 填 / 等 / 截,跨页面跳转 —— 直接用
agent-browserCLI,本技能负责前置和登录态 - D. 登录态准备:headed 弹窗登一次,落 browser-harness 持久化 profile,后续场景默认自动复用
HARD CONSTRAINTS(MUST / DO NOT)
- DO NOT 在本技能里改业务代码、mock、OneAPI 产物或后端反馈单。
- MUST 用
eval "$(bash "$BH_DIR/bh.sh" prepare ...)"读取 prepare 的 stdout 环境变量;DO NOT 从日志猜端口或自行拼APP_URL。 - MUST 在验收结束时执行
bh cleanup(prepare 用了非.路径时 cleanup 传同一路径)。 - DO NOT 把
artifact_errors非空的 fallback 占位文件当有效证据。 - DO NOT 在采集阶段一次性 dump 全部 network body;按需查指定
requestId。 - DO NOT 在本 skill 复制或硬编码技能安装路径;dispatcher 以实际加载的
SKILL.md目录为准。
Project Setup
依赖 vercel-labs/agent-browser CLI ≥ 0.29 已安装:
command -v agent-browser >/dev/null || {
echo "请按 https://github.com/vercel-labs/agent-browser 安装 agent-browser,然后 'agent-browser install' 拉取 Chrome for Testing"
exit 2
}
dispatcher 位于当前实际加载的 browser-harness 技能目录。先将
BROWSER_HARNESS_SKILL_DIR 设为实际加载本 SKILL.md 的目录(宿主加载技能时提供的
Base directory);插件缓存目录和独立安装目录都使用同一方式。验收沙箱和既有 HOME
独立安装目录只作为兼容兜底:
BH_DIR="${BROWSER_HARNESS_SKILL_DIR:+$BROWSER_HARNESS_SKILL_DIR/scripts}"
if [ -z "$BH_DIR" ] && [ -n "${ACCEPTANCE_SANDBOX:-}" ]; then
BH_DIR="$(find "$ACCEPTANCE_SANDBOX/.iso" -path '*/skills/browser-harness/scripts' -type d 2>/dev/null | head -1)"
fi
for candidate in \
"$HOME/.codex/skills/browser-harness/scripts" \
"$HOME/.claude/skills/browser-harness/scripts" \
"$HOME/.cc-switch/skills/browser-harness/scripts"
do
if [ -z "$BH_DIR" ] && [ -f "$candidate/bh.sh" ]; then
BH_DIR="$candidate"
break
fi
done
if [ -z "$BH_DIR" ] || [ ! -f "$BH_DIR/bh.sh" ]; then
echo "无法定位当前加载的 browser-harness scripts 目录" >&2
exit 1
fi
Standard Flow
A. 一次性烟测 / 线上巡检
eval "$(bash "$BH_DIR/bh.sh" prepare https://prod.example.com)"
bash "$BH_DIR/bh.sh" collect-evidence "$APP_URL" --profile prod-monitor
bash "$BH_DIR/bh.sh" cleanup
bh collect-evidence 把 stdout 输出的 summary.json 直接给 agent 当回执,落盘的 evidence/<ts>/ 目录可按需深读。
B. Journey 跑测(APP_URL 注入项目 testing-suite)
eval "$(bash "$BH_DIR/bh.sh" prepare .)"
tnpm run test:journey -- --iteration 33 --task task-7 --app-url "$APP_URL"
bash "$BH_DIR/bh.sh" cleanup
journey 的登录态由 testing-suite 自己管理(--auth open 保存 storageState、--auth use 复用),与 bh login 的浏览器 profile 是两套独立机制,互不相通;bh login 只服务于 bh collect-evidence 和直接调 agent-browser 的场景。
C. 交互式探索
eval "$(bash "$BH_DIR/bh.sh" prepare .)"
bash "$BH_DIR/bh.sh" login "$APP_URL/login" # 必要时;默认 profile
# agent 直接驱动 agent-browser;用 profile-dir 复用 bh 持久化的登录态
PROFILE_DIR="$(bash "$BH_DIR/bh.sh" profile-dir)"
agent-browser open "$APP_URL/some/path" --profile "$PROFILE_DIR"
agent-browser snapshot --json
agent-browser click "@e3"
agent-browser fill "@e7" "hello"
agent-browser wait --text "已保存"
agent-browser screenshot --annotate step.png
# 需要正式归档时回到封装命令
bash "$BH_DIR/bh.sh" collect-evidence "$APP_URL/some/path"
bash "$BH_DIR/bh.sh" cleanup
D. 登录态准备
eval "$(bash "$BH_DIR/bh.sh" prepare https://staging.example.com)"
bash "$BH_DIR/bh.sh" login "$APP_URL/login" # headed 弹窗,人工登一次
bash "$BH_DIR/bh.sh" cleanup
# 后续任何场景默认自动复用该登录态;多套登录态才用 --profile <name> 区分
C 场景:交互式探索的最小教程
ref 是什么
agent-browser snapshot --json 返回页面无障碍树,每个可交互元素带 @e1/@e2/... ref。所有 click / fill / hover / drag 都用这个 ref 定位,比 CSS selector 稳定得多。
典型循环:
agent-browser open "$APP_URL/path" --profile "$(bash "$BH_DIR/bh.sh" profile-dir)"
agent-browser snapshot --json | tee /tmp/snap.json # 看到 ref
agent-browser click "@e3" # 触发跳转
agent-browser wait --text "目标文案" # 等页面稳定
agent-browser screenshot --annotate step.png
网络深挖
# --json 输出统一是 {"success":true,"data":{...}} 信封;请求列表在 data.requests,id 字段名是 requestId
agent-browser network requests --type xhr,fetch --json | jq '.data.requests[].requestId' # 列出
agent-browser network request <requestId> # 看某条 request/response 全文(含 body)
DO NOT 一次性 dump 全部 body,会爆 token;按需查指定 requestId。
--profile 是可选扩展 flag
默认情况下不用传 --profile:所有命令(login / collect-evidence,以及通过 profile-dir 拿到路径后直接调的 agent-browser)都用 browser-harness 自己的默认 profile,登录态因此默认就持久、跨调用自动复用,调用方不必每次去记/找之前用的路径。
--profile <name> 只在你需要同时维护多套登录态时才用(例如 prod-monitor 与 staging、不同租户/账号)。技能把名字解析成私有隐藏目录 ~/.browser-harness/profiles/<name>(默认是 default)再传给 agent-browser,login 写入与 collect-evidence 读取指向同一目录。
C 场景里 agent 直接调 agent-browser 时,用 --profile "$(bash "$BH_DIR/bh.sh" profile-dir [name])" 取到该目录路径即可复用同一份登录态,不必记忆技能内部布局。
进阶:BH_PROFILE_ROOT 改存储根目录,BH_DEFAULT_PROFILE 改默认 profile 名;--profile 也可直接传一个路径(含 / 或以 ~ 开头)绕过技能目录。
Runtime Pitfalls
bh prepare在项目目录场景下 stdout 输出APP_URL=...、DEV_SERVER_PID=...、DEV_SERVER_LOG=...三行;MUST 用eval "$(bh prepare ...)"形式读取。其他场景仅输出APP_URL=。- macOS 下技能用
launchctl submit托管 dev server,避免一次性 shell/exec 退出时回收子进程。如果 journey 报ERR_CONNECTION_REFUSED,先看DEV_SERVER_PID/DEV_SERVER_LOG,DO NOT 直接判定为页面或测试资产失败。 bh prepare的 dev 命令优先级:INSPECS_DEV_COMMAND>package.json scripts.dev>start>serve;都没有时报错让你显式指定。- 真实后端联调示例:
INSPECS_DEV_COMMAND="tnpm run devs" INSPECS_APP_HOST=dev.alipay.net bh prepare . bh loginMUST 在能弹 headed 浏览器的环境跑(本机或带显示转发的 SSH)。CI 环境没显示,应直接复用预先建好的 profile。bh cleanup的状态文件按项目路径隔离:默认清理当前目录对应的 dev server,若 prepare 时用的不是.,cleanup 需传同一项目路径(bh cleanup path/to/proj)。bh collect-evidence的evidence/<ts>/默认落在当前目录;建议把evidence/加入项目.gitignore,避免证据目录被误提交。- 本技能适配 agent-browser ≥ 0.29(
--json信封输出、screenshot位置参数);版本偏低时命令会输出 warn,建议agent-browser upgrade。
Evidence
bh collect-evidence 输出 evidence/<ts>/(各 JSON 均已从 --json 信封解包为裸数组/对象):
| 文件 | 内容 |
|---|---|
screenshot.png | 带 ref 编号的标注截图(--annotate) |
dom.json | snapshot 的 data 对象(origin / refs / snapshot) |
console.json | 控制台消息数组(含 error/warn) |
network-xhr.json | 全量 XHR/fetch 请求数组(字段名 requestId) |
network-errors.json | 4xx/5xx 请求数组 |
network.har | 仅 --har 时生成(har 录制先于 open,覆盖首屏请求) |
summary.json | 各文件相对路径 + 关键计数 + artifact_errors(采集失败的项) |
stdout 也输出 summary.json 内容供 agent 直接读取。artifact_errors 非空说明对应文件是 fallback 占位,DO NOT 当有效证据引用。open 失败时整个命令以 exit 3 退出且不产出证据目录。需要某条请求 body 时用 agent-browser network request <requestId> 单独深挖,DO NOT 在采集阶段一次性 dump。
Tests
技能自带 bash 单元测试(stub 化)+ 一条有条件真机冒烟(PATH 里有 agent-browser 才跑,防 stub 与真实 CLI 契约漂移):
bash "$BROWSER_HARNESS_SKILL_DIR/tests/run-all.sh"
bh login headed 登录、launchctl 防回收、dev server 真实起停这三类仍需真环境人工/评估复测,不在自动化覆盖内。