Skip to main content
📝 AI Automation

Claude Code + Blotato: Automaticé mi flujo de contenido

Automatiza la reutilización de contenido con Claude Code y Blotato. Convierte un video en 9 publicaciones específicas por plataforma en LinkedIn, Instagram y X automáticamente.

30 min

Tiempo de lectura

5,916

Palabras

Mar 17, 2026

Publicado

Engr Mejba Ahmed

Escrito por

Engr Mejba Ahmed

Compartir Artículo

Claude Code + Blotato: Automaticé mi flujo de contenido

Claude Code + Blotato: Cómo automaticé todo mi flujo de contenido

El jueves pasado, subí un video de 22 minutos a YouTube sobre cómo construir equipos de agentes de IA. En 40 minutos, tenía nueve piezas de contenido específico para cada plataforma en una carpeta de borradores en mi máquina: tres publicaciones de LinkedIn con formato profesional, tres guiones de carrusel para Instagram con desgloses diapositiva por diapositiva, y tres publicaciones para X con citas visuales impactantes. Todo personalizado. Todo alineado con mi marca. Todo esperando que yo lo revisara y le diera a publicar.

No escribí ninguna de ellas manualmente.

El sistema que las produjo es un proyecto de Claude Code con cuatro scripts de Python, una integración con la API de Blotato y un concepto al que sigo volviendo: las skills. No del tipo vago de "la IA puede hacer cosas". Del tipo específico, documentado y repetible, donde cada automatización tiene un nombre, un conjunto de ingredientes, una secuencia de pasos y un formato de salida esperado.

Construir esto me llevó unos tres fines de semana de iteración. La primera versión estaba vergonzosamente rota. Claude Code seguía intentando obtener páginas de YouTube directamente y chocaba contra muros de detección de bots. La generación de imágenes producía PNGs demasiado grandes que la API de Blotato rechazaba. Mis recursos de marca no se cargaban porque había hardcodeado rutas que solo existían en mi máquina de trabajo.

Pero cada fallo le enseñó algo al sistema, y esa es la parte que nadie explica sobre trabajar con Claude Code para automatización. La IA no solo ejecuta tus instrucciones. Observa qué se rompe, propone soluciones y actualiza sus propios documentos de skills para que el mismo error no se repita.

Quiero guiarte exactamente por cómo funciona este flujo, porque el multiplicador de contenido 9x que crea ha cambiado genuinamente mi forma de pensar sobre la publicación. Pero primero, necesitas entender por qué abandoné otras tres herramientas antes de llegar a este enfoque.

Por qué las herramientas de reutilización seguían fallándome

Probé Repurpose.io, hacer prompts manualmente con ChatGPT, y una herramienta llamada ContentFries que prometía "un video, contenido ilimitado". Todas tenían el mismo problema: trataban a todas las plataformas igual.

La publicación de LinkedIn sonaba como un tweet con párrafos extra. Las publicaciones de X eran versiones truncadas de lo que la herramienta generaba primero. Sin inteligencia de plataforma — sin comprender que las audiencias de LinkedIn quieren marcos profesionales mientras que las audiencias de X quieren una opinión contundente que puedan retuitear.

La consistencia de marca fue el segundo fallo. Mi foto de perfil, insignia de verificación, paleta de colores — ninguna de estas herramientas me dejaba inyectar recursos de marca. Cada resultado se veía genérico. Pasaba 20 minutos por publicación ajustando manualmente el tono y reformateando. Veinte minutos por nueve publicaciones por cuatro videos al mes. Doce horas de trabajo mecánico en contenido que ya había creado una vez.

El tercer problema me impulsó a construir mi propio sistema: el flujo de aprobación. O más bien, su ausencia. Estas herramientas querían autopublicar directamente en mis cuentas sin paso de revisión. Ya me habían quemado antes — una herramienta de programación publicó una vez un borrador con "INSERTAR ESTADÍSTICA RELEVANTE AQUÍ" a 14,000 seguidores de LinkedIn. Los comentarios fueron... educativos.

Necesitaba tres cosas: inteligencia de contenido específica por plataforma, integración de recursos de marca y revisión humana obligatoria. Claude Code y Blotato me dieron las tres.

Qué hace que una "Skill" sea diferente de un prompt

Si has seguido mis escritos sobre flujos de trabajo de agentes Claude Code, sabes que pienso en las skills como la unidad fundamental de la automatización con IA. Pero este proyecto me obligó a ser mucho más preciso sobre lo que eso realmente significa.

Un prompt es una instrucción de un solo uso. "Escríbeme una publicación de LinkedIn sobre este video". Lo escribes, la IA responde, y la interacción termina. Si el resultado está mal, revisas el prompt e intentas de nuevo. El conocimiento sobre qué funciona vive en tu cabeza.

Una skill es una receta documentada. Tiene cuatro componentes:

Nombre: Un identificador claro. Las mías se llaman cosas como youtube-to-linkedin, youtube-to-instagram-carousel, youtube-to-x-quote.

Ingredientes: Las entradas que la skill necesita antes de poder ejecutarse. Para youtube-to-linkedin, los ingredientes son: transcripción del video (texto plano), título del video, URL del video, descriptor de audiencia objetivo y ruta del directorio de recursos de marca.

Pasos: La secuencia ordenada de operaciones. No instrucciones vagas — pasos específicos y comprobables. "Extraer las tres declaraciones más citables de la transcripción" es un paso. "Hazlo sonar profesional" no lo es.

Resultado esperado: El formato y la estructura exacta de lo que sale. Para la skill de LinkedIn, el resultado esperado es un archivo markdown con una línea gancho (menos de 200 caracteres), una sección de cuerpo (150-300 palabras), tres hashtags y un CTA con enlace al video completo.

La diferencia importa porque las skills son iterables. Cuando el resultado de LinkedIn es demasiado largo, no vuelvo a hacer el prompt desde cero. Ajusto el paso 4 del documento de la skill — "Comprimir la sección del cuerpo a menos de 250 palabras preservando todas las referencias a marcos" — y cada ejecución futura refleja ese cambio.

Esto es lo que quiero decir cuando digo que la IA se autocorrige. El documento de skill es un artefacto vivo. Claude Code lo lee antes de cada ejecución, sigue sus pasos, y cuando algo se rompe — una obtención web es bloqueada, una imagen excede el límite de tamaño de Blotato — actualizo el documento de la skill con la corrección. La siguiente ejecución funciona correctamente. El sistema se vuelve más inteligente cada vez que falla.

Mi proyecto actualmente tiene siete documentos de skills. Tres para generación de contenido (uno por plataforma), dos para creación de imágenes (infografía de LinkedIn y visual de cita para X), uno para extracción de transcripción y uno para el flujo de aprobación. Cada uno comenzó en bruto y mejoró con el uso real.

Ese ciclo iterativo — ejecutar, fallar, corregir la skill, ejecutar de nuevo — es el verdadero secreto para hacer que la automatización con IA sea fiable. No mejores prompts. Mejores procesos documentados.

Ahora déjame mostrarte la estructura del proyecto que mantiene todo esto unido.

La estructura del proyecto que hace que todo funcione

Ejecuto todo este sistema desde un solo proyecto en VS Code. Así se ve el directorio:

content-repurposer/
  claude.md
  scripts/
    extract_transcript.py
    generate_content.py
    create_visuals.py
    submit_to_blotato.py
  skills/
    youtube-to-linkedin.md
    youtube-to-instagram-carousel.md
    youtube-to-x-quote.md
    linkedin-infographic.md
    x-quote-visual.md
    transcript-extraction.md
    approval-workflow.md
  drafts/
    linkedin/
    instagram/
    x/
  brand-assets/
    profile-pic-square.png
    profile-pic-round.png
    verified-badge.png
    color-palette.json
    fonts/
  approved/
    linkedin/
    instagram/
    x/
  .env

Algunas cosas a notar.

El archivo claude.md en la raíz es el prompt del sistema para Claude Code. Este es el cerebro de la operación — le dice a Claude Code qué hace este proyecto, qué skills están disponibles y qué restricciones seguir. Mantengo el mío en menos de 150 líneas. Esa es una regla estricta que aprendí a través de experimentación dolorosa. Pasa de 150 líneas y Claude Code empieza a perder contexto sobre las instrucciones menos enfatizadas. El modelo tiene capacidad de sobra, pero la relación señal-ruido en tu prompt del sistema importa enormemente.

Aquí tienes una versión simplificada de mi claude.md:

# Content Repurposer

## Purpose
Transform YouTube video content into platform-specific
social media posts for LinkedIn, Instagram, and X.

## Available Skills
- transcript-extraction: Get plain text from YouTube videos
- youtube-to-linkedin: Professional long-form posts
- youtube-to-instagram-carousel: Educational carousel scripts
- youtube-to-x-quote: Casual quote-style posts

## Constraints
- NEVER auto-publish. All content goes to drafts/ first.
- ALWAYS use brand assets from brand-assets/ directory.
- Image files must be under 4MB for Blotato API.
- LinkedIn posts: 150-300 words, professional tone.
- Instagram carousels: 5-8 slides, educational tone.
- X posts: Under 280 characters, casual tone.

## API Configuration
- Anthropic API via .env (ANTHROPIC_API_KEY)
- Blotato API via .env (BLOTATO_API_KEY)
- OpenRouter as fallback (OPENROUTER_API_KEY)

El directorio scripts/ contiene cuatro archivos Python. Cada uno maneja una fase específica del flujo. Uso Python porque Claude Code genera Python fiable más rápido que cualquier otro lenguaje en mis pruebas, y el ecosistema de bibliotecas para llamadas API y manipulación de imágenes no tiene rival.

Los directorios drafts/ y approved/ son las dos etapas del flujo de aprobación. El contenido comienza en drafts/. Yo lo reviso. El contenido aprobado se mueve a approved/. Solo el contenido en approved/ se envía a Blotato para su programación.

El directorio brand-assets/ es sorprendentemente importante. Sin él, cada visual generado se ve genérico. Con él, Claude Code puede superponer mi foto de perfil, aplicar mi paleta de colores e incluir elementos de marca que hacen que las publicaciones sociales parezcan hechas por un diseñador humano — no por un script.

Esa integración de recursos de marca fue una de las cosas más difíciles de lograr. Déjame mostrarte por qué, y cómo la IA finalmente resolvió su propio problema.

Configurando la capa de API: Anthropic y Blotato

Antes de que se genere cualquier contenido, dos APIs necesitan estar conectadas. La API de Anthropic Claude maneja toda la inteligencia — analizar transcripciones, generar texto específico por plataforma, tomar decisiones creativas sobre ganchos y formato. Blotato maneja la distribución — programar publicaciones, gestionar conexiones de plataformas y manejar la complejidad de OAuth para publicar en LinkedIn, Instagram y X.

Aquí está mi configuración .env:

ANTHROPIC_API_KEY=sk-ant-api03-xxxxx
BLOTATO_API_KEY=bl_xxxxx
OPENROUTER_API_KEY=sk-or-xxxxx
BLOTATO_WORKSPACE_ID=ws_xxxxx
DEFAULT_SCHEDULE_OFFSET_HOURS=24

La clave de OpenRouter es un respaldo. Cuando estoy iterando rápido y quemando créditos de la API de Anthropic durante el desarrollo, enruto algunas de las llamadas menos críticas — como ajustes de formato o generación de hashtags — a través del acceso de OpenRouter a Claude 3.5 Sonnet, que es más barato por token. El trabajo pesado — análisis de transcripciones, generación de contenido, ajuste de tono — siempre pasa por la API de Anthropic directamente por calidad.

Configurar Blotato fue sencillo pero requirió una secuencia específica. Creas un workspace, conectas tus cuentas sociales a través del flujo OAuth de Blotato (esto sucede en su panel web, no a través de la API), y luego obtienes tu ID de workspace y clave API. La clave API tiene alcance a ese workspace, así que todas tus cuentas conectadas son accesibles a través de una sola clave.

Aquí está la función Python que uso para verificar la conexión:

import requests
import os
from dotenv import load_dotenv

load_dotenv()

def verify_blotato_connection():
    """Check that Blotato API is reachable and workspace is valid."""
    headers = {
        "Authorization": f"Bearer {os.getenv('BLOTATO_API_KEY')}",
        "Content-Type": "application/json"
    }
    response = requests.get(
        f"https://api.blotato.com/v1/workspaces/{os.getenv('BLOTATO_WORKSPACE_ID')}",
        headers=headers
    )
    if response.status_code == 200:
        data = response.json()
        print(f"Connected: {data['name']}")
        print(f"Accounts: {len(data['accounts'])} linked")
        return True
    else:
        print(f"Connection failed: {response.status_code}")
        return False

Algo que aprendí: el endpoint de subida de imágenes de Blotato tiene un límite de 4MB por archivo. Mis primeros intentos de generación visual produjeron PNGs de 6-8MB porque renderizaba a alta resolución sin compresión. Claude Code detectó esto durante las pruebas — la API devolvió un error 413 — y automáticamente actualizó la skill linkedin-infographic.md para incluir un paso de compresión de imagen: "Después de generar el visual, comprimir a JPEG al 85% de calidad. Verificar que el tamaño del archivo sea menor a 4MB antes del envío."

Ese es el ciclo de mejora iterativa en acción. El documento de la skill ahora lleva la corrección de forma permanente.

Si prefieres que alguien construya este tipo de configuración de automatización desde cero, acepto encargos personalizados de flujos de trabajo con IA. Puedes ver lo que he construido en fiverr.com/s/EgxYmWD.

Pero la capa de API es solo fontanería. La verdadera magia — la parte que hace que el contenido sea realmente bueno — sucede en las skills de generación específicas por plataforma.

Generación de contenido específico por plataforma: tres audiencias, tres estrategias

Aquí es donde la mayoría de la reutilización de contenido fracasa. La gente toma un contenido y lo reformatea ligeramente para cada plataforma. Eso no es reutilizar. Es copiar y pegar con diferentes límites de caracteres.

La verdadera reutilización significa reimaginar las mismas ideas centrales para audiencias y contextos de consumo fundamentalmente diferentes. Así funciona cada skill de plataforma.

¿Cómo genera la skill de LinkedIn publicaciones profesionales?

Las audiencias de LinkedIn navegan durante horas laborales. Buscan conocimientos profesionales, marcos que puedan aplicar a sus trabajos y contenido que los haga parecer reflexivos si lo comparten. El modo de consumo es deliberado — las personas leen las publicaciones de LinkedIn con más cuidado que los tweets.

Mi skill youtube-to-linkedin.md sigue esta estructura:

Paso 1: Extraer las tres ideas más relevantes para la industria de la transcripción. Ignorar anécdotas personales, chistes y relleno. Enfocarse en marcos, datos y hallazgos contraintuitivos.

Paso 2: Escribir una línea gancho de menos de 200 caracteres que desafíe una suposición común o prometa un resultado específico. Nunca empezar con "Acabo de publicar un nuevo video" — a nadie le importa tu calendario de publicación.

Paso 3: Estructurar el cuerpo como un mini-marco. El algoritmo de LinkedIn recompensa las publicaciones que se sienten estructuradas — listas numeradas, encabezados en negrita y conclusiones claras obtienen más interacción que los párrafos narrativos.

Paso 4: Terminar con una pregunta que invite comentarios. No "¿Qué opinas?" — eso es perezoso. Algo específico: "¿Cuál es la cosa más contraintuitiva que has aprendido sobre [tema] en producción?"

Paso 5: Agregar tres hashtags. Dos amplios (#AIEngineering, #SoftwareDevelopment), uno específico (#ClaudeCode). Nunca más de tres — LinkedIn penaliza el exceso de hashtags.

Paso 6: Generar un visual estilo infografía usando la skill visual linkedin-infographic.md. Esto toma mi foto de perfil de brand-assets/, aplica mi paleta de colores y crea un gráfico limpio que destaca el marco central de la publicación.

La generación visual fue un desafío que no esperaba. Mi primer enfoque usaba Claude Code para generar HTML, renderizarlo como imagen con un navegador headless y guardar el PNG. Funcionó, pero las imágenes se veían estériles. El avance llegó cuando agregué mi color-palette.json a los recursos de marca:

{
  "primary": "#1a1a2e",
  "secondary": "#16213e",
  "accent": "#0f3460",
  "highlight": "#e94560",
  "text_light": "#ffffff",
  "text_dark": "#1a1a2e",
  "background": "#f5f5f5"
}

Con esos colores cargados, las infografías generadas pasaron de "arte genérico de IA" a "esto parece que vino de mi sistema de diseño". Detalle pequeño, diferencia enorme en la profesionalidad percibida.

Carrusel de Instagram: diapositivas educativas con identidad de marca

Instagram es una bestia completamente diferente. La gente hace scroll rápido, generalmente en el móvil, y se detiene por los visuales — no por el texto. El formato de carrusel es la solución: cada diapositiva es lo suficientemente visual para captar la atención, pero la mecánica de deslizar recompensa el contenido educativo que se construye diapositiva a diapositiva.

Mi skill youtube-to-instagram-carousel.md genera 5-8 diapositivas con esta estructura:

Diapositiva 1 (Gancho): Una declaración audaz o pregunta en texto grande sobre un fondo de marca. Usa mi color de acento (#e94560) y foto de perfil en la esquina con la superposición de la insignia de verificación.

Diapositivas 2-6 (Contenido): Cada diapositiva cubre un punto clave del video. Máximo 40 palabras por diapositiva. La skill especifica: "Escribe al nivel de lectura de un adolescente inteligente de 16 años. Sin jerga sin explicación inmediata. Un concepto por diapositiva."

Diapositiva 7 (Resumen): Un repaso rápido de todos los puntos en formato condensado.

Diapositiva 8 (CTA): "Sígueme para más análisis de ingeniería de IA" con mi foto de perfil y nombre de usuario.

La integración de la insignia de verificación usa Pillow para componer mi foto de perfil con un verified-badge.png posicionado en la esquina inferior derecha estándar. El script create_visuals.py carga los colores de marca desde color-palette.json, crea diapositivas de 1080x1080, superpone la foto de perfil y la insignia, renderiza el texto con Inter Bold a 48pt, y agrega un contador de diapositivas en la esquina.

def create_instagram_slide(text, slide_number, total_slides):
    """Generate a single Instagram carousel slide with brand assets."""
    with open("brand-assets/color-palette.json") as f:
        colors = json.load(f)

    slide = Image.new("RGB", (1080, 1080), colors["primary"])

    # Composite profile pic + verified badge
    profile = Image.open("brand-assets/profile-pic-round.png").resize((80, 80))
    slide.paste(profile, (40, 40), profile)
    badge = Image.open("brand-assets/verified-badge.png").resize((24, 24))
    slide.paste(badge, (96, 96), badge)

    # Render slide text and counter
    draw = ImageDraw.Draw(slide)
    font = ImageFont.truetype("brand-assets/fonts/Inter-Bold.ttf", 48)
    draw.text((80, 200), text, fill=colors["text_light"], font=font)

    return slide

Cada diapositiva se guarda en drafts/instagram/ como un PNG separado con la convención de nombres {fecha}_{slug_video}_slide_{número}.png.

Publicaciones de X: visuales de citas casuales que se retuitean

X (anteriormente Twitter) es la plataforma donde la brevedad gana y la personalidad importa más. Nadie comparte un tweet que suena corporativo. Comparten observaciones agudas, opiniones sorprendentes y frases citables.

Mi skill youtube-to-x-quote.md adopta un enfoque completamente diferente al de LinkedIn e Instagram. En lugar de extraer marcos o desgloses educativos, busca tres cosas en la transcripción:

  1. La frase individual más citable. La línea que alguien capturaría en pantalla y compartiría.
  2. La opinión más contraria. El momento en que dije algo con lo que la mayoría de la gente no estaría de acuerdo.
  3. La frase práctica más concisa. Un consejo tan específico e inmediatamente accionable que la gente lo guarda en marcadores.

Para cada uno, la skill genera dos salidas: el texto del tweet (menos de 280 caracteres, tono casual, sin hashtags — se ven desesperados en X) y un visual de cita. El visual de cita es una imagen simple de marca con el texto de la cita en una fuente grande y limpia sobre mi fondo de paleta de colores, con mi foto de perfil y usuario en la esquina.

El requisito de tono casual es la parte más difícil de lograr. LinkedIn e Instagram toleran escritura pulida y algo formal. X la penaliza. Mi documento de skill incluye una sección de calibración de tono:

## Tone Rules for X
- Write like texting a smart friend, not presenting at a conference.
- Contractions always. "I've" not "I have." "Don't" not "Do not."
- OK to start sentences with "So" or "Look" or "Honestly."
- One emoji maximum per post. Zero is fine.
- Never use corporate phrases: "leverage," "synergy," "ecosystem."
- If the tweet sounds like it could appear in a press release, rewrite it.

Esa sección de tono ha sido revisada cuatro veces. La versión uno sonaba como LinkedIn acortado. La versión dos se sobrecompensó hacia territorio adolescente. La versión tres usaba demasiados signos de exclamación. La versión cuatro produce consistentemente tweets que suenan como algo que yo realmente escribiría a las 11 PM después de tener una opinión fuerte.

Esto es lo que me sorprendió de generar para tres plataformas simultáneamente: la idea de LinkedIn, el desglose de Instagram y la opinión picante de X son tres expresiones de la misma idea subyacente. Esa coherencia es el verdadero multiplicador. No solo volumen 9x — volumen 9x con mensajes consistentes.

Pero el volumen no significa nada sin calidad. Ahí es donde el flujo de aprobación se gana su lugar.

El flujo de aprobación manual: por qué me niego a autopublicar

Sé lo que estás pensando. "¿Construiste toda esta automatización solo para... seguir revisando todo manualmente?"

Sí. Absolutamente. Y lo haría de nuevo.

Esto es lo que he aprendido después de un año ejecutando varios sistemas de automatización de contenido: el costo de publicar una mala publicación es mayor que el costo de revisar veinte buenas. ¿Ese incidente del placeholder en LinkedIn que mencioné antes? Me tomó tres semanas recuperar la tasa de engagement en mi perfil. Tres semanas de publicaciones consistentemente buenas para deshacer treinta segundos de descuido automatizado.

Mi flujo de aprobación tiene tres etapas:

Etapa 1: Generación. Todo el contenido llega a drafts/. Cada pieza recibe un encabezado de metadatos:

---
platform: linkedin
video_source: "Building AI Agent Teams - March 2026"
generated_at: 2026-03-15T14:23:00Z
status: draft
skill_version: youtube-to-linkedin-v4
---

Etapa 2: Revisión. Abro la carpeta drafts/ — generalmente una vez por la mañana, una vez por la noche. Leo cada pieza. Verifico: precisión factual, adecuación del tono, consistencia de marca y la prueba del instinto de "¿publicaría esto realmente?". Si pasa, lo muevo a approved/. Si necesita cambios, edito directamente o vuelvo a ejecutar la skill con parámetros ajustados.

Etapa 3: Programación. Solo los archivos en approved/ se envían a Blotato. El script submit_to_blotato.py escanea el directorio approved/, sube cualquier contenido que no haya sido enviado aún, y lo programa basándose en el DEFAULT_SCHEDULE_OFFSET_HOURS de la configuración del entorno.

def submit_approved_content():
    """Submit all approved, unsubmitted content to Blotato."""
    approved_dir = Path("approved")
    headers = {
        "Authorization": f"Bearer {os.getenv('BLOTATO_API_KEY')}",
        "Content-Type": "application/json"
    }

    for platform in ["linkedin", "instagram", "x"]:
        for content_file in (approved_dir / platform).glob("*.md"):
            # Skip already-submitted files (.submitted marker)
            if content_file.with_suffix(".submitted").exists():
                continue

            metadata, body = parse_front_matter(content_file.read_text())
            offset = int(os.getenv("DEFAULT_SCHEDULE_OFFSET_HOURS", 24))
            schedule_time = datetime.utcnow() + timedelta(hours=offset)

            payload = {
                "workspace_id": os.getenv("BLOTATO_WORKSPACE_ID"),
                "platform": platform,
                "content": body.strip(),
                "scheduled_at": schedule_time.isoformat() + "Z",
            }

            response = requests.post(
                "https://api.blotato.com/v1/posts",
                headers=headers, json=payload
            )

            if response.status_code == 201:
                # Write marker to prevent double-posting
                content_file.with_suffix(".submitted").write_text(
                    json.dumps({"blotato_post_id": response.json()["id"]})
                )

Los archivos marcadores .submitted previenen la publicación doble — aprendí eso por las malas cuando una versión temprana envió la misma publicación de LinkedIn tres veces en un cron job sin verificaciones de idempotencia.

Mi sesión de revisión típica toma 10-15 minutos para un lote de nueve publicaciones. Apruebo alrededor del 80% en la primera pasada. El otro 20% necesita ediciones menores — generalmente un ajuste de tono o una corrección factual donde la IA parafraseó algo del video ligeramente mal.

Quince minutos para revisar nueve publicaciones. Comparado con las más de dos horas que me llevaba crearlas desde cero. Esa es la ganancia de eficiencia que importa — no eliminar al humano por completo, sino eliminar el trabajo mecánico y conservar el juicio.

Cómo Claude Code se autocorrige: el ciclo iterativo que hace esto fiable

Mencioné antes que Claude Code aprende de los fallos. Déjame mostrarte exactamente cómo se ve eso, porque esta es la parte del flujo que más me sorprendió.

Durante mi segunda semana de pruebas, la skill de extracción de transcripciones chocó con un muro. Claude Code intentaba obtener páginas de YouTube directamente usando la biblioteca requests de Python y extraer la transcripción del HTML. La detección de bots de YouTube lo bloqueó inmediatamente.

Esto es lo que sucedió en la terminal de Claude Code:

> Running transcript-extraction skill...
> Fetching https://youtube.com/watch?v=xxxxx
> ERROR: 403 Forbidden - Bot detection triggered
> Analyzing failure...
> Updating skill: transcript-extraction.md
>   Added step: "Use youtube-transcript-api library instead
>   of direct page fetching. Install via pip if not present."
> Retrying with updated skill...
> Success: Transcript extracted (4,847 words)

Claude Code no solo reportó el error. Diagnosticó la causa, identificó un enfoque alternativo, actualizó el documento de la skill con la corrección y reintentó. La skill transcript-extraction.md ahora tiene una línea que dice: "NUNCA intentar obtener páginas de YouTube directamente. Siempre usar el paquete Python youtube-transcript-api para extracción de transcripciones."

Esa corrección es permanente. Cada ejecución futura usa el enfoque corregido.

Otro ejemplo: la generación de imágenes para infografías de LinkedIn inicialmente producía imágenes de 2400x2400 píxeles — demasiado grandes para el límite de 4MB de subida de Blotato. El primer fallo desencadenó esta secuencia:

> Generating LinkedIn infographic...
> Uploading to Blotato...
> ERROR: 413 Payload Too Large (6.2MB)
> Analyzing failure...
> Updating skill: linkedin-infographic.md
>   Added step: "After rendering, resize to 1200x1200
>   and compress to JPEG at 85% quality.
>   Verify file size < 4MB before upload."
> Regenerating with compression...
> Upload successful (1.8MB)

He contado catorce actualizaciones de documentos de skills que se originaron por fallos en tiempo de ejecución. Catorce problemas que se resolvieron solos. Cada uno habría sido una sesión de depuración manual — encontrar el error, descubrir la corrección, recordar aplicarla la próxima vez. En cambio, el documento de la skill lleva la memoria institucional.

Por eso pienso en las skills como documentos vivos. No son instrucciones estáticas. Son una base de conocimiento que crece cada vez que algo sale mal. Después de tres semanas ejecutando este flujo, mis documentos de skills están significativamente más probados en batalla que las versiones que originalmente escribí. Las correcciones de la IA a menudo manejan casos límite que yo nunca habría anticipado.

La advertencia: Claude Code no siempre acierta con la corrección al primer intento. Alrededor del 30% de las veces, la corrección inicial crea un nuevo problema. La corrección de compresión de imagen primero comprimía a JPEG al 50% de calidad, haciendo el texto ilegible. Ajusté manualmente al 85%. Las correcciones de la IA son buenos puntos de partida, no soluciones infalibles.

Confía en el ciclo. Verifica el resultado.

Ejecutando el flujo completo: del video a publicaciones programadas

Bien, aquí es el momento donde todo se conecta. Has visto la estructura del proyecto, la configuración de API, las skills de plataforma, el flujo de aprobación y el ciclo de autocorrección. Déjame guiarte por una ejecución completa.

Paso 1: Abro el proyecto en VS Code, lanzo Claude Code y pego la URL de YouTube. Claude Code lee la skill transcript-extraction.md y extrae la transcripción completa usando youtube-transcript-api.

Paso 2: Tres skills de generación de contenido se ejecutan en secuencia. Cada una lee la transcripción, aplica reglas específicas de plataforma y guarda el resultado en drafts/linkedin/, drafts/instagram/ o drafts/x/.

Paso 3: Las skills de generación visual se ejecutan después — infografía de LinkedIn, diapositivas de carrusel de Instagram, visuales de cita de X. Todas toman recursos de brand-assets/.

Paso 4: Abro drafts/, reviso todo, hago ediciones y muevo el contenido aprobado a approved/.

Paso 5: python scripts/submit_to_blotato.py recoge todo lo que está en approved/, programa a través de la API de Blotato y marca cada archivo como enviado.

Tiempo total desde URL del video hasta contenido programado: unos 40 minutos, de los cuales 15 minutos son mi revisión. Para un solo video de 20 minutos, obtengo tres publicaciones de LinkedIn (diferentes ángulos), tres conjuntos de carrusel de Instagram (diferentes secciones) y tres publicaciones de X (cita, opinión contraria, consejo práctico). Nueve piezas de contenido de un video.

Ese es el multiplicador 9x. No teórico. Producción real que ejecuto semanalmente.

Lo que hice mal y lo que haría diferente

Tres semanas en uso productivo, una reflexión honesta.

El archivo claude.md pasó por cinco reescrituras. Mi primera versión tenía 300 líneas — Claude Code ignoraba la mitad de las instrucciones. Con 150 líneas, la ejecución se volvió fiable. Con los prompts de sistema de IA, menos es más. Elimina todo lo que no sea una restricción estricta o contexto crítico.

Sobreingeniericé la generación de imágenes. Renderizar HTML a PNG con Chromium headless era lento y frágil. Cambiar a Pillow fue más rápido, más predecible y dio control a nivel de píxel. Evita por completo el renderizado con navegador.

La calidad no es uniforme entre plataformas. Las publicaciones de LinkedIn alcanzan aproximadamente el 90% de lo que yo escribiría manualmente. Los carruseles de Instagram llegan al 80%. Las publicaciones de X varían entre excelentes y mediocres — la escritura casual de formato corto es genuinamente más difícil para la IA. Todavía estoy ajustando ese documento de skill.

Empieza con una plataforma, no con tres. Construir simultáneamente significó que cada sesión de depuración se triplicaba. Si empezara de nuevo, perfeccionaría LinkedIn primero, luego clonaría y adaptaría para Instagram y X.

El flujo de aprobación es innegociable. Intenté autopublicar publicaciones de X durante una semana. Dos de catorce tuvieron problemas de tono que habría detectado manualmente. Una hacía referencia a una "actualización reciente" que tenía tres meses de antigüedad. La revisión manual se queda.

Cómo se ve esto a escala: los números después de 30 días

Después de ejecutar este flujo durante un mes completo con subidas semanales: cuatro videos produjeron 36 piezas de contenido. De esas, 29 pasaron la revisión de primera pasada (tasa de aprobación del 81%). Cinco necesitaron ediciones menores. Dos las regeneré con parámetros de skill ajustados. Tiempo semanal promedio: 40 minutos para nueve publicaciones.

Antes de este sistema, pasaba 3-4 horas semanales en reutilización — cuando lo hacía. La mejora en consistencia importa más que el ahorro de tiempo. Pasé de publicar esporádicamente a nueve veces por semana, cada semana, con mensajes alineados con la marca en todas las plataformas.

¿La mayor sorpresa? La coherencia multiplataforma generó más visitas al perfil que el volumen bruto. Cuando alguien veía mi publicación de marco en LinkedIn, y luego el mismo concepto como una cita contundente en X una hora después, el reconocimiento de patrones se activaba. Varias personas me enviaron DM diciendo "Sigo viendo tu contenido en todas partes". Eso no fue casualidad — nueve publicaciones de un video, distribuidas en plataformas durante 48 horas.

No puedes obtener esa coherencia con la reutilización manual, porque la reutilización manual sucede en días diferentes, con estados de ánimo diferentes y niveles de esfuerzo diferentes. La reutilización automatizada sucede en un lote, desde una fuente, con parámetros de calidad consistentes.

¿Hacia dónde va esto desde aquí?

Tres extensiones en mi hoja de ruta. Generación paralelizada usando asyncio de Python para reducir el tiempo de generación de 25 minutos a unos 10. Un ciclo de retroalimentación de analíticas que alimente datos de rendimiento de publicaciones de vuelta a los documentos de skills — si los CTA que terminan en pregunta consistentemente superan a las afirmaciones en LinkedIn, la skill debería aprenderlo automáticamente. E integración de newsletter como un cuarto tipo de salida, que la arquitectura de skills soporta naturalmente con un nuevo archivo markdown.

La arquitectura subyacente escala porque cada nueva plataforma es solo un nuevo documento de skill. El flujo de aprobación, los recursos de marca y la integración con Blotato se mantienen iguales. Ese es el poder de construir sobre skills en lugar de scripts aislados — el sistema es modular por naturaleza.

Comencé este proyecto porque estaba cansado del trabajo mecánico de contenido. Terminé repensando por completo la relación entre crear y distribuir contenido. La creación es la parte difícil — el pensamiento, la grabación, la explicación. La distribución debería ser automática. Tus ideas merecen llegar a cada plataforma donde vive tu audiencia, en el formato que cada plataforma recompensa.

Un video. Nueve publicaciones. Cuarenta minutos. El sistema se vuelve más inteligente cada semana.

¿Cuál es esa pieza de contenido que sigues queriendo reutilizar pero nunca encuentras tiempo? Ese es tu primer documento de skill.

Preguntas frecuentes

¿Puedo usar Claude Code y Blotato sin escribir scripts de Python?

Puedes usar la terminal integrada de Claude Code para ejecutar comandos de skills individuales sin scripts personalizados. Pero la capa de Python maneja la generación de imágenes, la gestión de archivos y las llamadas a la API de Blotato de forma más fiable que los comandos de shell solos. Para el flujo completo, Python vale la pena configurarlo.

¿Cuánto cuesta la combinación de API de Blotato y Anthropic por mes?

Mi gasto mensual en API promedia $25-40 por el contenido generado de cuatro videos. La API de Anthropic maneja la generación pesada de texto (aproximadamente $15-25), y el uso de la API de Blotato cae dentro del precio de su plan estándar. OpenRouter como respaldo agrega $5-10 para tareas más ligeras. Para una mirada más profunda sobre la gestión de costos de API de IA, consulta mi guía de optimización de costos de agentes de IA.

¿Qué sucede cuando la API de Blotato rechaza una publicación?

El script submit_to_blotato.py registra el rechazo con la respuesta de error completa. Causas comunes: imágenes demasiado grandes (comprimir por debajo de 4MB), tiempos de programación inválidos (deben ser marcas de tiempo futuras) o tokens OAuth expirados (re-autenticar a través del panel de Blotato). El rechazo no afecta a otras publicaciones del lote.

¿Cómo mantengo el prompt del sistema claude.md por debajo de 150 líneas?

Enfócate solo en restricciones y skills disponibles. Elimina explicaciones, ejemplos y contexto que Claude Code pueda inferir. Cada línea debe ser una regla estricta ("NUNCA autopublicar") o una referencia a un documento de skill que contiene las instrucciones detalladas. Mueve todos los detalles de implementación a los archivos de skills mismos.

¿Este flujo soporta contenido de video en idiomas distintos al inglés?

La biblioteca youtube-transcript-api soporta transcripciones en múltiples idiomas. Las skills de generación de contenido necesitarían reglas de tono específicas por idioma, pero la arquitectura del flujo se mantiene idéntica. No he probado esto personalmente con contenido en otros idiomas aún — está en mi lista para el Q2 2026.

Let's Work Together

Looking to build AI systems, automate workflows, or scale your tech infrastructure? I'd love to help.

Coffee cup

¿Te gustó este artículo?

Tu apoyo me ayuda a crear más contenido técnico detallado, herramientas de código abierto y recursos gratuitos para la comunidad de desarrolladores.

Temas Relacionados

Engr Mejba Ahmed

Sobre el Autor

Engr Mejba Ahmed

Engr. Mejba Ahmed builds AI-powered applications and secure cloud systems for businesses worldwide. With 10+ years shipping production software in Laravel, Python, and AWS, he's helped companies automate workflows, reduce infrastructure costs, and scale without security headaches. He writes about practical AI integration, cloud architecture, and developer productivity.

Discussion

Comments

0

No comments yet

Be the first to share your thoughts

Leave a Comment

Your email won't be published

9  -  1  =  ?

Seguir Aprendiendo

Artículos Relacionados

Ver Todos

Comments

Leave a Comment

Comments are moderated before appearing.

Learning Resources

Expand Your Knowledge

Accelerate your growth with structured courses, verified certificates, interactive flashcards, and production-ready AI agent skills.

Sample Certificate of Completion

Sample certificate — complete any course to earn yours

Engr Mejba Ahmed

Engr Mejba Ahmed

Claude Code Expert · Online

👋

Hey there!

Quick Actions

WhatsApp Instant reply

Chat on WhatsApp

+880 1723 741224 · Instant reply

Popular Questions

Engr Mejba Ahmed is connected
Engr Mejba Ahmed is typing...
Engr Mejba Ahmed avatar

✉ Want me to follow up? Drop your email

Engr Mejba Ahmed avatar

📞 Connect Directly

Choose how you'd like to reach me

WhatsApp

+880 1723 741224

Email

[email protected]

✓ Details sent! I'll get back to you shortly.

Powered by OpenAI

335+

Blog Posts

25

AI Courses

63

Projects

Services & Expertise

Pricing & Process

Learning & Resources

Connect & Support