Figma Drafts Organizer (Autónomo, API Interna)
Esta habilidad captura una forma probada y fiable de vaciar la carpeta de Borradores de un equipo de Figma, clasificando cada archivo y archivándolo en el proyecto de categoría numerado correcto. Lo hace todo a través de la API interna de Figma mediante la herramienta javascript_tool de Claude in Chrome — sin hacer clic en tarjetas de archivo, sin usar el diálogo de Mover, ni manipular el campo de renombrar. Ese enfoque basado en el ratón era lento y frágil; la API interna realiza la mudanza y el renombrado en una sola solicitud y nunca se queda atascada.
La idea central que garantiza buenos resultados: el contenido del archivo es la fuente de verdad, nunca su nombre antiguo. Los nombres de borradores viejos suelen ser incorrectos, genéricos o copiados. Por lo tanto, para cada archivo, leemos el texto real dentro de sus frames, decidimos un nombre y una categoría a partir de eso, y luego renombramos y movemos.
Modo de operación
El valor predeterminado es completamente autónomo: trabajar en la carpeta de Borradores un archivo a la vez, en orden, renombrando y moviendo cada archivo inmediatamente sin pausar para obtener aprobación entre archivos. Reporta un resultado breve por archivo. Solo detente para preguntar al usuario si algo es genuinamente ambiguo de una manera que no puedas resolver a partir del contenido (raro) o si una llamada API falla repetidamente.
Si el usuario solicita explícitamente una pasada de vista previa/aprobación, muestra una tabla comparativa (nombre actual → nombre sugerido + categoría) y espera, pero esa es la excepción, no la regla.
Los cinco pasos (por archivo — reutilízalos, no inventes otros nuevos)
Para cada archivo borrador, haz exactamente estas cinco cosas, en este orden:
- Captura la clave del archivo — de la lista de borradores (índice 0 de la lista recuperada de nuevo).
- Inspecciona el contenido real — lee el texto real en los frames a través de la API REST. NO confíes en el nombre antiguo.
- Determina un nuevo nombre + una categoría — ambos derivados del contenido.
Patrón de nombre:
<Asunto> - <Características clave> Dashboard(en inglés, independientemente del idioma del diseño). - Resuelve el proyecto de destino — encuentra el proyecto de categoría numerado correspondiente; si no existe, créalo (siguiente número en la secuencia).
- Renombra + mueve — una sola llamada
PUTa la API interna que hace ambas cosas. Espera HTTP 200.
Luego vuelve a obtener la lista de borradores y repite desde el paso 1 hasta que la carpeta de Borradores esté vacía. Vuelve a obtener la lista en cada iteración porque la lista se reordena a medida que los archivos salen, así que siempre toma el índice 0.
Configuración (una vez por sesión)
-
Asegúrate de que una pestaña de Chrome esté abierta en la página de Borradores del equipo, p. ej.
https://www.figma.com/files/team/{TEAM_ID}/drafts, y tengas sutabId. El usuario debe haber iniciado sesión en Figma en ese perfil de Chrome. -
Recopila los valores del usuario. Pregunta una vez si aún no se conocen:
FIGMA_TOKEN— un token de acceso personal de Figma con acceso de solo lectura al contenido del archivo (Figma → Configuración → Seguridad → Tokens de acceso personal → alcance "File content: Read only"). Se usa solo para leer el contenido del archivo.TEAM_ID— el número después de/team/en la URL de la página de Borradores.
Ponlos en el bloque
CONFIGdescripts/helpers.js(o establecewindow.__FIGMA_TOKENywindow.__TEAM_IDantes de pegar). Nunca escribas el token en un archivo que se vaya a compartir o a confirmar en un repositorio. -
Pega el bloque auxiliar una vez (ver
scripts/helpers.js). DefinefindDraftsFolder,inspect,moveFile,loadFolders,loadDraftsenwindow. Ejecuta todo el JS a través de la herramientajavascript_toolde Claude in Chrome en la pestaña de Figma. -
Encuentra el id de la carpeta de Borradores (la página de Borradores debe haber terminado de cargar):
window.findDraftsFolder() // → "drafts=<id>"Si devuelve
NOT_FOUND, recarga la página de Borradores, espera, vuelve a pegar los ayudantes e inténtalo de nuevo. -
Carga los proyectos de categoría para que los cambios de nombre/movimientos puedan encontrarlos:
window.loadFolders() // llena window.__folders = { "<nombre>": id, ... }
Los ayudantes sobreviven a la navegación normal dentro de la aplicación (SPA), pero una página de creación de proyecto hace una recarga completa y los BORRA. Después de crear un nuevo proyecto, vuelve a pegar el bloque auxiliar y vuelve a ejecutar
loadFolders()antes de continuar. Guarda el token, el id del equipo y el id de la carpeta de borradores en tus notas para poder restaurarlos después de la recarga.
Primera ejecución en un equipo sin proyectos de categoría
Si el equipo aún no tiene proyectos numerados, los primeros archivos crearán cada uno una categoría (01 - ..., 02 - ...). Esto es esperado. references/categories.md contiene una lista inicial de categorías que funciona bien para trabajos de UI/dashboard; úsala como guía de nombres, no como una lista que ya debe existir.
La lista de categorías en vivo es window.__folders después de loadFolders().
references/categories.md es una lista inicial y una guía de nombres; léela para mantener las nuevas categorías consistentes y para encontrar el siguiente número libre.
Paso 1–2 — Toma el siguiente archivo e inspecciona su contenido
Obtén la lista de borradores, toma el índice 0 y dispara la inspección de contenido:
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 significa que la carpeta de Borradores está vacía — has terminado.
window.inspect recorre los primeros frames de cada página y recoge cadenas de texto cortas. Después de dispararlo, espera ~8 segundos, luego lee la lista de palabras limpiada (este filtro elimina el texto repetitivo de plantillas — ver la lista de ignorados a continuación):
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))
Usa la promesa setTimeout de JS anterior para la demora en lugar de una herramienta de espera separada — mantiene todo dentro de la pestaña del navegador.
Si el resultado es escaso o está dominado por texto repetitivo, escala a una recorrida más profunda del documento completo (profundidad 12) — ver scripts/deep_walk.js. Si el contenido sigue siendo demasiado escaso para clasificar, recurre al nombre antiguo del archivo como último recurso.
Texto repetitivo que IGNORAR al clasificar
Muchos borradores son plantillas compradas que comparten miniaturas decorativas. Clasifica por el marco principal del dashboard nombrado, no por estos:
- Miniaturas de vista previa de NFT (MirNFT / preview envato / Explore / Auctions / CryptoPunks / WonderPals / Azuki / Doodles / Decentraland / Sandbox / etc.)
- Miniaturas de vista previa de música, vistas previas de comida FastEat
- La barra lateral genérica de plantillas médicas (Message / Test / Payment / Appointment / Settings / Help / Medicine / Order / "Welcome Alexa June") cuando aparece dentro de un archivo no médico
Paso 3 — Decide el nombre + la categoría a partir del contenido
Construye el nombre como <Asunto> - <Características clave> Dashboard, en inglés. Ejemplos de ejecuciones reales:
- Crypto wallet + exchange + analytics →
Crypto Trading Platform - Wallet & Exchange Dashboard→ categoría07 - Crypto - Online courses, students, lecturer, analytics →
Online Courses - Students & Performance Dashboard→05 - LMS - Chat app with messages/groups →
Chat App - Messages & Groups Dashboard→36 - Chat & Messaging - Calorie/training tracker →
Health Tracker - Calories & Training Dashboard→14 - Medical & Health
Elige la categoría haciendo coincidir las señales de contenido con la lista de proyectos numerados en references/categories.md.
Paso 4 — Resuelve (o crea) el proyecto de destino
Busca el nombre de la categoría en window.__folders. La mayoría de las claves de carpeta llevan un Dashboard al final (p. ej. 02 - Finance & Insurance Dashboard); algunas no (04 - UI Components, 37 - Agency & Portfolio Website,
47 - Pitch Deck & Presentation, 48 - UX Case Study). Usa la clave exacta.
Si no existe ningún proyecto de categoría que coincida, crea uno (esto es esperado y está autorizado — no te detengas a preguntar). La API interna no puede crear proyectos, así que usa la interfaz de usuario de Figma:
- Navega a
https://www.figma.com/files/team/{TEAM_ID}/all-projects. - Haz clic en + Project (arriba a la derecha). Las coordenadas varían según la pantalla — toma una captura de pantalla o usa
findpara localizar cada control. - Espera, haz clic en el campo Nombre, escribe el nuevo nombre numerado
(siguiente número libre de
references/categories.md, mismo estilo que el resto, p. ej.49 - Crowdfunding & Fundraising Dashboard). - Haz clic en Continue.
- En el Paso 2 "Add people", haz clic en Create project SIN añadir a nadie — nunca cambies la compartición/los permisos.
- La página se recarga por completo en el nuevo proyecto → vuelve a pegar los ayudantes y vuelve a ejecutar
loadFolders().
Luego procede con la mudanza.
Paso 5 — Renombra + mueve en una sola llamada
window.moveFile(window.__cur.key, "<CLAVE DE LA CARPETA DE CATEGORÍA>", "<NUEVO NOMBRE>").then(r=>"mv="+r)
mv=S200 significa éxito (renombrado y movido juntos). Cualquier otra cosa: vuelve a leer la cookie/CSRF, confirma que la clave de la carpeta existe en window.__folders y reintenta.
Vuelve al Paso 1.
Reglas estrictas (protegen al usuario — síguelas)
- El contenido es la referencia, nunca el nombre antiguo. Inspecciona siempre antes de nombrar.
- Autónomo por defecto — sin solicitudes de permiso entre archivos. Simplemente reporta los resultados.
- Nombres en inglés, patrón
<Asunto> - <Características clave> Dashboard. - Crea una categoría cuando falte, usando el siguiente número en la secuencia; nunca reutilices un número.
- Nunca elimines nada — no tires archivos a la papelera, no vacíes borradores eliminando. Los archivos solo se mueven.
- Nunca cambies la compartición o los permisos — al crear un proyecto, haz clic en "Create project" sin añadir personas.
- Un archivo a la vez, siempre vuelve a obtener y toma el índice 0 (la lista se reordena).
- Vuelve a pegar los ayudantes después de cualquier recarga completa por creación de proyecto.
- Usa Chrome JS para todas las llamadas a la API de Figma — nunca bash/WebFetch (bloqueado por proxy).
Lo que NO funciona (no pierdas el tiempo)
PUT /v1/files/{key}(REST pública) → 404. Usa la internaPUT /api/files/{key}(enmoveFile).- La REST pública no tiene un endpoint para listar borradores → usa el interno
/api/folders/{id}/paginated_files(enloadDrafts). - Crear proyectos mediante API → no soportado. Usa el flujo de la interfaz de usuario anterior.
- Herramientas de espera separadas → poco fiables aquí; usa una promesa
setTimeoutde JS. - Leer una clave de archivo de 22 caracteres como una sola cadena sin procesar puede ser bloqueado como base64 — los ayudantes ya devuelven las claves de forma segura.
Archivos de referencia
references/categories.md— una lista de categorías numeradas inicial + qué claves carecen del sufijoDashboard, y cómo encontrar el siguiente número libre.scripts/helpers.js— el bloque auxiliar para pegar una vez por sesión (findDraftsFolder / inspect / moveFile / loadFolders / loadDrafts), con el bloque CONFIG y el manejo de CSRF.scripts/deep_walk.js— recorrido de texto completo de profundidad 12 para archivos con contenido escaso o repetitivo.
Nota sobre la API interna
El renombrado + mudanza y el listado de borradores utilizan la API web interna de Figma (los mismos endpoints que la aplicación web de Figma llama), no la API REST pública documentada. No está documentada y puede cambiar sin previo aviso. Si una llamada que solía funcionar comienza a fallar, es probable que el endpoint haya cambiado. Usa esta habilidad bajo tu propia discreción y de acuerdo con los términos de Figma.