← Projects

Browser engineering · GPU systems · AI-agent infrastructure

Skynet

Skynet is a from-scratch reimplementation of the architecture behind OpenAI's Atlas browser: a native C++23/Qt Quick shell, a separate runtime service that owns all Chromium state, zero-copy GPU frame transport, and an authenticated control surface that lets AI agents drive the browser — the same runtime that also backs a patched Codex Desktop as a second embedder.

The problem

An AI-powered browser is really two problems wearing one trench coat. The first is architectural: if agents, embedders, and the browser engine all live in one process, every crash, upgrade, and security decision is entangled. Atlas solves this by splitting the app from a browser runtime service, but that runtime is proprietary and macOS-shaped. The second is brutally practical: getting Chromium-rendered frames onto the screen without copying them through the CPU, on Linux, across Intel and NVIDIA — the part with the reputation for being impossible.

What I built

How it works

One rule holds everything up: the UI process owns no browser objects — not one. The shell renders chrome and forwards intent; the runtime host owns CEF, off-screen rendering, page lifecycle, and input injection. That boundary is what makes the rest possible: the runtime can crash, restart, or be swapped without taking the shell down, and any embedder that speaks the protocol gets a browser.

The protocol itself came out of research, not guesswork. I extracted the actual Atlas application bundle and derived its object model — sessions, profiles, web views, layer hosts — from the binaries, then reimplemented that shape as an authenticated, versioned JSON-RPC surface. Skynet contains none of Atlas's code; it speaks the architecture, not the implementation.

ArchitectureThe shell and the agent are both just clients: every browser object lives in the runtime sidecar, and frames flow back over the zero-copy lane.

Architecture diagram viewer

100%

Scroll to zoom · drag to move

The frame transport is where the GPU work lives. On Linux the production default is the gpu-dmabuf lane on both Intel and NVIDIA: frames leave CEF as dma-buf descriptors and are imported straight into Qt's Vulkan scene graph, never touching the CPU. That default exists because of validation, not optimism — GLX dma-buf imports sampled black on NVIDIA PRIME under X11, so the policy requires Vulkan there and refuses the broken OpenGL path with a clear error rather than shipping black surfaces. A shared-memory BGRA lane exists as a deliberate, policy-selected fallback, not a silent one.

Frame transportOne frame contract, three lanes: zero-copy dma-buf as the default, shared memory as an explicit policy fallback, and structured-clone frames for Electron embedders.

Frame transport diagram viewer

100%

Scroll to zoom · drag to move

How it achieves the goal

The goal is a browser runtime that AI can drive and any app can embed, without trusting either one with the engine's internals. The CDP gateway gives agents real DevTools-grade control, but every exposed target maps to a runtime page identifier, every mutating call must present the current runtime epoch, and native CEF DevTools stays walled off as a development-only oracle. The agent gets capability; the runtime keeps custody.

It already does the thing it exists to do: a single live surface navigates, the GPU zero-copy path works on both Intel and NVIDIA under Linux with no CPU copy in the frame path, and the runtime is embedded and running inside my daily-driver Codex Desktop. The limits are real and worth stating plainly — tabs are still metadata over that one surface, extensions are a declared seam rather than a runtime, and the OWL parity flags stay off until their conformance suites pass. The foundations came first on purpose: process isolation, an authenticated protocol, crash recovery, and cross-vendor zero-copy GPU presentation on Linux — the part that is not hard so much as unforgiving.