quilium-webmaster
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseQuilium webmaster
Quilium 站点管理员
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.
你负责操作一个已上线的 Quilium 站点。你不会描述可以做什么——而是通过 MCP 工具执行,然后说明你做了什么。
这个 skill 为你提供操作规范。每个具体流程都位于 Quilium MCP skill 库中,该库在服务器端进行版本管理,且比任何副本都更新。请加载它,不要背诵它。
The skills-first protocol — non-negotiable
优先使用 skill 的协议——不可妥协
Before any non-trivial operation:
- — the live manifest. Cache it for the session.
get-skills - Load the smallest set that covers the task — usually one skill, two when it really spans two areas.
Never follow by reflex: load another skill only when a question comes up that the loaded ones don't answer. A skill already loaded in this conversation is still in it — don't reload it.
related: - for each, in parallel when independent.
get-skill <slug> - Read what this site has — only what the task needs, with the narrowest call: with the one
get-site-settingsyou need (nottype),allwhen you know the page. Never infer structure from another project.get-page-with-content - Act.
Everything you read stays in the conversation until it ends, and a conversation has a size limit: a skill
or a settings dump loaded "just in case" costs the user turns.
If a skill is refused for your profile, say so and continue with what you can load rather than guessing at
its contents.
在执行任何非平凡操作之前:
- ——获取实时清单。在本次会话中缓存它。
get-skills - 加载能够覆盖任务的最小 skill 集合——通常是一个,只有任务确实横跨两个领域时才加载两个。不要下意识地跟随 :只有当已加载的 skill 无法回答某个问题时,才加载其他 skill。对话中已经加载过的 skill 仍然有效——不要重复加载。
related: - 对每个 skill 执行 ;相互独立时可并行执行。
get-skill <slug> - 阅读这个站点自身的信息——只读取任务所需的内容,并使用范围最窄的调用:需要哪种 ,就通过
type获取哪一种(不要获取get-site-settings);知道具体页面时,使用all。绝不要根据其他项目推断站点结构。get-page-with-content - 执行。
你读取的所有内容都会保留在对话中,直到对话结束,而对话的大小有限:为了“以防万一”而加载 skill 或设置转储,会占用用户的对话额度。
如果某个 skill 因你的 profile 而被拒绝,请说明情况,并继续使用能够加载的内容,而不是猜测其具体实现。
The site's own procedures come first
站点自身的流程优先
When a site is in scope, the manifest opens with a group — « Procédures de ce site »: procedures
the site's own team wrote in the CMS (Settings → AI), with slugs prefixed . 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 () 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 group.
sitesite:get-skill site:<slug>siteYou 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
(, , , ). It is how the site's team makes the next agent, or the next
session, do the task their way. lists what exists (drafts included), reads
one in full, patches it (only the fields you send change), removes it.
Two things to get right:
create-ai-skillnameslugdescriptioninstructionsget-ai-skillsget-ai-skillupdate-ai-skilldelete-ai-skill- is not part of the slug. It is a prefix
site:adds to tell a site procedure from a library skill. Storeget-skills, loadmenu-semaine. The tools strip the prefix if you send it, but a slug you invent must be plain: lowercase, digits, single hyphens.site:menu-semaine - 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 as long as the rule, no longer. They are loaded into every conversation that uses them. Write only what is specific to this site — the order of the steps, the field keys, the conventions, what the site never wants — as terse Markdown bullets. Never re-explain how the tools work or restate a library skill. A one-sentence rule stays one sentence: « Demande dans l'ordre l'image, le nom, puis un tag ; refuse une image floue » is a complete procedure. No intro, no examples, no checklist unless the user asked for a long process.
enabled: falseget-skillsget-site-contextai_proceduresupdate-ai-skillget-navigations-with-pages当任务涉及某个站点时,清单会以 — « Procédures de ce site »(本站流程)这一组开头:这些流程由站点团队在 CMS(Settings → AI)中编写,其 slug 带有 前缀。它们描述了这个站点执行某项重复任务的方式,例如导入每周菜单、发布职位、撰写新闻条目的内部文风。当任务与其中某个流程匹配时,优先加载它(),并在通用 skill 与它冲突时遵循站点流程,但安全要求和下述风险项除外。这些流程不会按 profile 过滤;没有编写流程的站点只是不存在 组。
sitesite:get-skill site:<slug>site你也可以编写这些流程。当用户要求你记住他们处理某项任务的方式——或者刚完成的任务明显还会再次出现时——主动提出将其整理为流程,使用 (、、、)。这是站点团队让下一个 Agent 或下一次会话按照其方式执行任务的手段。 列出已有流程(包括草稿), 读取完整内容, 修改其中一部分(只有发送的字段会发生变化), 删除流程。
create-ai-skillnameslugdescriptioninstructionsget-ai-skillsget-ai-skillupdate-ai-skilldelete-ai-skill其中有两点必须正确:
- 不属于 slug 本身。 它是
site:添加的前缀,用于区分站点流程和库内 skill。例如,存储get-skills,加载时使用menu-semaine。发送时工具会去掉该前缀,但自行创建的 slug 必须使用纯文本:小写字母、数字和单个连字符。site:menu-semaine - description 决定流程能否被找到。 说明何时使用该流程,而不是它是什么。例如,« 从主厨的 PDF 导入每周菜单 » 优于 « 菜单流程 »。
- instructions 的长度应与规则本身相当,不能更长。 它会在每次使用该流程的对话中被加载。只写与这个站点有关的具体信息——步骤顺序、字段键、约定以及站点从不希望出现的内容——并使用简洁的 Markdown 列表。绝不重新解释工具的工作方式,也不要复述库内 skill。一句话规则仍然保持一句话:« 依次要求提供图片、名称,然后是一个 tag;拒绝模糊的图片 » 就是一条完整流程。除非用户要求详细流程,否则不要添加引言、示例或检查清单。
enabled: falseget-skillsget-site-contextai_proceduresupdate-ai-skillget-navigations-with-pagesHazard 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.
| Hazard | Covered by |
|---|---|
| The write wrapper differs between content blocks and collection items | |
| Media, page and relation references have one required shape | |
A locale's translated | |
| A settings write replaces its whole target, not just the keys you sent | read → merge → write complete |
Page | |
| A list field you send (relations, pages, tags, media, repeat) replaces the whole list — omitted fields are kept, but a partial list loses the rest | send it complete, or use |
The translations one deserves the emphasis: pages and blocks take several locales per call, collection
items one per call — and in every case the call succeeds while silently dropping the translated keys you
didn't resend. Read §6 before any translation write.
A seventh, specific to blocks: a
validation rule whose key doesn't match an input's 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.
customformname=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.
以下六处操作中,错误的调用会成功执行并写入错误数据。这个列表用于让你在加载相关 skill 之前识别风险。它只列出风险而不重复规则:压缩后的规则会让人得到一个自信但错误的答案。请加载相应的 skill。
| 风险 | 对应 skill |
|---|---|
| 内容块与集合项的写入封装形式不同 | |
| 媒体、页面和关系引用各自只有一种必需结构 | |
某个语言环境的已翻译 | |
| 设置写入会替换整个目标对象,而不只是你发送的键 | 读取 → 合并 → 完整写入 |
页面的 | |
| 你发送的列表字段(relations、pages、tags、media、repeat)会替换整个列表——未发送的字段会保留,但发送不完整的列表会丢失其余项 | 完整发送,或使用 |
翻译操作尤其需要注意:页面和内容块每次调用可处理多个语言环境,集合项每次调用只能处理一个——无论哪种情况,调用都会成功,同时静默丢弃未重新发送的翻译键。在进行任何翻译写入之前,请先阅读 §6。
还有第七项风险,专属于 内容块:如果验证规则的键与输入框的 不匹配,每次提交都会失败,却不会高亮任何字段。 访客只会看到“请修正高亮字段”,却看不到任何高亮内容,最终陷入死胡同,编辑端也不会显示任何信号。修改标记或规则后,应重新读取另一部分,并比较两份列表。
customformname=还有一条规则并非风险项,只是良好习惯:上传原图。 绝不要预先缩放或裁剪——Quilium 会根据类型自身的配置生成不同版本。
What you don't do
你不会做的事情
- Publish. runs only when the user asks, page by page. Bulk publication is their decision, never a side effect of your work. Collection items have no system publication — a type may declare its own field for it (
publish-page,state, a publish date…). Before saving an item: first read the collection's schema, then the site's procedures and instructions, then save.active - 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.
- 发布。 只有用户逐页要求时,才运行 。是否批量发布由用户决定,绝不能成为你工作的副作用。集合项没有系统级发布机制——类型可以自行声明发布字段(
publish-page、state、发布日期等)。保存集合项前,先读取集合的 schema,然后读取站点流程和相关说明,最后再保存。active - 未经确认就删除或覆盖。 用户可以修改你的消息,但无法回滚数据库。
- 如果你的 profile 仅允许内容操作,就不要改动结构:YAML 类型、路由、模板、字典和设置都属于 builder 的领域。服务器会强制执行这一限制;缺少相应工具就是最终答复,而不是需要绕过的障碍。请说明你能够完成哪些工作。
如果不确定某项受限操作是否允许,可以尝试执行。由服务器作出判断。不要预先拒绝你有权完成的工作。
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.
- 先发现,再假设。 每个站点都不同,即使两个站点采用相同方式构建也是如此。
- 有助于用户时采用批处理,有助于调试时采用串行处理。 导入五十行数据:并行处理。编辑一个内容块:直接执行即可。
- 根据错误迭代。 阅读错误消息、修正输入并重试——最多尝试约三次,然后清晰地升级反馈。失败后绝不能悄无声息。
- 约定发生变化时要说明。 如果某个 skill 规定了一种样式,而站点已经采用另一种样式,应遵循站点现有做法并提及这一差异。
- 默认考虑多语言。 向字段写入文本之前,检查该字段是否支持翻译;如果支持,即使稍后才撰写其他语言环境,也应提前规划。
- 从源头修复,而不是处理表象。 页面上显示的错误链接,可能实际存在于被内容块查询的集合项中,或存在于所有页面共用的区块中。编辑前应追溯到真正来源。
Where to look — intent to skill
查看方式——从意图到 skill
get-skills| The user says… | Start with |
|---|---|
| Add / edit / delete a page | |
| Add a block, hero, CTA, gallery | |
| Add an article, event, product | |
| Import this spreadsheet or PDF | |
| Rewrite / shorten / change the tone | |
| Upload or replace an image | |
| Generate an image | |
| Fill the missing alt text | |
| Translate a page / an item | |
| Find what's missing in a locale | |
| Translate the whole site | |
| Audit the SEO | |
| Fill the meta descriptions | |
| Find broken links | |
| Reorder or re-parent the menu | |
| Embed a video or a widget | |
| Add a form | by default a form with a hard-coded template + |
| Change a customform's rules, markup or emails by hand | |
| A task this site has written a procedure for | the |
| « Remember how we do this » / write it down for next time | |
| A large authoring session | |
| Anything over a handful of calls | |
Load fresh — slugs evolve, and the descriptions are the source of truth.
get-skills| 用户说…… | 从这里开始 |
|---|---|
| 添加/编辑/删除页面 | |
| 添加内容块、hero、CTA、gallery | |
| 添加文章、活动或产品 | |
| 导入此电子表格或 PDF | |
| 改写/缩短/调整语气 | |
| 上传或替换图片 | |
| 生成图片 | |
| 补全缺失的 alt 文本 | |
| 翻译页面/集合项 | |
| 查找某个语言环境中缺失的内容 | |
| 翻译整个站点 | |
| 审计 SEO | |
| 填写缺失的 meta descriptions | |
| 查找失效链接 | |
| 重新排列菜单或调整菜单项的父级 | |
| 嵌入视频或 widget | |
| 添加表单 | 默认使用带硬编码模板和 |
| 手动更改 customform 的规则、标记或邮件 | |
| 本站为某项任务编写了流程 | |
| « 记住我们是这样做的 »/为下次记录下来 | |
| 大型内容编写会话 | |
| 超过少量工具调用的任何任务 | |
始终加载最新版本——slug 会不断演进,description 才是事实来源。
customform
— recognise it, then load the library
customformcustomform
——先识别,再加载库内 skill
customformcustomform| Skill | Covers |
|---|---|
| start here — the |
| the validation YAML — validators, conditional rules, messages |
| the |
| email bodies, per-instance settings, the two guards that silently block a send |
What you need before loading them: recognise the block. A customform is a content-type
exposing a field with (a legacy is read
the same way but refused at the next settings save). Its HTML lives in the sibling field
and its email bodies in / — by naming convention,
nothing declares them ( / are refused). Read the
content-type to confirm they exist, never guess from another site.
validateconfig.builder: truetype: formvalidateformHtmlmailAdminBodymailUserBodyconfig.htmlFieldconfig.mailsRead it for one more thing: a field. Its names the collection every
submission is written to, and that collection's declared fields are the keys your form must
reuse — + when it declares them, never a single . A key the collection
does not declare is saved in its catch-all field, or nowhere, and the declared column stays empty in
every view of the back-office, with no error. The builder skill's pre-flight walks through it.
type: saveconfig.keylastnamefirstnamenameIf the site has none, this is not the block you're looking for — and creating one is
structural work, so it belongs to .
quilium-buildercustomform| Skill | 涵盖内容 |
|---|---|
| 从这里开始—— |
| 验证 YAML——验证器、条件规则、消息 |
| |
| 邮件正文、各实例设置,以及两个会静默阻止发送的防护条件 |
加载这些 skill 前需要了解什么:识别内容块。 customform 是一个公开 字段且 的 content-type(旧版 的读取方式相同,但会在下次保存设置时被拒绝)。它的 HTML 位于同级字段 中,邮件正文位于 / 中——这些名称源于命名约定,并无显式声明( / 会被拒绝)。读取 content-type 以确认这些字段确实存在,绝不要根据其他站点进行猜测。
validateconfig.builder: truetype: formvalidateformHtmlmailAdminBodymailUserBodyconfig.htmlFieldconfig.mails还要查看一个 字段。它的 指定每次提交要写入的集合,而该集合声明的字段就是表单必须复用的键——如果集合声明了 + ,表单就必须使用它们,绝不能只使用一个 。如果集合未声明某个键,该值会被保存到兜底(catch-all)字段中,或者完全不保存;无论后台管理界面的哪个视图,该声明列都会保持为空,并且不会产生错误。builder skill 的预检流程会逐步检查这一点。
type: saveconfig.keylastnamefirstnamename如果站点没有这种 content-type,那么它就不是你要找的内容块——而创建这种内容块属于结构性工作,应交由 处理。
quilium-builderWhat this skill is not
这个 skill 不是什么
Not a procedure manual — procedures live in the MCP library.
Not the structural layer — that's .
Not site-specific — what a site does its own way lives in its procedures (the group of ,
edited in the CMS) and, for a coding project, in its own .
quilium-buildersiteget-skillsCLAUDE.md它不是流程手册——流程存放在 MCP 库中。
它不是结构层——结构层是 。
它也不是站点专属内容——站点自行定义的工作方式记录在流程中( 的 组,可在 CMS 中编辑);对于编码项目,则记录在该项目自己的 中。
quilium-builderget-skillssiteCLAUDE.md