DGC v0.39.0 is out
Navigate
Install DGC
DGC v0.39.0Edit on GitHub ↗
Features/Looking at a page

drive a real browser to see a deployed or local site

Looking at a page

#

web_fetch gets you an article's text. It cannot run JavaScript, log in, click anything, or tell you whether a page actually rendered. For that DGC drives a real browser.

you › open https://staging.example.com and tell me if the pricing table renders

The agent earns a browser tool when your prompt is about a page that has to run — a deployed or locally served site, a screenshot, a console or network question, or clicking through a flow. It stays out of the way the rest of the time.

What it can do

#
Operation What you get
openNavigates, waits for the page to settle, returns the page structure
snapshotThe current page as roles, names and refs — the model's main way of reading
findElements matching text, with their refs
click · type · select · pressReal input events, then a fresh snapshot
waitBlocks until text appears, capped at 30 seconds
consoleConsole messages since load, with severity
requestsNetwork responses: status, type, and what failed
screenshotA PNG saved under .dgc/screenshots/, shown to the model if it has vision
closeEnds the browser session

A snapshot looks like this, and every [e12] is a handle the model can act on:

- heading level=1 "Sign in" [e1]
- form [e2]
  - textbox "[email protected]" [e4]
  - button "Continue" [e8]

Refs change whenever the page does. After a click that navigates or re-renders, the tool hands back a fresh snapshot, and stale refs fail with a message telling the model to take a new one.

Screenshots and local models

#

A screenshot is only useful if something can look at it. In the editor panel it appears in the conversation as a thumbnail: click once to expand it in place, once more to open it full size.

Whether the model can see it is a separate question, and DGC checks rather than guesses. With a vision model the picture is attached for it to read; without one you get the file path and a nudge to use snapshot instead, which is more precise anyway. Check with ollama show <model> — look for vision under Capabilities.

Which browser

#

DGC uses a Chrome or Chromium you already have. It looks at browser_path in ~/.dgc/config.json, then CHROME_PATH, then Playwright's cache, then your PATH, then the usual install locations. It never downloads a browser — if there is none, it says so and tells you where to point it.

Each session gets its own throwaway profile, so a page never sees your real cookies or logged-in sessions, and the profile is deleted when the session ends.

If the browser refuses to start

#

On Ubuntu 23.10 and later, and on other distributions that restrict unprivileged user namespaces, Chromium cannot build its sandbox and will not start:

Chromium cannot start its sandbox on this system…

Install an AppArmor profile for the browser, or set browser_allow_unsandboxed: true in ~/.dgc/config.json. The second is a real trade: without the renderer sandbox, a page exploit is no longer contained. DGC will not make that choice for you.

Permissions

#

Every navigation goes through the same permission gate as any other tool, under the name Browser. Rules are keyed on the URL, so you can allow a host and nothing else:

"allow": ["Browser(https://staging.example.com/*)"]

There is deliberately no operation for running arbitrary JavaScript in the page. The snapshot is built by a fixed first-party script; a model cannot supply its own.

Untrusted by construction

#

Everything the browser returns is web page content, and it comes back labelled as untrusted — the same treatment web_fetch gets. Text on a page is evidence about that page, never an instruction to DGC.

Documentation