关于 canicode
canicode 面向设计师和编码 Agent 分析 Figma 设计,发现实现信息缺口,并将回答整理为规格写回设计文件。
主要功能
- 0117 项确定性设计检查
- 02针对缺失意图提问
- 03将结构化注释写入 Figma
- 04带评分的 HTML 报告
- 05CLI 和 MCP 服务
适用场景
- 01在生成代码前发现响应式行为缺口
- 02在 Figma 文件中记录交互细节
- 03在 CI 中检查设计就绪情况
MCP 相关
可选的 canicode MCP 服务向 MCP 客户端提供设计分析工具。往返工作流还需要 Figma MCP 服务来读取和写入设计数据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 否 | Figma URL。未提供 designData 时使用。需要 FIGMA_TOKEN。 |
| token | string | 否 | Figma API 令牌(若未提供,则使用 FIGMA_TOKEN 环境变量) |
| preset | enum | 否 | 分析预设relaxed | dev-friendly | ai-ready | strict |
| fileKey | string | 否 | Figma 文件密钥(与 designData 配合使用以生成深层链接) |
| fileName | string | 否 | Figma 文件名(与 designData 配合使用以供显示) |
| configPath | string | 否 | 用于规则覆盖的配置 JSON 文件路径 |
| designData | string | 否 | 来自 Figma MCP get_metadata 的 Figma 节点数据(XML 或 JSON)。使用 Figma MCP 时,请传入此数据,而不是 input。 |
| targetNodeId | string | 否 | 将分析范围限定为指定的节点 ID |
| customRulesPath | string | 否 | 自定义规则 JSON 文件的路径 |
详细介绍
CanICode
无需学习 CSS,就能让 Figma 设计稿如你所愿地落地。
在浏览器中试用 — 无需安装。
canicode 的功能
你在 Figma 中完成了设计,也清楚它应该呈现什么样子、如何运作——但 AI 代码生成总靠猜,而且十有八九会猜错。卡片在移动端没有堆叠排列,悬停状态消失了,内边距被统一调整。这不是我设计的样子。
canicode 是你的 Figma 文件与 AI 代码生成之间的实现前访谈。它会像开发者在实现前那样提出问题,而且使用通俗易懂的语言:
“这三张卡片在桌面宽度下并排显示——屏幕变窄时应该怎么办?”
你用日常语言回答(“좁아지면 한 줄에 하나씩” / “变窄后每行显示一张”)。canicode 会将答案转化为代码生成所需的精确技术规范,并将其作为结构化注释写回 Figma 文件,这样下次运行时就不必再猜了。
你只需留在 Figma 中,无需输入 CSS 选择器。设计意图就能落实。
→ 完整论述:docs/POSITIONING.md
三个层面
- Linter — 17 条规则会揭示那些你凭专业直觉察觉到、却说不清的问题。“这个间距好像不太对。” → 它会找出那张内边距为 14px、而其他卡片都是 16px 的卡片。
- 问答引导 — 针对每个问题,canicode 都会用你的词汇而非开发者的术语提问。你来回答,它负责将答案转化为规范。
- 往返持久化 — 答案会作为 Dev Mode 注释保存在 Figma 文件中。下次运行、交给下一个人、使用下一款代码生成工具时,都能看到设计意图。
Linter 的分析是确定性的(分析本身不会消耗 LLM 令牌),在消耗量比原始 JSON 少 5 倍的情况下,像素准确率经消融验证达到 94%,并且还通过真实 Figma 设计进行了校准。
为什么选择 canicode(而不是 Claude Design)
Claude Design 于 2026 年 4 月推出,出色地覆盖了提示词 → 应用的流程——AI 根据你的提示词进行设计,并将结果交给 Claude Code。canicode 覆盖的是另一种工作流:
| Claude Design | canicode | |
|---|---|---|
| 谁来设计 | AI(根据提示词设计) | 设计师(在 Figma 中设计) |
如果你希望 AI 替你设计,请使用 Claude Design。如果你已经完成设计,希望它完全按你的意图实现,那么 canicode 就适合你。两者并非竞争关系——它们对设计由谁负责有不同的假设。
完整论述(目标用户、工作流假设,以及 canicode 不适用于哪些情况)请参阅 docs/POSITIONING.md。
往返工作流
技能: canicode-gotchas = 调查答案仅保存在 SKILL.md 中的本地(备忘)。canicode-roundtrip = 使用相同的分析路径,外加写入 Figma(注释/属性)。只需记录问题时选择 gotchas;需要修改设计文件时选择 roundtrip。
- 分析 — 根据 Figma 设计运行 17 条规则(报告包含评级)。
- 提出问题 — 分析器会针对无法推断的设计信息提出问题(缺失的状态、不明确的变体、响应式设计意图)。
- 将修复应用到 Figma —
/canicode-roundtrip技能通过use_figma将答案写回。每次写入都会在摘要中显示以下三种结果标记之一:- ✅ 场景写入成功 — 属性已直接写入场景节点或实例覆盖项。
- 📝 已为场景节点添加注释 — 技能添加了结构化注释,而不是写入属性。对于实例子级布局写入,这是默认做法,因为将属性传播到组件定义(进而传播到它的每个实例)几乎从来都不是用户想要的。摘要中满是 📝 标记是正确行为,而不是失败。
- 🌐 定义写入已传播 — 属性已写入组件定义,且每个实例都继承了该属性。仅当用户预先选择启用
allowDefinitionWrite时才会发生。
- 重新分析 — 验证问题是否已记录(注释/确认);如果出现新问题,则重复第 2 步。
- 交接给
figma-implement-design— canicode 的工作范围到增强设计为止。Figma 官方代码生成技能会接手已整理好的设计并生成代码。 - 通过 Code Connect 映射收尾 —
figma-implement-design返回后,roundtrip 会询问生成的代码是否令人满意。若回答y,canicode 会注册一个 Code Connect 映射,将 Figma 组件指向刚生成的代码,这样后续处理包含此组件的界面时,roundtrip 会复用已有实现,而不是重新生成标记。如果你的仓库尚未设置 Code Connect,则会跳过此步骤 — roundtrip 会在问题调查开始前提前提醒你,让你决定是先安装前置条件,还是不创建映射直接继续。
30 秒快速体验
- 打开 Web 应用 — 粘贴任意 Figma URL,即可获取报告。无需安装、无需令牌,也不会产生 AI 费用。这是 Linter 视图(第 1 层),单独使用也很有帮助。
- 如果你想使用完整的问答往返流程,再安装下方的 Claude Code 技能。
运行完整往返流程(Claude Code)
npx canicode init
# saves your Figma token + installs /canicode-roundtrip
# (the prompt asks for the token; never paste it into agent chat)
/canicode-roundtrip https://www.figma.com/design/ABC123/MyDesign?node-id=1-234
# in your Claude Code session
往返流程会调用 Figma MCP 服务来读取和写入你的设计 — 运行 claude mcp add -s project -t http figma https://mcp.figma.com/mcp 安装一次,然后重启 Claude Code。
Cursor / Claude Desktop / 其他 MCP 宿主:同样支持。CLI 安装方式(
npx canicode init --cursor-skills)、裸 MCP 服务安装方式、用于 CI 门禁的 GitHub Action 以及其他渠道,都列在下方的安装矩阵中。
可选 — Code Connect(用于收尾步骤 6 的映射):根据 Figma 的设置指南,安装
@figma/code-connect,并在仓库根目录创建figma.config.json,然后运行canicode doctor。如果跳过这一步,往返流程仍然可以正常运行 — 只是不会注册映射。它会提前提醒你,让你自行决定。
检查内容
| 类别 | 规则数 | 衡量内容 |
|---|---|---|
| 像素关键项 | 3 | AI 能否读懂布局?(自动布局、绝对定位、分组) |
| 响应式关键项 | 2 | 能否适配不同视口?(固定尺寸、尺寸约束) |
| 代码质量 | 5 | 设计是否便于 AI 理解上下文?(组件、变体、嵌套、Code Connect 覆盖率) |
| 令牌管理 | 2 | AI 能否还原精确值?(原始值、间距网格) |
| 交互 | 2 | AI 能否了解交互效果?(状态变体、原型) |
| 语义 | 3 | AI 能否推断含义?(语义名称、约定) |
每个问题都会分类为:阻塞项 > 风险 > 缺失信息 > 建议。
安装 — 任选一种
令牌安全: 切勿将 Figma 令牌粘贴到 Claude / Cursor / Agent 聊天中——会话日志可能会保留该令牌。请使用 CLI 提示(
npx canicode init)、--token或FIGMA_TOKEN=…环境变量。
以下每一行都是一套完整的安装方式。请勿运行多种方式——它们涵盖的用途有所重叠。
| 如果你使用…… | 安装方式 |
|---|---|
| Claude Code(推荐用于往返工作流) | npx canicode init(在 TTY 中交互式输入令牌)或 npx canicode init --token figd_xxxxxxxxxxxxx(CI / 非 TTY)——保存令牌,并将 /canicode、/canicode-gotchas、/canicode-roundtrip 技能安装到 ./.claude/skills/。这些技能已知道如何通过 npx canicode … 调用 canicode,因此无需安装 canicode MCP;但 /canicode-roundtrip 的应用步骤仍需要 Figma MCP——请参阅下方的前置条件。之后若要轮换令牌而不重新安装技能:npx canicode config set-token。 |
| Cursor / Claude Desktop / 其他 MCP 宿主 | 将 canicode 添加到宿主的 MCP 配置中——请参阅 docs/CUSTOMIZATION.md。示例(Cursor 项目文件):通过 --package=canicode 使用 npx 和 canicode-mcp。 |
| OpenClaw / 其他兼容 AgentSkills 的宿主 | 手动复制技能——请参阅其他 Agent(手动安装)。文档尽力提供参考,不构成支持承诺。 |
| 仅使用 CLI(CI、脚本) | 无需安装。npx canicode analyze "<figma-url>" 可直接运行。如果希望将令牌保存到 ~/.canicode/config.json,请运行一次 canicode init --token …。之后若要轮换令牌,请使用 canicode config set-token(无需重新安装技能)。 |
获取令牌: Figma → Settings → Security → Personal access tokens → Generate new token。Figma 的 PAT 文档 权限范围: canicode 只需只读权限。 有效期: 令牌默认有效期为 90 天;生成令牌时请查看下拉菜单。
往返流程的前置条件:
/canicode-roundtrip技能会调用 Figma MCP 服务来读取和写入设计。请运行一次claude mcp add -s project -t http figma https://mcp.figma.com/mcp安装,然后重启 Claude Code,以加载新的 MCP 工具。
Claude Code 技能 — 安装详情
# Interactive (TTY) — prompts for the token, never paste it into agent chat
npx canicode init
# Non-interactive (CI / non-TTY) — token via env or --token only
FIGMA_TOKEN=figd_xxxxxxxxxxxxx npx canicode init
npx canicode init --token figd_xxxxxxxxxxxxx
会将三项技能安装到 ./.claude/skills/:
- canicode — 轻量级 CLI 封装工具(使用
/canicode <figma-url>) - canicode-gotchas — 独立的常见问题检查(使用
/canicode-gotchas <figma-url>) - canicode-roundtrip — 完整的分析 → 常见问题检查 → 应用往返流程(使用
/canicode-roundtrip <figma-url>)
安装过程总共会复制 7 个文件——上述三个 SKILL.md 文件,以及四个 canicode-roundtrip 辅助文件(
helpers.js、helpers-bootstrap.js、helpers-installer.js、canicode-roundtrip-helpers.d.ts),供往返流程第 4 步的应用路径使用。CLI 摘要中的files installed: 7表示此文件数量。 显式调用: SKILL.md 的description字段会说明触发条件,以便模型自动将 Figma URL 提示路由到相应技能,但路由并非确定性的。如需确定性调用,请直接输入/canicode <figma-url>、/canicode-gotchas <figma-url>或/canicode-roundtrip <figma-url>——斜杠命令会绕过基于模型的路由。
这些技能会调用 npx canicode … 来执行 analyze / gotcha-survey,因此安装 canicode MCP 服务是可选的(两种方式都会生成相同结构的 JSON)。不过,apply 步骤需要 Figma MCP 服务(/canicode-roundtrip 中的步骤 4);请参阅上方的先决条件说明。
标志:--global 会改为安装到 ~/.claude/skills/。--cursor-skills 还会在 .cursor/skills/ 下安装 Cursor 副本。--force 会覆盖现有技能文件,且不提示确认。运行 canicode docs setup 查看完整的设置指南。
如需管理已保存的配置,而不重新安装技能:
canicode config set-token # rotate Figma token (interactive on TTY; --token for CI)
canicode config show # masked token + config + reports paths
canicode config path # absolute path to ~/.canicode/config.json
MCP Server — 安装详情
claude mcp add canicode -- npx --yes --package=canicode canicode-mcp
重启 Claude Code 或重新加载 MCP(Cursor),以便在新会话中显示 canicode MCP 工具。
然后询问:“分析这个 Figma 设计:https://www.figma.com/design/...”
canicode 的规则引擎会分析设计数据,AI 助手只负责协调调用。MCP 服务会从 ~/.canicode/config.json(通过 canicode init --token … 设置)或宿主环境中读取 FIGMA_TOKEN,因此无需在 claude mcp add 中传入 -e FIGMA_TOKEN=…,而且当前解析器也会拒绝该参数。
如果确实需要为单个服务设置令牌,而不使用 canicode init,请在调用命令的 shell 中导出令牌:export FIGMA_TOKEN=figd_xxxxxxxxxxxxx。
Cursor / Claude Desktop 配置请参阅 docs/CUSTOMIZATION.md——尤其是 Cursor MCP (canicode) 和用于端到端验证 gotcha-survey 的 手动测试清单。
CLI — 安装详情
npx canicode analyze "https://www.figma.com/design/ABC123/MyDesign?node-id=1-234"
传入
--ready-min-grade <S|A+|A|B+|B|C+|C|D|F>,可覆盖代码生成就绪度阈值(默认值:A)。
设置:运行 npx canicode init(交互式提示;TTY)或 npx canicode init --token figd_xxxxxxxxxxxxx(CI / 非 TTY),即可保存令牌并将 Claude Code 技能安装到 ./.claude/skills/。之后可通过 npx canicode config set-token 轮换令牌。
Figma API 速率限制——速率限制取决于文件所在位置,而不仅仅是你的套餐。
| 席位 | Starter 套餐中的文件 | Pro/Org/Enterprise 中的文件 |
|---|---|---|
| View、Collab | 6 次请求/月 | 6 次请求/月 |
| Dev、Full | 6 次请求/月 | 10–20 次请求/分钟 |
遇到 429 错误?请确认文件位于付费工作区中。也可以先保存一次 fixture,然后在本地分析。完整详情
GitHub Action
- uses: let-sunny/[email protected]
with:
figma_url: 'https://www.figma.com/design/ABC123/MyDesign?node-id=1-234'
figma_token: ${{ secrets.FIGMA_TOKEN }}
min_score: 70
将分析结果作为 PR 评论发布。如果评分低于阈值,则操作失败。请在 Marketplace 查看 canicode-action。
自定义
| 内容 | 方法 |
|---|---|
| 预设 | --preset relaxed | dev-friendly | ai-ready | strict |
| 配置覆盖项 | --config ./config.json——调整评分、严重程度、排除节点 |
| 分析范围 | --scope page | component——当以 COMPONENT 为根的设计应按页面分析(或反之)时,覆盖自动检测 |
完整指南、示例和所有可用选项请参阅 docs/CUSTOMIZATION.md。
开发
git clone https://github.com/let-sunny/canicode.git && cd canicode
pnpm install && pnpm build
pnpm dev # watch mode
pnpm test # run tests
pnpm lint # type check
架构详情请参阅 CLAUDE.md。校准流程请参阅 Calibration wiki。
贡献
分享你的 Figma 设计,帮助根据真实设计校准评分。
支持
- Bug 和问题:GitHub Issues
- **隐私:**有关数据收集和如何选择退出的详情,请参阅 PRIVACY.md
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。