skills/renatoasse/opensquad/instagram-publisher

instagram-publisher

SKILL.md

Instagram Publisher

When to use

Use the Instagram Publisher when you need to publish carousel posts directly to an Instagram Business account. This skill handles the full workflow: uploading images to a temporary public host (catbox.moe), creating Instagram media containers via the Graph API, and publishing the carousel. It supports 2-10 JPEG images per post.

Instructions

Workflow

  1. List JPEG files in squads/{squad}/output/images/ sorted by name. If no files found: stop and ask the user to add images before continuing.
  2. Present the image list to the user with AskUserQuestion to confirm order.
  3. Extract the caption from the content draft:
    • Use the hook slide text + CTA slide text
    • Max 2200 characters (Instagram limit)
  4. Run the publish script:
    node --env-file=.env squads/{squad}/tools/publish.js \
      --images "<comma-separated-ordered-paths>" \
      --caption "<caption>"
    
    Add --dry-run to test the full flow without actually publishing.
  5. On success: save the post URL and post ID to the step output file.
  6. On failure: display the error and ask the user how to proceed.

Constraints

  • Images: JPEG only, 2-10 per carousel
  • Caption: max 2200 characters
  • Requires Instagram Business account (not Personal or Creator)
  • Rate limit: 25 API-published posts per 24 hours

Setup (first-time)

Copy .env.example to .env and fill in the two required variables:

INSTAGRAM_ACCESS_TOKEN=
INSTAGRAM_USER_ID=

INSTAGRAM_ACCESS_TOKEN

Pré-requisito: conta Instagram Business conectada a uma Página do Facebook, e um app criado em developers.facebook.com (tipo: Empresa).

Para obter um token de longa duração (válido 60 dias):

  1. Acesse seu app → Graph API Explorer
  2. No dropdown do topo, selecione seu app
  3. Clique em "Gerar token de acesso"
  4. Ative as permissões:
    • instagram_content_publish
    • instagram_basic
    • pages_read_engagement
  5. Clique em "Gerar token de acesso" e autorize — você receberá um token de curta duração (1h)
  6. Converta para longa duração (60 dias) com este GET:
    https://graph.facebook.com/oauth/access_token
      ?grant_type=fb_exchange_token
      &client_id={APP_ID}
      &client_secret={APP_SECRET}
      &fb_exchange_token={TOKEN_CURTO}
    
    (APP_ID e APP_SECRET: seu app → Configurações → Básico)
  7. Copie o access_token da resposta e cole em .env

O token expira em 60 dias. Repita o processo para renovar.

INSTAGRAM_USER_ID

  1. No Graph API Explorer (com o token acima), faça GET em:
    /me/accounts
    
  2. Localize sua Página do Facebook na resposta e anote o id
  3. Faça GET em:
    /{page-id}?fields=instagram_business_account
    
  4. Copie o id dentro de instagram_business_account — esse é o seu User ID

Available operations

  • Publish Carousel -- Upload images and publish a carousel post to Instagram
  • Dry Run -- Test the full publishing flow without actually posting (use --dry-run flag)
  • Image Upload -- Upload local JPEG images to catbox.moe for temporary public hosting
  • Status Check -- Monitor media container processing status before publishing
Weekly Installs
8
GitHub Stars
1.0K
First Seen
Mar 15, 2026
Installed on
amp8
cline8
opencode8
cursor8
kimi-cli8
codex8