name: browser-bridge-cli description: Use this skill when you need to control or make actions on the user's chrome tab.
Use this skill when you need to control a real Chrome tab. Typical situations: - browser automation with live user browser context - page observation (interactive elements and DOM snapshots) - remote tab actions (navigate, click, type, press_key, scroll) - troubleshooting connection state between agent and browser
Project: - https://github.com/NmadeleiDev/browser_agent_bridge
This workflow has three connected parts: - Browser extension in Chrome receives tab commands. - Bridge server routes messages between browser and operator. - Operator CLI sends commands and reads results.
CLI commands used:
- browser-bridge-server to run the server
- browser-bridge to run operator actions
Before starting the server, generate strong tokens. Do not use weak defaults.
Example token generation:
python3 - <<'PY'
import secrets
print("BRIDGE_SHARED_TOKEN=" + secrets.token_urlsafe(32))
print("BRIDGE_OPERATOR_TOKEN=" + secrets.token_urlsafe(32))
PY
Use generated values when starting the server. Share only the client token (BRIDGE_SHARED_TOKEN) with the user for extension setup. Keep operator token for agent CLI usage.
python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install browser-agent-bridge
Upgrade later:
pipx upgrade browser-agent-bridge
Use static auth for straightforward local setup:
export BRIDGE_AUTH_MODE=static
export BRIDGE_SHARED_TOKEN='change-me-strong-token'
export BRIDGE_OPERATOR_TOKEN='Str0ng!Operator#42'
browser-bridge-server >/tmp/browser-bridge-server.log 2>&1 &
echo $! >/tmp/browser-bridge-server.pid
Start browser-bridge-server in the background. Do not leave it attached to the current shell, because the agent needs that shell for follow-up CLI commands, status checks, and diagnostics. If startup needs verification, inspect the log file or process state after backgrounding it.
Default endpoints:
- Extension client WS: ws://127.0.0.1:8765/ws/client
- Operator CLI WS: ws://127.0.0.1:8765/ws/operator
chrome://extensions.Developer mode.Load unpacked.extension/ folder).Bridge Server WS URL: ws://127.0.0.1:8765/ws/clientInstance ID: local-instanceClient ID: chrome-mainAuth Token / JWT: value of BRIDGE_SHARED_TOKEN generated by the agentSave, then Connect.All examples use:
- instance_id=local-instance
- client_id=chrome-main
- operator token Str0ng!Operator#42
- operator websocket ws://127.0.0.1:8765/ws/operator
You can pass the operator token either with --token or by exporting BRIDGE_OPERATOR_TOKEN. The examples below use --token explicitly for clarity.
List connected browser clients:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' list-clients
Check whether the specific client is connected:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
connect-status --instance-id local-instance --client-id chrome-main
Check whether tab command channel is ready:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
ping-tab --instance-id local-instance --client-id chrome-main
Observe interactive nodes on current page:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
observe --instance-id local-instance --client-id chrome-main --max-nodes 150
Get page HTML snapshot:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
send-command --instance-id local-instance --client-id chrome-main \
--type get_html --payload '{"max_chars":40000}'
Navigate with adaptive load wait:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
send-command --instance-id local-instance --client-id chrome-main \
--type navigate --payload '{"url":"https://example.com","wait_for_load":true,"wait_for_load_ms":7000}'
Click without load wait:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
send-command --instance-id local-instance --client-id chrome-main \
--type click --payload '{"selector":"a[href]","wait_for_load":false}'
Type into an element:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
send-command --instance-id local-instance --client-id chrome-main \
--type type --payload '{"selector":"input[name=q]","text":"browser bridge"}'
Press a special key:
browser-bridge --server-ws-url ws://127.0.0.1:8765/ws/operator --token 'Str0ng!Operator#42' \
send-command --instance-id local-instance --client-id chrome-main \
--type press_key --payload '{"key":"Enter","selector":"input[name=q]"}'
press_key supports:
- keys: Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, Space
- aliases: return, esc, del, up, down, left, right, spacebar
- modifiers: alt_key, ctrl_key, meta_key, shift_key
- target selection via selector, ref, click_ref, or locator
- default target: current document.activeElement when no selector/ref is provided
更多技能请访问小葱技能站7w4.net。
instance_id, client_id, and token.list-clients.connect-status.ping-tab.observe before action commands.send-command actions (navigate, click, type, press_key, scroll, get_html).observe to confirm page state after actions.Target client not connectedinstance_id and client_id exactly match CLI flags.Reconnect extension and retry.
Operator auth failed or auth errors
Verify --token matches BRIDGE_OPERATOR_TOKEN.
Command timed out
--timeout-s.Confirm active tab is a normal webpage (not restricted pages like chrome://*).
Receiving end does not exist
Retry once; extension can reinject content script when needed.
Slow responses on action commands
wait_for_load=false for immediate response.wait_for_load_ms.wss://) and strong secrets.list-clients returns expected client.connect-status is connected.ping-tab reports ready.observe returns page data.send-command actions return valid results.这个 Skill 质量较好,文档写得清楚详细,使用说明完整。它的主要优点是功能实用、示例丰富,能帮助控制浏览器完成自动化操作。不足之处是需要用户手动配合做一些设置,对新手来说稍微有点复杂。适合有一定动手能力的用户使用。