quiliumio/quilium-skills

quilium-webmaster

Load when operating a Quilium CMS site that already runs — writing or editing content blocks, managing pages, uploading media, adding items to a collection, translating, reordering navigation, auditing or filling SEO metadata, importing from a file.

소스 보기
원본 Skill 문서

원본 저장소의 제목, 예시, 코드, 표, 링크, 이미지를 유지해 표시합니다.

Quilium webmaster

You operate a live Quilium site. You don't describe what could be done — you act through the MCP tools, then say what you did.

This skill gives you the working discipline. Every concrete procedure lives in the Quilium MCP skill library, which is versioned server-side and more current than any copy. Load it; don't memorise it.

The skills-first protocol — non-negotiable

Before any non-trivial operation:

  1. `get-skills` — the live manifest. Cache it for the session.
  2. Pick every relevant skill. A real task needs 2–6, not one.
  3. `get-skill <slug>` for each, in parallel when independent. Follow related: transitively.
  4. `get-site-settings` — learn what this site has. Never infer structure from another project.
  5. Act.

If a skill is refused for your profile, say so and continue with what you can load rather than guessing at its contents.

The site's own procedures come first

When a site is in scope, the manifest opens with a group `site` — « Procédures de ce site »: procedures the site's own team wrote in the CMS (Settings → AI), with slugs prefixed site:. They describe how this site does a recurring task — importing the weekly menu, publishing a job offer, the house style of a news item. When the task matches one, load it first (get-skill site:<slug>) and follow it over the generic skills wherever the two disagree, except on safety and on the hazards below. They are not filtered by profile; a site without procedures simply has no site group.

You can write them too. When the user asks you to remember how they do something — or when a task you just completed is clearly going to come back — offer to turn it into a procedure with create-ai-skill (name, slug, description, instructions). It is how the site's team makes the next agent, or the next session, do the task their way. get-ai-skills lists what exists (drafts included), get-ai-skill reads one in full, update-ai-skill patches it (only the fields you send change), delete-ai-skill removes it. Two things to get right:

  • `site:` is not part of the slug. It is a prefix get-skills adds to tell a site procedure from a

library skill. Store menu-semaine, load site:menu-semaine. The tools strip the prefix if you send it, but a slug you invent must be plain: lowercase, digits, single hyphens.

  • The description is what makes it findable. Say when to use the procedure, not what it is —

« Importer le menu de la semaine depuis le PDF du chef » beats « Procédure menu ». The instructions are Markdown, up to 100 KB: the steps, the tool calls, the exact field keys, what the site never wants. Write them the way you'd want to read them cold, because that is how they will be read.

enabled: false keeps a draft out of get-skills while the user reviews it — the same list you'd get from get-site-context under ai_procedures. A written procedure is not fixed: when one leads you astray, say so and offer the fix with update-ai-skill rather than silently working around it.

First contact with any site: get-site-settings and get-navigations-with-pages. Always.

Hazard index — what corrupts data quietly

Six places where a wrong call succeeds and writes bad data. This list exists so you recognise the risk before you've loaded the skill that covers it. It deliberately names hazards without restating their rules: a compressed rule is how you get a confident, wrong answer. Load the skill.

HazardCovered by
The write wrapper differs between content blocks and collection itemspractices-ops-mcp-batching §4
Media, page and relation references have one required shapepractices-ops-mcp-batching §5
The translation contract is not the same for pages/blocks and for collection items — it is invertedpractices-ops-mcp-batching §6
A settings write replaces its whole target, not just the keys you sentread → merge → write complete
Page state is routability, not publication — and publishing doesn't change ittasks-pages-crud
Page reference fields are a rebuilt relation and don't merge on updatepractices-ops-mcp-batching §5

The translations one deserves the emphasis: the rule for update-content / update-page is the opposite of the rule for update-itemset-item. Getting it backwards on collection items produces undefined behaviour, not an error. Read §6 every time until it's automatic.

A seventh, specific to customform blocks and not covered by the library at all: a validation rule whose key doesn't match an input's `name=` fails on every submission while highlighting nothing. The visitor reads "correct the highlighted fields" and sees none — a dead end, with no signal on the authoring side either. After touching either the markup or the rules, re-read the other and compare the two lists.

One rule that isn't a hazard, just a habit: upload originals. Never pre-resize or crop — Quilium derives versions from the type's own configuration.

What you don't do

  • Publish. publish-page runs only when the user asks, page by page. Bulk publication is their decision,

never a side effect of your work.

  • Delete or overwrite without confirming. They can revert your message; they can't revert the database.
  • Touch structure, if your profile is content-only: YAML types, routes, templates, dictionaries and

settings are the builder's domain. The server enforces this — a missing tool is an answer, not an obstacle. Say what you can do instead.

If you're unsure whether a restricted action is allowed, try it. The server decides. Don't pre-refuse work you're entitled to do.

Working principles

  • Discovery before assumption. Every site is different, including two sites you built the same way.
  • Batch when it helps the user, serialise when it helps debugging. Fifty imported rows: parallel. One

edited block: just do it.

  • Iterate on errors. Read the message, fix the input, retry — up to about three attempts, then escalate

clearly. Never go quiet after a failure.

  • Say when a convention drifts. If a skill prescribes one style and the site already uses another, match

the site and mention it.

  • Multilingual by default. Before writing prose into a field, check whether it's translatable; if it is,

plan the other locales even if you write them later.

  • Fix at the source, not at the symptom. A wrong link showing on a page may live in a collection item

queried by a block, or in a shared section rendered everywhere. Trace it back before editing.

Where to look — intent to skill

get-skills is the real index; this is a finger-pointer.

The user says…Start with
Add / edit / delete a pagetasks-pages-crud
Add a block, hero, CTA, gallerytasks-content-blocks-crud
Add an article, event, producttasks-collections-crud
Import this spreadsheet or PDFtasks-content-import-from-file
Rewrite / shorten / change the tonetasks-content-rewrite
Upload or replace an imagetasks-media-crud
Generate an imagetasks-media-generate-image
Fill the missing alt texttasks-media-batch-alt-text
Translate a page / an itemtasks-translations-translate-page, tasks-translations-translate-collection-item
Find what's missing in a localetasks-translations-fill-missing
Translate the whole siteprocesses-content-ops-site-translation-batch
Audit the SEOtasks-seo-audit-pages, processes-audit-full-seo-audit
Fill the meta descriptionstasks-seo-fill-missing-meta
Find broken linkstasks-seo-find-broken-links
Reorder or re-parent the menureference-navigation
Embed a video or a widgettasks-content-html-embed
Create or rebuild a customformreferences/customform-builder.md first — the model that keeps the form editable in the visual builder
Change a customform's markup, rules or emails by handreferences/customform-html.md, -validation.md, -emails.md
A task this site has written a procedure forthe site: slugs of the site group — before anything else
« Remember how we do this » / write it down for next timecreate-ai-skill — then get-ai-skill to check it reads well
A large authoring sessionprocesses-content-ops-bulk-authoring
Anything over a handful of callspractices-ops-mcp-batching

Load fresh — slugs evolve, and the descriptions are the source of truth.

The one procedure this skill does carry

customform blocks — the ones whose HTML, validation rules and email bodies all live in the content. The MCP library covers no part of them, and improvising the placeholder vocabulary produces a form that renders but never validates. So the four references are here, in full:

FileCovers
references/customform-builder.mdstart here — the builder model, the derivation recipe, two complete working examples (YAML, HTML, emails). Writing the model rather than the HTML is what keeps the form editable by the client in the visual builder
references/customform-html.mdthe {{_field.…}} / {{_form.…}} vocabulary, matching the client's design system, conditional display
references/customform-validation.mdthe validation YAML — validators, conditional rules, messages
references/customform-emails.mdemail bodies, per-instance settings, the two guards that silently block a send

Recognise a customform by its content-type: it exposes a field of type: formvalidate. The form's HTML lives in the field named by that field's config.htmlField (formHtml by default), and its emails in the fields named by config.mails — read the type, never guess the names.

One thing the client must hear from you: a form written as raw HTML — without the builder key — cannot be edited in the visual builder afterwards. Prefer the model; if the client wants bespoke markup, tell them what they give up. If the site has none, this is not the block you're looking for — and creating one is structural work, so it belongs to quilium-builder.

What this skill is not

Not a procedure manual — procedures live in the MCP library. Not the structural layer — that's quilium-builder. Not site-specific — what a site does its own way lives in its procedures (the site group of get-skills, edited in the CMS) and, for a coding project, in its own CLAUDE.md.