Hotdry.
ai-systems

用 figma-use CLI 构建 AI 代理控制的设计自动化工作流

通过 CLI 工具让 AI 代理直接控制 Figma,实现自动化设计工作流、组件生成与布局优化,分析 token 效率与工程化部署参数。

在 AI 代理日益成为产品开发流程核心组件的今天,设计工具的自动化控制成为提升效率的关键瓶颈。传统的设计系统管理依赖人工操作 Figma 界面,而 AI 代理需要通过复杂的 API 集成才能与设计工具交互。figma-use 项目提供了一个革命性的解决方案:通过命令行接口(CLI)让 AI 代理直接控制 Figma,实现从组件生成到布局优化的全流程自动化。

为什么 CLI 比 MCP 更适合 AI 代理?

Model Context Protocol(MCP)作为 AI 工具与外部系统交互的标准协议,在通用性上有其优势,但在设计自动化场景下存在明显的 token 效率问题。根据 figma-use 项目的实测数据,完成相同的 Figma 操作,CLI 命令仅需约 47 个 token,而 MCP 协议需要约 200 个 token。

这种差异源于协议设计的本质不同。MCP 采用 JSON-RPC 格式,每个请求和响应都需要完整的 JSON 结构,包含大量的元数据和格式标记。而 CLI 命令采用人类可读的自然语言格式,AI 代理生成和理解都更加高效。

以创建一个带样式的框架为例:

# CLI 命令:47 tokens
figma-use create frame --width 400 --height 300 --fill "#FFF" --radius 12 --layout VERTICAL --gap 16

对应的 MCP 请求需要包含完整的 JSON 结构、方法名、参数对象等,响应同样需要完整的 JSON 包装。当 AI 代理需要执行数十个设计操作时,这种 token 开销会显著增加成本并降低响应速度。

figma-use 项目同时提供了 MCP 服务器兼容性,通过 http://localhost:38451/mcp 端点暴露 80+ 自动生成的工具,确保在必须使用 MCP 协议的客户端中也能正常工作。

JSX 渲染:LLM 的天然设计语言

figma-use 最创新的特性是支持 JSX 语法直接渲染为 Figma 节点。这一设计充分利用了大型语言模型(LLM)的训练特性:所有现代 LLM 都在数百万个 React 组件代码上进行了训练,能够自然地理解和生成 JSX 语法。

<Frame style={{ flexDirection: 'column', gap: 16, padding: 24 }}>
  <Text style={{ fontSize: 24, fontWeight: 'bold' }}>Title</Text>
  <Text style={{ fontSize: 14, color: '#666' }}>Description</Text>
</Frame>

通过 figma-use render 命令,AI 代理可以直接将这样的 JSX 代码转换为真实的 Figma 节点,包括框架、文本、组件、自动布局等完整功能。这种方式消除了 AI 代理学习 Figma 特定 API 的需求,让设计生成变得像编写 React 组件一样自然。

支持的样式属性系统

figma-use 的 JSX 渲染支持完整的样式属性系统,包括:

布局属性:

  • flexDirection: 'row' | 'column'
  • justifyContent: 'flex-start' | 'center' | 'flex-end' | 'space-evenly'
  • alignItems: 'flex-start' | 'center' | 'flex-end' | 'stretch'
  • gap: number
  • padding: number 及各方向独立控制

尺寸与位置:

  • width: number
  • height: number
  • x: number
  • y: number

外观属性:

  • backgroundColor: string(十六进制颜色)
  • borderColor: string
  • borderWidth: number
  • borderRadius: number
  • opacity: number

文本样式:

  • fontSize: number
  • fontFamily: string
  • fontWeight: 'normal' | 'bold' | '100'-'900'
  • color: string
  • textAlign: 'left' | 'center' | 'right'

组件系统与设计变量绑定

对于企业级设计系统,figma-use 提供了完整的组件化支持。通过 defineComponent 函数可以创建 Figma 组件,首次使用渲染主组件,后续使用创建实例:

import { defineComponent, Frame, Text } from '@dannote/figma-use/render'

const Card = defineComponent('Card',
  <Frame style={{ padding: 24, backgroundColor: '#FFF', borderRadius: 12 }}>
    <Text style={{ fontSize: 18, color: '#000' }}>Card</Text>
  </Frame>
)

export default () => (
  <Frame style={{ gap: 16, flexDirection: 'row' }}>
    <Card />  {/* 创建组件 */}
    <Card />  {/* 创建实例 */}
    <Card />  {/* 创建实例 */}
  </Frame>
)

更强大的是组件变体系统,通过 defineComponentSet 可以创建包含所有变体组合的 Figma ComponentSet:

import { defineComponentSet, Frame, Text } from '@dannote/figma-use/render'

const Button = defineComponentSet('Button', {
  variant: ['Primary', 'Secondary'] as const,
  size: ['Small', 'Large'] as const,
}, ({ variant, size }) => (
  <Frame style={{ 
    padding: size === 'Large' ? 16 : 8,
    backgroundColor: variant === 'Primary' ? '#3B82F6' : '#E5E7EB',
    borderRadius: 8,
  }}>
    <Text style={{ color: variant === 'Primary' ? '#FFF' : '#111' }}>
      {variant} {size}
    </Text>
  </Frame>
))

这将创建 4 个变体组件(Primary/Small、Primary/Large、Secondary/Small、Secondary/Large)并放置在一个 ComponentSet 中。

设计变量绑定

figma-use 支持将颜色绑定到 Figma 变量,确保设计系统的一致性:

import { defineVars, Frame, Text } from '@dannote/figma-use/render'

const colors = defineVars({
  bg: { name: 'Colors/Gray/50', value: '#F8FAFC' },
  text: { name: 'Colors/Gray/900', value: '#0F172A' },
})

export default () => (
  <Frame style={{ backgroundColor: colors.bg }}>
    <Text style={{ color: colors.text }}>Bound to variables</Text>
  </Frame>
)

value 参数作为回退值,在渲染时颜色会按名称绑定到实际的 Figma 变量。

工程化部署参数与监控要点

安装与配置参数

  1. 全局安装:

    bun install -g @dannote/figma-use
    
  2. 插件安装:

    figma-use plugin install  # 安装插件(需先退出 Figma)
    
  3. 代理服务器启动:

    figma-use proxy  # 启动代理服务器
    
  4. 在 Figma 中启用:

    • 打开 Figma → 插件 → 开发 → Figma Use

两种渲染模式的选择标准

figma-use 支持两种渲染模式,各有不同的适用场景:

1. Plugin API 模式(稳定推荐)

  • 通过 WebSocket 与 Figma 插件通信
  • 完全基于官方插件 API,稳定性高
  • 适合生产环境,支持所有 Figma 功能
  • 启动命令:figma-use proxy

2. Multiplayer Protocol 模式(实验性)

  • 使用 Figma 内部多人协作协议
  • 速度极快(约 100 倍于插件 API)
  • 可能因 Figma 更新而失效
  • 启动要求:
    # 终端1:启动带调试端口的 Figma
    figma --remote-debugging-port=9222
    
    # 终端2:启动代理
    figma-use proxy
    

监控指标与健康检查

在生产环境中部署 figma-use 时,需要监控以下关键指标:

  1. 连接状态监控:

    • WebSocket 连接保持率
    • 插件响应延迟(应 < 100ms)
    • 命令执行成功率(目标 > 99.5%)
  2. 性能监控:

    • 渲染操作平均耗时
    • JSX 解析时间
    • 网络往返延迟
  3. 资源使用监控:

    • 代理服务器内存使用
    • 并发连接数
    • Token 使用效率(CLI vs MCP 对比)

错误处理与重试策略

由于设计自动化涉及多个系统组件,需要建立健壮的错误处理机制:

  1. 连接失败重试:

    • 初始连接失败:指数退避重试,最大 3 次
    • 运行中断连:立即重连,保持会话状态
  2. 命令执行异常:

    • 语法错误:返回详细错误信息,不重试
    • 超时错误:默认 30 秒超时,可配置
    • 资源限制:优雅降级或排队执行
  3. 数据一致性保证:

    • 使用事务性操作确保原子性
    • 操作前备份关键状态
    • 提供回滚机制

AI 代理集成模式

figma-use 专门为 AI 代理设计了集成方案,包含完整的 SKILL.md 参考文件,可直接用于 Claude Code、Cursor 等 AI 开发工具。

Claude Code 集成

# 创建技能目录
mkdir -p ~/.claude/skills/figma-use

# 复制技能文件
cp node_modules/@dannote/figma-use/SKILL.md ~/.claude/skills/figma-use/

# 或直接下载
curl -o ~/.claude/skills/figma-use/SKILL.md \
  https://raw.githubusercontent.com/anthropics/figma-use/main/SKILL.md

项目级配置

在项目的 AGENTS.md 中添加:

## Figma

使用 `figma-use` CLI。对于复杂布局,使用 `figma-use render --stdin` 配合 JSX。
运行 `figma-use --help` 查看所有命令。

实际应用场景与工作流

场景 1:设计系统组件批量生成

AI 代理可以根据设计规范自动生成完整的组件库:

# 生成按钮组件变体
figma-use render ./button-variants.figma.tsx

# 创建颜色变量
figma-use variable create "Primary" --collection <id> --type COLOR --value "#3B82F6"

# 应用样式
figma-use style create-paint "Brand/Primary" --color "#E11D48"

场景 2:响应式布局自动调整

基于内容动态调整布局:

# 查询当前节点结构
figma-use node tree

# 根据内容调整框架尺寸
figma-use set layout <id> --mode VERTICAL --gap 12 --padding 16

# 导出设计验证
figma-use export node <id> --output design.png

场景 3:设计评审自动化

集成到 CI/CD 流程中的设计质量检查:

# 检查设计一致性
figma-use find --type FRAME --prop 'fill' '#FF0000'

# 添加评审注释
figma-use comment add "颜色对比度不足" --x 200 --y 100

# 生成版本对比
figma-use version list

架构设计与扩展性

figma-use 采用模块化架构,核心组件包括:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  AI Agent   │────▶│  figma-use  │────▶│   Plugin    │
│             │ CLI │    proxy    │ WS  │             │
└─────────────┘     └──────┬──────┘     └─────────────┘
                           │
                    MCP ───┤ WebSocket (multiplayer)
                           ▼
                    ┌─────────────┐
                    │   Figma     │
                    │   Server    │
                    └─────────────┘

扩展点设计

  1. 自定义命令扩展:

    • 通过 figma-use eval 执行任意 JavaScript
    • 支持插件 API 的所有功能
  2. 输出格式定制:

    • 默认人类可读格式
    • 支持 --json 参数用于机器解析
    • 可扩展自定义输出处理器
  3. 协议适配器:

    • CLI 命令 → 插件 API
    • MCP 端点 → 相同功能,JSON-RPC 协议
    • 渲染命令 → 多人协作协议

性能优化建议

Token 使用优化

  1. 批量操作:

    • 使用 JSX 渲染多个元素而非单个命令
    • 组合相关操作为一个事务
  2. 缓存策略:

    • 缓存常用组件定义
    • 复用已创建的变量和样式
  3. 精简输出:

    • 使用 --json 仅获取必要数据
    • 过滤无关的属性信息

网络优化

  1. 本地代理:

    • 确保代理服务器与 Figma 在同一网络
    • 使用 WebSocket 保持连接复用
  2. 压缩传输:

    • JSX 代码天然紧凑
    • 二进制数据传输优化

安全考虑

  1. 访问控制:

    • 基于 Figma 个人访问令牌
    • 文件级权限继承 Figma 原有设置
  2. 操作审计:

    • 所有命令记录日志
    • 版本历史自动追踪
  3. 资源限制:

    • 防止无限循环创建
    • 文件大小和复杂度限制

未来发展方向

随着 Figma 在 2025 年 Schema 大会上宣布的设计系统更新,特别是 Extended Collections 功能的推出,figma-use 将在多品牌设计系统管理方面发挥更大作用。AI 代理可以:

  1. 自动同步跨品牌变量:

    • 监控父设计系统变更
    • 智能同步到扩展集合
  2. 设计规范检查:

    • 自动检测品牌规范违规
    • 提供修复建议
  3. 设计系统演进:

    • 基于使用数据优化组件
    • 自动生成演进建议

结语

figma-use 代表了设计工具自动化的新范式:通过 CLI 接口让 AI 代理直接控制设计工具,结合 LLM 天然熟悉的 JSX 语法,实现了前所未有的设计生成效率。在 token 效率、开发体验和系统集成方面,相比传统的 MCP 协议有显著优势。

对于设计系统团队、产品开发团队和 AI 应用开发者,figma-use 提供了一个强大的基础设施,让设计自动化不再是复杂的工程挑战,而是可以轻松集成到现有工作流中的标准组件。随着 AI 在设计领域的深入应用,这种直接、高效的控制方式将成为标准实践。

资料来源:

  1. figma-use GitHub 仓库:https://github.com/dannote/figma-use
  2. Figma Schema 2025 设计系统更新:https://www.figma.com/blog/schema-2025-design-systems-recap/
查看归档