Ardot Design Assistant
Standard workflow for completing design tasks on .ardot files via the ardot MCP server. All canvas manipulation MUST go through ardot MCP tools.
Reference Files
Load on demand based on task type:
| File |
When to load |
../../rules/design-rules.md |
Single source of truth — editing principles, coordinates, flexbox, text, components, colors, variables, tables, images, effects, SVG, property schema, troubleshooting, post-generation validation |
../../rules/style-guide.md |
Visual style guide — typography, color, layout, surface treatment, variance levels, forbidden AI patterns, bento grid |
../../rules/style-guide-tags.md |
Static list of valid tags for fetch_style_guide(tags) — read this instead of calling fetch_style_guide_tags |
references/ardot-workflow.md |
End-to-end workflow examples (create, modify, global style update, tokens, form) and detailed operation syntax |
references/slides-workflow.md |
Slides / deck creation — 5-phase process (use when current model is NOT opus4.7) |
references/slides-agent-teams-workflow.md |
Slides / deck creation — Agent teams workflow (use when current model IS opus4.7; first ask the user whether to enable agent teams, clarifying that it takes more time and consumes more tokens — if yes, use this workflow; if no, fall back to references/slides-workflow.md) |
references/extract-style-guide-from-web.md |
Website → design guide extraction |
references/design-to-code-workflow.md |
Design → HTML/CSS/JS conversion, generate Application, to code, slide transitions, responsive scaling |
references/guidelines-landing-page.md |
Landing / marketing page |
references/guidelines-web-app.md |
Web app (default for generic design tasks) |
references/guidelines-mobile-app.md |
Mobile / app screen |
references/guidelines-slides.md |
Slide deck design rules (L01–L20, typography, visuals) |
references/guidelines-table.md |
Tables / dashboards with tables |
references/guidelines-code.md |
Design-to-code implementation |
references/guidelines-tailwind.md |
Tailwind v4 implementation (alongside guidelines-code.md) |
Preparation: (IMPORTANT: Ensure a Design File Is Open)
Before any canvas operation, make sure an Ardot design file is loaded in the editor. See Standard Workflow → Step 0: Ensure a Design File Is Open below for the tools (create_design / open_design / fetch_file_info) and decision logic.
Standard Workflow
Step 0: Ensure a Design File Is Open
Before any canvas operation, make sure an Ardot design file is loaded in the editor:
create_design — Create a new blank Ardot design file and open it in the editor. Optionally accepts a fileName. If the user wants to start from scratch or no existing file is mentioned, call this first.
open_design — Open an existing Ardot design file by URL or file ID. Accepts a fileUrl parameter (e.g. https://ardot.tencent.com/file/667788990055443 or bare ID 667788990055443). If the user provides a file link or ID, call this to load it.
fetch_file_info — Fetch the current loaded file ID, after create_design or open_design has been called to get the file ID.
Decision logic:
- If the user explicitly provides a file URL or ID → call
open_design.
- If the user asks to create a new design / start fresh → call
create_design.(optionally with the given 'fileName').
- If the editor already has a file loaded (determined in Step 1) → skip this step.
- If call
create_design produces an empty canvas, MAKE SURE SKIP fetch_editor_state at any workflow, the default PageID is 0:1, use it as the root container.
⛔ Hard gate — do NOT issue any other MCP call until the file is ready.
After calling create_design or open_design, the file loads asynchronously. You MUST wait for the context update / ready confirmation before issuing any other MCP call.
Never bundle create_design / open_design in the same parallel batch as fetch_editor_state, fetch_variables, or any other read — those reads will hit an empty or not-yet-loaded editor and return stale/empty state.
Correct order (two separate messages):
- Message 1:
create_design or open_design → wait for ready signal.
- Message 2: subsequent reads (Step 1) — may be parallel, see below.
Exception: if Step 0 is skipped (a file is already loaded from a previous turn), Step 1 can be the first message of the turn.
Step 1: Read Existing State (parallel, conditional)
Read whatever state is relevant to the task. Issue all independent reads in a single message as parallel tool calls — do not serialize them.
| Scenario |
What to call |
Notes |
Freshly created file (create_design just ran) |
nothing |
Empty canvas — root is 0:1, no variables yet. Skip Step 1, go straight to Step 2. |
| Opened existing file / file already loaded |
fetch_editor_state({includeSchema: false}) + fetch_variables |
Parallel in one message. |
| Pure modification (file already loaded, target known) |
The above plus any of batch_read / capture_layout / capture_screenshot as needed |
All parallel in one message. |
Do NOT call fetch_style_guide_tags. The tag list is static — read ../../rules/style-guide-tags.md instead.
Step 2: Creative vs. Compositional
- Creative (new screen, page, dashboard, restyle) → proceed to Steps 3–4
- Compositional ("add a button", "move this") → skip to Step 5 and load
design-rules.md
Step 3: Load Design Guidelines
Load one or more design-type guideline, first match wins:
| Priority |
Trigger |
File |
| 1 |
slides, presentation, deck, 幻灯片, 演示文稿 |
references/guidelines-slides.md |
| 2 |
mobile, app, iOS, Android, 移动端 |
references/guidelines-mobile-app.md |
| 3 |
landing, marketing, SaaS, 落地页, 营销 |
references/guidelines-landing-page.md |
| 4 |
table, dashboard with tables, 表格 |
references/guidelines-table.md |
| 5 |
convert to code, to App, HTML, 转代码, 出码, 生成应用,转应用 |
references/guidelines-code.md (+ guidelines-tailwind.md if Tailwind) |
| 6 |
(web app, default) |
references/guidelines-web-app.md |
guidelines-code.md / guidelines-tailwind.md are implementation guidelines and can be loaded alongside a design-type guideline when code generation is involved.
Steps 4–6: Style + Space + Inspection (parallel)
Issue these as a single parallel batch in one message — they have no mutual dependency:
fetch_style_guide(tags) — pick 5–10 fitting tags from ../../rules/style-guide-tags.md (see the Selection Guidance section there).
locate_available_space({width, height}) — required for new top-level screens; skip for pure modification tasks. Never overlap existing content.
- Inspection calls (only if modifying existing design and not already covered in Step 1):
batch_read (find by pattern/ID, readDepth: 3 for component structure), capture_layout (detect problems), capture_screenshot (visual verify).
Skip any sub-call that doesn't apply to the current task. The point of parallel batching is to collapse independent reads into one round-trip, not to force every tool to run.
If a follow-up read depends on this batch's result (e.g. batch_read({readDepth: 3}) targeting a component discovered via an earlier batch_read), issue it as a separate message afterward. Most tasks don't need that.
Step 7: Execute Design
batch_edit with ≤ 25 ops per call. Build order: structure → content → style → verify. Ops: I() Insert, U() Update, C() Copy, M() Move, D() Delete, G() Image. For detailed syntax and examples, load references/ardot-workflow.md.
Step 8: Validate
Follow the Post-Generation Validation Pattern in design-rules.md. Use tiered validation — pick the lightest check that matches what the batch changed (T1 structural → capture_layout only; T2 content → skip; T3 visual → capture_screenshot only; T4 section-complete → both once; T5 final page → one screenshot). Do not run full dual-verification after every batch_edit. Enforce the convergence threshold: max 2 fix iterations per section, ignore ≤4px spacing noise, no subjective re-polishing once the section matches spec.
Specialized Workflows
When the task matches one of the following, load the linked reference and follow it strictly (do not improvise the procedure from SKILL.md):
- Slides / presentation / deck → choose workflow based on the current model. When the model is opus4.7, ask the user whether to use the agent teams workflow (clarify that it takes more time and consumes more tokens): if yes, use
references/slides-agent-teams-workflow.md; if no, use references/slides-workflow.md. For other models, use references/slides-workflow.md directly. Mandatory design rules live in references/guidelines-slides.md.
- Website → style guide extraction →
references/extract-style-guide-from-web.md
- Design → frontend code →
references/design-to-code-workflow.md
Essential Constraints
These rules apply at all times. Full rule set and troubleshooting are in design-rules.md.
- Every node needs a
name — assign meaningful names to all created nodes
- Keep float colors to 2 decimals — avoid long floating-point values
- Text is invisible by default — always set
fill on text nodes
- Use
fill for all colors — never use textColor, backgroundColor, color, or fillColor
- Use
cornerRadius — not borderRadius
- Font weight must be numeric strings —
"400", "700", not "bold"
- Alignment uses uppercase enums —
counterAxisAlignItems: "CENTER", not alignItems: "center"
- Prefer flexbox layout — always set
width and height on new frames explicitly
- Layout default sizing is FIXED — when setting
layout to horizontal/vertical, must explicitly set width/height for dynamic sizing
- x/y are ignored in flexbox — if you need to set x/y on children of flexbox parents, also set
layoutPositioning: "ABSOLUTE"
fill_container requires flexbox parent — only valid when parent has layout
hug_contents requires own flexbox layout — only valid on a node that itself has flexbox layout
- Default frame has white background — set
fills: [] to remove
- Max 25 ops per batch_edit — split by logical sections
- Every I/C/R needs a binding name —
document is predefined for root only
- No U() on copied descendants — copied nodes get new IDs; use
descendants in C() instead
- No image node type — images are fills on frames; use G() with
"stock" preferred
- Icon frames must set
layout: "none" — and always capture_screenshot() to verify
- Create icons as components — then use
I(parentId, {type: "ref", ref: "iconId"}) to insert instances
- Variable binding uses
$ prefix — fill: "$primary-color", gap: "$spacing-small"
- Favor copying + updating over generating from scratch
- Parallelize independent reads — when multiple MCP read calls have no data dependency (e.g.
fetch_editor_state + fetch_variables), issue them in a single message as parallel tool calls; do not serialize them. Exception: never bundle these reads in the same message as create_design / open_design — wait for the file-ready context update first
- Validate with tiered checks — match the tier to the batch type (see
design-rules.md Post-Generation Validation Pattern); do NOT run full screenshot+layout after every batch_edit
- Text wrapping needs both —
textAutoResize: "HEIGHT" AND width: "fill_container" (or fixed width)
lineHeight — set lineHeight: "AUTO" for automatic (preferred) or lineHeight: 22 for explicit spacing
1---2name: ardot-design-assistant3description: This skill should be used for any design-related tasks involving creating, editing, or modifying visual designs, UI screens, pages, layouts, or components, as well as converting designs to frontend code. Trigger phrases include: generate/create/design a page, design a screen, create a landing page, make a dashboard, design a login screen, modify the design, update the layout, change colors, add a component, edit design file, create wireframe, design a form, build a UI, generate homepage, create slides, design a presentation, generate style guide, create design system from website, extract design tokens, convert design to code, design to HTML, export as webpage, pixel-perfect reproduction, implement slide transitions, 生成设计指南, 提取设计风格, 网站风格转设计稿, 设计稿转代码, 转为前端代码, 生成HTML, 导出为网页, 一比一还原, 复刻设计稿, 设计稿出码, 切图, 幻灯片转网页, or Chinese equivalents like 生成页面, 设计页面, 创建界面, 修改设计稿, 调整布局, 修改样式, 生成设计, 做一个页面, 画一个页面. Routes all design work through the ardot MCP server.4---5
6# Ardot Design Assistant
7
8Standard workflow for completing design tasks on `.ardot` files via the ardot MCP server. All canvas manipulation MUST go through ardot MCP tools.
9
10## Reference Files
11
12Load on demand based on task type:
13
14| File | When to load |
15|------|--------------|
16| `../../rules/design-rules.md` | **Single source of truth** — editing principles, coordinates, flexbox, text, components, colors, variables, tables, images, effects, SVG, property schema, troubleshooting, post-generation validation |
17| `../../rules/style-guide.md` | Visual style guide — typography, color, layout, surface treatment, variance levels, forbidden AI patterns, bento grid |
18| `../../rules/style-guide-tags.md` | Static list of valid tags for `fetch_style_guide(tags)` — read this instead of calling `fetch_style_guide_tags` |
19| `references/ardot-workflow.md` | End-to-end workflow examples (create, modify, global style update, tokens, form) and detailed operation syntax |
20| `references/slides-workflow.md` | Slides / deck creation — 5-phase process (use when current model is **NOT** opus4.7) |
21| `references/slides-agent-teams-workflow.md` | Slides / deck creation — Agent teams workflow (use when current model **IS** opus4.7; first ask the user whether to enable agent teams, clarifying that it takes more time and consumes more tokens — if yes, use this workflow; if no, fall back to `references/slides-workflow.md`) |
22| `references/extract-style-guide-from-web.md` | Website → design guide extraction |
23| `references/design-to-code-workflow.md` | Design → HTML/CSS/JS conversion, generate Application, to code, slide transitions, responsive scaling |
24| `references/guidelines-landing-page.md` | Landing / marketing page |
25| `references/guidelines-web-app.md` | Web app (default for generic design tasks) |
26| `references/guidelines-mobile-app.md` | Mobile / app screen |
27| `references/guidelines-slides.md` | Slide deck design rules (L01–L20, typography, visuals) |
28| `references/guidelines-table.md` | Tables / dashboards with tables |
29| `references/guidelines-code.md` | Design-to-code implementation |
30| `references/guidelines-tailwind.md` | Tailwind v4 implementation (alongside `guidelines-code.md`) |
31
32## Preparation: (IMPORTANT: Ensure a Design File Is Open)
33
34Before any canvas operation, make sure an Ardot design file is loaded in the editor. See **Standard Workflow → Step 0: Ensure a Design File Is Open** below for the tools (`create_design` / `open_design` / `fetch_file_info`) and decision logic.
35
36## Standard Workflow
37
38### Step 0: Ensure a Design File Is Open
39
40Before any canvas operation, make sure an Ardot design file is loaded in the editor:
41
42- **`create_design`** — Create a new blank Ardot design file and open it in the editor. Optionally accepts a `fileName`. If the user wants to start from scratch or no existing file is mentioned, call this first.
43- **`open_design`** — Open an existing Ardot design file by URL or file ID. Accepts a `fileUrl` parameter (e.g. `https://ardot.tencent.com/file/667788990055443` or bare ID `667788990055443`). If the user provides a file link or ID, call this to load it.
44- **`fetch_file_info`** — Fetch the current loaded file ID, after `create_design` or `open_design` has been called to get the file ID.
45
46**Decision logic**:
471. If the user explicitly provides a file URL or ID → call `open_design`.
482. If the user asks to create a new design / start fresh → call `create_design`.(optionally with the given 'fileName').
493. If the editor already has a file loaded (determined in Step 1) → skip this step.
504. If call `create_design` produces an empty canvas, **MAKE SURE SKIP** `fetch_editor_state` at any workflow, the default PageID is `0:1`, use it as the root container.
51
52> ⛔ **Hard gate — do NOT issue any other MCP call until the file is ready.**
53>
54> After calling `create_design` or `open_design`, the file loads asynchronously. You MUST wait for the context update / ready confirmation before issuing **any** other MCP call.
55>
56> **Never** bundle `create_design` / `open_design` in the same parallel batch as `fetch_editor_state`, `fetch_variables`, or any other read — those reads will hit an empty or not-yet-loaded editor and return stale/empty state.
57>
58> Correct order (two separate messages):
59> 1. Message 1: `create_design` or `open_design` → wait for ready signal.
60> 2. Message 2: subsequent reads (Step 1) — may be parallel, see below.
61>
62> Exception: if Step 0 is skipped (a file is already loaded from a previous turn), Step 1 can be the first message of the turn.
63
64### Step 1: Read Existing State (parallel, conditional)
65
66Read whatever state is relevant to the task. **Issue all independent reads in a single message as parallel tool calls** — do not serialize them.
67
68| Scenario | What to call | Notes |
69|---|---|---|
70| Freshly created file (`create_design` just ran) | **nothing** | Empty canvas — root is `0:1`, no variables yet. Skip Step 1, go straight to Step 2. |
71| Opened existing file / file already loaded | `fetch_editor_state({includeSchema: false})` + `fetch_variables` | Parallel in one message. |
72| Pure modification (file already loaded, target known) | The above **plus** any of `batch_read` / `capture_layout` / `capture_screenshot` as needed | All parallel in one message. |
73
74> **Do NOT call `fetch_style_guide_tags`.** The tag list is static — read `../../rules/style-guide-tags.md` instead.
75
76### Step 2: Creative vs. Compositional
77
78- **Creative** (new screen, page, dashboard, restyle) → proceed to Steps 3–4
79- **Compositional** ("add a button", "move this") → skip to Step 5 and load `design-rules.md`
80
81### Step 3: Load Design Guidelines
82
83Load **one or more** design-type guideline, first match wins:
84
85| Priority | Trigger | File |
86|---|---|---|
87| 1 | slides, presentation, deck, 幻灯片, 演示文稿 | `references/guidelines-slides.md` |
88| 2 | mobile, app, iOS, Android, 移动端 | `references/guidelines-mobile-app.md` |
89| 3 | landing, marketing, SaaS, 落地页, 营销 | `references/guidelines-landing-page.md` |
90| 4 | table, dashboard with tables, 表格 | `references/guidelines-table.md` |
91| 5 | convert to code, to App, HTML, 转代码, 出码, 生成应用,转应用 | `references/guidelines-code.md` (+ `guidelines-tailwind.md` if Tailwind) |
92| 6 | (web app, default) | `references/guidelines-web-app.md` |
93
94`guidelines-code.md` / `guidelines-tailwind.md` are implementation guidelines and can be loaded **alongside** a design-type guideline when code generation is involved.
95
96### Steps 4–6: Style + Space + Inspection (parallel)
97
98Issue these as **a single parallel batch** in one message — they have no mutual dependency:
99
100- **`fetch_style_guide(tags)`** — pick 5–10 fitting tags from `../../rules/style-guide-tags.md` (see the Selection Guidance section there).
101- **`locate_available_space({width, height})`** — required for new top-level screens; skip for pure modification tasks. Never overlap existing content.
102- **Inspection calls** (only if modifying existing design and not already covered in Step 1): `batch_read` (find by pattern/ID, `readDepth: 3` for component structure), `capture_layout` (detect problems), `capture_screenshot` (visual verify).
103
104Skip any sub-call that doesn't apply to the current task. The point of parallel batching is to collapse independent reads into one round-trip, not to force every tool to run.
105
106> If a follow-up read depends on this batch's result (e.g. `batch_read({readDepth: 3})` targeting a component discovered via an earlier `batch_read`), issue it as a separate message afterward. Most tasks don't need that.
107
108### Step 7: Execute Design
109
110`batch_edit` with ≤ 25 ops per call. Build order: **structure → content → style → verify**. Ops: **I()** Insert, **U()** Update, **C()** Copy, **M()** Move, **D()** Delete, **G()** Image. For detailed syntax and examples, load `references/ardot-workflow.md`.
111
112### Step 8: Validate
113
114Follow the **Post-Generation Validation Pattern** in `design-rules.md`. Use **tiered validation** — pick the lightest check that matches what the batch changed (T1 structural → `capture_layout` only; T2 content → skip; T3 visual → `capture_screenshot` only; T4 section-complete → both once; T5 final page → one screenshot). **Do not run full dual-verification after every batch_edit.** Enforce the convergence threshold: **max 2 fix iterations per section**, ignore ≤4px spacing noise, no subjective re-polishing once the section matches spec.
115
116## Specialized Workflows
117
118When the task matches one of the following, load the linked reference and follow it strictly (do not improvise the procedure from SKILL.md):
119
120- **Slides / presentation / deck** → choose workflow based on the current model. When the model is **opus4.7**, ask the user whether to use the agent teams workflow (clarify that it takes more time and consumes more tokens): if yes, use `references/slides-agent-teams-workflow.md`; if no, use `references/slides-workflow.md`. For other models, use `references/slides-workflow.md` directly. Mandatory design rules live in `references/guidelines-slides.md`.
121- **Website → style guide extraction** → `references/extract-style-guide-from-web.md`
122- **Design → frontend code** → `references/design-to-code-workflow.md`
123
124## Essential Constraints
125
126These rules apply at all times. Full rule set and troubleshooting are in `design-rules.md`.
127
128- **Every node needs a `name`** — assign meaningful names to all created nodes
129- **Keep float colors to 2 decimals** — avoid long floating-point values
130- **Text is invisible by default** — always set `fill` on text nodes
131- **Use `fill` for all colors** — never use `textColor`, `backgroundColor`, `color`, or `fillColor`
132- **Use `cornerRadius`** — not `borderRadius`
133- **Font weight must be numeric strings** — `"400"`, `"700"`, not `"bold"`
134- **Alignment uses uppercase enums** — `counterAxisAlignItems: "CENTER"`, not `alignItems: "center"`
135- **Prefer flexbox layout** — always set `width` and `height` on new frames explicitly
136- **Layout default sizing is FIXED** — when setting `layout` to `horizontal`/`vertical`, must explicitly set `width`/`height` for dynamic sizing
137- **x/y are ignored in flexbox** — if you need to set x/y on children of flexbox parents, also set `layoutPositioning: "ABSOLUTE"`
138- **`fill_container` requires flexbox parent** — only valid when parent has layout
139- **`hug_contents` requires own flexbox layout** — only valid on a node that itself has flexbox layout
140- **Default frame has white background** — set `fills: []` to remove
141- **Max 25 ops per batch_edit** — split by logical sections
142- **Every I/C/R needs a binding name** — `document` is predefined for root only
143- **No U() on copied descendants** — copied nodes get new IDs; use `descendants` in C() instead
144- **No image node type** — images are fills on frames; use G() with `"stock"` preferred
145- **Icon frames must set `layout: "none"`** — and always `capture_screenshot()` to verify
146- **Create icons as components** — then use `I(parentId, {type: "ref", ref: "iconId"})` to insert instances
147- **Variable binding uses `$` prefix** — `fill: "$primary-color"`, `gap: "$spacing-small"`
148- **Favor copying + updating** over generating from scratch
149- **Parallelize independent reads** — when multiple MCP read calls have no data dependency (e.g. `fetch_editor_state` + `fetch_variables`), issue them in a single message as parallel tool calls; do not serialize them. **Exception**: never bundle these reads in the same message as `create_design` / `open_design` — wait for the file-ready context update first
150- **Validate with tiered checks** — match the tier to the batch type (see `design-rules.md` Post-Generation Validation Pattern); do NOT run full screenshot+layout after every batch_edit
151- **Text wrapping needs both** — `textAutoResize: "HEIGHT"` AND `width: "fill_container"` (or fixed width)
152- **`lineHeight`** — set `lineHeight: "AUTO"` for automatic (preferred) or `lineHeight: 22` for explicit spacing