Skip to content
vdutts7Public

About

πŸš€ Browser automation CLI with autonomous loop execution. Control Chrome via CDP, run YAML tasks, Ralph Wiggum loops.

Topics

Resources

Stars

12 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

89 Commits

Folders and files

Repository files navigation

glider chrome claude ralph

glider CLI

Browser automation CLI with autonomous loop execution

GitHub glidercli on npm



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.


Issue

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

Setup

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).


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.

Browser config

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 browser

Explicit 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.


Task files

name: hn-front
steps:
  goto: "https://news.ycombinator.com"
  wait: 2
  eval: "document.title"
  screenshot: "/tmp/hn.png"

Usage

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.


Gotchas

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

Commands

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


Verification

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 gate

Live smoke creates + closes its own browser window.

Incomplete event-stream features fail closed: wait --network-idle, console streaming, response fulfillment. No success-shaped fallback.


Roadmap

status item
done CDP relay, YAML tasks, loop, daemon, multi-tab, resolve
planned Linux and Windows browser launch
headless cloud mode
task chaining

Contact

vd7.io Β  /vdutts7

About

πŸš€ Browser automation CLI with autonomous loop execution. Control Chrome via CDP, run YAML tasks, Ralph Wiggum loops.

Topics

Resources

Stars

12 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages