Skip to content

Repository Layout

Everything ships from one repository. This is what each top-level directory holds.

Path What lives there
server/ The server binary’s composition root (cmd/main.go) and its Dockerfiles; wires domains and platform packages together.
runner/ The runner binary — connects out to the server over WebSocket and executes builds and deploys on its host.
internal/ Every domain package (internal/<domain>/) plus internal/platform/ (eventbus, storage, logging, config) shared by both binaries.
web/ The React app served to the browser — Vite, Tailwind, shadcn/ui — talking to the server over the HTTP/JSON gateway and a WebSocket.
desktop/ The Electron shell that wraps the served web app for a native-feeling install.
sdk/ The TypeScript package automations are written against — client, API client, generated event types, config schema.
automations/ The bundled container that runs Default automations and small Custom ones.
docs/ adr/ — every durable decision, one file each; agents/ — how the tracker and the glossary are used. The glossary itself is CONTEXT.md at the root.
.scratch/ The issue tracker — markdown files committed to the repo, one directory per effort, each with its spec and tickets.
website/ This documentation site — Astro + Starlight.
practices/ The coding standard, one file per language or surface. AGENTS.md routes each task to the file it needs.

See Architecture for how these pieces relate to each other, and Coding Standards for the rules that govern what goes inside server/, internal/, and web/.