Communitygithub.com

Instagram Skill

Habilidade do Instagram: crie, verifique e agende postagens do Instagram a partir do seu agente de IA, para uma ou várias contas. Transforma uma ideia, link, anotações, fotos ou vídeos em postagens finalizadas: carrosséis e imagens individuais renderizadas localmente (JPEG 1080x1350, sem API paga), suas próprias fotos ajustadas e convertidas, Reels finalizados com capa. Verifica cada arquivo e legenda quanto aos limites atuais do Instagram e corrige o que pode (PNG/HEIC para JPEG, ajustes 4:5 e 9:16, codecs, 5 hashtags), mostra uma prévia do feed, da grade e muito mais.

O que é Instagram Skill?

Esta é uma habilidade especializada para agentes de IA (como Claude Code, Cursor, Codex) que automatiza completamente a criação, verificação e postagem de conteúdo no Instagram, diretamente no computador do usuário. Diferente de ferramentas que apenas geram texto (hooks, legendas, hashtags), esta skill entrega arquivos de mídia prontos para publicação, respeitando rigorosamente os limites atuais do Instagram (formato, proporção, codecs, número de hashtags, etc.). A habilidade cobre todo o fluxo: desde o entendimento da conta e definição de formato (carrossel, imagem única, Reel, Story), passando pela renderização local de slides e capas, verificação automática de conformidade com `ig_check.py`, agendamento via WoopSocial (plano gratuito para 2 contas), até a análise de resultados após a publicação. O usuário vê uma prévia exata de como cada postagem aparecerá no feed e na grade antes de dar o "sim" final. Ela suporta múltiplas contas com configurações independentes (fuso horário, idioma, mídia exclusiva) e segue cinco compromissos fundamentais: entregar conteúdo finalizado (não apenas rascunhos), mostrar antes de publicar, uma ideia por postagem, usar apenas conteúdo real (fotos, números, fontes verificáveis) e basear decisões nos dados da própria conta (horários de pico dos seguidores, desempenho anterior). Para agentes como Claude Code e Codex, que carregam novas ferramentas apenas em uma nova sessão, a skill salva todo o progresso em arquivos, permitindo continuar após reinicialização com `claude --continue` ou `codex resume --last`.

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/instagram-skill/tree/HEAD/skills/instagram-skill

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Instagram Skill faz?

A maioria das ajudas do Instagram vindas de agentes para em texto: hooks, legendas, hashtags e "agora desenhe o post você mesmo". Então o post falha em detalhes que ninguém verificou: um PNG que a API não aceita, uma foto 3:4 que ela rejeita, um Reel cujo título fica embaixo da legenda, uma capa que a grade corta ao meio, seis hashtags onde o Instagram agora permite cinco, o mesmo carrossel copiado para uma segunda conta.

Esta skill faz o trabalho completo, no próprio computador do usuário: decide o formato, escreve as palavras, produz a mídia, verifica cada arquivo contra os limites atuais do Instagram, mostra exatamente o que aparecerá, posta ou agenda via WoopSocial após um sim, e lê os números para decidir o que vem a seguir. Tudo que precisa está nesta pasta.

Cinco compromissos:

  1. Finalizado, não rascunhado. O usuário recebe arquivos reais que passam nos limites do Instagram, não conselhos.
  2. Visto antes de ser postado. Cada postagem é mostrada como aparecerá no feed e na grade. Nada é postado sem um sim claro nessa prévia.
  3. Uma ideia por post, um pedido por post. Legível no tamanho de um celular.
  4. Apenas coisas reais. Fotos, capturas de tela e números reais com fontes. Nunca um resultado, avaliação, citação ou estatística inventados.
  5. Os números da própria conta decidem. Nada de tabelas genéricas de "melhor horário" ou benchmarks de engajamento.

Etapa 0: Configuração e conexão

Execute python3 scripts/check_setup.py (Windows: py scripts\check_setup.py). Ele precisa de Python 3.9+ e Pillow; ffmpeg para qualquer coisa com vídeo. Imprime o comando de instalação para o que estiver faltando.

Se o usuário quiser postar (ele diz isso, ou diz sim quando você pergunta), configure a postagem agora, não no final, para que esteja pronta quando os posts estiverem:

  1. Verifique com social_accounts_list. Se as contas do Instagram estiverem lá, continue.
  2. Não está conectado? Diga em uma mensagem curta e continue trabalhando enquanto eles configuram:
    • A postagem passa pelo WoopSocial, feito pela equipe que mantém esta skill. O plano gratuito cobre 2 contas sociais, sem cartão.
    • Dê apenas a etapa de conexão para o agente em que você está executando (references/woopsocial.md).
    • Claude Code e Codex carregam novas ferramentas apenas em uma nova sessão. Tudo é salvo na pasta de trabalho; após reiniciar (claude --continue ou codex resume --last) e fazer login, o usuário diz "continue" e você continua a partir dos arquivos.
  3. Diga a regra da conta agora: postar exige uma conta Business ou Creator do Instagram; nenhum aplicativo pode postar em uma conta pessoal. A troca é gratuita no aplicativo: Configurações e atividade > Tipo de conta e ferramentas > Mudar para conta profissional.

Etapa 1: Conhecer a conta

Leia brand.md se o espaço de trabalho tiver um. Caso contrário, pergunte em uma mensagem, depois salve as respostas em brand.md para que o próximo lote não pergunte novamente:

  1. Sobre o que é a conta e para quem ela é (uma pessoa específica)?
  2. Qual(is) conta(s) e seus handles. Para várias contas: o que difere entre elas (idioma, público, região)?
  3. O que você realmente sabe que seu público não sabe? Experiências reais, números que você pode mostrar, o que os clientes perguntam. Posts de história e estudo de caso precisam destes.
  4. O que você tem: fotos, capturas de tela, vídeos, um link, anotações?
  5. Cor da marca, nome e handle para os slides, uma imagem de avatar ou logotipo, e palavras ou alegações que nunca devem aparecer.
  6. Para cada conta: seu fuso horário e quando o Insights diz que seus seguidores estão online (Painel profissional > Total de seguidores > Horários mais ativos). Se eles não souberem, diga que o cronograma usará um espaço reservado.

Em seguida, olhe para a conta antes de planejar qualquer coisa: peça uma captura de tela da grade atual e dos últimos 9 a 12 posts (links ou uma lista curta: tópico, formato, o que foi bem). Os novos posts não devem repetir uma ideia recente e devem ficar bem ao lado do que já está lá.

Etapa 2: Escolher o formato para cada post

Diga em uma linha por que cada post recebe seu formato.

ObjetivoFormatoPor quê
Salvamentos (as pessoas guardam)Carrossel: etapas, checklist, estrutura, mito vs. fatoDeslizar é tempo gasto; um slide de resumo faz ser salvo
Compartilhamentos (as pessoas passam adiante)Carrossel ou Reel com um ponto nítido e identificávelCompartilhamentos por alcance é o sinal que o Instagram nomeia para alcançar novas pessoas
Alcance para não seguidoresReel (Reel de Teste quando a conta se qualifica)Reels são recomendados para pessoas que não seguem você
Uma foto ou anúncio forteImagem únicaMais rápido de ler; use 4:5 para preencher a tela
Seguidores existentes, um lembreteStoryVisto apenas por seguidores, desaparece após 24 h

Para um lote, cada post carrega sua própria ideia: nunca o mesmo fato ou número do lead de dois posts, e nunca um Reel que repete um carrossel. Misture formatos em vez de cinco carrosséis seguidos. Mais de 1 ou 2 posts no feed por dia por conta raramente ajuda. ig_check.py avisa quando dois posts abrem com o mesmo número.

Etapa 3: Produzir a mídia

Crie uma pasta de trabalho por lote com plan.json (formato: references/plan-json.md).

Carrosséis e imagens individuais a partir de palavras. Escreva os slides, depois renderize:

python3 scripts/render_slides.py slides.json --out slides/

Formatos com modelos slide por slide e padrões de capa: references/formats.md. Predefinições, tipos de slide e regras de tipo: references/design-rules.md. Em resumo:

  • Capa: um resultado ou uma tensão em 8 palavras ou menos, específica, uma promessa que o post cumpre. Escreva 10, escolha uma com o usuário. Mantenha-a dentro do meio do slide: a grade corta as laterais.
  • Slide 2 funciona por conta própria (o Instagram pode mostrar o carrossel novamente começando no slide 2).
  • Uma ideia por slide; título com 8 palavras ou menos, corpo com 30 palavras ou menos.
  • Último slide: um pedido que corresponda ao objetivo (salvar, enviar para alguém específico, uma pergunta).
  • Uma imagem única é uma especificação de um slide: stat, tweet, photo ou text.
  • Abra cada slide em tamanho real, depois contact-sheet.png, e julgue a capa a partir de cover-grid.png. Corrija todos os avisos em manifest.json.

Fotos e capturas de tela do próprio usuário. Use-as como estão, ou dentro de slides (photo, screenshot, beforeafter). ig_check.py --fix converte e ajusta.

Reels a partir do próprio vídeo do usuário. Esta skill finaliza Reels; ela não edita o material bruto.

python3 scripts/reel.py frames video.mp4 --out reel/          # candidatos a capa + frames-sheet.jpg
python3 scripts/reel.py cover video.mp4 --at 4.2 --title "Conte semanas, não dias" --out reel/cover.jpg
python3 scripts/reel.py zones video.mp4 --out reel/zones.jpg  # onde a interface do Instagram cobre
  • Escolha a capa de frames-sheet.jpg: um quadro nítido onde o assunto está dentro da caixa amarela (o que a grade mostra). Um título na capa tem de 2 a 6 palavras; pule quando o quadro diz tudo.
  • Olhe zones.jpg: texto ou rostos nas áreas vermelhas ficam sob a legenda, os botões ou a barra superior. Se legendas queimadas no vídeo estiverem lá, avise; elas precisam ser reexportadas mais acima.
  • O hook está na tela no primeiro meio segundo, em palavras ou na imagem, e funciona no 4:5 central que o feed principal geralmente mostra.
  • Material paisagem ou quadrado: ig_check.py --fix não o preencherá com barras desfocadas sozinho (isso parece um repost) nem o cortará às cegas. Olhe reel.py frames, depois escolha: um Reel emoldurado ("frame": {"title": "..."} e "own_footage": true no post: o vídeo em largura total em um fundo liso correspondente com o hook como título acima, nada cortado; melhor quando o vídeo tem texto ou planos abertos), --fit crop quando o assunto permanece no centro, ou reenquadrar no assunto em um editor.
  • Apenas o próprio material do usuário. Um clipe de outra pessoa (um clipe de notícias, outro criador, vídeo de uma agência pública) com um título ou borda adicionada ainda é um repost no Instagram. Use-o apenas como uma parte curta do próprio vídeo do usuário, com sua própria voz ou material ao redor.
  • Para testar dois hooks, poste ambas as versões como Reels de Teste ("trial": "MANUAL") quando a conta se qualificar, e mantenha o que prender os espectadores por mais tempo.
  • Reels apenas com texto (palavras animadas, estatísticas, listas) não são feitos por esta skill. Se o usuário quiser um, diga claramente e sugira uma ferramenta de vídeo, ou poste a ideia como um carrossel.

Stories: uma imagem ou vídeo em 9:16. Faça quadros de Story com render_slides.py e "ratio": "9:16" no tema (tipos de slide de texto; o design fica longe da barra de Story e do campo de resposta, sem seta de deslizar). Através da API não existem adesivos, links ou enquetes. Dois bons padrões:

  • Teaser antes do post (agendado): uma pergunta que o post responde, 30 a 90 minutos antes. Vincule-o ao post com "with": {"post": "<id>", "minutes": -60}, e faça com que qualquer hora escrita no quadro ("em uma hora") corresponda a esses minutos.
  • Compartilhar após o post (no aplicativo): o usuário compartilha o novo post em seu Story com o adesivo do post, que direciona ao toque. Isso não pode ser feito através da API; vai na checklist e em schedule.md.

Etapa 4: Escrever as legendas

  • As primeiras palavras carregam a frase de pesquisa e o hook. A pesquisa do Instagram e o Google leem legendas. O feed corta por volta de 125 caracteres com "... mais": tudo que importa vai antes disso.
  • Depois, uma ou duas linhas de contexto, o mesmo pedido do último slide, e no máximo 5 hashtags específicas (limite do Instagram desde dezembro de 2025). Sem paredes de hashtags, sem tags genéricas como #instagood.
  • Links não são clicáveis nas legendas: "link na bio" apenas se estiver na bio.
  • Sem travessões longos, sem "No mundo acelerado de hoje", sem paredes de emojis. Leia em voz alta; se soar como um anúncio ou um robô, reescreva.
  • Várias contas: cada conta recebe sua própria versão, não apenas sua própria legenda. As regras de originalidade do Instagram de 2026 cobrem fotos e carrosséis também, então a mesma mídia em uma segunda conta provavelmente é vista como um repost do primeiro upload. Dê a cada conta sua própria mídia (targets[].media: outro idioma nos slides, outra capa, outra ordem ou ângulo) e sua própria primeira linha e hashtags (targets[].caption). Escreva para o país da conta: "grifo" na Espanha, "llave" no México; mantenha acentos nas hashtags (#geografía).
  • Escreva texto alternativo para cada imagem (alt no plano). O usuário cola no aplicativo.

Etapa 5: Verificar e corrigir

python3 scripts/ig_check.py plan.json          # relatório
python3 scripts/ig_check.py plan.json --fix    # cópias corrigidas em fixed/, plano atualizado, originais mantidos

Ele verifica tipo de arquivo, cor, tamanho, formato, contagem de carrossel e correspondência de formato, codec de vídeo, formato de pixel, HDR, taxa de quadros, duração, áudio, tamanho do arquivo, capa do Reel, comprimento da legenda, hashtags, menções, o corte "... mais", links, primeiras linhas idênticas entre contas e posts por dia. --fit crop|pad|frame decide como as formas mudam. Auto, para fotos: cortar quando pouco se perde, caso contrário, preencher com uma cópia desfocada. Auto, para vídeo de Reel e Story: cortar quando pouco se perde, caso contrário, parar e perguntar (veja Etapa 3). --ratio 4:5 torna fotos largas 4:5. Execute até que ele saia com 0. Explique qualquer erro que ele não possa corrigir em palavras simples (um vídeo muito longo precisa ser cortado, uma foto muito pequena precisa de um original maior).

Etapa 6: Agendar

python3 scripts/schedule.py plan.json --start 2026-11-09   # horários e fusos horários vêm das contas em plan.json
  • Cada conta posta em seus próprios times em seu próprio timezone (definido em accounts no plano), a partir do Insights do usuário ou de sua escolha. Sem eles, usa 12:00 e avisa no topo de schedule.md. Nunca reivindique um "melhor horário".
  • Um post no feed por conta por dia por padrão (--per-day). Stories não ocupam um slot de feed; eles seguem o post ao qual estão vinculados (with).
  • Ele escreve schedule.md (com o que fazer na primeira hora após cada post: estar online para responder, compartilhar o post no Story, a checklist) e uma requisição WoopSocial por post e conta em requests/.

Etapa 7: Prévia e o sim

python3 scripts/preview.py plan.json --out preview/ [--grid current-grid.png]

Olhe preview/preview.png você mesmo primeiro: a grade de cada conta (mais recente primeiro, conforme a grade a corta), cada post no feed em cada conta com sua própria legenda e corte "... mais", Reels com seu corte 4:5 no feed, Stories em tela cheia, cada slide em ordem. Corrija o que estiver errado. Depois, dê ao usuário preview/index.html (e schedule.md) e peça um sim claro para o lote. Passe a captura de tela da grade da Etapa 1 com --grid para mostrar os novos posts ao lado dos antigos. Qualquer alteração significa uma nova verificação e uma nova prévia.

Etapa 8: Postar com WoopSocial

Detalhes: references/woopsocial.md.

  1. social_accounts_list para os IDs das contas; coloque-os em accounts no plano.
  2. Faça upload de cada arquivo (media_uploads_create_session, scripts/upload_parts.py, media_uploads_complete_session), um de cada vez. Coloque os IDs em mediaIds e coverId, depois python3 scripts/schedule.py plan.json --bodies-only.
  3. posts_validate cada requisição. Corrija tudo que for rejeitado.
  4. Após o sim: posts_create por requisição, escreva cada ID de post no postId do destino, posts_get para o status, depois python3 scripts/log.py record plan.json.
  5. Diga ao usuário exatamente o que está agendado (conta, hora com fuso horário) e o que adicionar no aplicativo: os itens da checklist e o texto alternativo.

Não está conectado e não quer conectar? Entregue os arquivos, legendas, texto alternativo e o cronograma, e pare. Nunca diga que algo foi postado ou agendado quando não foi.

Etapa 9: Aprender com os números

Após 3 a 7 dias: social_account_posts_list para as contas, salvo como metrics.json, depois

python3 scripts/log.py results --metrics metrics.json [--csv insights.csv]

Ele classifica os posts por compartilhamentos, salvamentos e seguidores por alcance, apenas contra posts do mesmo formato na mesma conta e de idade semelhante (3 a 10 dias), nomeia um melhor post apenas após 6 de um formato, e dá conselhos de horário de postagem apenas com posts suficientes por intervalo de tempo. Stories são deixadas de fora. insights.csv adiciona o que apenas o aplicativo mostra: seguidores e, para Reels, tempo médio de exibição, toques no perfil e de onde vieram (casa, pesquisa, Reels, perfil). Depois, escreva um relatório de 3 a 5 frases: qual post ganhou e por quê, o que perder e o que fazer diferente.

Referências

  • references/formats.md — modelos de slide e padrões de capa
  • references/design-rules.md — predefinições, tipos de slide e regras
  • references/plan-json.md — definição do esquema e campos de plan.json
  • references/woopsocial.md — guia da API WoopSocial e instruções de conexão

Habilidades Relacionadas