| headless CDP | extension relay (glider) | |
|---|---|---|
| logged-in tab / SSO | β cold profile | β attach to open tab |
| corp / MFA sessions | β re-auth wall | β reuse browser cookies |
| loop until done | manual glue | β
glider loop + markers |
glidercli β relay at ws://127.0.0.1:19988 β Glider extension β CDP on your tab.
| failure mode | symptom |
|---|---|
| β cold profile launch | SSO/MFA breaks on internal sites; no logged-in tab to drive |
| β raw CDP without bridge | extension must relay debugger traffic from real Chromium profile |
| β cookie-only terminal fetch | cross-origin API hosts often 401 without in-tab bearer |
| β one-shot scripts only | no first-class loop with iteration cap, timeout, completion marker |
npm i -g glidercli
glider install
glider connect| Step | Action |
|---|---|
| CLI | npm i -g glidercli |
| Extension | Glider on Chrome Web Store in the profile you automate |
| Daemon | glider install |
| Session | glider connect (once per browser launch) |
Node 18+. Chromium-based browser with the extension enabled (see Browsers).
Extension + relay model uses Chromium + Glider extension from Chrome Web Store in the same profile as glider connect.
| Browser | Config | |
|---|---|---|
| Google Chrome | default for glider connect |
|
| Arc | config/browser.json.example |
|
| Microsoft Edge | registry key edge |
|
| Brave | registry key brave |
|
| Vivaldi | registry key vivaldi |
Not supported today: Firefox/Safari/WebKit/Gecko, DuckDuckGo, browsers without Chrome Web Store extension path.
Priority: $GLIDER_HOME/config/browser.json β $GLIDER_HOME/browser.json β default Google Chrome.
Registry key (recommended):
{ "use": "arc" }Registry file: $GLIDER_HOME/config/browsers-registry.json
glider use arc
glider browserExplicit name/path:
{
"name": "Arc",
"path": "/Applications/Arc.app",
"processName": "Arc"
}| Command | Effect |
|---|---|
glider use arc |
write { "use": "arc" } to browser.json |
glider use |
list registry keys |
glider browser |
show resolved name, path, process |
macOS: open -a / AppleScript. Linux/Windows: partial, on roadmap.
name: hn-front
steps:
goto: "https://news.ycombinator.com"
wait: 2
eval: "document.title"
screenshot: "/tmp/hn.png"glider connect
glider status
glider goto "https://news.ycombinator.com"
glider eval "document.title"
glider run `hn-scrape.yaml`
glider loop `hn-scrape.yaml` -n 50 -m hn_scrape_done# per-host capture hints (optional)
glider resolve https://news.ycombinator.com --json| Output | Path |
|---|---|
| daemon log | ~/.glider/daemon.log |
| domain index | ~/.glider/config/domains.json |
| per-host intel | ~/.glider/warch/HOST/glider.json |
| explore cache | ~/.glider/bexplore/HOST/ |
| Env | Default | Role |
|---|---|---|
GLIDER_HOME |
~/.glider |
config, cache, warch tree |
GLIDER_PORT |
19988 |
relay port for CLI + helpers; non-default values require matching extension configuration |
GLIDER_NODE_BIN |
auto-detected | Node.js 18+ executable for background relay supervisor |
GLIDER_RELOAD_TIMEOUT_MS |
15000 |
extension reload/reconnect deadline |
GLIDER_CDP_TIMEOUT_MS |
30000 |
per-request CDP/extension timeout |
GLIDER_RELAY_RECONNECT_GRACE_MS |
10000 |
keep cached targets while extension WS flaps |
GLIDER_RELAY_COMMAND_RECONNECT_WAIT_MS |
3000 |
wait for extension before failing a command |
GLIDER_RELAY_MAX_PENDING |
256 |
max in-flight extension requests |
GLIDER_TIMING |
unset | set 1 to always attach timing on --json output |
GLIDER_BROWSER_UI |
unset (off) | set 1 to allow AppleScript launch/tabs/activate (steals focus). Default refuses browser UI mutation. |
GLIDER_HEAL_NO_WAKE |
unset | set 1 to force-skip heal tab-wake even if GLIDER_BROWSER_UI=1 |
AGREGISTRY |
unset | optional registry root β warch at AGREGISTRY/warch/HOST/ |
Copy config/domains.template.json into ~/.glider/config/domains.json to seed the host index.
| problem | fix | stability | why |
|---|---|---|---|
| extension not connected | install/enable Glider on Chrome Web Store in selected browser profile; click Glider icon, then run glider connect |
per browser launch | relay waits on extension WS |
| extension socket up but worker dead | click Glider icon or glider reload-ext; glider heal does not open tabs by default (GLIDER_BROWSER_UI off); set GLIDER_BROWSER_UI=1 only if you want AppleScript wake |
MV3 worker | status refuses healthy until pong |
| CLI steals browser focus / opens tabs | leave GLIDER_BROWSER_UI unset (default); never set it unless you explicitly want launch/tabs/activate |
session-stable | AppleScript UI gated off by default |
| custom relay port has no extension | use 19988 with Chrome Web Store build |
install-stable | published extension connects to ws://localhost:19988/extension |
| wrong tab targeted | glider targets β glider use-session session-6 |
session-stable | multi-tab needs explicit session |
| explore HAR empty bodies | replay in-tab with auth hook on XHR/fetch | site-specific | some SPAs never expose bearer in storage |
resolve misses host |
add ~/.glider/warch/HOST/glider.json or set AGREGISTRY |
file-stable | optional per-host capture hints |
| Command | Description |
|---|---|
glider install / uninstall |
background relay supervisor |
glider connect |
attach relay to browser |
glider status |
server + extension + tabs; nonzero unless full stack is healthy |
glider doctor |
relay + SW + targets + one next action (--json) |
glider heal |
ensure relay, best-effort SW wake, optional --clear-pin |
glider test |
relay + extension + target + live CDP 1+1 diagnostic |
glider goto / eval / click / type |
page ops |
glider frozen / thaw |
detect / un-throttle a hidden (macrotask-frozen) tab in place |
glider screenshot |
PNG capture |
glider explore |
crawl + HAR |
glider resolve |
host β local warch intel (--json) |
glider run / loop |
YAML task / Ralph loop |
Full surface: glider --help
npm test # unit, CLI regression, relay integration, tarball boundary
npm run test:live # isolated live-browser fixture against the connected extension
npm run test:syntax # package JavaScript syntax gateLive smoke creates + closes its own browser window.
Incomplete event-stream features fail closed: wait --network-idle, console streaming, response fulfillment. No success-shaped fallback.
| status | item |
|---|---|
| done | CDP relay, YAML tasks, loop, daemon, multi-tab, resolve |
| planned | Linux and Windows browser launch |
| headless cloud mode | |
| task chaining |



