Design system operations

20 operations named designSystem.*. Every one runs in a batch through apply_ops, dry_run_ops, the CLI or the admin.

Updated
OperationWhat it doesPermissionConfirmation
designSystem.promoteVariantPromote authored component overrides to a reusable variant and reattach the node.designSystem.promotenone
designSystem.setTokenWrite one token ({ set, path, type, value }), under the AA contrast gate and the token group rules.designSystem.operationnone
designSystem.setTokensWrite many tokens as one change, gated once for AA contrast on the end state, so one undo restores the lot.designSystem.operationnone
designSystem.setComponentCellDesign-system setComponentCell, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.createVariantDesign-system createVariant, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.createThemeDesign-system createTheme, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.activateSetDesign-system activateSet, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.setSchemeDesign-system setScheme, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.resetToBlueprintDesign-system resetToBlueprint, using the same validation and access gates as the editor.designSystem.operationdestructive
designSystem.importTokensDesign-system importTokens, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.diffRead every override the draft holds over its blueprint (tokens, cells, variants, themes, sets, mixins).designSystem.operationnone
designSystem.lintCheck the draft design system: every contrast pair below AA or AAA, the pairs that cannot be judged, the missing media assets and the lint rules' findings, with the draft's overrides.designSystem.operationnone
designSystem.createSetDesign-system createSet, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.updateThemeDesign-system updateTheme, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.updateVariantDesign-system updateVariant, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.deleteVariantDesign-system deleteVariant, using the same validation and access gates as the editor.designSystem.operationdestructive
designSystem.setMixinDesign-system setMixin, using the same validation and access gates as the editor.designSystem.operationnone
designSystem.deleteMixinDesign-system deleteMixin, using the same validation and access gates as the editor.designSystem.operationdestructive
designSystem.readRead the draft design system's index: its revision, sets, themes, every component with its variant keys, and every token group with its number of paths.designSystem.operationnone
designSystem.readComponentRead the cells of one design-system component, filtered and paged: variant, size, state, part, breakpoint and property keep the cells whose key segment equals them (a cell key is <variant>.<size>.<state>.<part>.<breakpoint>.<property>), and own: true keeps only the cells set at their own key, leaving out the inherited ones.designSystem.operationnone

designSystem.promoteVariant

Promote authored component overrides to a reusable variant and reattach the node.

permission: designSystem.promotewrites: designSystem, tree:{pageId}class: transactionundo: yes

Example input

{
  "pageId": "6f1d2c3b-4a59-4e8d-9c7b-1a2b3c4d5e6f",
  "nodeId": "claim001",
  "variant": "claim",
  "label": "Claim"
}

Input

FieldTypeRequiredNotes
pageIdstringyesAt least 1 character.
nodeIdstringyes
variantstringyes
labelstringyesAt least 1 character. At most 120 characters.

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.promoteVariant '{"pageId":"6f1d2c3b-4a59-4e8d-9c7b-1a2b3c4d5e6f","nodeId":"claim001","variant":"claim","label":"Claim"}' --dry-run

designSystem.setToken

Write one token ({ set, path, type, value }), under the AA contrast gate and the token group rules. To scale spacing, write a scale factor instead of every step: a number token named scale in a space group multiplies every dimension of that group and its subgroups (space.section-y.scale: 0.75 makes every section spacing 25 % tighter, space.scale scales all spacing; above 0).

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "set": "core",
  "path": "radius.md",
  "type": "dimension",
  "value": "9px"
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
setstringyesAt least 1 character.
pathstringyesAt least 1 character.
typestringyesAt least 1 character.
valuevalueyes
descriptionstringno

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.setToken '{"set":"core","path":"radius.md","type":"dimension","value":"9px"}' --dry-run

designSystem.setTokens

Write many tokens as one change, gated once for AA contrast on the end state, so one undo restores the lot. To scale spacing, write a scale factor instead of every step: a number token named scale in a space group multiplies every dimension of that group and its subgroups (space.section-y.scale: 0.75 makes every section spacing 25 % tighter, space.scale scales all spacing; above 0).

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "writes": [
    {
      "set": "core",
      "path": "color.palette.neutral.900",
      "type": "color",
      "value": "#4a4a4a"
    },
    {
      "set": "semantic-dark",
      "path": "color.text.faint",
      "type": "color",
      "value": "rgba(255, 255, 255, 0.7)"
    }
  ]
}

Input

FieldTypeRequiredNotes
writesarray of objectyesAt least 1 item.
writes[].layerstringnoOne of "site", "blueprint".
writes[].setstringyesAt least 1 character.
writes[].pathstringyesAt least 1 character.
writes[].typestringyesAt least 1 character.
writes[].valuevalueyes
writes[].descriptionstringno

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.setTokens '{"writes":[{"set":"core","path":"color.palette.neutral.900","type":"color","value":"#4a4a4a"},{"set":"semantic-dark","path":"color.text.faint","type":"color","value":"rgba(255, 255, 255, 0.7)"}]}' --dry-run

designSystem.setComponentCell

Design-system setComponentCell, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "component": "button",
  "cells": [
    {
      "cell": "primary.all.hover.container.base.background",
      "value": "{color.bg.accent-strong}"
    }
  ]
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
componentstringyesAt least 1 character.
cellsarray of objectyesAt least 1 item.
cells[].cellstringyesAt least 1 character.
cells[].valuestring | objectyes

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.setComponentCell '{"component":"button","cells":[{"cell":"primary.all.hover.container.base.background","value":"{color.bg.accent-strong}"}]}' --dry-run

designSystem.createVariant

Design-system createVariant, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "component": "button",
  "variant": "ghost",
  "label": "Ghost",
  "from": "primary"
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
componentstringyesAt least 1 character.
variantstringyesAt least 1 character.
labelstringyesAt least 1 character.
fromstringyesAt least 1 character.

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.createVariant '{"component":"button","variant":"ghost","label":"Ghost","from":"primary"}' --dry-run

designSystem.createTheme

Design-system createTheme, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "key": "night",
  "label": "Night",
  "sets": [
    "core",
    "semantic-dark"
  ]
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
keystringyesAt least 1 character.
labelstringyesAt least 1 character.
setsarray of stringyesAt least 1 item.
activationobjectno
activation.prefersColorSchemestringnoOne of "light", "dark".
activation.hostnamestringno
activation.pathPrefixstringno

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.createTheme '{"key":"night","label":"Night","sets":["core","semantic-dark"]}' --dry-run

designSystem.activateSet

Design-system activateSet, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "theme": "night",
  "set": "semantic-dark"
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
themestringyesAt least 1 character.
setstringyesAt least 1 character.

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.activateSet '{"theme":"night","set":"semantic-dark"}' --dry-run

designSystem.setScheme

Design-system setScheme, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: tree:{pageId}class: transactionundo: yes

Example input

{
  "pageId": "6f1d2c3b-4a59-4e8d-9c7b-1a2b3c4d5e6f",
  "nodeId": "claim001",
  "theme": "night"
}

Input

FieldTypeRequiredNotes
pageIdstringyesAt least 1 character.
nodeIdstringyes
themestring | nullyes

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.setScheme '{"pageId":"6f1d2c3b-4a59-4e8d-9c7b-1a2b3c4d5e6f","nodeId":"claim001","theme":"night"}' --dry-run

designSystem.resetToBlueprint

Design-system resetToBlueprint, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionconfirm: destructiveundo: yes

Example input

{
  "scope": {
    "kind": "prefix",
    "prefix": "color.brand"
  }
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
scopeobject | object | object | object | object | object | object | object | objectyes

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Needs confirmed: ["destructive"] on the batch, which the single-operation CLI form does not set: put it in a batch file and run yarn splash apply <file> --dry-run.

designSystem.importTokens

Design-system importTokens, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "format": "dtcg",
  "files": [
    {
      "name": "tokens.json",
      "text": "{\"color\":{\"brand\":{\"$type\":\"color\",\"$value\":\"#1e3d4f\"}}}"
    }
  ]
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
formatstringyesOne of "dtcg", "figma".
filesarray of object | objectyesAt least 1 item.
mappingrecord of stringnoDefault {}.

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.importTokens '{"format":"dtcg","files":[{"name":"tokens.json","text":"{\"color\":{\"brand\":{\"$type\":\"color\",\"$value\":\"#1e3d4f\"}}}"}]}' --dry-run

designSystem.diff

Read every override the draft holds over its blueprint (tokens, cells, variants, themes, sets, mixins). Over MCP it answers a summary (their count and names, the stylesheet's size); pass full: true for every override with its blueprint and site values, and the stylesheet.

permission: designSystem.operationreads onlyclass: read

Example input

{}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
fullbooleanno

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.diff '{}' --dry-run

designSystem.lint

Check the draft design system: every contrast pair below AA or AAA, the pairs that cannot be judged, the missing media assets and the lint rules' findings, with the draft's overrides. Over MCP it answers a summary (counts by severity and reason, the worst findings first, the override names, the stylesheet's size); pass full: true for every finding, every override and the stylesheet.

permission: designSystem.operationreads onlyclass: read

Example input

{}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
fullbooleanno

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.lint '{}' --dry-run

designSystem.createSet

Design-system createSet, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "key": "brand-sub",
  "label": "Sub-brand",
  "after": "semantic-light"
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
keystringyesAt least 1 character.
labelstringyesAt least 1 character.
afterstringyesAt least 1 character.

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.createSet '{"key":"brand-sub","label":"Sub-brand","after":"semantic-light"}' --dry-run

designSystem.updateTheme

Design-system updateTheme, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "key": "night",
  "label": "Night",
  "isDefault": false
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
keystringyesAt least 1 character.
labelstringnoAt least 1 character.
setsarray of stringnoAt least 1 item.
isDefaultbooleanno
draftbooleanno
activationobjectno
activation.prefersColorSchemestringnoOne of "light", "dark".
activation.hostnamestringno
activation.pathPrefixstringno

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.updateTheme '{"key":"night","label":"Night","isDefault":false}' --dry-run

designSystem.updateVariant

Design-system updateVariant, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "component": "button",
  "variant": "ghost",
  "label": "Ghost, quiet"
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
componentstringyesAt least 1 character.
variantstringyesAt least 1 character.
labelstringnoAt least 1 character.
hiddenbooleanno

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.updateVariant '{"component":"button","variant":"ghost","label":"Ghost, quiet"}' --dry-run

designSystem.deleteVariant

Design-system deleteVariant, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionconfirm: destructiveundo: yes

Example input

{
  "component": "button",
  "variant": "ghost"
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
componentstringyesAt least 1 character.
variantstringyesAt least 1 character.

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Needs confirmed: ["destructive"] on the batch, which the single-operation CLI form does not set: put it in a batch file and run yarn splash apply <file> --dry-run.

designSystem.setMixin

Design-system setMixin, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionundo: yes

Example input

{
  "key": "band",
  "label": "Band",
  "sheet": {
    "padding-block": "{space.md}",
    "border-top": "1px solid {color.border.default}"
  }
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
keystringyes
labelstringyesAt least 1 character.
sheetrecord of stringyes

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.setMixin '{"key":"band","label":"Band","sheet":{"padding-block":"{space.md}","border-top":"1px solid {color.border.default}"}}' --dry-run

designSystem.deleteMixin

Design-system deleteMixin, using the same validation and access gates as the editor.

permission: designSystem.operationwrites: designSystemclass: transactionconfirm: destructiveundo: yes

Example input

{
  "key": "band"
}

Input

FieldTypeRequiredNotes
layerstringnoOne of "site", "blueprint".
keystringyes

Output

FieldTypeRequiredNotes
treeobjectno
tree.pageIdstringyes
tree.revisionintegeryes
tree.inversearray of object | object | object | object | object | object | object | object | object | object | object | object | objectyes
findingsarray of object | object | object | object | objectyes
diffarray of object | object | object | object | object | objectyes
changesarray of objectno
changes[].changestringyesOne of "added", "changed", "removed".
changes[].overrideobject | object | object | object | object | objectyes
changedbooleanyes
revisionintegeryes
dryRunbooleanyes
cssstring | nullyes
reportobjectno
report.addsarray of objectyes
report.changesarray of objectyes
report.typeConflictsarray of objectyes
report.unknownNamesarray of objectyes

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Needs confirmed: ["destructive"] on the batch, which the single-operation CLI form does not set: put it in a batch file and run yarn splash apply <file> --dry-run.

designSystem.read

Read the draft design system's index: its revision, sets, themes, every component with its variant keys, and every token group with its number of paths. Ask for more with tokens (the groups whose paths and values to include, such as ["color.palette", "space"]), components: true (each component's sizes, states and parts, the segments of a setComponentCell key), css: true (the compiled stylesheet, about 240 KB on a large site) or embeds: true. The default answer stays small; read one component's cells with designSystem.readComponent.

permission: designSystem.operationreads onlyclass: read

Example input

{
  "tokens": [
    "color.palette"
  ]
}

Input

FieldTypeRequiredNotes
indexbooleanno
tokensarray of stringnoAt most 32 items.
componentsbooleannoDefault false.
cssbooleannoDefault false.
embedsbooleannoDefault false.

Output

FieldTypeRequiredNotes
revisionintegeryes
detachedarray of objectno
detached[].componentstringyes
detached[].countintegeryesAt least 0.
setsarray of objectno
sets[].keystringyes
sets[].labelstringyes
sets[].positionintegeryes
sets[].siteAddedbooleanyes
themesarray of objectno
themes[].keystringyes
themes[].labelstringyes
themes[].setsarray of stringyes
themes[].isDefaultbooleanno
themes[].draftbooleanno
themes[].activationobjectno
componentsarray of objectno
components[].keystringyes
components[].labelstringyes
components[].groupstringyes
components[].variantsarray of stringyes
components[].hiddenVariantsarray of stringyes
tokenGroupsarray of objectno
tokenGroups[].groupstringyes
tokenGroups[].countintegeryesAt least 0.
tokensarray of objectno
tokens[].groupstringyes
tokens[].tokensarray of objectyes
componentSpecsarray of objectno
componentSpecs[].keystringyes
componentSpecs[].labelstringyes
componentSpecs[].groupstringyes
componentSpecs[].variantsarray of objectyes
componentSpecs[].sizesarray of stringyes
componentSpecs[].statesarray of stringyes
componentSpecs[].partsarray of object | objectyes
cssstringno
embedsrecord of record of objectno

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.read '{"tokens":["color.palette"]}' --dry-run

designSystem.readComponent

Read the cells of one design-system component, filtered and paged: variant, size, state, part, breakpoint and property keep the cells whose key segment equals them (a cell key is <variant>.<size>.<state>.<part>.<breakpoint>.<property>), and own: true keeps only the cells set at their own key, leaving out the inherited ones. Each cell has its own value (null when it inherits), the key it inherits from and the blueprint's value; resolved: true adds its value in every theme, css: true the blueprint's baseline stylesheet. limit cells (100 by default) from cursor; total counts every match and nextCursor names the next page. A large component has thousands of cells: filter by variant and state first.

permission: designSystem.operationreads onlyclass: read

Example input

{
  "component": "button",
  "variant": "primary",
  "state": "hover",
  "own": true
}

Input

FieldTypeRequiredNotes
componentstringyesAt least 1 character.
variantstringnoAt least 1 character.
sizestringnoAt least 1 character.
statestringnoAt least 1 character.
partstringnoAt least 1 character.
breakpointstringnoAt least 1 character.
propertystringnoAt least 1 character.
ownbooleannoDefault false.
resolvedbooleannoDefault false.
cssbooleannoDefault false.
limitintegernoAt least 1. At most 1000. Default 100.
cursorintegernoAt least 0. Default 0.

Output

FieldTypeRequiredNotes
revisionintegeryes
componentstringyes
totalintegeryesAt least 0.
nextCursorinteger | nullyes
cellsarray of objectyes
cells[].cellstringyes
cells[].valuestring | object | nullyes
cells[].sourceobjectyes
cells[].blueprintstring | object | nullyes
cells[].resolvedrecord of valueno
blueprintobjectyes
blueprint.variantsarray of stringyes
blueprint.cssstringno
blueprint.embedsrecord of record of objectno

Fields nested deeper are in the output schema that discover_operations answers with outputSchemas: true.

Try it

yarn splash designSystem.readComponent '{"component":"button","variant":"primary","state":"hover","own":true}' --dry-run

Generated from the operation registry and the MCP tool catalogue (source e12a26fad3b21a06).

Something wrong on this page? Write to docs@librettocms.com.

Libretto docs

Colophon. These docs are a Libretto site: 68 pages in two languages, 20 guide pages imported from Markdown and 41 reference pages generated from the operation registry. Set in Softcore, with code in IBM Plex Mono. Its outline:

/ Libretto docs /start Get started /start/request-access Request access /start/workspace Your workspace /start/first-site Your first site /start/invite-a-client Invite a client /start/connect-claude Connect Claude to Libretto /build Build /build/first-page Build a page /build/layers-and-canvas Layers and canvas /build/site-components Site components /design-system Design system /design-system/tokens Colours, space and themes /design-system/components Components and variants /design-system/fonts Typography and fonts /motion Motion /motion/scenes Scenes and recipes /motion/image-sequences Image sequences /motion/reduced-motion Reduced motion /publish Publish /publish/languages Site languages /publish/versions Publish and versions /publish/members-and-forms Members and forms /publish/domains Domains /handover Hand a site to a client /glossary Glossary /agents Agents and API /agents/mcp MCP server /agents/cli CLI /agents/batches Batches /agents/errors Errors and findings /agents/operations Operations /search Search