Loading...
Loading...
Use when an agent needs to operate the user's real Chrome session — listing tabs, reading the page, clicking, filling, typing into rich editors, pressing keys, evaluating JS, capturing screenshots, and reading console/network buffers. All actions go through CDP and run on backgrounded tabs without stealing focus.
npx skill4agent add kiluazen/kstack chrome-relaypnpm add -g chrome-relay
chrome-relay install
chrome-relay doctorchrome-relay --version| Command | What it does |
|---|---|
| List windows + tabs with their |
| Open in current tab. |
| Interaction map: visible interactive elements with selectors, text, role, bounds. Pipe to file. |
| Accessibility tree — ~30× smaller than |
| Trusted hover + press + release at element center (CDP |
| Coordinate-mode click. Selector optional. |
| Click an element resolved from a prior |
| Pointer move only — fires |
| Atomic value write into |
| CDP |
| Single key or chord: |
| |
| PNG. |
| Record a tab via CDP (paint-driven). Requires an active tab. |
| HTTP request/response ring buffer, last 200 per tab. |
| |
| Emulate device viewport, DPR, mobile flag, touch, UA. |
| Manage named windows / tab-groups so multiple agents can drive separate windows. |
| Activate or close tabs |
| Restart the extension's service worker after a rebuild |
| Queryable changelog; agent-readable JSON. |
| Raw pass-through for any internal tool. |
| Target element | Tool |
|---|---|
| |
| |
| Submit, navigate menus, modifier shortcuts | |
| Combobox / autocomplete option selection | |
| Shadow DOM, framework-internal pokes, scraping, custom widgets | |
chrome-relay tabschrome-relay navigate "https://example.com" --newchrome-relay read --tab 1234 -i > /tmp/page.json
jq '.elements[] | select(.text | test("Compose"; "i"))' /tmp/page.jsonaxchrome-relay click "<selector>" --tab 1234
chrome-relay fill "<selector>" "value" --tab 1234
chrome-relay type "tweet body" --tab 1234 -s "[data-testid=tweetTextarea_0]"
chrome-relay keys "Enter" --tab 1234jschrome-relay js --tab 1234 "return document.title"
chrome-relay js --tab 1234 "const r = await fetch('/api/me'); return await r.json()"chrome-relay screenshot --tab 1234 -o /tmp/evidence.pngtypejskeysgetBoundingClientRectdocument.elementFromPoint(x, y)capture:truechrome-relay js --tab 1234 "
['pointerdown','mousedown','click'].forEach(t =>
document.addEventListener(t, e => console.log(t, e.target.tagName, e.target.className), {capture:true})
);
return 'listening'
"
# do the action, then:
chrome-relay console --tab 1234jsecho $TOKENread -ichrome-relay <command> --help