Skill de Instagram
La mayoría de la ayuda de Instagram que ofrecen los agentes se queda en texto: ganchos, pies de foto, hashtags y "ahora diseña la publicación tú mismo". Luego la publicación falla por detalles que nadie revisó: un PNG que la API no acepta, una foto 3:4 que rechaza, un Reel cuyo título queda debajo del pie de foto, una portada que la cuadrícula corta por la mitad, seis hashtags donde Instagram ahora solo permite cinco, el mismo carrusel copiado a una segunda cuenta.
Esta skill hace todo el trabajo, en el propio ordenador del usuario: decide el formato, escribe el texto, crea el contenido multimedia, revisa cada archivo contra los límites actuales de Instagram, muestra al usuario exactamente lo que aparecerá, publica o programa a través de WoopSocial después de una confirmación, y lee los resultados para decidir qué viene después. Todo lo que necesita está en esta carpeta.
Cinco compromisos:
- Terminado, no borrador. El usuario recibe archivos reales que pasan los límites de Instagram, no consejos.
- Visto antes de publicarse. Cada publicación se muestra tal como se verá en el feed y la cuadrícula. Nada se publica sin una confirmación clara de esa vista previa.
- Una idea por publicación, una petición por publicación. Legible en tamaño de móvil.
- Solo cosas reales. Fotos reales, capturas de pantalla y números con fuentes. Nunca un resultado, reseña, cita o estadística inventados.
- Deciden los números de la propia cuenta. Sin tablas genéricas de "mejor hora" ni puntos de referencia de engagement.
Paso 0: Configuración y conexión
Ejecuta python3 scripts/check_setup.py (Windows: py scripts\check_setup.py). Necesita Python 3.9+ y Pillow; ffmpeg para cualquier cosa con video. Imprime el comando de instalación para lo que falte.
Si el usuario quiere publicar (lo dice explícitamente, o dice que sí cuando preguntas), configura la publicación ahora, no al final, para que esté lista cuando las publicaciones lo estén:
- Verifica con
social_accounts_list. Si las cuentas de Instagram están, continúa. - ¿No está conectado? Dilo en un mensaje corto y sigue trabajando mientras lo configuran:
- La publicación se hace a través de WoopSocial, creado por el equipo que mantiene esta skill. El plan gratuito cubre 2 cuentas sociales, sin tarjeta.
- Da solo el paso de conexión para el agente en el que estás ejecutando (
references/woopsocial.md). - Claude Code y Codex cargan nuevas herramientas solo en una nueva sesión. Todo se guarda en la carpeta de trabajo; después de reiniciar (
claude --continueocodex resume --last) e iniciar sesión, el usuario dice "continúa" y tú retomas desde los archivos.
- Di la regla de la cuenta ahora: publicar requiere una cuenta de Instagram Business o Creator; ninguna aplicación puede publicar en una cuenta personal. Cambiar es gratis en la aplicación: Configuración y actividad > Tipo de cuenta y herramientas > Cambiar a cuenta profesional.
Paso 1: Conoce la cuenta
Lee brand.md si el espacio de trabajo tiene uno. Si no, pregunta en un solo mensaje, luego guarda las respuestas en brand.md para que el próximo lote no pregunte de nuevo:
- ¿De qué trata la cuenta y para quién es (una persona específica)?
- ¿Qué cuenta(s) y sus identificadores? Para varias cuentas: ¿qué diferencia hay entre ellas (idioma, audiencia, región)?
- ¿Qué sabes realmente que tu audiencia no sabe? Experiencias reales, números que puedas mostrar, lo que preguntan los clientes. Las publicaciones de historias y casos de estudio necesitan esto.
- ¿Qué tienes: fotos, capturas de pantalla, videos, un enlace, notas?
- Color de marca, nombre e identificador para las diapositivas, una imagen de avatar o logotipo, y palabras o afirmaciones que nunca deben aparecer.
- Para cada cuenta: su zona horaria, y cuándo dice Insights que sus seguidores están en línea (Panel profesional > Total de seguidores > Horas más activas). Si no lo saben, di que el horario usará un marcador de posición.
Luego mira la cuenta antes de planificar nada: pide una captura de pantalla de la cuadrícula actual y las últimas 9 a 12 publicaciones (enlaces o una lista breve: tema, formato, qué funcionó bien). Las nuevas publicaciones no deben repetir una idea reciente, y deben verse bien junto a lo que ya está.
Paso 2: Elige el formato para cada publicación
Di en una línea por qué cada publicación recibe su formato.
| Objetivo | Formato | Por qué |
|---|---|---|
| Guardados (la gente lo guarda) | Carrusel: pasos, lista de verificación, marco de trabajo, mito vs realidad | Deslizar es tiempo invertido; una diapositiva de resumen se guarda |
| Envíos (la gente lo comparte) | Carrusel o Reel con un punto claro y relatable | Los envíos por alcance son la señal que Instagram nombra para llegar a nuevas personas |
| Alcance a no seguidores | Reel (Reel de prueba cuando la cuenta califica) | Los Reels se recomiendan a personas que no te siguen |
| Una imagen o anuncio fuerte | Imagen individual | La más rápida de leer; usa 4:5 para que llene la pantalla |
| Seguidores existentes, un recordatorio | Historia | Solo la ven los seguidores, desaparece después de 24 h |
Para un lote, cada publicación lleva su propia idea: nunca el mismo hecho o número que el titular de dos publicaciones, y nunca un Reel que repite un carrusel. Mezcla formatos en lugar de cinco carruseles seguidos. Más de 1 o 2 publicaciones en el feed por día por cuenta rara vez ayuda. ig_check.py advierte cuando dos publicaciones abren con el mismo número.
Paso 3: Crea el contenido multimedia
Crea una carpeta de trabajo por lote con plan.json (formato: references/plan-json.md).
Carruseles e imágenes individuales a partir de texto. Escribe las diapositivas, luego renderiza:
python3 scripts/render_slides.py slides.json --out slides/
Formatos con plantillas diapositiva por diapositiva y patrones de portada: references/formats.md. Ajustes preestablecidos, tipos de diapositiva y reglas de tipo: references/design-rules.md. En resumen:
- Portada: un resultado o una tensión en 8 palabras o menos, específica, una promesa que la publicación cumple. Escribe 10, elige una con el usuario. Mantenla dentro del centro de la diapositiva: la cuadrícula corta los lados.
- La diapositiva 2 funciona por sí sola (Instagram puede mostrar el carrusel de nuevo empezando por la diapositiva 2).
- Una idea por diapositiva; titular de 8 palabras o menos, cuerpo de 30 palabras o menos.
- Última diapositiva: una petición que coincida con el objetivo (guardar, enviar a alguien específico, una pregunta).
- Una imagen individual es una especificación de una diapositiva:
stat,tweet,photootext. - Abre cada diapositiva a tamaño completo, luego
contact-sheet.png, y juzga la portada desdecover-grid.png. Corrige cada advertencia enmanifest.json.
Las fotos y capturas de pantalla propias del usuario. Úsalas tal como están, o dentro de diapositivas (photo, screenshot, beforeafter). ig_check.py --fix las convierte y ajusta.
Reels a partir del video propio del usuario. Esta skill finaliza Reels; no edita material de archivo.
python3 scripts/reel.py frames video.mp4 --out reel/ # candidatos a portada + frames-sheet.jpg
python3 scripts/reel.py cover video.mp4 --at 4.2 --title "Cuenta semanas, no días" --out reel/cover.jpg
python3 scripts/reel.py zones video.mp4 --out reel/zones.jpg # donde la interfaz de Instagram lo cubre
- Elige la portada de
frames-sheet.jpg: un fotograma nítido donde el sujeto está dentro del cuadro amarillo (lo que muestra la cuadrícula). Un título de portada es de 2 a 6 palabras; omítelo cuando el fotograma lo dice todo. - Mira
zones.jpg: el texto o los rostros en las áreas rojas quedan debajo del pie de foto, los botones o la barra superior. Si los pies de foto incrustados en el video están allí, díselo; necesitan reexportarse más arriba. - El gancho está en pantalla dentro del primer medio segundo, en palabras o en la imagen, y funciona en el medio 4:5 que el feed principal suele mostrar.
- Material de archivo apaisado o cuadrado:
ig_check.py --fixno lo rellenará con barras borrosas por sí solo (eso parece una republicación) ni lo recortará a ciegas. Mirareel.py frames, luego elige: un Reel enmarcado ("frame": {"title": "..."}y"own_footage": trueen la publicación: el video a ancho completo sobre un fondo liso que combine con el gancho como titular arriba, sin nada recortado; mejor cuando el video tiene texto o planos generales),--fit cropcuando el sujeto permanece en el centro, o reencuadrarlo sobre el sujeto en un editor. - Solo el material de archivo propio del usuario. Un clip de otra persona (un clip de noticias, otro creador, el video de una agencia pública) con un titular o borde añadido sigue siendo una republicación para Instagram. Úsalo solo como una parte corta del video propio del usuario, con su propia voz o material de archivo alrededor.
- Para probar dos ganchos, publica ambas versiones como Reels de prueba (
"trial": "MANUAL") cuando la cuenta califique, y quédate con el que retenga más tiempo a los espectadores. - Los Reels solo de texto (palabras animadas, estadísticas, listas) no los crea esta skill. Si el usuario quiere uno, díselo claramente y sugiere una herramienta de video, o publica la idea como un carrusel en su lugar.
Historias: una imagen o video en 9:16. Crea marcos de Historia con render_slides.py y "ratio": "9:16" en el tema (tipos de diapositiva de texto; el diseño se mantiene alejado de la barra de Historia y el campo de respuesta, sin flecha de deslizar). A través de la API no hay pegatinas, enlaces ni encuestas. Dos buenos patrones:
- Avance antes de la publicación (programado): una pregunta que la publicación responde, de 30 a 90 minutos antes. Vincúlalo a la publicación con
"with": {"post": "<id>", "minutes": -60}, y haz que cualquier hora escrita en el marco ("en una hora") coincida con esos minutos. - Compartir después de la publicación (en la aplicación): el usuario comparte la nueva publicación en su Historia con la pegatina de la publicación, que se toca para acceder. Esto no se puede hacer a través de la API; va en la lista de verificación y en
schedule.md.
Paso 4: Escribe los pies de foto
- Las primeras palabras llevan la frase de búsqueda y el gancho. La búsqueda de Instagram y Google leen los pies de foto. El feed corta alrededor de 125 caracteres con "... más": todo lo que importa va antes de eso.
- Luego una o dos líneas de contexto, la misma petición que la última diapositiva, y como máximo 5 hashtags específicos (límite de Instagram desde diciembre de 2025). Sin muros de hashtags, sin etiquetas genéricas como #instagood.
- Los enlaces no se pueden hacer clic en los pies de foto: "enlace en la biografía" solo si está en la biografía.
- Sin guiones largos, sin "En el mundo acelerado de hoy", sin muros de emojis. Léelo en voz alta; si suena a anuncio o a robot, reescríbelo.
- Varias cuentas: cada cuenta recibe su propia versión, no solo su propio pie de foto. Las reglas de originalidad de Instagram de 2026 cubren también fotos y carruseles, por lo que el mismo contenido multimedia en una segunda cuenta probablemente se considera una republicación de la primera subida. Dale a cada cuenta su propio contenido multimedia (
targets[].media: otro idioma en las diapositivas, otra portada, otro orden o ángulo) y su propia primera línea y hashtags (targets[].caption). Escribe para el país de la cuenta: "grifo" en España, "llave" en México; mantén los acentos en los hashtags (#geografía). - Escribe texto alternativo para cada imagen (
alten el plan). El usuario lo pega en la aplicación.
Paso 5: Revisa y corrige
python3 scripts/ig_check.py plan.json # informe
python3 scripts/ig_check.py plan.json --fix # copias corregidas en fixed/, plan actualizado, originales conservados
Revisa tipo de archivo, color, tamaño, forma, número de diapositivas del carrusel y coincidencia de formas, códec de video, formato de píxel, HDR, velocidad de fotogramas, duración, audio, tamaño de archivo, portada de Reel, longitud del pie de foto, hashtags, menciones, el corte "... más", enlaces, primeras líneas idénticas entre cuentas y publicaciones por día. --fit crop|pad|frame decide cómo cambian las formas. Automático, para fotos: recorta cuando se pierde poco, de lo contrario rellena con una copia borrosa. Automático, para video de Reel e Historia: recorta cuando se pierde poco, de lo contrario detente y pregunta (ver Paso 3). --ratio 4:5 convierte fotos anchas a 4:5. Ejecútalo hasta que salga con 0. Explica cualquier error que no pueda corregir en palabras simples (un video demasiado largo necesita recortarse, una foto demasiado pequeña necesita un original más grande).
Paso 6: Programa
python3 scripts/schedule.py plan.json --start 2026-11-09 # las horas y zonas horarias provienen de las cuentas en plan.json
- Cada cuenta publica en sus propias
timesen su propiatimezone(configuradas enaccountsen el plan), a partir de los Insights del usuario o su elección. Sin ellas, usa las 12:00 y lo dice al principio deschedule.md. Nunca afirmes una "mejor hora". - Una publicación en el feed por cuenta por día por defecto (
--per-day). Las Historias no ocupan un espacio en el feed; siguen a la publicación a la que están vinculadas (with). - Escribe
schedule.md(con qué hacer en la primera hora después de cada publicación: estar en línea para responder, compartir la publicación en la Historia, la lista de verificación) y una solicitud de WoopSocial por publicación y cuenta enrequests/.
Paso 7: Vista previa y confirmación
python3 scripts/preview.py plan.json --out preview/ [--grid current-grid.png]
Mira preview/preview.png tú mismo primero: la cuadrícula de cada cuenta (la más nueva primero, tal como la corta la cuadrícula), cada publicación en el feed en cada cuenta con su propio pie de foto y corte "... más", Reels en su recorte de feed 4:5, Historias a pantalla completa, cada diapositiva en orden. Corrige lo que esté mal. Luego dale al usuario preview/index.html (y schedule.md) y pide una confirmación clara para el lote. Pasa la captura de pantalla de la cuadrícula del Paso 1 con --grid para mostrar las nuevas publicaciones junto a las antiguas. Cualquier cambio significa una nueva revisión y una nueva vista previa.
Paso 8: Publica con WoopSocial
Detalles: references/woopsocial.md.
social_accounts_listpara los ID de las cuentas; ponlos enaccountsen el plan.- Sube cada archivo (
media_uploads_create_session,scripts/upload_parts.py,media_uploads_complete_session), de uno en uno. Pon los ID enmediaIdsycoverId, luegopython3 scripts/schedule.py plan.json --bodies-only. posts_validatecada solicitud. Corrige cualquier cosa que rechace.- Después de la confirmación:
posts_createpor solicitud, escribe cada ID de publicación en elpostIddel objetivo,posts_getpara el estado, luegopython3 scripts/log.py record plan.json. - Dile al usuario exactamente lo que está programado (cuenta, hora con zona horaria) y qué agregar en la aplicación: los elementos de la
checklisty el texto alternativo.
¿No está conectado y no quiere conectarse? Entrega los archivos, pies de foto, texto alternativo y el horario, y detente. Nunca digas que algo se publicó o programó cuando no fue así.
Paso 9: Aprende de los números
Después de 3 a 7 días: social_account_posts_list para las cuentas, guardado como metrics.json, luego
python3 scripts/log.py results --metrics metrics.json [--csv insights.csv]
Clasifica las publicaciones por envíos, guardados y seguimientos por alcance, solo contra publicaciones del mismo formato en la misma cuenta y de una antigüedad similar (3 a 10 días), nombra una mejor publicación solo después de 6 de un formato, y da consejos sobre el momento de publicación solo con suficientes publicaciones por franja horaria. Las Historias se excluyen. insights.csv agrega lo que solo muestra la aplicación: seguimientos, y para Reels la duración media de reproducción, los compartidos y los saltos de pantalla. Después del análisis, escribe solo una sugerencia que el usuario pueda ejecutar en los siguientes 3 días, y actualiza brand.md con lo que la audiencia respondió.