Atelier · open source

Become
the creator.

An app harness for coding agents.

Point a coding agent at a folder and it becomes a live app. Atelier owns the hard parts — build, routing, real‑time, auth, the visual language — so every app stays small enough to fit in one context window.

$ curl -fsSL https://theatelier.dev/setup.sh | bash

the harness

The harness

Three layers, frozen to flexible.

Atelier fixes the things that are hard to get right across an app, so each app stays small, self‑contained, and safe. The constraints are the point: freeze the baseline and the visuals, and many small apps add up to one large, coherent, multi‑tenant system.

01

The shell

the fixed baseline

Owns the cross‑cutting machinery — the build step, routing, the real‑time WebSocket, hot reload, workspaces, auth, and the module boundary. These are frozen: you build on them, never rebuild them — and because they don't move, you can trust them.

02

The chrome

visual coherence

One theme wraps every app, so dozens of independently‑built apps look like one product — and no single app can reach in and restyle the whole system. Visuals are the chrome's job, not each app's.

03

A module

just your feature

A frontend.jsx and/or a backend.js — that's it. No build to configure, no dependencies to vendor, no design system to invent. Thin by design, and small enough to hold in one context window.

Modules

A whole app is a file or two.

Point your agent at a folder. A frontend.jsx becomes a React component with hooks, deep routing, and a live real‑time channel — sharing the shell's single React. A backend.js mounts scoped routes, broadcasts over the socket, and hot‑swaps with no restart. No bundler to configure. No second React. Just the feature.

  • Instant hot reload — edit a handler and it's live
  • One real‑time WebSocket, workspace‑aware
  • Untrusted by default — a module can't cross a tenant's boundary
hello/frontend.jsx
export default function Module() {
  return <div className="p-8">hello</div>;
}

That's a complete, routed, hot‑reloading app. The shell handles the rest.

Sharing modules

Coming soon

A module is a unit you can pass on.

Because a module is a self‑contained folder that depends only on the frozen shell contract, it travels. Soon: publish a module, install someone else's into your atelier, and let a marketplace of context‑window‑sized apps compose into your own coherent system — each one safe to drop in, none able to break the whole.