Claude Design 系统提示词工程拆解
这份笔记把 Claude Design 的系统提示词当成”工程样本”来读——不是为了抄它做设计 agent,而是为了提取可迁移的 prompt / skill 设计原理,将来做 html skill 改造、prototype skill、其他垂直设计 skill 时的参考手册。
适用场景:
- 设计新 skill 前,翻这份笔记对照”应该有什么、不应该漏什么”
- 发现自己的 skill 漂移、模型不听话时,看看 Anthropic 用什么硬化手段
- 给用户教”prompt 工程”时当 case study
不适用:抄词造句、直接复制规则清单(每个 skill 的场景不同,原理可迁移,具体规则不行)
快速索引
- §A 骨架层:prompt 如何组织
- §B 语言层:Anthropic 用的”说话套路”
- §C 机制层:最有工程巧思的 5 个设计
- §D 一张对照表:软要求 → 硬实现
- §E 给我自己做 skill 的启示
A. 骨架层:prompt 如何组织
A1. 三段式分层架构(全局结构)
原文位置:L161-L201(Role + Workflow 开篇)
整份 prompt 严格按这个顺序铺:
人格 (Role) → 工作流 (Workflow) → 规则库 (Rules & Protocols)
一句话 6 个离散步骤 几十条 MUST/NEVER
具体文本:
- 人格一句话(L163):“You are an expert designer working with the user as a manager. You produce design artifacts on behalf of the user using HTML.”
- 工作流 6 步(L203-L213):
- Understand user needs (提问)
- Explore provided resources (读上下文)
- Plan and/or make a todo list (做计划)
- Build folder structure and copy resources (搭结构)
- Finish: call done → fix errors → call fork_verifier_agent (收尾验证)
- Summarize EXTREMELY BRIEFLY (极简总结)
为什么这样组织更好使:
- 模型可以按层归位:漂移时能自己找锚点——“我现在在工作流第几步?”比”我该做什么?“更容易回答
- 规则不是堆在一起而是挂在工作流的具体步骤上:比如 Tweaks 规则挂在”原型产出”分支、questions_v2 挂在 step 1、done 挂在 step 5
- 事后审计友好:用户质疑”你为什么没问我”时,可以指向 step 1 + questions_v2 规则的具体行
可迁移原理:先定身份 → 再定流程 → 最后列规则。这是信息架构的”由粗到细”,不要反过来写(从规则开始逆推身份)。
给自己 skill 的启示:
- 现在的 html skill SKILL.md 开篇没有明确的”人格一句话”——可以补一条
- 工作流通常用 decision tree 而不是线性 6 步,这没问题,但 decision tree 的每个叶子节点应该挂上”这个节点下的规则”而不是把所有规则堆在文末
A2. 技能冷加载(架构级巧思)
原文位置:L143, L895-L977(Available Skills 章)
Claude Design 有 13 个专项技能,但系统 prompt 里只列一句话描述,不塞具体内容:
- Animated video — Timeline-based motion design
- Interactive prototype — Working app with real interactions
- Make a deck — Slide presentation in HTML
- Make tweakable — Add in-design tweak controls
- Frontend design — Aesthetic direction for designs outside an existing brand system
- Wireframe — Explore many ideas with wireframes and storyboards
- Export as PPTX (editable)
- Export as PPTX (screenshots)
- Create design system
- Save as PDF
- Save as standalone HTML
- Send to Canva
- Handoff to Claude Code
用户需要哪项时,agent 调 invoke_skill 加载对应
prompt。
设计意图:
- 冷启动 prompt 最小化:系统 prompt 只装”骨架 + 导航”,不装”血肉”
- 热加载专项能力:需要时精准加载一项,不污染上下文
- 能力可组合:一个 agent 可以在同一会话里加载多个 skill
对比反面教材:把 13 个技能的 prompt 都塞进系统 prompt 里——上下文 10x 膨胀、模型注意力稀释、跨技能规则互相打架。
可迁移原理:skill hub 架构 ≈ 操作系统的按需加载。系统启动只加载 kernel,应用按需启动。
给自己的启示:
~/CC/.claude/skills/下已经是 hub-spoke 架构(learning hub / research hub / html hub),方向对- html skill 的
layouts/子目录其实已经隐含这个模式了——不同 layout 按需加载 - 可以做的改进:html skill SKILL.md 里显式列一张”子能力索引表”,类似 Claude Design 的 Available Skills 写法,让 agent 知道”这里有什么可调用”
B. 语言层:Anthropic 用的”说话套路”
B1. 三档强制词
原文位置:散见全文,高浓度区 L343-L349 (CRITICAL), L461 (Avoid), L653-L667 (Verification)
三档强制词的用法差异:
| 档位 | 语义 | 用在哪 |
|---|---|---|
MUST / NEVER |
硬底线,不可商量 | 技术契约(工具参数、文件路径规则) |
CRITICAL |
容易忘但忘了就崩 | 踩坑级规则(变量命名、版本锁定) |
Always / Avoid / Resist the urge to... |
强倾向但留余地 | 品味 / 产出质量规则 |
具体例子:
- CRITICAL 级(L343): > “When defining
global-scoped style objects, give them SPECIFIC names. … NEVER write
const styles = { ... }. This is non-negotiable — style objects with name collisions cause breakages.” - Avoid 级(L461): > “Avoid web design tropes and conventions unless you are making a web page.”
- Resist the urge 级(L376, L391): > “Resist the urge to add TITLES to the actual html page.” > “Resist the urge to add a ‘title’ screen; make your prototype centered within the viewport”
为什么分三档很重要:
- 全用 MUST/NEVER → 模型会”规则疲劳”:当所有规则都是必须,模型对重要性的判断反而失效
- 全用 Avoid → 软得像没说:品味类的软约束模型很容易漂移回训练语料的均值
- 分档使用 → 模型可以分配注意力:CRITICAL 和 MUST 不能让步,Avoid 可以权衡
可迁移原理:强度要和后果匹配——代码必崩的坑用 CRITICAL,品味偏好用 Avoid,技术契约用 MUST。乱用强度等于没用。
给自己的启示:
- 翻一遍自己的 skill,把”必须”都降级成三档中更准确的那档
~/CC/.claude/CLAUDE.md里的”铁律”写法可以参考这个分级:硬底线 vs 强倾向要分清
B2. 负面清单 > 正面清单(反 AI slop 秘诀)
原文位置:L863-L891(Content Guidelines - Avoid AI slop tropes)
整章 Content Guidelines 的杀手锏是显式列”不要做什么”:
Avoid AI slop tropes:
- Avoiding aggressive use of gradient backgrounds
- Avoiding emoji unless explicitly part of the brand; better to use placeholders
- Avoiding containers using rounded corners with a left-border accent color
- Avoiding drawing imagery using SVG; use placeholders and ask for real materials
- Avoid overused font families (Inter, Roboto, Arial, Fraunces, system fonts)
为什么这招有效:
- 训练语料均值即 AI slop:所有”AI 生成设计”长得都一个样(渐变背景、emoji、圆角卡片 + 彩色左边条、Inter 字体)——因为训练数据里这种风格最多,模型的默认输出就是这个
- 正面清单不管用:写”请有美学品味”、“请参考优秀设计”——这些都是模糊指令,模型不知道具体该怎么做
- 负面清单是栅栏:不要 X 明确可判定,比”要有品味”强 10 倍
- 反训练回音:直接点名禁用那些”训练数据里最常见但实际最俗”的模式,就是告诉模型”偏离你的默认分布”
可迁移原理:当你要对抗模型的默认偏好时,用负面清单。正面引导只适合在没有默认偏好的白纸上。
给自己的启示:
- html skill 里可以加一份
content-guidelines.md,抄这份负面清单 + 叠加 apple-ui-design 的禁用项 - Skill 如果发现”模型总是重复做错同一件事”,先看能不能把那件事写进负面清单
- 这条 + apple-ui-design 可以共享一份 guardrails(它俩的禁用项高度重合)
B3. 例子模板化(让规则可泛化)
原文位置:L577-L588(questions_v2 场景示例)
给了 6 个场景对照:
make a deck for the attached PRD
→ ask questions about audience, tone, length, etc
make a deck with this PRD for Eng All Hands, 10 minutes
→ no questions; enough info was provided
turn this screenshot into an interactive prototype
→ ask questions only if intended behavior is unclear from images
make 6 slides on the history of butter
→ vague, ask questions
prototype an onboarding for my food delivery app
→ ask a TON of questions
recreate the composer UI from this codebase
→ no questions
为什么需要例子:
- 抽象规则”信息够就别问,不够就问” → 模型不知道”够”和”不够”的分界
- 6 个场景对照 → 模型从 6 个点外推出判别函数
- 覆盖不同 ambiguity 等级 + 不同信息密度:从”完全给足(codebase 还原)“到”完全模糊(黄油历史)”
可迁移原理:抽象规则 + 具体 dos/don’ts 对照 = 高泛化。不要只写规则,要给 3-6 个跨光谱的例子。
给自己的启示:
- 触发词清单是一种负面例子:
research skill和learning skill的消歧反射就是靠例子对照(“研究一下 agent memory” vs “研究一下杨天润”) - 未来给 skill 写决策规则时,手动挑 3-6 个”覆盖不同情况”的例子放文档里
C. 机制层:最有工程巧思的 5 个设计
C1.
questions_v2 — 把”先问再做”编码成硬工具
原文位置:L572-L648(Asking questions 章)
机制:
- 不是软要求”你应该提问”,而是一个会阻塞回合的工具
- 调用后直接结束回合,等用户答
- 配了”必问项清单 + 至少 10 个问题”硬约束
原文引用(L611-L627):
“Always confirm the starting point and product context – a UI kit, design system, codebase, etc.” “Always ask whether they’d like variations, and for which aspects.” “Always ask what tweaks the user would like” “Ask at least 4 other problem-specific questions” “Ask at least 10 questions, maybe more.”
精髓:把行为规范从 prompt 的软约束降维成工具 API 层面的硬契约——工具签名就”无法跳过”。
对比反面:只写”请先问用户” → 模型会经常直接开干,因为工具层面没有阻塞点。
可迁移原理:软规则 → 工具/协议层硬化,当你希望某个行为”100% 发生”而不是”大部分时候发生”。
给自己的启示:
- 我的 skill 生态里没有”questions_v2 风格”的阻塞工具——目前靠”反问纪律”(learning hub)来实现,但本质是软约束
- 如果发现某个关键环节经常被模型跳过(比如”brainstorm 之前要先明确需求”),可以考虑做成阻塞式工具
- TaskCreate 本身有点这个味道:创建任务是”必经之路”,虽然不阻塞但留痕
C2. 验证两阶段 —
done + fork_verifier_agent
原文位置:L651-L668(Verification 章)
机制:
写完
↓
done(path) ← 打开用户 tab + 返回 console 错
↓ 干净了
fork_verifier_agent() ← 后台 subagent(独立 iframe)做截图+布局+JS 复检
↓
本回合直接结束(不等后台)
↓
通过 = 静默;出问题 = 叫醒主 agent
三层工程巧思:
主 agent 不做视觉自查(L659-L667): > “Do not perform your own verification before calling done; do not proactively grab screenshots to check your work; rely on the verifier to catch issues without cluttering your context.”
为什么?截图/复检会消耗巨量上下文,把主 agent 拖累。
后台 agent 有独立 iframe 上下文:验证器的工作不污染主对话流,只有发现问题才回传。
非阻塞异步(L655-L656): > “Silent on pass — only wakes you if something’s wrong. Don’t wait for it; end your turn.”
可迁移原理:验证 = 独立 agent + 异步 + 按需唤醒。把”验证”从主流程里解耦出去,靠 subagent 做,主 agent 只关心”出问题时被通知”。
给自己的启示:
- 我现在做完 skill / 写完代码经常自己检查,context 被验证搞得很重
- 可以学这个模式:用 Agent 工具 spawn 独立子 agent 做 review,不堵主流
- cross-review skill 就是这个思路的落地——三方交叉审阅本质是独立 agent pool
- html skill 可以加一个”产出后 spawn 验收 agent”的可选步骤
C3. Tweaks 协议 — 把”可调节性”产品化
原文位置:L669-L743(Tweaks 章,包括 Protocol + Persisting state + Tips)
这是整个 prompt 里最精巧的一块。
机制:HTML 原型和宿主 IDE 通过 postMessage + JSON 注释栅栏双向通信。
关键三步(L677-L709):
// Step 1: 先注册监听(顺序敏感!)
window.addEventListener('message', e => {
if (e.data.type === '__activate_edit_mode') { /* 显示 Tweaks 面板 */ }
if (e.data.type === '__deactivate_edit_mode') { /* 隐藏 */ }
});
// Step 2: 再宣布可用
window.parent.postMessage({type: '__edit_mode_available'}, '*');
// Step 3: 用户改值时,既实时应用又持久化
window.parent.postMessage(
{type: '__edit_mode_set_keys', edits: {fontSize: 18}},
'*'
);关键顺序警告(L677):
“Order matters: register the listener before you announce availability. If you post
__edit_mode_availablefirst, the host’s activate message can land before your handler exists and the toggle silently does nothing.”
这是典型的分布式系统竞态条件——在 prompt 里显式教给模型,这很罕见。
磁盘持久化机制(L713-L725):
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"primaryColor": "#D97757",
"fontSize": 16,
"dark": false
}/*EDITMODE-END*/;- 用
/*EDITMODE-BEGIN*/…/*EDITMODE-END*/注释栅栏包住可改区块 - 宿主 IDE 拿到
__edit_mode_set_keys消息:解析 JSON → merge 编辑 → 写回磁盘 - 因此改动能挺过页面刷新(不只是运行时内存状态)
为什么这是分水岭:
- 普通 AI 原型:一次性 HTML,看完就扔,改版 = 重新生成
- Claude Design 的 Tweaks 原型:可回播、可调、状态持久 → 从”交付物”变成”活物”
- 这是”AI 原型工具”和”AI 设计 IDE”的本质区别
可迁移原理(两条):
- 产出物要有”可调面”:每个产出都该显式暴露 2-5 个 knob,而不是交付一个”最优解”
- 状态持久化 = 活物 vs 死物:如果产出只是静态交付,迭代成本极高;把”上次调到哪”存下来,迭代成本降 10 倍
给自己的启示:
- html skill 产出 HTML 时,默认加一组 Tweaks(配色/字号/密度等 2-3 个 knob),走这套 postMessage 协议
- 更广义:任何”生成式交付物”都应该考虑”可调接口”——这可能是通用 AI 产品的下一代范式
- 我的 claude code 环境里是否能支持这个协议?可能需要单独评估
ROI 评估:这条是 6 条借鉴里最重但收益最独特的一条——建议放后面做,先把架构和品味栅栏搞定再碰
C4. snip —
上下文管理的延迟 GC
原文位置:L562-L570(Context management 章)
机制:
- 每条用户消息带
[id:mNNNN]标签 - agent 干完一阶段就给旧消息范围打 snip 标记
- 但不立刻删——等上下文压力积起来时,宿主批量执行
原文(L564-L568):
“Each user message carries an [id:mNNNN] tag. When a phase of work is complete — an exploration resolved, an iteration settled, a long tool output acted on — use the snip tool with those IDs to mark that range for removal. Snips are deferred: register them as you go, and they execute together only when context pressure builds.”
“Snip silently as you work — don’t tell the user about it.”
对比三种 context 管理策略:
| 策略 | 优点 | 缺点 |
|---|---|---|
| 暴力截断早期消息 | 简单 | 丢上下文,对话连续性崩 |
| 实时压缩总结 | 保留语义 | 贵(额外 LLM 调用)+ 失真 |
| Snip 延迟执行 | agent 自己标记 + 压力触发 | 需要宿主配合实现 |
Snip 的双重权衡:
- 延迟:避免”标了就删”导致 agent 后续又想回看被删的部分
- 静默:不打断主流程、不让用户感知
- 压力触发:只在真的需要时才执行,平时开销 0
可迁移原理:垃圾回收不必实时,延迟执行 + 压力触发是更优的工程答案。
给自己的启示:
- 我目前的 session 管理是”context 50%+ 触发 session-end”,这是粗粒度截断
- Claude Code 环境有没有细粒度 snip 能力?值得探索(/compact 是粗粒度的)
- 对 skill 作者:如果你的 skill 会产生大量中间状态(工具输出),考虑在 skill 里显式提示 agent 什么时候可以丢
C5. 版权栅栏 — 合规编码进 prompt
原文位置:L985-L991(Do not recreate copyrighted designs 章)
原文:
“If asked to recreate a company’s distinctive UI patterns, proprietary command structures, or branded visual elements, you must refuse, unless the user’s email domain indicates they work at that company.”
<user-email-domain>______</user-email-domain>
机制:
- 硬规则:不得复刻知名公司的 UI
- 白名单例外:用户邮箱域名匹配时放行
- prompt 里真的注入
<user-email-domain>变量
为什么这条重要:
- 产品级 agent 不能靠”事后人工审查”处理合规——太晚
- 不能靠”用户自觉”——不可靠
- 必须在 prompt 层面阻止不合规请求的生成
可迁移原理:合规 / 安全 / 边界规则要编码进 prompt,而不是留在外部文档或后处理。
给自己的启示:
- 我的 skill 没有”合规栅栏”概念——因为都是个人使用,场景单一
- 但如果有些 skill 以后要共享给他人使用(投资类 skill 里的信源策略、fact-check workflow 的结论措辞),可以学这个思路
- 投资类 memo skill 的”不做投资判断、不做估值决策”这类红线,应该显式进 prompt 而不是靠模型自觉
D. 对照表:软要求 → 硬实现
Claude Design 最值得学的不是具体条款,而是系统化的”软→硬”降维思路:
| 常见软要求 | Claude Design 的硬实现载体 | 设计机制 |
|---|---|---|
| “先问清楚再做” | questions_v2 阻塞式工具 |
工具调用契约 |
| “检查你的产出” | fork_verifier_agent 后台 agent |
异步子 agent |
| “改版别散文件” | Tweaks postMessage 协议 + JSON 注释栅栏 | 双向通信协议 |
| “别污染上下文” | snip 标记 + 压力触发 |
延迟 GC |
| “别被 AI 训练数据带偏” | 显式负面清单(AI slop tropes) | 负面约束 |
| “别侵权” | 邮箱域名白名单 + prompt 注入 | 合规栅栏 |
| “按需加载能力” | invoke_skill + 13 技能索引 |
冷启动最小 + 热加载 |
| “理解已有代码再做” | github_import_files 强制链路 + CRITICAL 警告 |
链路硬化 |
| “产出要能验证” | done 返回 console errors |
工具返回值契约 |
| “长对话不失位” | [id:mNNNN] + localStorage 持久化位置 |
状态外置 |
一句话总结:
Anthropic 把每一条”希望模型做到的事”,都找了一个比自然语言约束更强的载体(工具 / 协议 / 结构 / 栅栏)。这是把 prompt 当系统工程在做,不是当 chat message 在写。
E. 给自己做 skill 的启示
结合当前 skill 生态(html / learning hub / research hub / investment / apple-ui-design 等)做的自我审视:
E1. 架构层(优先级:中高)
E2. 语言层(优先级:高,改造成本低)
E3. 机制层(优先级:因场景而定,成本高)
E4. 不做的事
- ❌ 不要照抄规则清单:Claude Design 规则是为”HTML 设计 agent”场景服务的,我的场景不同(通用生产力 + 投资研究 + 学习),抄会水土不服
- ❌ 不要一次改 6 项:建议按 handoff 的顺序 1 → 2 → 3+6 → 5 → 4,首刀选负面清单(成本最低 / 收益最直观)
- ❌ 不要把 Tweaks 协议当”必须做”:这是设计 agent 特有的产品化需求,通用 skill 不需要
下一步(候选)
- 首刀(推荐):按 handoff 第 3 步,给 html skill 写
content-guidelines.md(抄 AI slop 清单 + 合并 apple-ui-design 禁用项) - 架构改造:重构 html skill 的 SKILL.md 开头为”人格一句话 / 6 步工作流 / 硬约束”三段式
- 单独评估:Tweaks 协议的 ROI 和技术可行性(需要探索 claude code 环境)
- 复盘:再过 1-2 周回来看这份笔记,检查哪些 takeaway 真的用上了(feedback loop)
附:原文行号速查
| 章节 | 行号 |
|---|---|
| Role(人格) | L161-L171 |
| Your workflow(6 步工作流) | L201-L229 |
| Output creation guidelines | L245-L289 |
| React + Babel(CRITICAL 级规则密度区) | L329-L367 |
| How to do design work | L418-L468 |
| Context management(snip) | L562-L570 |
| Asking questions(questions_v2) | L572-L648 |
| Verification(done + fork_verifier_agent) | L651-L668 |
| Tweaks Protocol | L669-L743 |
| Starter Components | L771-L809 |
| GitHub(强制链路) | L811-L843 |
| Content Guidelines(AI slop 负面清单) | L845-L893 |
| Available Skills(13 个) | L895-L977 |
| Do not recreate copyrighted designs(合规栅栏) | L985-L991 |
| Tool invocation protocol(XML 工具契约) | L993-L1012 |
| Functions in JSONSchema(37 个工具清单) | L1014+ |