Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

A containerized XFCE desktop with shared Chrome and agent tools, bootable as a smolvm machine or Docker container.

339
14
Dockerfile
8 days old

What it does

wrapvm packages a full desktop environment for AI agents into a single container image. It is built on wrap's desktop image and adds Xvfb on display :1 with XFCE, a persistent Google Chrome instance exposed over CDP on port 9222, and two agent CLIs: agent-browser for browser automation and agent-desktop for computer use through AT-SPI. The browser is also wired as the default system browser, with its sandbox left on, and sound is routed through PulseAudio into a null sink for streaming and ffmpeg recording.

The image is published by CI as ghcr.io/tobi/wrapvm:desktop, and a Smolfile boots it as a smolvm machine. This is aimed at people who want a disposable, inspectable desktop where agents can click, type and browse rather than at general-purpose remote desktop users.

Quick start

The repository ships two entry paths. For a smolvm machine bound to the current directory, run:

./wrapvm

This creates the machine, opens a zsh shell inside it, and prints the browser viewer sign-in link. Alternatively, run the published image as a container with the viewer port bound locally:

docker run -d -p 127.0.0.1:6080:6080 ghcr.io/tobi/wrapvm:desktop
docker exec <id> wrap-desktop url

The desktop is then reachable in a browser on port 6080 via voxl; the printed URL includes the password. The wrapvm script also reads WRAPVM_DESKTOP_PORT to use a different host port when creating the machine.

Agent configuration

Every environment sets AGENT_BROWSER_CONFIG=/home/user/workspace/agent-browser.json. If that file does not exist, wrap-desktop start and each login shell write {"headed": true, "autoConnect": true} to it; an existing file is never overwritten. This replaces the normal ~/.agent-browser/config.json. The desktop and browser skills under ~/.agents/skills point agents at the two CLI guides.

Development and constraints

Building and testing locally uses make test, which runs a podman build and the desktop test suite; CONTAINER_ENGINE=docker selects Docker instead. To boot a local build, use make image.tar && WRAPVM_IMAGE=$PWD/wrapvm.tar ./wrapvm. The Containerfile is based on wrap's desktop configuration at commit c562a7d with wrapvm-specific blocks marked wrapvm:, and Dockerfile is a symlink for docker build .. No license is declared in the repository, so reuse and redistribution terms are unclear.

HotRepo's take

wrapvm entered HotRepo's new-project list on 2026-11-10 with 33 stars gained in a window of roughly 1.5 hours; it has not appeared on the all-language daily rank. The project is young (created 2026-11-04) and the repository's primary language is Dockerfile. Its value comes from combining a desktop image, a persistent Chrome CDP endpoint and two agent-facing CLIs into one bootable unit, but the README does not document the publisher identity or the CI pipeline linking the published image to the committed source, so the image's provenance is worth checking before running it.

Written by AI from the project's README, updated . The project's own docs are the source of truth.

You might also like

  1. kunchenguid/runner-upSelf-host GitHub Actions runners across your own machines, giving each job a fresh container, VM or account.Go133