Help us improve
Share bugs, ideas, or general feedback.
From claw-mux
Automates browser tasks in cmux embedded webviews: open sites, snapshot elements for refs, click/fill/type/select/press, wait for state changes/URLs/selectors. Needs $CMUX_WORKSPACE_ID.
npx claudepluginhub leejuoh/claude-code-zero --plugin claw-muxHow this skill is triggered — by the user, by Claude, or both
Slash command
/claw-mux:cmux-browserThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill for browser tasks inside cmux webviews. Requires cmux environment (`$CMUX_WORKSPACE_ID`). Outside cmux, this skill's features are unavailable.
Controls cmux terminal multiplexer: splits panes, launches/monitors sub-agents and collects results, sends commands/keys, reads screens, sends notifications. Activates when CMUX_* env vars are set.
Automates headless browser tasks with Vercel's agent-browser CLI: navigate URLs, snapshot interactive elements with refs (@e1), click/fill/type, scroll, test web pages.
Automates headless browser tasks via Vercel's agent-browser CLI: navigate URLs, snapshot interactive elements with refs, click/fill forms, scrape data using Bash commands.
Share bugs, ideas, or general feedback.
Use this skill for browser tasks inside cmux webviews. Requires cmux environment ($CMUX_WORKSPACE_ID). Outside cmux, this skill's features are unavailable.
get url before waiting or snapshotting.--interactive) to get fresh element refs.click, fill, type, select, press).cmux --json browser open https://example.com
# use returned surface ref, for example: surface:7
cmux browser surface:7 get url
cmux browser surface:7 wait --load-state complete --timeout-ms 15000
cmux browser surface:7 snapshot --interactive
cmux browser surface:7 fill e1 "hello"
cmux --json browser surface:7 click e2 --snapshot-after
cmux browser surface:7 snapshot --interactive
# identify current context
cmux identify --json
# open routed to a specific topology target
cmux browser open https://example.com --workspace workspace:2 --window window:1 --json
Notes:
surface:N, pane:N, workspace:N, window:N).--id-format uuids|both).surface:N per task unless you intentionally switch.cmux browser <surface> wait --selector "#ready" --timeout-ms 10000
cmux browser <surface> wait --text "Success" --timeout-ms 10000
cmux browser <surface> wait --url-contains "/dashboard" --timeout-ms 10000
cmux browser <surface> wait --load-state complete --timeout-ms 15000
cmux browser <surface> wait --function "document.readyState === 'complete'" --timeout-ms 10000
cmux --json browser open https://example.com/signup
cmux browser surface:7 get url
cmux browser surface:7 wait --load-state complete --timeout-ms 15000
cmux browser surface:7 snapshot --interactive
cmux browser surface:7 fill e1 "Jane Doe"
cmux browser surface:7 fill e2 "jane@example.com"
cmux --json browser surface:7 click e3 --snapshot-after
cmux browser surface:7 wait --url-contains "/welcome" --timeout-ms 15000
cmux browser surface:7 snapshot --interactive
cmux browser surface:7 fill e11 "" --snapshot-after --json
cmux browser surface:7 get value e11 --json
# navigate -> verify -> wait -> snapshot -> action -> snapshot
cmux browser surface:7 get url
cmux browser surface:7 wait --load-state complete --timeout-ms 15000
cmux browser surface:7 snapshot --interactive
cmux --json browser surface:7 click e5 --snapshot-after
cmux browser surface:7 snapshot --interactive
If get url is empty or about:blank, navigate first instead of waiting on load state.
| Reference | When to Use |
|---|---|
| Commands | Full browser command mapping and quick syntax |
| Snapshot and Refs | Ref lifecycle and stale-ref troubleshooting |
| Authentication | Login/OAuth/2FA patterns and state save/load |
| Session Management | Multi-surface isolation and state persistence patterns |
| Template | Description |
|---|---|
| Form Automation | Snapshot/ref form fill loop |
| Authenticated Session | Login once, save/load state |
| Capture Workflow | Navigate + capture snapshots/screenshots |
These are not supported in cmux's embedded browser (WKWebView-based):
Use supported high-level commands (click, fill, press, scroll, wait, snapshot) instead.
e1, e2, ...) are invalidated on any DOM change — always re-snapshot after navigation, modal open/close, or mutating actions. Use --snapshot-after on click/fill to combine action + snapshot.snapshot --interactive can return js_error on complex pages — fall back to get text body or get html body for content extraction.browser open targets the workspace of the calling terminal (via $CMUX_WORKSPACE_ID), even if a different workspace is currently focused. Use --workspace to override.goto and navigate are aliases — both work for same-surface navigation.js_error on snapshot --interactive or evalSome complex pages can reject the JavaScript used for rich snapshots.
Recovery:
cmux browser surface:7 get url
cmux browser surface:7 get text body
cmux browser surface:7 get html body
get url first to confirm the page actually navigated.get text body or get html body when snapshot --interactive returns js_error.