chromium-bridge
Rust CLI bridging agents to Chromium-based browsers via Chrome DevTools Protocol (CDP).
Works with Brave, Chrome, and Chromium — any browser that speaks CDP.
Commands
| Command | Description |
|---|---|
chromium-bridge check |
Health check — is the debugging port responding? |
chromium-bridge list |
List open tabs with URLs |
chromium-bridge navigate <url> |
Navigate a tab to a URL |
chromium-bridge evaluate <js> |
Run JavaScript expression in a tab |
chromium-bridge screenshot [url] |
Capture a page screenshot |
chromium-bridge markdown <url> |
Convert a web page to markdown |
chromium-bridge click <selector> |
Click an element by CSS selector |
chromium-bridge type <selector> <text> |
Type text into an element |
chromium-bridge select-tab <pattern> |
Activate a tab by index or pattern |
chromium-bridge wait <selector> |
Wait for a CSS selector to appear |
chromium-bridge snapshot |
Dump the page accessibility tree with stable refs |
chromium-bridge network list |
Reload or navigate and list captured network requests |
chromium-bridge network inspect <matcher> |
Reload or navigate and inspect one matched request |
chromium-bridge ingest <url> |
Write extracted page markdown into a corky conversations corpus |
chromium-bridge state save <name> |
Save cookies plus local/session storage |
chromium-bridge state load <name> |
Restore cookies plus local/session storage |
chromium-bridge state list |
List saved state snapshots |
chromium-bridge setup |
Configure browser for remote debugging |
chromium-bridge skill install |
Install SKILL.md to the project's Claude skills |
All commands accept --tab <index|pattern> to target a specific tab, --json for machine-readable output, and --timeout <ms> to override the default 5s timeout.
Accessibility Snapshot
Use snapshot when you need an agent-friendly view of the current page's accessibility tree.
# Human-readable tree with stable refs on each visible node
# Normalized JSON with ref / parentRef / childRefs
# Raw AXNode protocol payload for low-level debugging
Default text output skips ignored/generic wrappers but preserves tree shape and prints ref=dom:<id> (or ref=ax:<nodeId> when no DOM backend id is available). JSON mode returns a normalized object with stable refs so follow-up tooling can point back at the same element without depending on array position.
Network Capture
Use the network command family when you need request-level visibility during a page load.
# Reload the current tab and print captured requests
# Navigate to a URL, then inspect the last matching request in detail
network list and network inspect capture requests within a single CDP session so response bodies remain available for inspection. If --url is omitted, the command reloads the target tab. Use --capture-timeout <ms> and --idle-ms <ms> when heavy pages need a longer capture window.
Corky Ingest
Use ingest when you want page content to land directly in corky's mail/conversations/ corpus instead of manually redirecting stdout to a file.
# Resolve the corky data dir with corky's normal rules and write one conversation file
# Add routing metadata and push the new file to Ragie immediately
# Keep the shared root corpus, and also copy into a project mailbox corpus
By default the command writes a corky-style markdown file into the resolved conversations/ directory, using the page title as the subject and a stable URL-derived filename slug. Pass --corky-data to target a different corky mailbox root, --slug to override the filename, or --title to override the generated subject. --mailbox <name> also copies the same file into mailboxes/<name>/conversations/ so one ingest can feed both the shared corpus and a project-specific corpus. --route runs corky sync routes after the root write so label-based mailbox fanout still happens immediately. --ragie-push runs corky ragie push for the same mailbox root.
For multi-project local search, point separate corky sift backends at those mailbox corpora:
[]
= ["shared", "project-alpha"]
[]
= "sift"
= "conversations"
[]
= "sift"
= "mailboxes/project-alpha/conversations"
That keeps the shared root corpus searchable while giving each project an isolated mailbox corpus for tighter retrieval.
Persistent State
Use named state snapshots for lightweight persistent browser profiles across sessions:
# Save cookies + storage from the current LinkedIn tab
# Restore that state later into a fresh tab
# Inspect saved snapshots
Named snapshots are stored under ~/.config/chromium-bridge/states/ by default. Override that with CHROMIUM_BRIDGE_STATE_DIR=/path/to/states. Use --path /tmp/custom.json on state save/load when you want an explicit file location.
Setup
Requires a Chromium-based browser running with --remote-debugging-port:
# One-time setup (Brave)
# Or launch manually
Install
# From Homebrew
# From crates.io
# Or via install script (prebuilt binaries)
|
The Homebrew tap ships prebuilt binaries from tagged GitHub releases for macOS and Linux on x86_64 and aarch64.
License
MIT