Skip to main content

Editor tools

A draft's MCP server offers 54 tools. How to connect is in Webround Editor MCP.

Every tool needs the site:update permission on the draft, even the ones that only read: site:read is not enough to use the MCP. A client is told which tools only read (readOnlyHint) and which take something away (destructiveHint), so it can decide what to ask you about.

ToolKindWhat it does
checkReadChecks the code: images without alt text, headings out of order, links and buttons with no name, repeated ids.
inspectReadOpens a page in a browser and reports what a visitor would hit: errors in the console, failed requests, the dev server's error screen, and what the checks find in the page.
screenshotReadA picture of a page (a JPEG file), with the same report as inspect.
diagnoseReadEverything that is wrong right now, in one answer: the dev server's errors, the code's problems, and what the page shows.
file-listReadLists the files of the site (code and data) under a folder, with their size: src/ by default, or public/. Never node_modules, vendor, dist or hidden files.
file-readReadReads a text file of the site (up to 48 KB) and gives back its content.
file-writeWriteWrites a text file of the site (up to 48 KB): the folders it needs are made, a file that is there is replaced (unless overwrite is false), and it is written whole or not at all. A .json file must be valid JSON. The dev server shows the change at once.
file-deleteDestructiveDeletes a file of the site. One file, never a folder; there is no undo.
dependency-listReadLists the packages the site depends on (package.json), with the version it asks for, the one that is installed, and whether it is installed (installed, missing or outdated).
dependency-addWriteAdds a package to the site (npm install name@version) and installs it; with a package that is there already, changes the version it asks for. The version is from the registry (1.2.3, ^1.2.3, ~1.2.3, >=1.2.3, a tag such as latest). Several at once with packages (["[email protected]", "[email protected]"], one npm install): for packages that need each other's versions. If npm fails, package.json is as it was.
dependency-removeDestructiveTakes a package away from the site (npm uninstall name). The ones the site does not run without (@webround/core, @webround/editor, react, react-dom) are refused.
dependency-installWriteInstalls what package.json asks for (npm install, from the lockfile): for a project whose package.json was changed by hand, or whose node_modules lacks something.
kit-applyWritePuts a kit on the site (shop: the shop's pages, components, texts and packages). Deterministic and all or nothing: if a file of the site is in the way, nothing is written and every conflict is told. A site that has the kit's packages already is left as it is. dryRun tells what it would do.
page-listReadThe pages of the site: name, component, and whether the shared header and footer are shown on each.
page-createWriteCreates a page: its component, its (empty) JSON of values and its entry in the routes.
page-deleteDestructiveDeletes a page: its component, its JSON of values, its comments and its entry in the routes.
page-updateWriteChanges a page: renames it or its component, loads it lazily or not, shows or hides the shared header and footer on it.
node-getReadOne element of a page: what kind it is, the values written in the code (src, href…) and the ones in the JSON (texts per language, hidden…).
node-setWriteSets one value of an element: where it is stored (the code, or the JSON) is decided by its kind's schema. A translated value (a text, an alt, the labels of a menu's entries) is written in the language asked for, and the other languages are kept; a list (items of a nav) is given whole, as a list of { label, href }. A text's content is HTML; plain text is fine.
node-insertWriteAdds markup to a page, next to an element or inside one (a section). Give the JSX itself, or the id of a block of the catalog (blocks-list). Ids that are taken are renumbered; the imports and the indentation are taken care of. The result has the final ids.
node-deleteDestructiveDeletes an element with everything it contains, and the JSON values (texts, translations…) and the comments of all of them. The root of the header or footer cannot be deleted.
node-moveWriteMoves an element, with everything it contains, to another place in the same page (or header, or footer). It answers where it was.
node-sourceReadThe markup of an element with everything it contains, as written in the code, and the JSON values (texts, translations…) of all of them: what node-insert takes, so a copy is one insert away (this is how an element is duplicated).
json-pruneDestructiveRemoves from the JSON the values of elements that are no longer in the code (their keys stay behind when an element is deleted or renamed in the code, and come back with the old text if the id is used again). Refuses when some element computes its id: a key that looks unused might be its.
page-outlineReadWhat is on a page, as a tree: for each element its id, kind, tag, text, the attributes that matter, what it says in each language (values), whether it is hidden, and where in the code it is. Header and footer are listed on their own (_shared/header, _shared/footer), and the shared components the page uses (a card…) are inside it, each element with its scope (_shared/product-card): that name is the page to use to change them.
page-contentReadEverything on a page that is translated (texts, alt texts, labels), in every language of the site, and which languages are missing for each. The default language is called "default" in the values.
blocks-listReadThe catalog of ready-made blocks the editor offers (sections, layouts, elements): each is JSX that node-insert takes by its id.
langs-getReadThe languages of the site: the default one and all the available ones. null while the site is not multilingual.
langs-setWriteSets the languages of the site. Texts already written in a language that is taken away stay in the JSON (and come back if it is added again).
seo-getReadWhat search engines and social networks read: the site's data (address, name, title template, favicon, picture, extra sitemaps) and, for a page, its title and description in every language, picture, noindex and canonical.
seo-suggestReadA title and a description for a page, taken from what it says: its first heading and its first paragraph, in the language asked (nothing for a language the page is not translated in). Only a proposal: nothing is written.
seo-setWriteSets what a page tells search engines and social networks. Title, description, pictures and the texts for social networks are written in one language (the default one unless lang says otherwise); an empty text takes the value away.
seo-site-setWriteSets what is the same for the whole site: its public address (needed for canonical links, hreflang and the sitemaps), name, how page titles are shown, the favicon, the default sharing picture, the Google Search Console verification code, and the sitemaps the site does not write itself. An empty text takes the value away.
seo-syncWriteWrites robots.txt, sitemap-index.xml and sitemap-pages.xml in public/ from the pages, the languages and the SEO data. The dev server does it by itself whenever those change: this is for when it is not running. Needs the site's public address (seo-site-set).
seo-snapshot-targetsReadThe pages a build prerenders as HTML for search engines and bots (each page in each language, without those marked noindex), with the address of each and the file it is written to.
theme-getReadThe theme of the site: its custom properties (--wr-*, colors, spacing…; a property has dark too when the site has a dark theme), Google fonts and custom fonts, and dark: whether the site has a dark theme (a .dark block).
theme-setWriteSets one item of the theme: a custom property { kind: "property", key: "--wr-…", value, dark? } (a --wr-color-\<name\> is also a class, bg-\<name\>: it is mapped for you; dark is its value in the dark theme, when the site has one), a Google font { kind: "google-font", key: "Inter", weights? } or a custom font { kind: "custom-font", key, faces }. It replaces the item if it is there.
theme-removeDestructiveRemoves one item of the theme.
theme-darkWriteTurns the dark theme of the site on (a .dark block in theme.css that starts as a copy of the light colors, to be changed with theme-set dark) or off (the block is taken away). A site has a dark theme only if it has that block.
comment-addWriteLeaves a comment on an element of a page (or on the page, or on a shared component, when no element is given): a note for the people who work on the site, or for the agent that works on it. It is plain text, kept apart from the site (it is never published).
comment-listReadThe comments left on the site: the open ones by default (what people asked for). Each has where it is (page and element), who wrote it, what the element was, and orphan when the element is no longer in the code. Start here when you are asked to work on the site.
comment-resolveWriteMarks a comment as dealt with (or open again): it stays in the list of resolved ones. Do it after acting on what it asked, so the next run does not do it twice.
comment-deleteDestructiveDeletes a comment for good (resolve it to keep it as done).
style-catalogReadEvery style property an element can have (padding, text color, width…), with what each one means, its values (with their CSS meaning) and the breakpoints they can be set at. Read this to know what style-set accepts.
style-getReadHow an element is styled: for each property set on it, at which breakpoint and to what (in words, with its CSS meaning and the Tailwind class), plus the classes this does not manage (hover:, dark:, your own) and the shared styles it uses (sets). editable: false when the element's classes are written by code. With set instead of id: the same for a shared style.
style-setWriteChanges how an element looks: one property at one breakpoint ({ property: "padding-x", breakpoint: "md", value: "6" }), or several at once (changes). A value of null takes it away at that breakpoint. Only the classes of that property and breakpoint change; everything else in the element's classes stays. Read style-catalog for the properties and values.
style-copyWriteCopies the style classes of one screen (and one state) to another, or to all of them. to: a breakpoint (the classes of from are written there: the same properties are replaced, nothing else changes) or "all" (one clean list: the look the element has at from becomes what every screen has, and every breakpoint class is taken away; from "base" that only removes the overrides). hover:, dark: and the project's own classes are never touched.
styleset-listReadThe shared styles of the site: each a name (the class is s-name), the Tailwind classes it holds, what that comes to in words, and where it is used. An element uses one by having its class: change the style and every element that uses it changes.
styleset-createWriteMakes a shared style. With id: from that element's classes, which move into the style and the element then uses it (apply: false leaves the element as it is); classes of the element that Tailwind cannot apply (its own, other shared styles) stay on it. Without id: from classes (a text of Tailwind classes), or empty. The name is lowercase words (card, hero-title); its class is s-<name>.
styleset-applyWritePuts a shared style on an element: everything the element had in its classes is replaced by the style's class (the element then looks like the style and changes with it).
styleset-detachWriteTakes a shared style off an element, keeping how it looks: the style's classes are written on the element (where the element has classes of its own for the same thing, its own win). name: only that style (default: every one the element uses).
styleset-detach-allWriteTakes a shared style off every element that uses it, keeping how each looks (the style's classes are written on each, under the classes the element has of its own). Afterwards the style can be deleted. Not undoable from the editor: it touches many files.
styleset-renameWriteGives a shared style another name: its rule in theme.css and the class in every element that uses it change together (each keeps its place among the element's other classes). The new name is lowercase words (hero-card); it cannot be one another style has.
styleset-deleteDestructiveDeletes a shared style. Refused while any element uses it: it says where, and what to do (styleset-detach-all, or detach it from those elements).

check​

Checks the code: images without alt text, headings out of order, links and buttons with no name, repeated ids.

No parameters.

inspect​

Opens a page in a browser and reports what a visitor would hit: errors in the console, failed requests, the dev server's error screen, and what the checks find in the page.

ParameterTypeDefaultDescription
pathstring/the page to open, e.g. /about
viewportmobile | tablet | desktopdesktopthe screen size

screenshot​

A picture of a page (a JPEG file), with the same report as inspect.

ParameterTypeDefaultDescription
pathstring/the page to open, e.g. /about
viewportmobile | tablet | desktopdesktopthe screen size
fullPagebooleanfalsethe whole page, not only what fits the screen

diagnose​

Everything that is wrong right now, in one answer: the dev server's errors, the code's problems, and what the page shows.

ParameterTypeDefaultDescription
pathstring/the page to open, e.g. /about
viewportmobile | tablet | desktopdesktopthe screen size

file-list​

Lists the files of the site (code and data) under a folder, with their size: src/ by default, or public/. Never node_modules, vendor, dist or hidden files.

ParameterTypeDefaultDescription
pathstringsrcthe folder: src or public, or a folder inside them

file-read​

Reads a text file of the site (up to 48 KB) and gives back its content.

ParameterTypeDefaultDescription
path (required)stringthe file, relative to the project and inside src or public: e.g. src/components/Card.tsx

file-write​

Writes a text file of the site (up to 48 KB): the folders it needs are made, a file that is there is replaced (unless overwrite is false), and it is written whole or not at all. A .json file must be valid JSON. The dev server shows the change at once.

ParameterTypeDefaultDescription
path (required)stringthe file, relative to the project and inside src or public: e.g. src/components/Card.tsx
content (required)stringthe whole text of the file (a REST call carries up to 16 KB, an MCP message up to 64 KB)
overwritebooleantruefalse: refuse (409, file-exists) if the file is already there

file-delete​

Deletes a file of the site. One file, never a folder; there is no undo.

ParameterTypeDefaultDescription
path (required)stringthe file, relative to the project and inside src or public: e.g. src/components/Card.tsx

dependency-list​

Lists the packages the site depends on (package.json), with the version it asks for, the one that is installed, and whether it is installed (installed, missing or outdated).

No parameters.

dependency-add​

Adds a package to the site (npm install name@version) and installs it; with a package that is there already, changes the version it asks for. The version is from the registry (1.2.3, ^1.2.3, ~1.2.3, >=1.2.3, a tag such as latest). Several at once with packages (["[email protected]", "[email protected]"], one npm install): for packages that need each other's versions. If npm fails, package.json is as it was.

ParameterTypeDefaultDescription
namestringthe package, e.g. react-icons or @webround/commerce-react (or packages)
versionstringlatest1.2.3, ^1.2.3, ~1.2.3, >=1.2.3, or a tag (latest)
packagesarrayseveral packages at once, each name@version, instead of name and version

dependency-remove​

Takes a package away from the site (npm uninstall name). The ones the site does not run without (@webround/core, @webround/editor, react, react-dom) are refused.

ParameterTypeDefaultDescription
name (required)stringthe package, e.g. react-icons

dependency-install​

Installs what package.json asks for (npm install, from the lockfile): for a project whose package.json was changed by hand, or whose node_modules lacks something.

No parameters.

kit-apply​

Puts a kit on the site (shop: the shop's pages, components, texts and packages). Deterministic and all or nothing: if a file of the site is in the way, nothing is written and every conflict is told. A site that has the kit's packages already is left as it is. dryRun tells what it would do.

ParameterTypeDefaultDescription
kit (required)stringthe kit, e.g. shop
dryRunbooleanfalsesay what it would do, change nothing

page-list​

The pages of the site: name, component, and whether the shared header and footer are shown on each.

No parameters.

page-create​

Creates a page: its component, its (empty) JSON of values and its entry in the routes.

ParameterTypeDefaultDescription
pageName (required)stringthe page name: it is the URL (letters, digits, - and _)
component (required)stringthe name of its component, e.g. About (a file in src/pages/)
lazybooleanfalseload the page only when it is visited

page-delete​

Deletes a page: its component, its JSON of values, its comments and its entry in the routes.

ParameterTypeDefaultDescription
pageName (required)stringthe page to delete

page-update​

Changes a page: renames it or its component, loads it lazily or not, shows or hides the shared header and footer on it.

ParameterTypeDefaultDescription
pageName (required)stringthe page
newPageNamestringa new name (its JSON of values moves with it)
newComponentstringa new component name (its file moves with it)
lazybooleanload the page only when it is visited
headerbooleanshow the shared header on this page
footerbooleanshow the shared footer on this page

node-get​

One element of a page: what kind it is, the values written in the code (src, href…) and the ones in the JSON (texts per language, hidden…).

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
id (required)stringthe element id (its data-wr-id)

node-set​

Sets one value of an element: where it is stored (the code, or the JSON) is decided by its kind's schema. A translated value (a text, an alt, the labels of a menu's entries) is written in the language asked for, and the other languages are kept; a list (items of a nav) is given whole, as a list of { label, href }. A text's content is HTML; plain text is fine.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
id (required)stringthe element id
key (required)stringthe value: content, alt, src, href, hidden, ariaLabel… (what the element's kind has)
value (required)anythe new value; null takes a code value (src, href…) away
langstringthe language of a translated value, or of the translated fields of the entries of a list (a menu's labels): a code of langs-get; the default language if not said

node-insert​

Adds markup to a page, next to an element or inside one (a section). Give the JSX itself, or the id of a block of the catalog (blocks-list). Ids that are taken are renumbered; the imports and the indentation are taken care of. The result has the final ids.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
anchorobjectwhere: { id: "<element id>" } or { root: true } (the page itself); what the editor sends
anchorIdstringwhere, as just the element id; without it (and without anchor) the page itself
modebefore | after | first-child | last-childbefore, after, first-child or last-child of the anchor (default: after an element, last-child of the page)
blockstringthe id of a block of the catalog (blocks-list)
jsxstringmarkup to insert: one or more elements, written the way you would write them by hand
uniqueIdsbooleantruerenumber ids that are already taken (false refuses instead)
jsonSeedobjectinitial JSON values for the new elements: { "<id>": { … } }

node-delete​

Deletes an element with everything it contains, and the JSON values (texts, translations…) and the comments of all of them. The root of the header or footer cannot be deleted.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
id (required)stringthe element id
pruneImportsbooleanfalsealso remove the imports nothing uses any more

node-move​

Moves an element, with everything it contains, to another place in the same page (or header, or footer). It answers where it was.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
id (required)stringthe element to move
anchorobjectwhere: { id: "<element id>" } or { root: true } (the page itself); what the editor sends
anchorIdstringwhere, as just the element id; without it (and without anchor) the page itself
mode (required)before | after | first-child | last-childbefore, after, first-child or last-child of the anchor

node-source​

The markup of an element with everything it contains, as written in the code, and the JSON values (texts, translations…) of all of them: what node-insert takes, so a copy is one insert away (this is how an element is duplicated).

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
id (required)stringthe element id

json-prune​

Removes from the JSON the values of elements that are no longer in the code (their keys stay behind when an element is deleted or renamed in the code, and come back with the old text if the id is used again). Refuses when some element computes its id: a key that looks unused might be its.

ParameterTypeDefaultDescription
pagestringonly this page (or a shared component: _shared/header, _shared/footer, _shared/<name>); every page by default

page-outline​

What is on a page, as a tree: for each element its id, kind, tag, text, the attributes that matter, what it says in each language (values), whether it is hidden, and where in the code it is. Header and footer are listed on their own (_shared/header, _shared/footer), and the shared components the page uses (a card…) are inside it, each element with its scope (_shared/product-card): that name is the page to use to change them.

ParameterTypeDefaultDescription
page (required)stringthe page name (page-list shows them)

page-content​

Everything on a page that is translated (texts, alt texts, labels), in every language of the site, and which languages are missing for each. The default language is called "default" in the values.

ParameterTypeDefaultDescription
page (required)stringthe page name (page-list shows them)
langstringonly this language (a code of langs-get)

blocks-list​

The catalog of ready-made blocks the editor offers (sections, layouts, elements): each is JSX that node-insert takes by its id.

No parameters.

langs-get​

The languages of the site: the default one and all the available ones. null while the site is not multilingual.

No parameters.

langs-set​

Sets the languages of the site. Texts already written in a language that is taken away stay in the JSON (and come back if it is added again).

ParameterTypeDefaultDescription
default (required)stringthe default language code (it is not in the URL), e.g. it
available (required)arrayevery language code of the site, the default included

seo-get​

What search engines and social networks read: the site's data (address, name, title template, favicon, picture, extra sitemaps) and, for a page, its title and description in every language, picture, noindex and canonical.

ParameterTypeDefaultDescription
pagestringa page; without it only the site's data

seo-suggest​

A title and a description for a page, taken from what it says: its first heading and its first paragraph, in the language asked (nothing for a language the page is not translated in). Only a proposal: nothing is written.

ParameterTypeDefaultDescription
page (required)stringthe page
langstringthe language: default (the default one) or a language code of the site

seo-set​

Sets what a page tells search engines and social networks. Title, description, pictures and the texts for social networks are written in one language (the default one unless lang says otherwise); an empty text takes the value away.

ParameterTypeDefaultDescription
page (required)stringthe page
langstringthe language of the texts and pictures (title, description, image, ogTitle, ogDescription, ogImage, meta, jsonLd): default (the default one) or a language code of the site
titlestringthe title of the page (what the browser tab and search results show)
descriptionstringa sentence or two for search results (about 150 characters)
imagestringpicture shown when the page is shared: a path in the site (/media/x.jpg) or a full address (written in lang: a language with none uses the default one's)
noindexbooleankeep the page out of search engines and out of the sitemap
canonicalstringthe page this one is a copy of (a path in the site or a full address)
robotsstringthe robots directives in full, e.g. "noindex, follow" or "max-snippet:-1"; they replace what noindex says
ogTitlestringthe title social networks show, when it must not be the page's own (written in lang)
ogDescriptionstringthe description social networks show, when it must not be the page's own (written in lang)
ogImagestringthe picture social networks show, when it must not be the page's own (written in lang)
ogTypestringthe Open Graph type: website (the default), article, product…
twitterCardsummary | summary_large_imagehow the page looks when shared on X/Twitter
twitterSitestringthe account of the site on X/Twitter (@acme), for this page
twitterCreatorstringthe account of the author on X/Twitter (@jane), for this page
metaarrayany other <meta> the page needs: a list of { name | property, content }, the whole list; content is written in lang
jsonLdanystructured data (JSON-LD) of this page: a list of objects with a "@type" (or JSON text of one), written for lang; [] takes it away. It is added to the site's

seo-site-set​

Sets what is the same for the whole site: its public address (needed for canonical links, hreflang and the sitemaps), name, how page titles are shown, the favicon, the default sharing picture, the Google Search Console verification code, and the sitemaps the site does not write itself. An empty text takes the value away.

ParameterTypeDefaultDescription
siteUrlstringthe public address, no path: https://www.example.com
siteNamestringthe name of the site (written in lang)
titleTemplatestringhow a title is shown, %s being the page's title: "%s | Acme" (written in lang)
faviconstringthe icon of the site (browser tab, search results): a path in the site (/favicon.png) or a full address
imagestringthe sharing picture of pages that have none: a path in the site or a full address (written in lang)
searchConsolestringthe code that proves the site is yours to Google Search Console: the code, or the whole <meta name="google-site-verification"…> tag as Google shows it (only the code is kept); it is written in every page's head
extraSitemapsarraysitemaps the index must point to besides the site's own, e.g. ["sitemap-products.xml"] (the shop writes it); a list, [] for none
twitterSitestringthe account of the site on X/Twitter (@acme), for every page
twitterCreatorstringthe account of the author on X/Twitter (@jane), for every page
langstringthe language of siteName, titleTemplate, image and jsonLd: default (the default one) or a language code of the site
jsonLdanystructured data (JSON-LD) of every page — the organisation, the website: a list of objects with a "@type" (or JSON text of one), written for lang; [] takes it away

seo-sync​

Writes robots.txt, sitemap-index.xml and sitemap-pages.xml in public/ from the pages, the languages and the SEO data. The dev server does it by itself whenever those change: this is for when it is not running. Needs the site's public address (seo-site-set).

No parameters.

seo-snapshot-targets​

The pages a build prerenders as HTML for search engines and bots (each page in each language, without those marked noindex), with the address of each and the file it is written to.

No parameters.

theme-get​

The theme of the site: its custom properties (--wr-*, colors, spacing…; a property has dark too when the site has a dark theme), Google fonts and custom fonts, and dark: whether the site has a dark theme (a .dark block).

No parameters.

theme-set​

Sets one item of the theme: a custom property { kind: "property", key: "--wr-…", value, dark? } (a --wr-color-\<name\> is also a class, bg-\<name\>: it is mapped for you; dark is its value in the dark theme, when the site has one), a Google font { kind: "google-font", key: "Inter", weights? } or a custom font { kind: "custom-font", key, faces }. It replaces the item if it is there.

ParameterTypeDefaultDescription
item (required)objectthe item: { kind, key, … } as theme-get returns them

theme-remove​

Removes one item of the theme.

ParameterTypeDefaultDescription
kind (required)property | google-font | custom-fontwhat it is
key (required)stringthe property (--wr-…) or the font family

theme-dark​

Turns the dark theme of the site on (a .dark block in theme.css that starts as a copy of the light colors, to be changed with theme-set dark) or off (the block is taken away). A site has a dark theme only if it has that block.

ParameterTypeDefaultDescription
enabled (required)booleantrue: a dark theme; false: only the light one

comment-add​

Leaves a comment on an element of a page (or on the page, or on a shared component, when no element is given): a note for the people who work on the site, or for the agent that works on it. It is plain text, kept apart from the site (it is never published).

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name>)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
idstringthe element the comment is about; without it, about the page (or shared component) itself
text (required)stringwhat to say (plain text, up to 2000 characters)
authorobject{ name, kind }: kind is user (a person) or ai; an agent that does not say who it is, is ai

comment-list​

The comments left on the site: the open ones by default (what people asked for). Each has where it is (page and element), who wrote it, what the element was, and orphan when the element is no longer in the code. Start here when you are asked to work on the site.

ParameterTypeDefaultDescription
pagestringonly this page (or a shared component: _shared/header, _shared/<name>…)
idstringonly this element (with page)
statusopen | resolved | allopenopen (default), resolved or all

comment-resolve​

Marks a comment as dealt with (or open again): it stays in the list of resolved ones. Do it after acting on what it asked, so the next run does not do it twice.

ParameterTypeDefaultDescription
comment (required)stringthe comment's id (from comment-list)
resolvedbooleantruefalse opens it again

comment-delete​

Deletes a comment for good (resolve it to keep it as done).

ParameterTypeDefaultDescription
comment (required)stringthe comment's id (from comment-list)

style-catalog​

Every style property an element can have (padding, text color, width…), with what each one means, its values (with their CSS meaning) and the breakpoints they can be set at. Read this to know what style-set accepts.

No parameters.

style-get​

How an element is styled: for each property set on it, at which breakpoint and to what (in words, with its CSS meaning and the Tailwind class), plus the classes this does not manage (hover:, dark:, your own) and the shared styles it uses (sets). editable: false when the element's classes are written by code. With set instead of id: the same for a shared style.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
idstringthe element id (its data-wr-id)
setstringinstead of id: the name of a shared style (see styleset-list), to change what every element that uses it looks like

style-set​

Changes how an element looks: one property at one breakpoint ({ property: "padding-x", breakpoint: "md", value: "6" }), or several at once (changes). A value of null takes it away at that breakpoint. Only the classes of that property and breakpoint change; everything else in the element's classes stays. Read style-catalog for the properties and values.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
idstringthe element id (its data-wr-id)
setstringinstead of id: the name of a shared style (see styleset-list), to change what every element that uses it looks like
propertypadding | padding-x | padding-y | padding-top | padding-right | padding-bottom | padding-left | margin | margin-x | margin-y | margin-top | margin-right | margin-bottom | margin-left | gap | gap-x | gap-y | width | height | max-width | font-size | font-weight | text-align | text-decoration | text-color | background-color | gradient-direction | gradient-from | gradient-via | gradient-to | border-color | border-width | border-width-x | border-width-y | border-width-top | border-width-right | border-width-bottom | border-width-left | border-radius | border-radius-tl | border-radius-tr | border-radius-bl | border-radius-br | shadow | opacity | scale | translate-y | transition | duration | ease | animation | display | flex-direction | align-items | justify-content | grid-columns | flex-wrapwhat to change (see style-catalog)
breakpointbase | mobile | sm | md | lg | xlbasefrom which screen width up it holds: base (every screen), sm, md (tablet), lg (desktop), xl
valueanythe value (4, accent, center… see style-catalog), or null to take the property away at that breakpoint. Spacing and sizes take any number, not only the listed ones (27 is px-27), and a width or height a fraction (3/7)
statehover | focus | activefor a property that can change with one (see style-catalog, states): the state it is for: hover, focus or active (pressed). Without it, always
changesarrayinstead of property, breakpoint and value: a list of { property, breakpoint, value, state? }, all made as one change
everywherebooleanfalsemake the change hold on every screen: it is made at the breakpoint named, and then what the element looks like there (for those properties only) is what all screens have, the overrides of the other screens taken away; a null value takes it away from every screen

style-copy​

Copies the style classes of one screen (and one state) to another, or to all of them. to: a breakpoint (the classes of from are written there: the same properties are replaced, nothing else changes) or "all" (one clean list: the look the element has at from becomes what every screen has, and every breakpoint class is taken away; from "base" that only removes the overrides). hover:, dark: and the project's own classes are never touched.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
idstringthe element id (its data-wr-id)
setstringinstead of id: the name of a shared style (see styleset-list), to change what every element that uses it looks like
from (required)base | mobile | sm | md | lg | xlthe screen to copy from: base (every screen), mobile, sm, md (tablet), lg (desktop), xl
to (required)base | mobile | sm | md | lg | xl | allthe screen to copy to, or "all" for one clean list that every screen shares
statehover | focus | activecopy the classes of that state (hover, focus, active) instead of the ones that hold always

styleset-list​

The shared styles of the site: each a name (the class is s-name), the Tailwind classes it holds, what that comes to in words, and where it is used. An element uses one by having its class: change the style and every element that uses it changes.

No parameters.

styleset-create​

Makes a shared style. With id: from that element's classes, which move into the style and the element then uses it (apply: false leaves the element as it is); classes of the element that Tailwind cannot apply (its own, other shared styles) stay on it. Without id: from classes (a text of Tailwind classes), or empty. The name is lowercase words (card, hero-title); its class is s-<name>.

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
idstringthe element id (its data-wr-id)
name (required)stringwhat the style is called: lowercase words and numbers joined by dashes (card, hero-title)
classesstringwithout id: the Tailwind classes it holds (all must be ones Tailwind knows)
applybooleantruewith id: the element uses the new style (default), or keeps its classes as they are

styleset-apply​

Puts a shared style on an element: everything the element had in its classes is replaced by the style's class (the element then looks like the style and changes with it).

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
idstringthe element id (its data-wr-id)
name (required)stringthe shared style (see styleset-list)

styleset-detach​

Takes a shared style off an element, keeping how it looks: the style's classes are written on the element (where the element has classes of its own for the same thing, its own win). name: only that style (default: every one the element uses).

ParameterTypeDefaultDescription
pagestringthe page (its name, e.g. home) or a shared component (_shared/header, _shared/footer, _shared/<name> as declared in config/shared.json)
filestringinstead of page: the code file, relative to src/ (what the editor's own page sends)
idstringthe element id (its data-wr-id)
namestringwhich shared style to take off (default: all the element uses)

styleset-detach-all​

Takes a shared style off every element that uses it, keeping how each looks (the style's classes are written on each, under the classes the element has of its own). Afterwards the style can be deleted. Not undoable from the editor: it touches many files.

ParameterTypeDefaultDescription
name (required)stringthe shared style (see styleset-list)

styleset-rename​

Gives a shared style another name: its rule in theme.css and the class in every element that uses it change together (each keeps its place among the element's other classes). The new name is lowercase words (hero-card); it cannot be one another style has.

ParameterTypeDefaultDescription
name (required)stringthe shared style (see styleset-list)
to (required)stringthe new name

styleset-delete​

Deletes a shared style. Refused while any element uses it: it says where, and what to do (styleset-detach-all, or detach it from those elements).

ParameterTypeDefaultDescription
name (required)stringthe shared style (see styleset-list)