Skip to main content
📝 AI Automation

Claude Code + Blotato: Automatizei meu fluxo de produção de conteúdo

Automatize a reutilização de conteúdo com Claude Code e Blotato. Transforme um vídeo em 9 posts específicos por plataforma no LinkedIn, Instagram e X automaticamente.

30 min

Tempo de leitura

5,927

Palavras

Mar 17, 2026

Publicado

Engr Mejba Ahmed

Escrito por

Engr Mejba Ahmed

Compartilhar Artigo

Claude Code + Blotato: Automatizei meu fluxo de produção de conteúdo

Claude Code + Blotato: Como automatizei todo o meu fluxo de produção de conteúdo

Na quinta-feira passada, subi um vídeo de 22 minutos no YouTube sobre como construir equipes de agentes de IA. Em 40 minutos, eu tinha nove peças de conteúdo específico para cada plataforma numa pasta de rascunhos na minha máquina — três posts de LinkedIn com formatação profissional, três roteiros de carrossel para Instagram com detalhamento slide a slide, e três posts para X com visuais de citação impactantes. Tudo personalizado. Tudo alinhado com a minha marca. Tudo esperando que eu revisasse e clicasse em publicar.

Não escrevi nenhum deles manualmente.

O sistema que os produziu é um projeto de Claude Code com quatro scripts Python, uma integração com a API do Blotato e um conceito ao qual sempre volto: skills. Não do tipo vago "a IA consegue fazer coisas". Do tipo específico, documentado e repetível — onde cada automação tem um nome, um conjunto de ingredientes, uma sequência de passos e um formato de saída esperado.

Construir isso me levou cerca de três finais de semana de iteração. A primeira versão era vergonhosamente quebrada. O Claude Code ficava tentando buscar páginas do YouTube diretamente e batendo em barreiras de detecção de bots. A geração de imagens produzia PNGs enormes que a API do Blotato rejeitava. Meus recursos de marca não carregavam porque eu tinha fixado caminhos que só existiam na minha máquina de trabalho.

Mas cada falha ensinou algo ao sistema — e essa é a parte que ninguém explica sobre trabalhar com Claude Code para automação. A IA não apenas executa suas instruções. Ela observa o que quebra, propõe correções e atualiza seus próprios documentos de skills para que o mesmo erro não aconteça novamente.

Quero te guiar exatamente por como esse fluxo funciona, porque o multiplicador de conteúdo 9x que ele cria mudou genuinamente minha forma de pensar sobre publicação. Mas primeiro, você precisa entender por que abandonei três outras ferramentas antes de chegar a essa abordagem.

Por que as ferramentas de reaproveitamento continuavam me decepcionando

Experimentei o Repurpose.io, fazer prompts manualmente com o ChatGPT e uma ferramenta chamada ContentFries que prometia "um vídeo, conteúdo ilimitado". Todas tinham o mesmo problema: tratavam todas as plataformas da mesma forma.

O post de LinkedIn soava como um tweet com parágrafos extras. Os posts de X eram versões truncadas do que a ferramenta gerava primeiro. Nenhuma inteligência de plataforma — nenhuma compreensão de que as audiências do LinkedIn querem frameworks profissionais enquanto as audiências do X querem uma opinião afiada que possam retuitar.

Consistência de marca foi a segunda falha. Minha foto de perfil, selo de verificação, paleta de cores — nenhuma dessas ferramentas me permitia injetar recursos de marca. Cada resultado parecia genérico. Eu gastava 20 minutos por post ajustando manualmente o tom e reformatando. Vinte minutos vezes nove posts vezes quatro vídeos por mês. Doze horas de trabalho mecânico em conteúdo que eu já tinha criado uma vez.

O terceiro problema me levou a construir meu próprio sistema: o fluxo de aprovação. Ou melhor, a ausência dele. Essas ferramentas queriam autopublicar diretamente nas minhas contas sem etapa de revisão. Já me queimei antes — uma ferramenta de agendamento uma vez publicou um rascunho com "INSERIR ESTATÍSTICA RELEVANTE AQUI" para 14.000 seguidores do LinkedIn. Os comentários foram... educativos.

Eu precisava de três coisas: inteligência de conteúdo específica por plataforma, integração de recursos de marca e revisão humana obrigatória. Claude Code e Blotato me deram as três.

O que torna uma "Skill" diferente de um prompt

Se você tem acompanhado meus textos sobre fluxos de trabalho de agentes Claude Code, sabe que penso nas skills como a unidade fundamental da automação com IA. Mas esse projeto me obrigou a ser muito mais preciso sobre o que isso realmente significa.

Um prompt é uma instrução de uso único. "Escreva um post de LinkedIn sobre este vídeo." Você digita, a IA responde, e a interação acaba. Se o resultado está errado, você revisa o prompt e tenta de novo. O conhecimento sobre o que funciona fica na sua cabeça.

Uma skill é uma receita documentada. Ela tem quatro componentes:

Nome: Um identificador claro. As minhas se chamam coisas como youtube-to-linkedin, youtube-to-instagram-carousel, youtube-to-x-quote.

Ingredientes: As entradas que a skill precisa antes de poder ser executada. Para youtube-to-linkedin, os ingredientes são: transcrição do vídeo (texto simples), título do vídeo, URL do vídeo, descritor de público-alvo e caminho do diretório de recursos de marca.

Passos: A sequência ordenada de operações. Não instruções vagas — passos específicos e testáveis. "Extrair as três declarações mais citáveis da transcrição" é um passo. "Fazer soar profissional" não é.

Resultado esperado: O formato e a estrutura exata do que sai. Para a skill de LinkedIn, o resultado esperado é um arquivo markdown com uma linha-gancho (menos de 200 caracteres), uma seção de corpo (150-300 palavras), três hashtags e um CTA com link para o vídeo completo.

A diferença importa porque skills são iteráveis. Quando o resultado do LinkedIn fica longo demais, não refaço o prompt do zero. Ajusto o passo 4 do documento da skill — "Comprimir a seção do corpo para menos de 250 palavras preservando todas as referências a frameworks" — e cada execução futura reflete essa mudança.

É isso que quero dizer quando falo que a IA se autocorrige. O documento da skill é um artefato vivo. O Claude Code o lê antes de cada execução, segue seus passos e, quando algo quebra — uma busca web é bloqueada, uma imagem excede o limite de tamanho do Blotato — eu atualizo o documento da skill com a correção. A próxima execução funciona corretamente. O sistema fica mais inteligente cada vez que falha.

Meu projeto atualmente tem sete documentos de skills. Três para geração de conteúdo (um por plataforma), dois para criação de imagens (infográfico de LinkedIn e visual de citação para X), um para extração de transcrição e um para o fluxo de aprovação. Cada um começou tosco e melhorou com o uso real.

Esse loop iterativo — executar, falhar, corrigir a skill, executar de novo — é o verdadeiro segredo para tornar a automação com IA confiável. Não prompts melhores. Processos mais bem documentados.

Agora deixe-me mostrar a estrutura do projeto que mantém tudo isso junto.

A estrutura do projeto que faz tudo funcionar

Eu rodo todo esse sistema a partir de um único projeto no VS Code. Veja como o diretório se parece:

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

Algumas coisas a notar.

O arquivo claude.md na raiz é o prompt do sistema para o Claude Code. Esse é o cérebro da operação — ele diz ao Claude Code o que este projeto faz, quais skills estão disponíveis e quais restrições seguir. Mantenho o meu com menos de 150 linhas. Essa é uma regra rígida que aprendi através de experimentação dolorosa. Passe de 150 linhas e o Claude Code começa a perder contexto sobre as instruções menos enfatizadas. O modelo tem capacidade de sobra, mas a relação sinal-ruído no seu prompt do sistema importa enormemente.

Aqui está uma versão simplificada do meu 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)

O diretório scripts/ contém quatro arquivos Python. Cada um lida com uma fase específica do fluxo. Uso Python porque o Claude Code gera Python confiável mais rápido do que qualquer outra linguagem nos meus testes, e o ecossistema de bibliotecas para chamadas de API e manipulação de imagens é incomparável.

Os diretórios drafts/ e approved/ são as duas etapas do fluxo de aprovação. O conteúdo começa em drafts/. Eu o reviso. O conteúdo aprovado vai para approved/. Apenas o conteúdo em approved/ é enviado ao Blotato para agendamento.

O diretório brand-assets/ é surpreendentemente importante. Sem ele, cada visual gerado parece genérico. Com ele, o Claude Code pode sobrepor minha foto de perfil, aplicar minha paleta de cores e incluir elementos de marca que fazem os posts sociais parecerem feitos por um designer humano — não por um script.

Essa integração de recursos de marca foi uma das coisas mais difíceis de acertar. Deixe-me mostrar por quê, e como a IA eventualmente resolveu seu próprio problema.

Configurando a camada de API: Anthropic e Blotato

Antes de qualquer conteúdo ser gerado, duas APIs precisam estar conectadas. A API do Anthropic Claude cuida de toda a inteligência — analisar transcrições, gerar texto específico por plataforma, tomar decisões criativas sobre ganchos e formatação. O Blotato cuida da distribuição — agendar posts, gerenciar conexões de plataformas e lidar com a complexidade do OAuth para publicar no LinkedIn, Instagram e X.

Aqui está minha configuração .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

A chave do OpenRouter é um fallback. Quando estou iterando rápido e queimando créditos da API do Anthropic durante o desenvolvimento, redireciono algumas das chamadas menos críticas — como ajustes de formatação ou geração de hashtags — pelo acesso do OpenRouter ao Claude 3.5 Sonnet, que é mais barato por token. O trabalho pesado — análise de transcrição, geração de conteúdo, ajuste de tom — sempre passa pela API do Anthropic diretamente pela qualidade.

Configurar o Blotato foi simples, mas exigiu uma sequência específica. Você cria um workspace, conecta suas contas sociais pelo fluxo OAuth do Blotato (isso acontece no painel web deles, não pela API), e então pega seu ID de workspace e chave API. A chave API tem escopo para aquele workspace, então todas as suas contas conectadas são acessíveis por uma única chave.

Aqui está a função Python que uso para verificar a conexão:

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 aprendi: o endpoint de upload de imagens do Blotato tem um limite de 4MB por arquivo. Minhas primeiras tentativas de geração visual produziram PNGs de 6-8MB porque eu renderizava em alta resolução sem compressão. O Claude Code detectou isso durante os testes — a API retornou um erro 413 — e automaticamente atualizou a skill linkedin-infographic.md para incluir um passo de compressão de imagem: "Após gerar o visual, comprimir para JPEG a 85% de qualidade. Verificar que o tamanho do arquivo é inferior a 4MB antes do envio."

Esse é o loop de melhoria iterativa em ação. O documento da skill agora carrega a correção permanentemente.

Se você preferir que alguém construa esse tipo de configuração de automação do zero, aceito projetos personalizados de fluxos de trabalho com IA. Você pode ver o que já construí em fiverr.com/s/EgxYmWD.

Mas a camada de API é apenas encanamento. A verdadeira mágica — a parte que faz o conteúdo ser realmente bom — acontece nas skills de geração específicas por plataforma.

Geração de conteúdo específico por plataforma: três audiências, três estratégias

É aqui que a maioria do reaproveitamento de conteúdo desmorona. As pessoas pegam um conteúdo e o reformatam ligeiramente para cada plataforma. Isso não é reaproveitar. É copiar e colar com limites de caracteres diferentes.

Reaproveitamento de verdade significa reimaginar as mesmas ideias centrais para audiências e contextos de consumo fundamentalmente diferentes. Veja como cada skill de plataforma funciona.

Como a skill de LinkedIn gera posts profissionais?

As audiências do LinkedIn navegam durante o horário comercial. Estão procurando insights profissionais, frameworks que possam aplicar em seus trabalhos e conteúdo que os faça parecer reflexivos se compartilharem. O modo de consumo é deliberado — as pessoas leem posts do LinkedIn com mais cuidado do que tweets.

Minha skill youtube-to-linkedin.md segue esta estrutura:

Passo 1: Extrair os três insights mais relevantes para a indústria da transcrição. Ignorar anedotas pessoais, piadas e enrolação. Focar em frameworks, dados e descobertas contraintuitivas.

Passo 2: Escrever uma linha-gancho com menos de 200 caracteres que desafie uma suposição comum ou prometa um resultado específico. Nunca começar com "Acabei de publicar um novo vídeo" — ninguém se importa com seu calendário de publicação.

Passo 3: Estruturar o corpo como um mini-framework. O algoritmo do LinkedIn recompensa posts que parecem estruturados — listas numeradas, cabeçalhos em negrito e conclusões claras geram mais engajamento do que parágrafos narrativos.

Passo 4: Terminar com uma pergunta que convide comentários. Não "O que você acha?" — isso é preguiçoso. Algo específico: "Qual foi a coisa mais contraintuitiva que você aprendeu sobre [tema] em produção?"

Passo 5: Adicionar três hashtags. Duas amplas (#AIEngineering, #SoftwareDevelopment), uma específica (#ClaudeCode). Nunca mais de três — o LinkedIn penaliza excesso de hashtags.

Passo 6: Gerar um visual estilo infográfico usando a skill visual linkedin-infographic.md. Isso puxa minha foto de perfil de brand-assets/, aplica minha paleta de cores e cria um gráfico limpo que destaca o framework central do post.

A geração visual foi um desafio que eu não esperava. Minha primeira abordagem usava o Claude Code para gerar HTML, renderizá-lo como imagem com um navegador headless e salvar o PNG. Funcionou, mas as imagens ficavam estéreis. A virada veio quando adicionei meu color-palette.json aos recursos de marca:

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

Com essas cores carregadas, os infográficos gerados passaram de "arte genérica de IA" para "isso parece que veio do meu sistema de design". Detalhe pequeno, diferença enorme na profissionalidade percebida.

Carrossel de Instagram: slides educativos com identidade de marca

O Instagram é um bicho completamente diferente. As pessoas fazem scroll rápido, geralmente no celular, e param por visuais — não por texto. O formato de carrossel é a solução: cada slide é visual o suficiente para chamar atenção, mas a mecânica de deslizar recompensa conteúdo educativo que se constrói slide a slide.

Minha skill youtube-to-instagram-carousel.md gera 5-8 slides com esta estrutura:

Slide 1 (Gancho): Uma declaração ousada ou pergunta em texto grande sobre um fundo de marca. Usa minha cor de destaque (#e94560) e foto de perfil no canto com a sobreposição do selo de verificação.

Slides 2-6 (Conteúdo): Cada slide cobre um ponto-chave do vídeo. Máximo 40 palavras por slide. A skill especifica: "Escreva no nível de leitura de um adolescente inteligente de 16 anos. Sem jargão sem explicação imediata. Um conceito por slide."

Slide 7 (Resumo): Uma recapitulação rápida de todos os pontos em formato condensado.

Slide 8 (CTA): "Siga para mais análises de engenharia de IA" com minha foto de perfil e nome de usuário.

A integração do selo de verificação usa Pillow para compor minha foto de perfil com um verified-badge.png posicionado no canto inferior direito padrão. O script create_visuals.py carrega as cores de marca do color-palette.json, cria slides de 1080x1080, sobrepõe a foto de perfil e o selo, renderiza o texto com Inter Bold em 48pt e adiciona um contador de slides no canto.

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 slide é salvo em drafts/instagram/ como um PNG separado com a convenção de nomes {data}_{slug_video}_slide_{número}.png.

Posts de X: visuais de citação casuais que são retuitados

X (anteriormente Twitter) é a plataforma onde a brevidade vence e a personalidade importa mais. Ninguém compartilha um tweet com tom corporativo. Compartilham observações afiadas, opiniões surpreendentes e frases citáveis.

Minha skill youtube-to-x-quote.md adota uma abordagem completamente diferente do LinkedIn e Instagram. Em vez de extrair frameworks ou análises educativas, ela procura três coisas na transcrição:

  1. A frase individual mais citável. A linha que alguém tiraria um print e compartilharia.
  2. A opinião mais contrária. O momento em que eu disse algo com que a maioria das pessoas discordaria.
  3. A frase prática mais concisa. Uma dica tão específica e imediatamente acionável que as pessoas a salvam nos favoritos.

Para cada uma, a skill gera duas saídas: o texto do tweet (menos de 280 caracteres, tom casual, sem hashtags — parecem desesperadas no X) e um visual de citação. O visual de citação é uma imagem simples de marca com o texto da citação em uma fonte grande e limpa sobre o fundo da minha paleta de cores, com minha foto de perfil e usuário no canto.

O requisito de tom casual é a parte mais difícil de acertar. O LinkedIn e o Instagram toleram escrita polida e um pouco formal. O X penaliza isso. Meu documento de skill inclui uma seção de calibração de tom:

## 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.

Essa seção de tom foi revisada quatro vezes. A versão um soava como LinkedIn encurtado. A versão dois compensou demais para o território adolescente. A versão três usava pontos de exclamação demais. A versão quatro produz consistentemente tweets que soam como algo que eu realmente escreveria às 23h depois de ter uma opinião forte.

O que me surpreendeu sobre gerar para três plataformas simultaneamente: o insight do LinkedIn, o detalhamento do Instagram e a opinião picante do X são três expressões da mesma ideia subjacente. Essa coerência é o verdadeiro multiplicador. Não apenas volume 9x — volume 9x com mensagens consistentes.

Mas volume não significa nada sem qualidade. É aí que o fluxo de aprovação ganha seu lugar.

O fluxo de aprovação manual: por que me recuso a autopublicar

Sei o que você está pensando. "Você construiu toda essa automação só para... ainda revisar tudo manualmente?"

Sim. Absolutamente. E faria de novo.

Aqui está o que aprendi depois de um ano rodando vários sistemas de automação de conteúdo: o custo de publicar um post ruim é maior do que o custo de revisar vinte bons. Aquele incidente do placeholder no LinkedIn que mencionei? Levei três semanas para recuperar a taxa de engajamento no meu perfil. Três semanas de posts consistentemente bons para desfazer trinta segundos de descuido automatizado.

Meu fluxo de aprovação tem três etapas:

Etapa 1: Geração. Todo o conteúdo chega em drafts/. Cada peça recebe um cabeçalho de metadados:

---
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: Revisão. Abro a pasta drafts/ — geralmente uma vez de manhã, uma vez à noite. Leio cada peça. Verifico: precisão factual, adequação de tom, consistência de marca e o teste do instinto "eu realmente publicaria isso?". Se passa, movo para approved/. Se precisa de mudanças, edito diretamente ou re-executo a skill com parâmetros ajustados.

Etapa 3: Agendamento. Apenas os arquivos em approved/ são enviados ao Blotato. O script submit_to_blotato.py varre o diretório approved/, faz upload de qualquer conteúdo que ainda não foi enviado e agenda com base no DEFAULT_SCHEDULE_OFFSET_HOURS da configuração do ambiente.

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"]})
                )

Os arquivos marcadores .submitted previnem publicação duplicada — aprendi isso da pior forma quando uma versão inicial enviou o mesmo post de LinkedIn três vezes num cron job sem verificações de idempotência.

Minha sessão de revisão típica leva 10-15 minutos para um lote de nove posts. Aprovo cerca de 80% na primeira passada. Os outros 20% precisam de edições menores — geralmente um ajuste de tom ou uma correção factual onde a IA parafraseou algo do vídeo de forma ligeiramente errada.

Quinze minutos para revisar nove posts. Comparado com as mais de duas horas que eu levava para criá-los do zero. Esse é o ganho de eficiência que importa — não eliminar o humano completamente, mas eliminar o trabalho mecânico e manter o julgamento.

Como o Claude Code se autocorrige: o loop iterativo que torna isso confiável

Mencionei antes que o Claude Code aprende com as falhas. Deixe-me mostrar exatamente como isso se parece, porque essa é a parte do fluxo que mais me surpreendeu.

Durante minha segunda semana de testes, a skill de extração de transcrição bateu num muro. O Claude Code tentava buscar páginas do YouTube diretamente usando a biblioteca requests do Python e extrair a transcrição do HTML. A detecção de bots do YouTube bloqueou imediatamente.

Aqui está o que aconteceu no terminal do 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)

O Claude Code não apenas reportou o erro. Diagnosticou a causa, identificou uma abordagem alternativa, atualizou o documento da skill com a correção e tentou novamente. A skill transcript-extraction.md agora tem uma linha que diz: "NUNCA tentar buscar páginas do YouTube diretamente. Sempre usar o pacote Python youtube-transcript-api para extração de transcrição."

Essa correção é permanente. Cada execução futura usa a abordagem corrigida.

Outro exemplo: a geração de imagens para infográficos de LinkedIn inicialmente produzia imagens de 2400x2400 pixels — grandes demais para o limite de 4MB de upload do Blotato. A primeira falha desencadeou esta sequência:

> 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)

Contei catorze atualizações de documentos de skills que se originaram de falhas em tempo de execução. Catorze problemas que se resolveram sozinhos. Cada um teria sido uma sessão de depuração manual — encontrar o erro, descobrir a correção, lembrar de aplicá-la na próxima vez. Em vez disso, o documento da skill carrega a memória institucional.

É por isso que penso nas skills como documentos vivos. Não são instruções estáticas. São uma base de conhecimento que cresce cada vez que algo dá errado. Após três semanas rodando esse fluxo, meus documentos de skills são significativamente mais testados em batalha do que as versões que originalmente escrevi. As correções da IA frequentemente lidam com casos extremos que eu nunca teria antecipado.

O porém: o Claude Code nem sempre acerta a correção na primeira tentativa. Cerca de 30% das vezes, a correção inicial cria um novo problema. A correção de compressão de imagem primeiro comprimia para JPEG a 50% de qualidade, tornando o texto ilegível. Ajustei manualmente para 85%. As correções da IA são bons pontos de partida, não soluções infalíveis.

Confie no loop. Verifique o resultado.

Executando o fluxo completo: do vídeo a posts agendados

Certo, aqui é o momento onde tudo se conecta. Você viu a estrutura do projeto, a configuração de API, as skills de plataforma, o fluxo de aprovação e o loop de autocorreção. Deixe-me guiá-lo por uma execução completa.

Passo 1: Abro o projeto no VS Code, inicio o Claude Code e colo a URL do YouTube. O Claude Code lê a skill transcript-extraction.md e extrai a transcrição completa usando youtube-transcript-api.

Passo 2: Três skills de geração de conteúdo rodam em sequência. Cada uma lê a transcrição, aplica regras específicas de plataforma e salva o resultado em drafts/linkedin/, drafts/instagram/ ou drafts/x/.

Passo 3: As skills de geração visual disparam em seguida — infográfico de LinkedIn, slides de carrossel de Instagram, visuais de citação de X. Todas puxam de brand-assets/.

Passo 4: Abro drafts/, reviso tudo, faço edições e movo o conteúdo aprovado para approved/.

Passo 5: python scripts/submit_to_blotato.py pega tudo que está em approved/, agenda pela API do Blotato e marca cada arquivo como enviado.

Tempo total da URL do vídeo até conteúdo agendado: cerca de 40 minutos, dos quais 15 minutos são minha revisão. Para um único vídeo de 20 minutos, obtenho três posts de LinkedIn (ângulos diferentes), três conjuntos de carrossel de Instagram (seções diferentes) e três posts de X (citação, opinião contrária, dica prática). Nove peças de conteúdo de um vídeo.

Esse é o multiplicador 9x. Não teórico. Produção real que executo semanalmente.

O que errei e o que faria diferente

Três semanas em uso de produção, uma reflexão honesta.

O arquivo claude.md passou por cinco reescritas. Minha primeira versão tinha 300 linhas — o Claude Code ignorava metade das instruções. Com 150 linhas, a execução ficou confiável. Com prompts de sistema de IA, menos é mais. Corte tudo que não seja uma restrição rígida ou contexto crítico.

Supercompliquei a geração de imagens. Renderizar HTML para PNG com Chromium headless era lento e frágil. Mudar para Pillow foi mais rápido, mais previsível e deu controle em nível de pixel. Pule renderização com navegador completamente.

A qualidade não é uniforme entre plataformas. Os posts de LinkedIn atingem cerca de 90% do que eu escreveria manualmente. Os carrosséis de Instagram ficam em torno de 80%. Os posts de X variam de ótimos a medíocres — escrita casual de formato curto é genuinamente mais difícil para a IA. Ainda estou ajustando esse documento de skill.

Comece com uma plataforma, não com três. Construir simultaneamente significou que cada sessão de depuração triplicava. Se eu recomeçasse, aperfeiçoaria o LinkedIn primeiro, depois clonaria e adaptaria para Instagram e X.

O fluxo de aprovação é inegociável. Tentei autopublicar posts de X por uma semana. Dois de catorze tiveram problemas de tom que eu teria pego manualmente. Um fazia referência a uma "atualização recente" que tinha três meses de idade. A revisão manual fica.

Como isso se parece em escala: os números após 30 dias

Após rodar esse fluxo por um mês completo com uploads semanais: quatro vídeos produziram 36 peças de conteúdo. Dessas, 29 passaram na revisão de primeira passada (taxa de aprovação de 81%). Cinco precisaram de edições menores. Duas eu regenerei com parâmetros de skill ajustados. Tempo semanal médio: 40 minutos para nove posts.

Antes desse sistema, eu gastava 3-4 horas semanais em reaproveitamento — quando fazia. A melhoria na consistência importa mais do que a economia de tempo. Passei de publicar esporadicamente para nove vezes por semana, toda semana, com mensagens alinhadas à marca em todas as plataformas.

A maior surpresa? A coerência entre plataformas gerou mais visitas ao perfil do que o volume bruto. Quando alguém via meu post de framework no LinkedIn, e depois o mesmo conceito como uma citação contundente no X uma hora depois, o reconhecimento de padrão entrava em ação. Várias pessoas me mandaram DM dizendo "Fico vendo seu conteúdo em todo lugar." Isso não foi acidente — nove posts de um vídeo, distribuídos entre plataformas ao longo de 48 horas.

Você não consegue essa coerência com reaproveitamento manual, porque o reaproveitamento manual acontece em dias diferentes, com humores diferentes e níveis de esforço diferentes. O reaproveitamento automatizado acontece em um lote, de uma fonte, com parâmetros de qualidade consistentes.

Para onde isso vai a partir daqui?

Três extensões no meu roadmap. Geração paralelizada usando asyncio do Python para cortar o tempo de geração de 25 minutos para cerca de 10. Um loop de feedback de analytics que alimenta dados de desempenho dos posts de volta nos documentos de skills — se CTAs terminando em pergunta consistentemente superam afirmações no LinkedIn, a skill deveria aprender isso automaticamente. E integração de newsletter como um quarto tipo de saída, que a arquitetura de skills suporta naturalmente com um novo arquivo markdown.

A arquitetura subjacente escala porque cada nova plataforma é apenas um novo documento de skill. O fluxo de aprovação, os recursos de marca e a integração com Blotato permanecem os mesmos. Esse é o poder de construir sobre skills em vez de scripts avulsos — o sistema é modular por natureza.

Comecei esse projeto porque estava cansado de trabalho mecânico com conteúdo. Acabei repensando completamente a relação entre criar e distribuir conteúdo. A criação é a parte difícil — o pensamento, a gravação, a explicação. A distribuição deveria ser automática. Suas ideias merecem alcançar cada plataforma onde sua audiência vive, no formato que cada plataforma recompensa.

Um vídeo. Nove posts. Quarenta minutos. O sistema fica mais inteligente a cada semana.

Qual é aquela peça de conteúdo que você sempre quer reaproveitar mas nunca encontra tempo? Esse é seu primeiro documento de skill.

Perguntas frequentes

Posso usar Claude Code e Blotato sem escrever scripts Python?

Você pode usar o terminal integrado do Claude Code para executar comandos de skills individuais sem scripts personalizados. Mas a camada Python lida com geração de imagens, gerenciamento de arquivos e chamadas à API do Blotato de forma mais confiável do que comandos de shell sozinhos. Para o fluxo completo, Python vale a configuração.

Quanto custa a combinação de API do Blotato e Anthropic por mês?

Meu gasto mensal com API fica em média $25-40 para geração de conteúdo de quatro vídeos. A API do Anthropic cuida da geração pesada de texto (aproximadamente $15-25), e o uso da API do Blotato cabe no preço do plano padrão deles. O OpenRouter como fallback adiciona $5-10 para tarefas mais leves. Para um olhar mais aprofundado sobre gerenciamento de custos de API de IA, veja meu guia de otimização de custos de agentes de IA.

O que acontece quando a API do Blotato rejeita um post?

O script submit_to_blotato.py registra a rejeição com a resposta de erro completa. Causas comuns: imagens muito grandes (comprimir abaixo de 4MB), horários de agendamento inválidos (devem ser timestamps futuros) ou tokens OAuth expirados (reautenticar pelo painel do Blotato). A rejeição não afeta outros posts do lote.

Como manter o prompt do sistema claude.md abaixo de 150 linhas?

Foque apenas em restrições e skills disponíveis. Remova explicações, exemplos e contexto que o Claude Code pode inferir. Cada linha deve ser uma regra rígida ("NUNCA autopublicar") ou uma referência a um documento de skill que contém as instruções detalhadas. Mova todos os detalhes de implementação para os próprios arquivos de skills.

Esse fluxo suporta conteúdo de vídeo em idiomas além do inglês?

A biblioteca youtube-transcript-api suporta transcrições em múltiplos idiomas. As skills de geração de conteúdo precisariam de regras de tom específicas por idioma, mas a arquitetura do fluxo permanece idêntica. Ainda não testei isso pessoalmente com conteúdo em outros idiomas — está na minha lista para o 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

Gostou deste artigo?

Seu apoio me ajuda a criar mais conteúdo técnico aprofundado, ferramentas open-source e recursos gratuitos para a comunidade de desenvolvedores.

Tópicos Relacionados

Engr Mejba Ahmed

Sobre o 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

8  x  6  =  ?

Continue Aprendendo

Artigos 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