Three roles
The agent authors
Reads the guidance, writes the HTML, CSS, and TypeScript, and calls sitekit. All judgment and creativity live here.
The CLI aligns
Tells the agent what to build (the playbook), what counts as correct (verify), and how to ship (deploy). It never writes content.
Providers act
Cloudflare hosts, Stripe charges, Resend mails. sitekit shells out to them through a small provider interface.
The enforcement contract
This is the heart of the promise: sitekit is rigid on a fixed set of constraints; the agent is free on everything else. The verify loop encodes the rigid column. Everything else is the agent’s discretion.| Rigid — sitekit enforces | Free — the agent decides |
|---|---|
| The voice’s banned phrases | Section order within a page |
The style pack’s tokens (:root block) | Component patterns and libraries |
| The style pack’s fonts and motion guard | Layout choices within a shape |
| The shape’s required sections | Copy and content (under the voice) |
| The shape’s content schema | Imagery selection (within the shape) |
| The playbook marker’s presence and integrity | Anything the marker doesn’t bind |
| The mobile-first floor (viewport, tap targets) |
sitekit verify checks. The free column is where the agent does the actual design work — it just can’t approximate the rigid column from memory, because every emitted page carries the real guidance inline.
The verify loop
sitekit verify is the central primitive — not a final gate you run once, but the loop you run after every meaningful change. It runs a multi-layer pipeline: pre-flight, schema, structural and coherence checks, and a shape-specific check auto-discovered from each page’s bound shape — around fifty checks in all.
fix_hint the agent can act on directly. The workflow is: run, read the hint, fix, repeat — until it’s clean.
The visual pass
sitekit verify --visual renders each page at phone, tablet, and desktop (light and dark) and hands the agent the screenshots to judge against the style’s design intent. It’s the default closing step on a fresh build when Playwright is installed.The playbook marker
Every page sitekit emits carries an inline HTML comment — the marker — recording the exact composition it was built against:sitekit verify reads it to know which packs to check against. A future agent session reads it to recover the composition from the file alone — no central registry, no lost context. Never strip it.
Hard-bake
Content binds into HTML at author time. There is no runtime template engine on the deployed site — a placeholder like{{messaging.tagline}} resolves to a literal string in the shipped artifact. The deployed result is plain static files (HTML, CSS, a small Worker) you fully own. That’s why a sitekit site keeps serving even if you stop using sitekit.
Where this leads
Playbooks
The composition the rigid column is built from.
The four workflows
Build, maintain, experiment, evolve — the same three roles each time.