Skip to content
terminal coding agent with a browser problem

A small coding agent for the terminal.

Edits 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
glue — ~/code/glue
Readyanthropic/claude-sonnet-4.6[confirm]~/code/gluetok 14,820
browser automation

Drive a browser, when the task calls for it.

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 idle
  • clickclick any CSS selector in the live DOM
  • typefill inputs without reopening the tab
  • screenshotfull page or a single element
  • extract_textcleaned markdown of the current page
  • evaluaterun arbitrary JavaScript in page context

status The CDP tool is marked experimental — it works across all backends but is newer than the rest of Glue. Rough edges to be expected.

browser backends

Local Chrome, Docker, or cloud.

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.

localshipping

Puppeteer-launched Chrome on your machine. Set headed: true to watch it work.

web:
  browser:
    backend: local
    headed: true
dockershipping

Ephemeral browserless/chrome container, one per session. Keeps the browser off your host.

web:
  browser:
    backend: docker
    docker_image: browserless/chrome:latest
    docker_port: 3000
cloudexperimental

Browserbase, Browserless, or Steel. Hosted browsers when you need replays or to run the work elsewhere.

web:
  browser:
    backend: browserbase
    browserbase_project_id: proj_…
fetch · search · ocr

Fetch and search.

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 | firecrawl

Web tools guide →

runtimes

Where Glue runs.

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

"partial" = works but flagged experimental. "planned" = not yet shipped.
Runtimelocaldockerbrowserbasebrowserlesssteel
host
shipping
your shell, your machine
docker
shipping
ephemeral container, workspace mounted
cloud
planned
e2b · modal · daytona · ssh workers
yes partial planned no

Full runtime capability matrix →

the rest

The rest of the agent.

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.

  • Edits. Multi-file changes land in the transcript as diffs.
  • Shell. Host shell or ephemeral Docker container, per session.
  • Sessions. Append-only JSONL under ~/.glue/sessions/. tail -f works.
  • Providers. Anthropic, OpenAI, Gemini, Mistral, Groq, Ollama, OpenRouter — bring your own key.
{"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"}

How sessions work →·Model catalog →·Feature list →

Install it. Try it out.

curl -fsSL https://getglue.dev/install.sh | sh

Released under the MIT License.