<< All versions
Skill v1.0.0
currentLLM-judged scan95/100anup4khandelwal/codex-stack/browse
──Details
PublishedOctober 3, 2026 at 03:59 PM
Content Hashsha256:51bf393cc5dc5f18...
Git SHA
──Files
Files (1 file, 7.0 KB)
SKILL.md7.0 KBactive
SKILL.md · 130 lines · 7.0 KB
version: "1.0.0" name: browse description: Browser-based QA workflow for Codex. allowed-tools:
- Read
- Bash
/browse
Use this mode when the agent needs to inspect a real web page, click through a flow, or validate a deployment visually.
Objective
Give the agent eyes for QA and deployment checks.
Available commands
doctorstatussessionsflowssave-flow <name> <json-steps>save-repo-flow <name> <json-steps>import-flow <name> <path>import-repo-flow <name> <path>export-flow <name> <path>show-flow <name>delete-flow <name>clear-sessionexport-session <path>import-session <path>import-cookies <path>import-browser-cookies <browser>a11y <url>perf <url>snapshot <url> [name]compare-snapshot <url> <name>probe <url>text <url>html <url> [selector]links <url>screenshot <url> [path]mock <url> <pattern> <json-config>block <url> <pattern>download <url> <selector> [path]assert-download <url> <selector> <expected-name-fragment> [path]eval <url> <expression>click <url> <selector>fill <url> <selector> <value>upload <url> <selector> <path>dialog <url> <accept|dismiss> [selector] [prompt]wait <url> [selector|ms:<n>|url:<target>|load:<state>|state:<state>:<selector>]press <url> <selector> <key>assert-visible <url> <selector>assert-hidden <url> <selector>assert-enabled <url> <selector>assert-disabled <url> <selector>assert-checked <url> <selector>assert-editable <url> <selector>assert-focused <url> <selector>assert-text <url> <selector> <expected>assert-url <url> <expected>assert-count <url> <selector> <expected-count>flow <url> <json-steps>run-flow <url> <name>login <url> <name>- flow step action:
use-flow - flow step action:
route - flow step action:
clear-routes - flow step action:
download - flow step action:
assert-download
Example
bash
bun src/cli.ts browse text https://example.com --session stagingbun src/cli.ts browse save-flow login-local '[{"action":"fill","selector":"input[name=email]","value":"demo@example.com"},{"action":"fill","selector":"input[name=password]","value":"demo-pass"},{"action":"click","selector":"button[type=submit]"}]'bun src/cli.ts browse save-repo-flow landing-smoke '[{"action":"assert-visible","selector":"body"}]'bun src/cli.ts browse import-flow login-local ./docs/login-flow.mdbun src/cli.ts browse export-flow release-full-demo ./docs/release-full-demo.yamlbun src/cli.ts browse export-session ./tmp/staging-session.json --session stagingbun src/cli.ts browse import-session ./tmp/staging-session.json --session staging-copybun src/cli.ts browse import-browser-cookies chrome --session staging --profile Defaultbun src/cli.ts browse a11y https://example.com/dashboard --scope main --impact serious --session stagingbun src/cli.ts browse perf https://example.com/dashboard --budget lcp=2s --budget cls=0.1 --wait-ms 400 --session stagingbun src/cli.ts browse probe https://example.com/settings --session stagingbun src/cli.ts browse upload https://example.com/profile "input[type=file]" ./fixtures/avatar.png --session stagingbun src/cli.ts browse dialog https://example.com/settings accept "#delete-confirm" --session stagingbun src/cli.ts browse wait https://example.com/dashboard load:domcontentloaded --session stagingbun src/cli.ts browse click https://example.com/login "role:button:Continue" --session staging --device mobilebun src/cli.ts browse fill https://example.com/login "label:Email" demo@example.com --session stagingbun src/cli.ts browse html https://example.com/search "placeholder:Search" --session stagingbun src/cli.ts browse assert-visible https://example.com/home "testid:hero" --session stagingbun src/cli.ts browse click https://example.com/checkout "role:button:Pay now" --session staging --frame "name:payment"bun src/cli.ts browse mock https://example.com/app "**/api/profile" '{"status":503,"json":{"error":"offline"}}' --session stagingbun src/cli.ts browse block https://example.com/app "**/analytics/**" --session stagingbun src/cli.ts browse download https://example.com/reports "role:button:Export CSV" ./artifacts/report.csv --session stagingbun src/cli.ts browse assert-download https://example.com/reports "role:button:Export CSV" report.csv ./artifacts/report.csv --session stagingbun src/cli.ts browse snapshot https://example.com marketing-home --session stagingbun src/cli.ts browse compare-snapshot https://example.com marketing-home --session stagingbun src/cli.ts browse login https://example.com/login login-local --session stagingbun src/cli.ts browse assert-focused https://example.com/login "input[name=email]" --session stagingbun src/cli.ts browse assert-disabled https://example.com/settings "button[disabled]" --session stagingbun src/cli.ts browse assert-text https://example.com "h1" "Example Domain" --session stagingbun src/cli.ts browse screenshot https://example.com /tmp/example.png --session stagingbun src/cli.ts browse sessions
Guardrails
- Do not claim visual validation without screenshots or runtime output.
- Prefer deterministic selectors and stable flows.
- Prefer semantic selectors when possible:
role:button:Save,label:Email,placeholder:Search,text:Welcome back,testid:hero. - Use
--frame name:<name>,--frame url:<fragment>, or--frame <iframe-selector>when the target element lives inside an iframe. - Use
route/clear-routesflow steps or themock/blockcommands to stabilize flaky third-party calls and test failure paths before navigation starts. - Use
download/assert-downloadwhen the flow should prove that an export file was actually saved, not just that the export button was clicked. - Reuse named sessions for authenticated flows so login state persists.
- Use
--device mobile|tablet|desktopwhen the check is viewport-sensitive or when a bug only reproduces responsively. - Export/import session bundles when authenticated QA needs to move between machines or named sessions.
- Use
a11yandperfwhen you need raw browser evidence before turning it into a scoredqareport. - Use
import-browser-cookieson macOS when you already have a signed-in Chrome, Arc, Brave, or Edge profile and want to bootstrap a named Codex session quickly. - Use
dialogbefore the click that triggers a modal or confirm prompt so the handler is armed in time. - Check in shared flows under
browse/flows/; keep machine-specific experiments in.codex-stack/browse/flows/. - Prefer composing shared flows with
use-flowinstead of duplicating login/setup steps across many files. - Prefer Markdown or YAML exports when flows need code review, because they diff more cleanly than inline JSON strings.
- For repeatable authenticated demos, start the flow with a
clear-storagestep so persistent sessions do not skip the login screen. - Use snapshots when you need a baseline for later regression checks; use
qawhen you need a scored report built from those checks.