A playbook is the small record that drives every build. It binds three independently pluggable dimensions, with an optional fourth overlay:
playbook = {
  voice:   "<name>",   # how it sounds — tone, banned phrases, CTA discipline
  style:   "<name>",   # how it looks — tokens, fonts, motion, palettes
  shape:   "<name>",   # what kind of thing it is — page-type or page-list contract
  valence: "<name>"    # optional — what kind of business; narrows the shape
}
Each field names a pack. The dimensions are orthogonal: any voice pairs with any style and any shape, and any valence (or none) can overlay the result. The composition is recorded in each page’s playbook marker, so it travels with the file.

How the four dimensions differ

Each dimension has a different rigidity profile — knowing which is which tells the agent what to honor literally and where to use judgment.
DimensionRigidityWhat the pack shipsWhat the agent does
StyleLiteralA canonical style.css — palette tokens, type, focus ring, motion guard, buttons, decorInline the pack’s CSS verbatim; author with its classes. Never re-create the brand’s look by hand.
VoiceRules-literal, application-interpretiveA machine-checked banned-phrase list + prose on tone and CTA disciplineHonor the banned list absolutely; apply the tone guidance to the actual copy. (Voice ships no CSS.)
ShapeInterpretiveA description of the kind of page — a guide, a content schema, structural invariantsInfer the specific layout from the topic, the style, and the voice. (Shapes ship no layout CSS.)
Valence (optional)Pure interpretiveProse only — a hint per verticalLean toward what it suggests inside the shape’s freedom. Nothing fails verify if it’s ignored.
The discipline that holds it together: valence never touches voice or style. Voice is sacred (it’s your brand). Style is literal (no room to modulate). A valence only narrows the shape’s interpretive space — making a local-service landing page meaningfully different from a saas one, without changing how the site sounds or looks.

Dark mode

When the playbook or workspace declares dark mode, every emitted page wires up a dark/light toggle. sitekit owns the contract — the data-palette attribute on <html>, persistence under a localStorage key, and a first-paint script that reads the OS preference to avoid a flash. The agent writes the button and the toggle logic; the active style pack must declare both a light and a dark palette (that pairing is verified).

Saved playbooks

When you’ll build several pages with the same composition, save it once and re-run by name:
sitekit playbook save <name> --voice=<v> --style=<s> --shape=<sh>
sitekit run <name> --slug=about
sitekit run <name> --slug=pricing --shape=pricing   # a flag overrides the saved record per field
Saved records live in one of two scopes:
  • Workspace (default) — <workspace>/playbooks/<name>.json, committed alongside the site.
  • Global (--global) — ~/.config/sitekit/playbooks/<name>.json, shared across every site.
Workspace shadows global on a name collision. A workspace can also name a default_playbook so sitekit run resolves it with no positional name at all — which is what sitekit init --shape=... --voice=... --style=... sets up for you.

How packs resolve

Whenever sitekit looks up a voice, style, shape, or valence by name, it resolves in three tiers and takes the first match:
1

Site-local

Packs in your workspace (<workspace>/voices/, <workspace>/styles/, …). Project-specific, committed with the site.
2

Workshop

Your machine-local library at ~/.sitekit/. Packs you authored or captured, reusable across every project.
3

Bundled

The packs baked into the binary’s assets/. Bundled names are reserved — you can’t shadow editorial with your own editorial; use @scope/name to namespace your own.

Learn the dimensions

Style packs

The visual dimension and the twelve bundled styles.

Shapes & tiers

Page types, the platform shape, and the tier ladder.