@aksp/opencrew 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +139 -139
  2. package/README.md +150 -150
  3. package/package.json +63 -63
  4. package/src/cli.js +136 -136
  5. package/src/commands/init.js +125 -103
  6. package/src/commands/update.js +87 -77
  7. package/src/lib/fsx.js +127 -76
  8. package/templates/.mcp.json +9 -9
  9. package/templates/AGENTS.md +133 -133
  10. package/templates/_opencrew/.opencrew-version +1 -1
  11. package/templates/_opencrew/_memory/preferences.md +11 -10
  12. package/templates/_opencrew/agents/copywriter.agent.md +66 -0
  13. package/templates/_opencrew/agents/designer.agent.md +65 -0
  14. package/templates/_opencrew/agents/researcher.agent.md +95 -0
  15. package/templates/_opencrew/agents/reviewer.agent.md +76 -0
  16. package/templates/_opencrew/agents/strategist.agent.md +64 -0
  17. package/templates/_opencrew/core/architect.agent.yaml +1 -1
  18. package/templates/_opencrew/core/prompts/build.prompt.md +614 -586
  19. package/templates/_opencrew/core/prompts/design.prompt.md +254 -26
  20. package/templates/_opencrew/core/prompts/discovery.prompt.md +42 -1
  21. package/templates/_opencrew/core/prompts/export.prompt.md +133 -0
  22. package/templates/_opencrew/core/prompts/repair.prompt.md +119 -119
  23. package/templates/_opencrew/core/prompts/sherlock-seo.md +216 -0
  24. package/templates/_opencrew/core/prompts/sherlock-shared.md +73 -1
  25. package/templates/_opencrew/core/prompts/sherlock-trends.md +238 -0
  26. package/templates/_opencrew/core/prompts/sherlock-web.md +220 -0
  27. package/templates/_opencrew/core/runner.pipeline.md +729 -642
  28. package/templates/_opencrew/core/skills.engine.md +490 -429
  29. package/templates/crews/blog-semanal/discovery.template.yaml +35 -0
  30. package/templates/crews/instagram-carrossel/discovery.template.yaml +35 -0
  31. package/templates/crews/lancamento-produto/discovery.template.yaml +39 -0
  32. package/templates/crews/newsletter-mensal/discovery.template.yaml +29 -0
  33. package/templates/skills/README.md +22 -22
  34. package/templates/skills/catalog.json +61 -61
  35. package/templates/skills/instagram-publisher/SKILL.md +119 -119
@@ -0,0 +1,35 @@
1
+ # Template: Blog Semanal
2
+ # Escolha este template para crews que produzem artigos de blog com SEO e divulgação.
3
+
4
+ template: blog-semanal
5
+ label: "Blog Semanal"
6
+ description: >
7
+ Criação de artigos para blog com pesquisa de SEO, redação otimizada,
8
+ e divulgação nas redes sociais. Pipeline completo: pesquisador →
9
+ redator SEO → revisor → social media writer.
10
+ icon: 📝
11
+ domains:
12
+ - content-marketing
13
+ - seo
14
+ - copywriting
15
+ audience: "Leitores de blog corporativo, gestores, tomadores de decisão e profissionais buscando conteúdo educativo aprofundado"
16
+ format: blog-seo
17
+ tier: standard
18
+ suggested_agents:
19
+ - role: researcher
20
+ title: "Pesquisador SEO"
21
+ description: "Encontra keywords, analisa concorrentes, mapeia conteúdo gaps e produz research brief"
22
+ skills: [web_search, web_fetch]
23
+ - role: copywriter
24
+ title: "Redator SEO"
25
+ description: "Escreve artigos otimizados com base no research brief, aplicando hooks, estrutura e CTAs"
26
+ skills: [web_search]
27
+ - role: reviewer
28
+ title: "Revisor de Conteúdo"
29
+ description: "Avalia qualidade, SEO, tom de voz e aderência ao briefing antes da publicação"
30
+ skills: []
31
+ - role: social-writer
32
+ title: "Social Media Writer"
33
+ description: "Adapta o artigo para formatos de redes sociais (LinkedIn, Twitter, Instagram)"
34
+ skills: []
35
+ optional: true
@@ -0,0 +1,35 @@
1
+ # Template: Instagram Carrossel
2
+ # Escolha este template para crews que produzem carrosséis educativos para Instagram.
3
+
4
+ template: instagram-carrossel
5
+ label: "Instagram Carrossel"
6
+ description: >
7
+ Criação de carrosséis educativos para Instagram com pesquisa de
8
+ referências, geração de ângulos, design visual e copy otimizada.
9
+ Pipeline completo: pesquisador → criador → revisor → designer.
10
+ icon: 🎠
11
+ domains:
12
+ - social-media
13
+ - instagram
14
+ - copywriting
15
+ - image-design
16
+ audience: "Seguidores do Instagram buscando conteúdo educativo, dicas práticas e insights visuais sobre o nicho"
17
+ format: instagram-feed
18
+ tier: standard
19
+ suggested_agents:
20
+ - role: researcher
21
+ title: "Pesquisador de Tendências"
22
+ description: "Pesquisa referências, padrões virais e hooks de alto engajamento no Instagram"
23
+ skills: [web_search]
24
+ - role: creator
25
+ title: "Criador de Carrossel"
26
+ description: "Gera ângulos, escreve slides e caption otimizados para carrossel educativo"
27
+ skills: []
28
+ - role: reviewer
29
+ title: "Revisor de Conteúdo"
30
+ description: "Avalia coesão do carrossel, força dos hooks, qualidade do copy e CTAs"
31
+ skills: []
32
+ - role: designer
33
+ title: "Designer Visual"
34
+ description: "Cria os slides do carrossel com identidade visual consistente"
35
+ skills: [image-creator]
@@ -0,0 +1,39 @@
1
+ # Template: Lançamento de Produto
2
+ # Escolha este template para crews que preparam o lançamento de um produto ou feature.
3
+
4
+ template: lancamento-produto
5
+ label: "Lançamento de Produto"
6
+ description: >
7
+ Estratégia completa de lançamento: pesquisa de mercado, posicionamento,
8
+ copy de lançamento, posts para redes sociais e email de lançamento.
9
+ Pipeline: estrategista → redator → social writer → revisor.
10
+ icon: 🚀
11
+ domains:
12
+ - product-marketing
13
+ - copywriting
14
+ - social-media
15
+ - email-marketing
16
+ audience: "Potenciais clientes e usuários — early adopters, leads qualificados e base atual de usuários"
17
+ format: null
18
+ tier: full
19
+ suggested_agents:
20
+ - role: strategist
21
+ title: "Estrategista de Lançamento"
22
+ description: "Define posicionamento, ângulos de lançamento, storytelling e calendário de divulgação"
23
+ skills: [web_search]
24
+ - role: copywriter
25
+ title: "Redator de Lançamento"
26
+ description: "Escreve copy de lançamento: landing page, headline, bullets de features, story de produto"
27
+ skills: []
28
+ - role: social-writer
29
+ title: "Social Media Writer"
30
+ description: "Adapta o conteúdo de lançamento para LinkedIn, Twitter/X e Instagram"
31
+ skills: []
32
+ - role: email-writer
33
+ title: "Redator de Email"
34
+ description: "Escreve sequência de emails de lançamento: teaser → launch day → follow-up"
35
+ skills: []
36
+ - role: reviewer
37
+ title: "Revisor de Lançamento"
38
+ description: "Revisa consistência da narrativa, força dos ganchos, CTAs e tom em todos os canais"
39
+ skills: []
@@ -0,0 +1,29 @@
1
+ # Template: Newsletter Mensal
2
+ # Escolha este template para crews que produzem newsletters mensais por email.
3
+
4
+ template: newsletter-mensal
5
+ label: "Newsletter Mensal"
6
+ description: >
7
+ Criação de newsletter mensal com curadoria de conteúdo, redação de email,
8
+ e análise de métricas. Pipeline: curador → redator → revisor.
9
+ icon: 📧
10
+ domains:
11
+ - email-marketing
12
+ - copywriting
13
+ - content-curation
14
+ audience: "Assinantes de newsletter — profissionais que buscam curadoria de qualidade, insights do setor e conteúdo exclusivo no email"
15
+ format: email-newsletter
16
+ tier: express
17
+ suggested_agents:
18
+ - role: curator
19
+ title: "Curador de Conteúdo"
20
+ description: "Seleciona e rankeia os conteúdos mais relevantes da semana/mês para a newsletter"
21
+ skills: [web_search, web_fetch]
22
+ - role: copywriter
23
+ title: "Redator de Newsletter"
24
+ description: "Escreve o email com tom pessoal, linhas de assunto magnéticas e CTAs efetivos"
25
+ skills: []
26
+ - role: reviewer
27
+ title: "Revisor Final"
28
+ description: "Revisa tom, links, CTAs e consistência antes do envio"
29
+ skills: []
@@ -1,22 +1,22 @@
1
- # Catálogo de Skills — opencrew
2
-
3
- Este é o índice de skills disponíveis no catálogo oficial do opencrew. O Skills Engine
4
- (`_opencrew/core/skills.engine.md`) lê este arquivo durante a descoberta de skills (Operação 7)
5
- e busca `SKILL.md` de cada uma via `https://raw.githubusercontent.com/alberthpalhares/opencrew/main/templates/skills/<name>/SKILL.md`
6
- para instalação (Operação 2).
7
-
8
- | Skill | Tipo | Descrição |
9
- |-------|------|-----------|
10
- | `apify` | mcp | Plataforma de web scraping e automação. Extrai dados de qualquer site usando Actors prontos da Apify Store. |
11
- | `blotato` | mcp | Publicação e agendamento em redes sociais (Instagram, LinkedIn, Twitter/X, TikTok, YouTube). |
12
- | `canva` | mcp | Cria, busca, preenche e exporta designs do Canva (autenticação via OAuth). |
13
- | `image-ai-generator` | script | Gera imagens via API do OpenRouter (modo teste barato + modo produção de alta qualidade). |
14
- | `image-creator` | mcp | Renderiza HTML/CSS em imagens pixel-perfect via Playwright. Motor genérico para qualquer formato visual. |
15
- | `image-fetcher` | hybrid | Obtém assets visuais de múltiplas fontes: busca na web, screenshots via Playwright, arquivos do usuário. |
16
- | `instagram-publisher` | script | Publica carrosséis do Instagram a partir de imagens locais via imgBB + Graph API. |
17
- | `opencrew-best-practice-creator` | prompt | Guia a criação e manutenção de arquivos de best-practice na biblioteca do opencrew. |
18
- | `opencrew-skill-creator` | prompt | Cria, edita e avalia (evals/benchmark) skills do opencrew de qualquer tipo. |
19
- | `resend` | mcp | Envio de emails pelo servidor MCP oficial da Resend (individual, lote, anexos, agendamento). |
20
- | `template-designer` | prompt | Seleção de template visual para agentes de design — gera variações, renderiza e salva a identidade aprovada. |
21
-
22
- Para instalar qualquer uma delas dentro da sua IDE: `/opencrew install <nome>`.
1
+ # Catálogo de Skills — opencrew
2
+
3
+ Este é o índice de skills disponíveis no catálogo oficial do opencrew. O Skills Engine
4
+ (`_opencrew/core/skills.engine.md`) lê este arquivo durante a descoberta de skills (Operação 7)
5
+ e busca `SKILL.md` de cada uma via `https://raw.githubusercontent.com/alberthpalhares/opencrew/main/templates/skills/<name>/SKILL.md`
6
+ para instalação (Operação 2).
7
+
8
+ | Skill | Tipo | Descrição |
9
+ |-------|------|-----------|
10
+ | `apify` | mcp | Plataforma de web scraping e automação. Extrai dados de qualquer site usando Actors prontos da Apify Store. |
11
+ | `blotato` | mcp | Publicação e agendamento em redes sociais (Instagram, LinkedIn, Twitter/X, TikTok, YouTube). |
12
+ | `canva` | mcp | Cria, busca, preenche e exporta designs do Canva (autenticação via OAuth). |
13
+ | `image-ai-generator` | script | Gera imagens via API do OpenRouter (modo teste barato + modo produção de alta qualidade). |
14
+ | `image-creator` | mcp | Renderiza HTML/CSS em imagens pixel-perfect via Playwright. Motor genérico para qualquer formato visual. |
15
+ | `image-fetcher` | hybrid | Obtém assets visuais de múltiplas fontes: busca na web, screenshots via Playwright, arquivos do usuário. |
16
+ | `instagram-publisher` | script | Publica carrosséis do Instagram a partir de imagens locais via imgBB + Graph API. |
17
+ | `opencrew-best-practice-creator` | prompt | Guia a criação e manutenção de arquivos de best-practice na biblioteca do opencrew. |
18
+ | `opencrew-skill-creator` | prompt | Cria, edita e avalia (evals/benchmark) skills do opencrew de qualquer tipo. |
19
+ | `resend` | mcp | Envio de emails pelo servidor MCP oficial da Resend (individual, lote, anexos, agendamento). |
20
+ | `template-designer` | prompt | Seleção de template visual para agentes de design — gera variações, renderiza e salva a identidade aprovada. |
21
+
22
+ Para instalar qualquer uma delas dentro da sua IDE: `/opencrew install <nome>`.
@@ -1,61 +1,61 @@
1
- {
2
- "version": "1",
3
- "baseUrl": "https://raw.githubusercontent.com/alberthpalhares/opencrew/main/templates/skills",
4
- "skills": {
5
- "apify": {
6
- "type": "mcp",
7
- "description": "Plataforma de web scraping e automação. Extrai dados de qualquer site usando Actors prontos da Apify Store.",
8
- "minVersion": "1.0.0"
9
- },
10
- "blotato": {
11
- "type": "mcp",
12
- "description": "Publicação e agendamento em redes sociais (Instagram, LinkedIn, Twitter/X, TikTok, YouTube).",
13
- "minVersion": "1.0.0"
14
- },
15
- "canva": {
16
- "type": "mcp",
17
- "description": "Cria, busca, preenche e exporta designs do Canva (autenticação via OAuth).",
18
- "minVersion": "1.0.0"
19
- },
20
- "image-ai-generator": {
21
- "type": "script",
22
- "description": "Gera imagens via API do OpenRouter (modo teste barato + modo produção de alta qualidade).",
23
- "minVersion": "1.0.0"
24
- },
25
- "image-creator": {
26
- "type": "mcp",
27
- "description": "Renderiza HTML/CSS em imagens pixel-perfect via Playwright. Motor genérico para qualquer formato visual.",
28
- "minVersion": "1.0.0"
29
- },
30
- "image-fetcher": {
31
- "type": "hybrid",
32
- "description": "Obtém assets visuais de múltiplas fontes: busca na web, screenshots via Playwright, arquivos do usuário.",
33
- "minVersion": "1.0.0"
34
- },
35
- "instagram-publisher": {
36
- "type": "script",
37
- "description": "Publica carrosséis do Instagram a partir de imagens locais via imgBB + Graph API.",
38
- "minVersion": "1.0.0"
39
- },
40
- "opencrew-best-practice-creator": {
41
- "type": "prompt",
42
- "description": "Guia a criação e manutenção de arquivos de best-practice na biblioteca do opencrew.",
43
- "minVersion": "1.0.0"
44
- },
45
- "opencrew-skill-creator": {
46
- "type": "prompt",
47
- "description": "Cria, edita e avalia (evals/benchmark) skills do opencrew de qualquer tipo.",
48
- "minVersion": "1.0.0"
49
- },
50
- "resend": {
51
- "type": "mcp",
52
- "description": "Envio de emails pelo servidor MCP oficial da Resend (individual, lote, anexos, agendamento).",
53
- "minVersion": "1.0.0"
54
- },
55
- "template-designer": {
56
- "type": "prompt",
57
- "description": "Seleção de template visual para agentes de design — gera variações, renderiza e salva a identidade aprovada.",
58
- "minVersion": "1.0.0"
59
- }
60
- }
61
- }
1
+ {
2
+ "version": "1",
3
+ "baseUrl": "https://raw.githubusercontent.com/alberthpalhares/opencrew/main/templates/skills",
4
+ "skills": {
5
+ "apify": {
6
+ "type": "mcp",
7
+ "description": "Plataforma de web scraping e automação. Extrai dados de qualquer site usando Actors prontos da Apify Store.",
8
+ "minVersion": "1.0.0"
9
+ },
10
+ "blotato": {
11
+ "type": "mcp",
12
+ "description": "Publicação e agendamento em redes sociais (Instagram, LinkedIn, Twitter/X, TikTok, YouTube).",
13
+ "minVersion": "1.0.0"
14
+ },
15
+ "canva": {
16
+ "type": "mcp",
17
+ "description": "Cria, busca, preenche e exporta designs do Canva (autenticação via OAuth).",
18
+ "minVersion": "1.0.0"
19
+ },
20
+ "image-ai-generator": {
21
+ "type": "script",
22
+ "description": "Gera imagens via API do OpenRouter (modo teste barato + modo produção de alta qualidade).",
23
+ "minVersion": "1.0.0"
24
+ },
25
+ "image-creator": {
26
+ "type": "mcp",
27
+ "description": "Renderiza HTML/CSS em imagens pixel-perfect via Playwright. Motor genérico para qualquer formato visual.",
28
+ "minVersion": "1.0.0"
29
+ },
30
+ "image-fetcher": {
31
+ "type": "hybrid",
32
+ "description": "Obtém assets visuais de múltiplas fontes: busca na web, screenshots via Playwright, arquivos do usuário.",
33
+ "minVersion": "1.0.0"
34
+ },
35
+ "instagram-publisher": {
36
+ "type": "script",
37
+ "description": "Publica carrosséis do Instagram a partir de imagens locais via imgBB + Graph API.",
38
+ "minVersion": "1.0.0"
39
+ },
40
+ "opencrew-best-practice-creator": {
41
+ "type": "prompt",
42
+ "description": "Guia a criação e manutenção de arquivos de best-practice na biblioteca do opencrew.",
43
+ "minVersion": "1.0.0"
44
+ },
45
+ "opencrew-skill-creator": {
46
+ "type": "prompt",
47
+ "description": "Cria, edita e avalia (evals/benchmark) skills do opencrew de qualquer tipo.",
48
+ "minVersion": "1.0.0"
49
+ },
50
+ "resend": {
51
+ "type": "mcp",
52
+ "description": "Envio de emails pelo servidor MCP oficial da Resend (individual, lote, anexos, agendamento).",
53
+ "minVersion": "1.0.0"
54
+ },
55
+ "template-designer": {
56
+ "type": "prompt",
57
+ "description": "Seleção de template visual para agentes de design — gera variações, renderiza e salva a identidade aprovada.",
58
+ "minVersion": "1.0.0"
59
+ }
60
+ }
61
+ }
@@ -1,119 +1,119 @@
1
- ---
2
- name: instagram-publisher
3
- description: >
4
- Publishes Instagram carousel posts from local images.
5
- Uploads images to imgBB (requires API key) for public hosting, creates Instagram
6
- media containers via the Graph API, and publishes the carousel.
7
- Supports 2-10 images per post and retrieves the real post permalink.
8
- description_pt-BR: >
9
- Publica carrosséis do Instagram a partir de imagens locais.
10
- Faz upload das imagens para o imgBB (requer chave de API) como hospedagem pública,
11
- cria containers de mídia via Graph API e publica o carrossel.
12
- Suporta de 2 a 10 imagens por post e obtém o permalink real.
13
- description_es: >
14
- Publica carruseles de Instagram a partir de imágenes locales.
15
- Sube las imágenes a imgBB (requiere clave de API) como hosting público, crea
16
- contenedores de medios vía Graph API y publica el carrusel.
17
- Soporta de 2 a 10 imágenes por post y obtiene el permalink real.
18
- type: script
19
- version: "1.0.0"
20
- script:
21
- path: scripts/publish.js
22
- runtime: node
23
- invoke: "node --env-file=.env {skill_path}/scripts/publish.js --images \"{images}\" --caption \"{caption}\""
24
- env:
25
- - INSTAGRAM_ACCESS_TOKEN
26
- - INSTAGRAM_USER_ID
27
- - IMGBB_API_KEY
28
- categories: [social-media, publishing, instagram]
29
- ---
30
-
31
- # Instagram Publisher
32
-
33
- ## When to use
34
-
35
- 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 imgBB (requires your own API key from https://api.imgbb.com/), creating Instagram media containers via the Graph API, and publishing the carousel. It supports 2-10 JPEG images per post.
36
-
37
-
38
- ## Instructions
39
-
40
- ### Workflow
41
-
42
- 1. List JPEG files in `crews/{crew}/output/images/` sorted by name.
43
- If no files found: stop and ask the user to add images before continuing.
44
- 2. Present the image list to the user to confirm order (use your IDE's native interactive-choice mechanism if it has one; otherwise a numbered list).
45
- 3. Extract the caption from the content draft:
46
- - Use the hook slide text + CTA slide text
47
- - Max 2200 characters (Instagram limit)
48
- 4. Run the publish script:
49
- ```
50
- node --env-file=.env crews/{crew}/tools/publish.js \
51
- --images "<comma-separated-ordered-paths>" \
52
- --caption "<caption>"
53
- ```
54
- Add `--dry-run` to test the full flow without actually publishing.
55
- 5. On success: save the post URL and post ID to the step output file.
56
- 6. On failure: display the error and ask the user how to proceed.
57
-
58
- ### Constraints
59
-
60
- - Images: JPEG only, 2-10 per carousel
61
- - Caption: max 2200 characters
62
- - Requires Instagram Business account (not Personal or Creator)
63
- - Rate limit: 25 API-published posts per 24 hours
64
-
65
- ### Setup (first-time)
66
-
67
- Copy `.env.example` to `.env` and fill in the two required variables:
68
-
69
- ```
70
- INSTAGRAM_ACCESS_TOKEN=
71
- INSTAGRAM_USER_ID=
72
- ```
73
-
74
- #### INSTAGRAM_ACCESS_TOKEN
75
-
76
- Pré-requisito: conta Instagram Business conectada a uma Página do Facebook, e um app criado em [developers.facebook.com](https://developers.facebook.com/) (tipo: **Empresa**).
77
-
78
- **Para obter um token de longa duração (válido 60 dias):**
79
-
80
- 1. Acesse seu app → **Graph API Explorer**
81
- 2. No dropdown do topo, selecione seu app
82
- 3. Clique em **"Gerar token de acesso"**
83
- 4. Ative as permissões:
84
- - `instagram_content_publish`
85
- - `instagram_basic`
86
- - `pages_read_engagement`
87
- 5. Clique em **"Gerar token de acesso"** e autorize — você receberá um token de curta duração (1h)
88
- 6. Converta para longa duração (60 dias) com este GET:
89
- ```
90
- https://graph.facebook.com/oauth/access_token
91
- ?grant_type=fb_exchange_token
92
- &client_id={APP_ID}
93
- &client_secret={APP_SECRET}
94
- &fb_exchange_token={TOKEN_CURTO}
95
- ```
96
- _(APP_ID e APP_SECRET: seu app → Configurações → Básico)_
97
- 7. Copie o `access_token` da resposta e cole em `.env`
98
-
99
- > O token expira em 60 dias. Repita o processo para renovar.
100
-
101
- #### INSTAGRAM_USER_ID
102
-
103
- 1. No Graph API Explorer (com o token acima), faça GET em:
104
- ```
105
- /me/accounts
106
- ```
107
- 2. Localize sua **Página do Facebook** na resposta e anote o `id`
108
- 3. Faça GET em:
109
- ```
110
- /{page-id}?fields=instagram_business_account
111
- ```
112
- 4. Copie o `id` dentro de `instagram_business_account` — esse é o seu User ID
113
-
114
- ## Available operations
115
-
116
- - **Publish Carousel** -- Upload images and publish a carousel post to Instagram
117
- - **Dry Run** -- Test the full publishing flow without actually posting (use `--dry-run` flag)
118
- - **Image Upload** -- Upload local JPEG images to imgBB (requires API key)
119
- - **Status Check** -- Monitor media container processing status before publishing
1
+ ---
2
+ name: instagram-publisher
3
+ description: >
4
+ Publishes Instagram carousel posts from local images.
5
+ Uploads images to imgBB (requires API key) for public hosting, creates Instagram
6
+ media containers via the Graph API, and publishes the carousel.
7
+ Supports 2-10 images per post and retrieves the real post permalink.
8
+ description_pt-BR: >
9
+ Publica carrosséis do Instagram a partir de imagens locais.
10
+ Faz upload das imagens para o imgBB (requer chave de API) como hospedagem pública,
11
+ cria containers de mídia via Graph API e publica o carrossel.
12
+ Suporta de 2 a 10 imagens por post e obtém o permalink real.
13
+ description_es: >
14
+ Publica carruseles de Instagram a partir de imágenes locales.
15
+ Sube las imágenes a imgBB (requiere clave de API) como hosting público, crea
16
+ contenedores de medios vía Graph API y publica el carrusel.
17
+ Soporta de 2 a 10 imágenes por post y obtiene el permalink real.
18
+ type: script
19
+ version: "1.0.0"
20
+ script:
21
+ path: scripts/publish.js
22
+ runtime: node
23
+ invoke: "node --env-file=.env {skill_path}/scripts/publish.js --images \"{images}\" --caption \"{caption}\""
24
+ env:
25
+ - INSTAGRAM_ACCESS_TOKEN
26
+ - INSTAGRAM_USER_ID
27
+ - IMGBB_API_KEY
28
+ categories: [social-media, publishing, instagram]
29
+ ---
30
+
31
+ # Instagram Publisher
32
+
33
+ ## When to use
34
+
35
+ 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 imgBB (requires your own API key from https://api.imgbb.com/), creating Instagram media containers via the Graph API, and publishing the carousel. It supports 2-10 JPEG images per post.
36
+
37
+
38
+ ## Instructions
39
+
40
+ ### Workflow
41
+
42
+ 1. List JPEG files in `crews/{crew}/output/images/` sorted by name.
43
+ If no files found: stop and ask the user to add images before continuing.
44
+ 2. Present the image list to the user to confirm order (use your IDE's native interactive-choice mechanism if it has one; otherwise a numbered list).
45
+ 3. Extract the caption from the content draft:
46
+ - Use the hook slide text + CTA slide text
47
+ - Max 2200 characters (Instagram limit)
48
+ 4. Run the publish script:
49
+ ```
50
+ node --env-file=.env crews/{crew}/tools/publish.js \
51
+ --images "<comma-separated-ordered-paths>" \
52
+ --caption "<caption>"
53
+ ```
54
+ Add `--dry-run` to test the full flow without actually publishing.
55
+ 5. On success: save the post URL and post ID to the step output file.
56
+ 6. On failure: display the error and ask the user how to proceed.
57
+
58
+ ### Constraints
59
+
60
+ - Images: JPEG only, 2-10 per carousel
61
+ - Caption: max 2200 characters
62
+ - Requires Instagram Business account (not Personal or Creator)
63
+ - Rate limit: 25 API-published posts per 24 hours
64
+
65
+ ### Setup (first-time)
66
+
67
+ Copy `.env.example` to `.env` and fill in the two required variables:
68
+
69
+ ```
70
+ INSTAGRAM_ACCESS_TOKEN=
71
+ INSTAGRAM_USER_ID=
72
+ ```
73
+
74
+ #### INSTAGRAM_ACCESS_TOKEN
75
+
76
+ Pré-requisito: conta Instagram Business conectada a uma Página do Facebook, e um app criado em [developers.facebook.com](https://developers.facebook.com/) (tipo: **Empresa**).
77
+
78
+ **Para obter um token de longa duração (válido 60 dias):**
79
+
80
+ 1. Acesse seu app → **Graph API Explorer**
81
+ 2. No dropdown do topo, selecione seu app
82
+ 3. Clique em **"Gerar token de acesso"**
83
+ 4. Ative as permissões:
84
+ - `instagram_content_publish`
85
+ - `instagram_basic`
86
+ - `pages_read_engagement`
87
+ 5. Clique em **"Gerar token de acesso"** e autorize — você receberá um token de curta duração (1h)
88
+ 6. Converta para longa duração (60 dias) com este GET:
89
+ ```
90
+ https://graph.facebook.com/oauth/access_token
91
+ ?grant_type=fb_exchange_token
92
+ &client_id={APP_ID}
93
+ &client_secret={APP_SECRET}
94
+ &fb_exchange_token={TOKEN_CURTO}
95
+ ```
96
+ _(APP_ID e APP_SECRET: seu app → Configurações → Básico)_
97
+ 7. Copie o `access_token` da resposta e cole em `.env`
98
+
99
+ > O token expira em 60 dias. Repita o processo para renovar.
100
+
101
+ #### INSTAGRAM_USER_ID
102
+
103
+ 1. No Graph API Explorer (com o token acima), faça GET em:
104
+ ```
105
+ /me/accounts
106
+ ```
107
+ 2. Localize sua **Página do Facebook** na resposta e anote o `id`
108
+ 3. Faça GET em:
109
+ ```
110
+ /{page-id}?fields=instagram_business_account
111
+ ```
112
+ 4. Copie o `id` dentro de `instagram_business_account` — esse é o seu User ID
113
+
114
+ ## Available operations
115
+
116
+ - **Publish Carousel** -- Upload images and publish a carousel post to Instagram
117
+ - **Dry Run** -- Test the full publishing flow without actually posting (use `--dry-run` flag)
118
+ - **Image Upload** -- Upload local JPEG images to imgBB (requires API key)
119
+ - **Status Check** -- Monitor media container processing status before publishing