What is a patchable key?
Automatic.CSS stores your design system as a large configuration object — over 2,500 individual settings covering everything from root color values to generated spacing tokens to component-level CSS variables. SchemaWP’s AI agent can read any of these settings, but it can only write to a curated subset called patchable keys.
A patchable key meets three criteria:
- It is a root input, not a derived output — patching it changes the design system at the source
- It has a predictable value type that can be validated before writing
- It is safe to change without side effects the agent cannot reason about
Why not all 2,500+ keys?
This is a deliberate constraint, not a technical limitation.
ACSS auto-generates the vast majority of its settings from a small number of root inputs. When you patch color-primary with a hex value, ACSS expands it into a full family of 40+ OKLCH shade variants automatically. Allowing the agent to patch those generated values directly would create conflicts — the agent could set a shade that gets immediately overwritten the next time ACSS regenerates, or produce an inconsistent palette where relationships between shades no longer hold.
The same logic applies across the design system:
- Spacing —
base-space,base-space-min, andspace-scaleare patchable. The 20+ derived tokens (--space-xs,--space-m, etc.) are not. - Radius —
base-radiusandradius-scaleare patchable. The derived scale tokens are not. - Typography — the root size and scale keys are patchable. The computed fluid clamp() values that ACSS generates from them are not.
- Colors — root hex values per family are patchable. All OKLCH component keys are not.
Beyond generated values, some settings are intentionally dashboard-only — things like dark scheme overrides and auto color scheme settings — where the agent changing them mid-session could produce unpredictable results without the user understanding what happened.
The current ~185 patchable keys cover the full set of root inputs a designer would actually change to control a site’s visual identity.
More keys are coming
The patchable key set is not fixed. We are actively expanding it as we confirm two things: that the agent handles each new domain correctly, and that the session token cost stays within a range that keeps interactions fast and predictable.
Every new key added requires the agent to reason about valid values, understand what it’s changing, and surface sensible suggestions. Adding keys prematurely — before the agent’s context is tuned for that domain — risks low-quality patches and confusing output. We’d rather ship a smaller, well-understood set and expand deliberately than open everything up and deal with bad writes.
This documentation is updated with each batch.
Current patchable keys
Colors — 28 keys
Root hex
| Key | Value type | Notes |
|---|---|---|
color-primary | hex | Auto-expands to full OKLCH shade family |
color-secondary | hex | Auto-expands |
color-accent | hex | Auto-expands |
color-base | hex | Auto-expands |
color-neutral | hex | Auto-expands, must be achromatic |
color-tertiary | hex | Auto-expands |
Color family toggles
| Key | Value type | Valid values |
|---|---|---|
option-primary-clr | toggle | "on" | "off" |
option-secondary-clr | toggle | "on" | "off" |
option-accent-clr | toggle | "on" | "off" |
option-base-clr | toggle | "on" | "off" |
option-neutral-clr | toggle | "on" | "off" |
option-tertiary-clr | toggle | "on" | "off" |
Button colors
| Key | Value type | Notes |
|---|---|---|
btn-primary-bg | css_value | e.g. var(--primary) |
btn-primary-text | css_value | e.g. var(--primary-ultra-light) |
btn-secondary-bg | css_value | |
btn-secondary-text | css_value | |
btn-accent-bg | css_value | |
btn-accent-text | css_value | |
btn-base-bg | css_value | |
btn-base-text | css_value | |
btn-neutral-bg | css_value | |
btn-neutral-text | css_value | |
btn-tertiary-bg | css_value | |
btn-tertiary-text | css_value |
Semantic text
| Key | Value type | Notes |
|---|---|---|
text-light | css_value | Default text color for dark sections |
text-dark | css_value | Default text color for light sections |
text-light-muted | css_value | Accepts color-mix() expressions |
text-dark-muted | css_value | Accepts color-mix() expressions |
Semantic background assignments — 20 keys
| Key | Value type | Notes |
|---|---|---|
bg-light | css_value | Surface color |
bg-light-text | css_value | |
bg-light-heading | css_value | |
bg-light-button | css_value | |
bg-light-icon | css_value | |
bg-dark | css_value | |
bg-dark-text | css_value | |
bg-dark-heading | css_value | |
bg-dark-button | css_value | |
bg-dark-icon | css_value | |
bg-ultra-light | css_value | |
bg-ultra-light-text | css_value | |
bg-ultra-light-heading | css_value | |
bg-ultra-light-button | css_value | |
bg-ultra-light-icon | css_value | |
bg-ultra-dark | css_value | |
bg-ultra-dark-text | css_value | |
bg-ultra-dark-heading | css_value | |
bg-ultra-dark-button | css_value | |
bg-ultra-dark-icon | css_value |
Spacing — 7 keys
| Key | Value type | Notes |
|---|---|---|
base-space | integer | Bare integer, no unit |
base-space-min | integer | Bare integer, no unit |
space-scale | numeric string | e.g. "1.5" |
mob-space-scale | numeric string | |
section-padding-block | integer | Bare integer |
space-adjust-section | integer | Multiplier |
mob-space-adjust-section | integer | Multiplier |
Layout — 4 keys
| Key | Value type | Notes |
|---|---|---|
vp-max | integer | Max content width — bare integer, no unit |
vp-min | integer | Must be less than vp-max |
gutter-max | integer | Desktop horizontal padding |
gutter-min | integer | Mobile horizontal padding |
Radius — 3 keys
| Key | Value type | Notes |
|---|---|---|
base-radius | px string | e.g. "8px" |
radius-scale | numeric string | e.g. "1.5" |
btn-border-radius | px string | e.g. "999px" |
Typography — scale & size — 13 keys
| Key | Value type | Notes |
|---|---|---|
heading-font-family | css_value | Must include fallback stack |
text-font-family | css_value | Must include fallback stack |
heading-weight | css_value | e.g. "700" |
heading-scale | numeric string | e.g. "1.333" |
mob-heading-scale | numeric string | |
text-scale | numeric string | |
mob-text-scale | numeric string | |
base-text-desk | integer | Bare integer, no unit |
base-text-mob | integer | Bare integer, no unit |
base-heading-desk | integer | Bare integer, no unit |
base-heading-mob | integer | Bare integer, no unit |
base-heading-lh | numeric string | Unitless e.g. "1.2" |
base-text-lh | numeric string | Unitless e.g. "1.6" |
Typography — line height overrides — 11 keys
Used for explicit per-element overrides only. Default to the global keys (base-heading-lh, base-text-lh) for general line height changes.
| Key | Value type | Notes |
|---|---|---|
h1-line-height | css_value | Per-heading override |
h2-line-height | css_value | |
h3-line-height | css_value | |
h4-line-height | css_value | |
h5-line-height | css_value | |
h6-line-height | css_value | |
text-s-line-height | css_value | Per-size override |
text-l-line-height | css_value | |
text-xl-line-height | css_value | |
text-xs-line-height | css_value | |
text-xxl-line-height | css_value |
Typography — heading size overrides — 12 keys
Override path only — use when the user explicitly requests a specific px size for a specific heading. Do not combine with scale key changes in the same patch. ACSS bypasses the scale system for the targeted heading only.
| Key | Value type | Notes |
|---|---|---|
h1-max | integer | Desktop size — bare integer, no unit |
h1-min | integer | Mobile size — bare integer, no unit |
h2-max | integer | |
h2-min | integer | |
h3-max | integer | |
h3-min | integer | |
h4-max | integer | |
h4-min | integer | |
h5-max | integer | |
h5-min | integer | |
h6-max | integer | |
h6-min | integer |
Typography — text size overrides — 12 keys
Override path only. Empty string clears the override and restores the scale-generated value.
| Key | Value type | Notes |
|---|---|---|
text-xs-max | integer | Desktop size — bare integer, no unit |
text-xs-min | integer | Mobile size — bare integer, no unit |
text-s-max | integer | |
text-s-min | integer | |
text-m-max | integer | |
text-m-min | integer | |
text-l-max | integer | |
text-l-min | integer | |
text-xl-max | integer | |
text-xl-min | integer | |
text-xxl-max | integer | |
text-xxl-min | integer |
Typography — font slots — 50 keys
Five slots (font-1 through font-5), each with 10 sub-keys. Typically managed via the load_google_font tool rather than patched directly.
| Sub-key | Value type | Notes |
|---|---|---|
font-{n}-family-name | css_value | n = 1–5 |
font-{n}-src | css_value | Local woff2 URL only |
font-{n}-format | css_value | |
font-{n}-format-fallback | css_value | |
font-{n}-type | enum | "static" | "variable" |
font-{n}-weight | css_value | |
font-{n}-style | css_value | |
font-{n}-stretch | css_value | |
font-{n}-variation-settings | css_value | Variable fonts only |
font-{n}-display | css_value |
Components — 18 keys
Cards
| Key | Value type | Notes |
|---|---|---|
option-cards | toggle | "on" | "off" — enable before patching card-* keys |
card-background | css_value | |
card-border-color | css_value | |
card-radius | css_value | Inherits global radius by default |
card-padding | css_value | |
card-gap | css_value | |
card-shadow | css_value |
Icons
| Key | Value type | Notes |
|---|---|---|
option-icons | toggle | "on" | "off" — enable before patching icon-* keys |
icon-background | css_value | |
icon-color | css_value | |
icon-border-color | css_value | |
icon-padding | css_value | Creates box effect |
icon-radius | css_value | |
icon-size-s | css_value | e.g. "16px" |
icon-size-m | css_value | e.g. "32px" |
icon-size-l | css_value | e.g. "64px" |
icon-default-style | enum | "boxed" | "plain" |
icon-default-scheme | enum | "inherit" | "light" | "dark" |
What is never patchable
| Key / Pattern | Reason |
|---|---|
color-*-alt (6 keys) | Dark scheme overrides — configure via WP Admin → Palette |
auto-color-scheme | Read-only via MCP |
website-color-scheme | Read-only via MCP |
All *-l-oklch, *-c-oklch, *-h-oklch keys | Auto-generated from root hex — blocked by validator |
All derived space-*, radius-* tokens | Auto-generated from root keys |
Computed fluid size tokens (--h1, --h2, --text-l, etc.) | Read-only CSS output variables. Patch the root scale keys or use the size override keys (h1-max, h2-max, text-xl-max, etc.) to control their values |