Puppeteer-launched Chrome on your machine. Set headed: true to watch it work.
web:
browser:
backend: local
headed: trueEdits files, runs shell, keeps resumable sessions — the usual things. The web tooling is a bit more developed than in most coding agents: browser automation, fetch with OCR fallback, search. That's because I use Glue for scraping and automation about as much as for coding. Runs on your host or in a Docker sandbox.
curl -fsSL https://getglue.dev/install.sh | sh There's a web_browser tool that exposes a headless Chrome over the DevTools Protocol. Useful for scraping JS-rendered pages, clicking through auth flows, or taking screenshots. The browser session stays open between tool calls in the same turn, so the agent can fill a form, submit, and read the result without re-opening the tab.
navigateopen a URL and wait for network idleclickclick any CSS selector in the live DOMtypefill inputs without reopening the tabscreenshotfull page or a single elementextract_textcleaned markdown of the current pageevaluaterun arbitrary JavaScript in page contextstatus The CDP tool is marked experimental — it works across all backends but is newer than the rest of Glue. Rough edges to be expected.
The browser tool is one interface (BrowserEndpointProvider) with several backends behind it. Local Chrome is the default for iteration. A Docker container keeps the browser off your host when the page is untrusted. Cloud backends are there if you need replays or to offload scale. Swap is a config change.
Puppeteer-launched Chrome on your machine. Set headed: true to watch it work.
web:
browser:
backend: local
headed: trueEphemeral browserless/chrome container, one per session. Keeps the browser off your host.
web:
browser:
backend: docker
docker_image: browserless/chrome:latest
docker_port: 3000Browserbase, Browserless, or Steel. Hosted browsers when you need replays or to run the work elsewhere.
web:
browser:
backend: browserbase
browserbase_project_id: proj_…Not everything needs a full browser. The fetch tool reads HTML as cleaned markdown, pulls text out of PDFs, and falls back to a vision model when the PDF is scanned. Search uses whichever provider you've set an API key for.
web_fetch · HTML → markdown · PDF → text · OCR fallback via mistral or openai vision for scanned documents. web_fetch · optional Jina fallback for pages that don't extract cleanly (JINA_API_KEY). web_search · auto-detects the first available of BRAVE_API_KEY, TAVILY_API_KEY, FIRECRAWL_API_KEY. web:
fetch:
jina_api_key: ${JINA_API_KEY} # optional, for hostile pages
pdf:
enabled: true
ocr_provider: mistral # or openai — scanned PDFs → vision
search:
provider: brave # auto-detects brave | tavily | firecrawlGlue itself runs on your host or inside a Docker container. The browser backend composes on top — on your machine, in a sibling container, or in someone else's cloud. The matrix below shows what's shipping, what's experimental, and what's still planned.
| Runtime | local | docker | browserbase | browserless | steel |
|---|---|---|---|---|---|
host shipping your shell, your machine | ✓ | ✓ | ◐ | ◐ | ◐ |
docker shipping ephemeral container, workspace mounted | — | ✓ | ◐ | ◐ | ◐ |
cloud planned e2b · modal · daytona · ssh workers | — | ◌ | ◌ | ◌ | ◌ |
The web tooling is the part that's more developed than usual. Underneath, Glue is a normal coding agent: it edits files, runs shell, and writes every session to a JSONL log on your machine. Nothing hosted, nothing uploaded.
~/.glue/sessions/. tail -f works. {"t":"10:30:00.000Z","type":"user_message","text":"explain retry logic"}{"t":"10:30:00.510Z","type":"tool_call","name":"read","args":{"path":"http_client.dart"}}{"t":"10:30:00.630Z","type":"tool_result","content":"…"}{"t":"10:30:01.900Z","type":"assistant_message","text":"Exponential backoff with jitter."}{"t":"10:30:02.120Z","type":"title_generated","title":"HTTP client retry walkthrough"}