Communitygithub.com

Figma草稿整理器

自主分析Figma团队中所有草稿文件的实际内容,为其赋予描述性英文名称,并归类到匹配的编号项目文件夹中。全程使用Figma内部API,无需鼠标操作。

Figma草稿整理器 是什么?

该技能通过Figma内部API自动整理团队草稿文件夹中的文件。其核心理念是:**文件内容才是真实依据,而非旧文件名**。针对每个草稿文件,它会读取框架内的实际文本,据此生成符合`<主题> - <关键特性> Dashboard`格式的英文名称,并匹配到对应的编号分类项目中(例如`07 - Crypto`)。如果找不到匹配的分类项目,技能会自动创建一个新的编号项目,再执行重命名+移动操作。默认模式为全自动:处理一个文件后立即获取下一个,无需用户逐次确认。技能支持Claude in Chrome环境,利用`javascript_tool`执行,需要在Chrome中打开的Figma团队草稿页面上运行,并配合Figma只读访问令牌和团队ID。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ahmeduxui/figma-drafts-organizer/tree/main/figma-drafts-organizer

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Figma草稿整理器(自主运行,内部API)

本技能提供了一种经过验证的可靠方法,用于清空Figma团队的草稿文件夹:对每个文件进行分类,并将其归档到正确的编号分类项目中。整个过程通过Figma的内部API完成,使用Chrome中的Claude的javascript_tool执行——无需点击文件卡片、无需移动对话框、无需编辑重命名字段。之前依赖鼠标操作的方式既慢又脆弱;而内部API通过一次请求即可完成移动+重命名,且不会卡住。

使效果良好的核心理念:文件内容是真实依据,旧文件名永远不是。 旧草稿名称通常是错误的、通用的或是复制粘贴的。因此,对于每个文件,我们读取其框架内的实际文本,基于内容决定名称和分类,然后执行重命名+移动。

运行模式

默认模式为完全自主运行:逐个处理草稿文件夹中的文件,按顺序立即重命名并移动每个文件,无需在文件之间暂停请求批准。每个文件报告一个简短的结果。只有当出现你无法从内容中解决的真实歧义(很少见)或API调用连续失败时,才会停下来询问用户。

如果用户明确要求预览/批准流程,则显示一个对比表(当前名称 → 建议名称 + 分类)并等待——但这是例外情况,非默认行为。

五个步骤(每个文件——请复用这些步骤,不要自行创建新的)

对于每个草稿文件,严格按照以下顺序执行这五个步骤:

  1. 获取文件密钥——从草稿列表中获取(重新获取后的列表索引0)。
  2. 检查实际内容——通过REST API读取框架内的真实文本。不要信任旧文件名。
  3. 确定新名称 + 分类——两者都基于内容推导。 名称格式:<主题> - <关键特性> Dashboard(英文,无论设计使用何种语言)。
  4. 解析目标项目——找到匹配的编号分类项目;如果不存在,则创建一个(按序下一个编号)。
  5. 重命名 + 移动——一次内部API PUT 请求完成两者。期望HTTP 200。

然后重新获取草稿列表并从步骤1重复,直到草稿文件夹为空。每次迭代都重新获取,因为文件移走时列表会重新排序,所以始终取索引0。


设置(每次会话一次)

  1. 确保Chrome标签页已打开到团队的草稿页面,例如 https://www.figma.com/files/team/{TEAM_ID}/drafts,并且你拥有其tabId。用户必须已在该Chrome配置文件中登录Figma。

  2. 收集用户的值。如果尚未知晓,询问一次:

    • FIGMA_TOKEN——具有只读文件访问权限的Figma个人访问令牌(Figma → 设置 → 安全 → 个人访问令牌 → 作用域“文件内容:只读”)。仅用于读取文件内容。
    • TEAM_ID——草稿页面URL中/team/后面的数字。

    将它们放入 scripts/helpers.js 的 CONFIG 块中(或者在粘贴前设置 window.__FIGMA_TOKEN 和 window.__TEAM_ID)。切勿将令牌写入将共享或提交的文件中。

  3. 粘贴一次辅助模块(参见 scripts/helpers.js)。它在 window 上定义了 findDraftsFolder、inspect、moveFile、loadFolders、loadDrafts。所有JS代码通过Claude in Chrome javascript_tool 在Figma标签页上运行。

  4. 找到草稿文件夹ID(草稿页面必须已加载完成):

    window.findDraftsFolder()   // → "drafts=<id>"
    

    如果返回 NOT_FOUND,重新加载草稿页面,等待,重新粘贴辅助模块并重试。

  5. 加载分类项目,以便重命名/移动操作能找到它们:

    window.loadFolders()   // 填充 window.__folders = { "<名称>": id, ... }
    

辅助模块在正常的应用内(SPA)导航后仍然存在,但项目创建页面会进行硬重新加载并清除它们。 创建新项目后,在继续之前重新粘贴辅助模块并重新运行 loadFolders()。在笔记中保留令牌、团队ID和草稿文件夹ID,以便在重新加载后恢复它们。

在没有任何分类项目的团队上首次运行

如果团队还没有任何编号项目,第一个文件将各自创建一个分类(01 - ...、02 - ...)。这是预期的。references/categories.md 包含一个适用于UI/仪表板工作的分类起始列表;请将其用作命名指南,而不是一个必须已存在的列表。

实时的分类列表是 loadFolders() 之后的 window.__folders。references/categories.md 是一个起始列表和命名指南;请阅读它以保持新分类的一致性,并找到下一个空闲编号。


步骤1–2 — 获取下一个文件并检查其内容

获取草稿列表,取索引0,然后触发内容检查:

window.loadDrafts().then(n=>{
  window.__last="CLEARED"; window.__ir="";
  const d=window.__drafts[0]; window.__cur=d; window.__cn=d?d.name:null;
  if(d){ window.inspect(d.key).then(r=>window.__ir=r).catch(e=>window.__ir="ERR:"+e); }
  return "n="+n+(d?(" first="+String(d.name).replace(/[^A-Za-z0-9 ]/g,"")+" key="+d.key):" EMPTY");
})

n=0 EMPTY 表示草稿文件夹为空——任务完成。

window.inspect 遍历每个页面的前几个框架并收集短文本字符串。触发后,等待约8秒,然后读取清洗后的单词列表(此过滤器会删除模板样板文本——请参见下面的忽略列表):

new Promise(res=>setTimeout(()=>res(
  [...new Set((window.__last.match(/[A-Za-z]{4,}/g)||[]))]
    .filter(w=>!/http|www|figma|preview|envato|MirNFT|Explore|creators|rankings|Auctions|Solid|Melt|Flare|Mare|Fusion|Soul/i.test(w))
    .slice(0,40).join(" ")
), 8000))

使用上面的JS setTimeout promise进行延迟,而不是使用单独的等待工具——这样可以将所有操作保留在浏览器标签页内。

如果结果稀疏或被样板文本主导,则升级到更深的整文档遍历(深度12)——请参见 scripts/deep_walk.js。如果内容仍然太少而无法分类,则最后才回退到文件的旧文件名。

分类时应忽略的样板文本

许多草稿是共享装饰性缩略图的购买模板。请根据主要的命名仪表板框架进行分类,而不是以下内容:

  • NFT预览缩略图(MirNFT / preview envato / Explore / Auctions / CryptoPunks / WonderPals / Azuki / Doodles / Decentraland / Sandbox 等)
  • 音乐预览缩略图、FastEat食物预览
  • 通用的医疗模板侧边栏(Message / Test / Payment / Appointment / Settings / Help / Medicine / Order / "Welcome Alexa June"),当它出现在非医疗文件中时

步骤3 — 根据内容决定名称和分类

构建名称为 <主题> - <关键特性> Dashboard,使用英文。实际运行中的示例:

  • 加密钱包 + 交易所 + 分析 → Crypto Trading Platform - Wallet & Exchange Dashboard → 分类 07 - Crypto
  • 在线课程、学生、讲师、分析 → Online Courses - Students & Performance Dashboard → 05 - LMS
  • 带消息/群组的聊天应用 → Chat App - Messages & Groups Dashboard → 36 - Chat & Messaging
  • 卡路里/训练追踪器 → Health Tracker - Calories & Training Dashboard → 14 - Medical & Health

通过将内容信号与 references/categories.md 中的编号项目列表匹配来选择分类。


步骤4 — 解析(或创建)目标项目

在 window.__folders 中查找分类名称。大多数文件夹键带有尾随的 Dashboard(例如 02 - Finance & Insurance Dashboard);少数没有(04 - UI Components、37 - Agency & Portfolio Website、47 - Pitch Deck & Presentation、48 - UX Case Study)。使用精确的键。

如果没有匹配的分类项目,则创建一个(这是预期且授权的——不要停下来询问)。内部API无法创建项目,因此使用Figma UI:

  1. 导航到 https://www.figma.com/files/team/{TEAM_ID}/all-projects。
  2. 点击 + Project(右上角)。坐标因屏幕而异——截取屏幕截图或使用 find 定位每个控件。
  3. 等待,点击名称字段,输入新的编号名称(来自 references/categories.md 的下一个空闲编号,风格与其余项目相同,例如 49 - Crowdfunding & Fundraising Dashboard)。
  4. 点击 Continue。
  5. 在步骤2“添加人员”中,点击 Create project 不要添加任何人——绝不更改共享/权限。
  6. 页面硬重新加载到新项目 → 重新粘贴辅助模块并重新运行 loadFolders()。

然后继续进行移动。


步骤5 — 一次调用完成重命名+移动

window.moveFile(window.__cur.key, "<分类文件夹密钥>", "<新名称>").then(r=>"mv="+r)

mv=S200 表示成功(同时进行了重命名和移动)。其他任何结果:重新读取cookie/CSRF,确认文件夹密钥存在于 window.__folders 中,然后重试。

循环回到步骤1。


硬性规则(这些规则保护用户——请遵守)

  • 内容才是参考,旧名称永远不是。 在命名之前始终检查内容。
  • 默认自主运行——文件之间无需权限提示。只需报告结果。
  • 英文名称,格式 <主题> - <关键特性> Dashboard。
  • 分类缺失时创建,使用序列中的下一个编号;绝不重复使用编号。
  • 绝不删除任何内容——不删除文件,不通过删除清空草稿。文件仅移动。
  • 绝不更改共享或权限——创建项目时,点击“Create project”但不添加人员。
  • 一次处理一个文件,始终重新获取并取索引0(列表会重新排序)。
  • 项目创建硬重新加载后重新粘贴辅助模块。
  • 所有Figma API调用使用Chrome JS——绝不使用bash/WebFetch(会被代理阻止)。

哪些方法无效(不要浪费时间)

  • PUT /v1/files/{key}(公共REST)→ 404。使用内部 PUT /api/files/{key}(在 moveFile 中)。
  • 公共REST没有草稿列表端点 → 使用内部 /api/folders/{id}/paginated_files(在 loadDrafts 中)。
  • 通过API创建项目 → 不支持。使用上述UI流程。
  • 单独的等待工具 → 在此处不可靠;使用JS setTimeout promise。
  • 将22字符的文件密钥作为原始字符串读取可能会被拦截为base64——辅助模块已安全返回密钥。

参考文件

  • references/categories.md — 起始编号分类列表 + 哪些键缺少 Dashboard 后缀,以及如何找到下一个空闲编号。
  • scripts/helpers.js — 每次会话粘贴一次的辅助模块(findDraftsFolder / inspect / moveFile / loadFolders / loadDrafts),包含CONFIG块和CSRF处理。
  • scripts/deep_walk.js — 深度12的整文档文本遍历,用于内容稀疏或样板文本较多的文件。

关于内部API的说明

重命名+移动和草稿列表使用Figma的内部Web API(与Figma Web应用程序调用的端点相同),而非文档化的公共REST API。它没有文档记录,并且可能随时更改。如果之前能用的调用开始失败,则端点可能已更改。请自行酌情使用此技能,并遵守Figma的条款。

相关技能