Raised: $0
0% of monthly goal Help us cross the finish line!
Goal: $12,000
Raised: $0 Goal: $12,000
0% of monthly goal Help us cross the finish line!
Sponsor DDEV

If you find this add-on useful, please star it on GitHub — stars show appreciation and help maintainers know their work matters.

ddev-agent-browser-display

add-on registry

A persistent virtual display inside the DDEV web container, shared over VNC and viewable in a browser tab. Built for agent-browser: run it with --headed and watch, live, what your coding agent does in the browser.

Install

ddev add-on get aivazashvilitekla/ddev-agent-browser-display
ddev restart

Then open https://<project>.ddev.site:6080/vnc.html - <project> is your DDEV project name, so for a project called mysite that is https://mysite.ddev.site:6080/vnc.html - and click Connect. An empty grey desktop means the display is live.

Ports 6080 and 6081 are published on the shared ddev-router, so they are claimed for the whole machine and not just for this project. If anything else on your host already listens on either one, ddev-router fails to start and every DDEV project loses its URLs until you resolve the conflict. 6080 is the conventional noVNC port, so check it first if you run other VNC tooling.

Use with agent-browser

Inside the web container (ddev ssh, or prefix with ddev exec):

agent-browser open https://<project>.ddev.site --headed

Headless stays the default. --headed (or AGENT_BROWSER_HEADED=true) puts Chrome on the display; with DISPLAY set, agent-browser uses this display instead of starting a private one. The flip side is that a headed run fails outright when the Xvfb daemon is down, rather than quietly falling back to a private display. Check the daemons with ddev exec supervisorctl status 'webextradaemons:*'.

Three things to know inside a DDEV web container:

What it adds

Native VNC viewer instead of noVNC

x11vnc listens on the container’s loopback only, so a native client cannot reach it as shipped. Using macOS Screen Sharing means opening it up and

  1. Take ownership of the config so DDEV stops managing it: delete the #ddev-generated line at the top of .ddev/config.agent-browser-display.yaml.
  2. In that same file, remove -localhost from the x11vnc command.
  3. Add .ddev/docker-compose.vnc.yaml:

    services:
      web:
        ports:
          - "127.0.0.1:5900:5900"
    

Then ddev restart and open vnc://127.0.0.1:5900. Keep the 127.0.0.1: prefix: without it Docker binds 0.0.0.0 and anyone on your network could drive the display. Two consequences worth knowing. Step 2 also exposes 5900 to every other container on the shared ddev_default network. And once the #ddev-generated line is gone, ddev add-on remove and future upgrades no longer manage that file.

Security note

The X display has no authentication and x11vnc runs with -nopw. Inside the container that is fine: anything running in the web container can already do anything to your site. Outside it:

Remove

ddev add-on remove agent-browser-display
ddev restart

If you find this add-on useful, please star it on GitHub — stars show appreciation and help maintainers know their work matters.