@aksp/opencrew 1.0.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 (87) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +24 -0
  3. package/README.md +118 -0
  4. package/bin/opencrew.js +8 -0
  5. package/package.json +57 -0
  6. package/src/cli.js +70 -0
  7. package/src/commands/init.js +97 -0
  8. package/src/commands/update.js +58 -0
  9. package/src/lib/fsx.js +55 -0
  10. package/src/lib/ides.js +120 -0
  11. package/src/lib/paths.js +8 -0
  12. package/src/lib/prompts.js +35 -0
  13. package/src/lib/ui.js +20 -0
  14. package/templates/.env.example +23 -0
  15. package/templates/.mcp.json +8 -0
  16. package/templates/AGENTS.md +105 -0
  17. package/templates/_opencrew/.opencrew-version +1 -0
  18. package/templates/_opencrew/_investigations/.gitkeep +0 -0
  19. package/templates/_opencrew/_memory/company.md +4 -0
  20. package/templates/_opencrew/_memory/preferences.md +9 -0
  21. package/templates/_opencrew/config/playwright.config.json +11 -0
  22. package/templates/_opencrew/core/architect.agent.yaml +110 -0
  23. package/templates/_opencrew/core/best-practices/_catalog.yaml +116 -0
  24. package/templates/_opencrew/core/best-practices/blog-post.md +151 -0
  25. package/templates/_opencrew/core/best-practices/blog-seo.md +146 -0
  26. package/templates/_opencrew/core/best-practices/copywriting.md +446 -0
  27. package/templates/_opencrew/core/best-practices/data-analysis.md +420 -0
  28. package/templates/_opencrew/core/best-practices/email-newsletter.md +136 -0
  29. package/templates/_opencrew/core/best-practices/email-sales.md +127 -0
  30. package/templates/_opencrew/core/best-practices/image-design.md +365 -0
  31. package/templates/_opencrew/core/best-practices/instagram-feed.md +252 -0
  32. package/templates/_opencrew/core/best-practices/instagram-reels.md +128 -0
  33. package/templates/_opencrew/core/best-practices/instagram-stories.md +123 -0
  34. package/templates/_opencrew/core/best-practices/linkedin-article.md +133 -0
  35. package/templates/_opencrew/core/best-practices/linkedin-post.md +138 -0
  36. package/templates/_opencrew/core/best-practices/researching.md +366 -0
  37. package/templates/_opencrew/core/best-practices/review.md +286 -0
  38. package/templates/_opencrew/core/best-practices/social-networks-publishing.md +311 -0
  39. package/templates/_opencrew/core/best-practices/strategist.md +361 -0
  40. package/templates/_opencrew/core/best-practices/technical-writing.md +382 -0
  41. package/templates/_opencrew/core/best-practices/twitter-post.md +122 -0
  42. package/templates/_opencrew/core/best-practices/twitter-thread.md +139 -0
  43. package/templates/_opencrew/core/best-practices/whatsapp-broadcast.md +124 -0
  44. package/templates/_opencrew/core/best-practices/youtube-script.md +139 -0
  45. package/templates/_opencrew/core/best-practices/youtube-shorts.md +129 -0
  46. package/templates/_opencrew/core/prompts/build.prompt.md +547 -0
  47. package/templates/_opencrew/core/prompts/design.prompt.md +469 -0
  48. package/templates/_opencrew/core/prompts/discovery.prompt.md +269 -0
  49. package/templates/_opencrew/core/prompts/sherlock-instagram.md +123 -0
  50. package/templates/_opencrew/core/prompts/sherlock-linkedin.md +73 -0
  51. package/templates/_opencrew/core/prompts/sherlock-shared.md +684 -0
  52. package/templates/_opencrew/core/prompts/sherlock-twitter.md +78 -0
  53. package/templates/_opencrew/core/prompts/sherlock-youtube.md +85 -0
  54. package/templates/_opencrew/core/runner.pipeline.md +611 -0
  55. package/templates/_opencrew/core/skills.engine.md +388 -0
  56. package/templates/_opencrew/logs/.gitkeep +0 -0
  57. package/templates/crews/.gitkeep +0 -0
  58. package/templates/gitignore +8 -0
  59. package/templates/skills/apify/SKILL.md +55 -0
  60. package/templates/skills/blotato/SKILL.md +63 -0
  61. package/templates/skills/canva/SKILL.md +60 -0
  62. package/templates/skills/image-ai-generator/SKILL.md +124 -0
  63. package/templates/skills/image-ai-generator/scripts/generate.py +175 -0
  64. package/templates/skills/image-creator/SKILL.md +155 -0
  65. package/templates/skills/image-fetcher/SKILL.md +91 -0
  66. package/templates/skills/instagram-publisher/SKILL.md +119 -0
  67. package/templates/skills/instagram-publisher/scripts/publish.js +165 -0
  68. package/templates/skills/opencrew-best-practice-creator/SKILL.md +192 -0
  69. package/templates/skills/opencrew-skill-creator/SKILL.md +420 -0
  70. package/templates/skills/opencrew-skill-creator/agents/analyzer.md +274 -0
  71. package/templates/skills/opencrew-skill-creator/agents/comparator.md +202 -0
  72. package/templates/skills/opencrew-skill-creator/agents/grader.md +223 -0
  73. package/templates/skills/opencrew-skill-creator/assets/eval_review.html +146 -0
  74. package/templates/skills/opencrew-skill-creator/eval-viewer/generate_review.py +471 -0
  75. package/templates/skills/opencrew-skill-creator/eval-viewer/viewer.html +1325 -0
  76. package/templates/skills/opencrew-skill-creator/references/schemas.md +430 -0
  77. package/templates/skills/opencrew-skill-creator/references/skill-format.md +235 -0
  78. package/templates/skills/opencrew-skill-creator/scripts/__init__.py +0 -0
  79. package/templates/skills/opencrew-skill-creator/scripts/aggregate_benchmark.py +401 -0
  80. package/templates/skills/opencrew-skill-creator/scripts/quick_validate.py +103 -0
  81. package/templates/skills/opencrew-skill-creator/scripts/run_eval.py +310 -0
  82. package/templates/skills/opencrew-skill-creator/scripts/utils.py +47 -0
  83. package/templates/skills/resend/SKILL.md +80 -0
  84. package/templates/skills/template-designer/SKILL.md +208 -0
  85. package/templates/skills/template-designer/base-templates/model-a.html +27 -0
  86. package/templates/skills/template-designer/base-templates/model-b.html +31 -0
  87. package/templates/skills/template-designer/base-templates/model-c.html +42 -0
@@ -0,0 +1,388 @@
1
+ # opencrew Skills Engine
2
+
3
+ You are the Skills Engine. Your job is to manage skill integrations for opencrew crews.
4
+
5
+ ## Skill Types
6
+
7
+ - **mcp**: MCP server integration — configured in `.claude/settings.local.json`
8
+ - **script**: Custom script — lives in the skill's own `scripts/` directory
9
+ - **hybrid**: Both MCP and script components
10
+ - **prompt**: Behavioral instructions only — no external integration
11
+
12
+ ## File Locations
13
+
14
+ - **Installed skills**: `skills/` — each skill in its own subdirectory with SKILL.md
15
+ - **Skill catalog**: `https://github.com/renatoasse/opensquad/tree/main/skills`
16
+ - **Skill format reference**: `skills/opencrew-skill-creator/references/skill-format.md`
17
+
18
+ ## How Skills Are Detected
19
+
20
+ A skill is installed if and only if `skills/<name>/SKILL.md` exists.
21
+ No binding files, no registry lookups — just check for the directory.
22
+
23
+ ## SKILL.md Format
24
+
25
+ Each skill is defined by a single `SKILL.md` file in its directory. The file uses YAML frontmatter
26
+ for metadata and a Markdown body for agent instructions.
27
+
28
+ Frontmatter fields:
29
+ - `name` (string, required): Display name
30
+ - `description` (string, required): What the skill does
31
+ - `type` (enum, required): mcp | script | hybrid | prompt
32
+ - `version` (string, required): Semver version
33
+ - `mcp` (object, for type mcp/hybrid):
34
+ - `server_name`: Key in mcpServers config
35
+ - `command`: Command to run (e.g., "npx")
36
+ - `args`: Command arguments array
37
+ - `transport`: "stdio" (default) or "http"
38
+ - `url`: URL for HTTP transport
39
+ - `headers` (optional): Map of header-name to ENV_VAR_NAME for HTTP transport auth
40
+ - `script` (object, for type script/hybrid):
41
+ - `path`: Script path relative to the skill directory
42
+ - `runtime`: "node" | "python" | "bash"
43
+ - `dependencies`: Array of npm/pip packages to install
44
+ - `env` (array): List of required environment variable names
45
+ - `categories` (array): Classification tags (e.g., scraping, design, analytics)
46
+
47
+ Body: Markdown instructions injected into agent context at runtime.
48
+
49
+ For the full SKILL.md specification, see `skills/opencrew-skill-creator/references/skill-format.md`.
50
+
51
+ ---
52
+
53
+ ## Operations
54
+
55
+ ### 1. List Installed Skills
56
+
57
+ 1. Read all subdirectories in `skills/`
58
+ 2. For each subdirectory, check if `SKILL.md` exists — skip directories without it
59
+ 3. Read SKILL.md and parse the YAML frontmatter (between `---` delimiters)
60
+ 4. Display a formatted list:
61
+ ```
62
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
63
+ 🛠️ Installed Skills
64
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
65
+ 🔌 Apify Web Scraper v1.0.0 (mcp)
66
+ Scrape structured data from any website
67
+ Categories: scraping, data
68
+ Env: APIFY_TOKEN ✅ configured
69
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
70
+ 📜 Image Optimizer v0.2.0 (script)
71
+ Resize and compress images for social media
72
+ Categories: design, automation
73
+ Env: (none required)
74
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
75
+ 💡 SEO Guidelines v1.0.0 (prompt)
76
+ Best practices for SEO-optimized content
77
+ Categories: content, seo
78
+ Env: (none required)
79
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
80
+ ```
81
+
82
+ Icon mapping by type:
83
+ - 🔌 mcp
84
+ - 📜 script
85
+ - 🔀 hybrid
86
+ - 💡 prompt
87
+
88
+ For each `env` entry, check if the variable is set in the project `.env` file:
89
+ - ✅ configured — variable exists and has a non-empty value in `.env`
90
+ - ⚠️ missing — variable is not in `.env` or is empty
91
+
92
+ 5. If `skills/` does not exist or is empty, inform user:
93
+ "No skills installed yet. Use Install to add skills from the catalog."
94
+
95
+ ### 2. Install a Skill
96
+
97
+ 1. User provides a skill name (or selects from the catalog).
98
+
99
+ 2. **Fetch SKILL.md from GitHub**:
100
+ ```
101
+ https://raw.githubusercontent.com/renatoasse/opensquad/main/skills/<name>/SKILL.md
102
+ ```
103
+ - If fetch fails (404 or network error) → **ERROR**: "Skill '<name>' not found in the skills catalog."
104
+ - Do NOT proceed if the SKILL.md cannot be fetched.
105
+
106
+ 3. **Create the skill directory**:
107
+ ```
108
+ skills/<name>/
109
+ ```
110
+
111
+ 4. **Write SKILL.md** to `skills/<name>/SKILL.md`
112
+
113
+ 5. **Fetch additional files** (if the skill requires them):
114
+ - If the SKILL.md frontmatter has `script.path` → fetch the script file from:
115
+ `https://raw.githubusercontent.com/renatoasse/opensquad/main/skills/<name>/{script.path}`
116
+ Create subdirectories (e.g., `scripts/`) as needed.
117
+ - If the skill has a `references/` directory mentioned → fetch those files too.
118
+ - If the skill has an `assets/` directory mentioned → fetch those files too.
119
+
120
+ 6. **Parse SKILL.md frontmatter** and check requirements:
121
+
122
+ #### a. Environment Variables (if `env:` is present)
123
+
124
+ For each variable listed in the `env` array, check if it exists in the project `.env` file.
125
+ - For each missing variable, inform the user:
126
+ "⚠️ Environment variable `{VAR_NAME}` is required by {skill name}. Add it to your `.env` file."
127
+ - Do NOT block installation — warn only. The skill is installed even without env vars configured.
128
+
129
+ #### b. MCP Setup — stdio transport (if `type: mcp` or `type: hybrid` with `mcp.transport: stdio` or no transport specified)
130
+
131
+ 1. Read `.claude/settings.local.json` (create with `{"mcpServers": {}}` if it doesn't exist)
132
+ 2. Check if `mcpServers.{server_name}` already exists:
133
+ - If yes → warn the user: "MCP server '{server_name}' already exists. Overwrite?"
134
+ Present as a numbered list and tell the user to reply with a number:
135
+ 1. Yes, overwrite
136
+ 2. No, keep existing
137
+ If "No" → skip MCP configuration but still complete installation
138
+ 3. For each env var listed in the skill's `env` array:
139
+ - Check `.env` for an existing value
140
+ - If missing, ask the user to type the value directly
141
+ 4. Add to `mcpServers`:
142
+ ```json
143
+ "{server_name}": {
144
+ "command": "{command}",
145
+ "args": {args},
146
+ "env": {
147
+ "{VAR_NAME}": "{value_from_env_or_user_input}"
148
+ }
149
+ }
150
+ ```
151
+ 5. Write updated `.claude/settings.local.json`
152
+
153
+ #### c. MCP Setup — HTTP transport (if `type: mcp` or `type: hybrid` with `mcp.transport: http`)
154
+
155
+ 1. Read `.claude/settings.local.json` (create with `{"mcpServers": {}}` if it doesn't exist)
156
+ 2. Check for `server_name` conflict (same as stdio above)
157
+ 3. For each env var listed in the skill's `env` array:
158
+ - Check `.env` for an existing value
159
+ - If missing, ask the user to type the value directly
160
+ 4. Build the mcpServers entry:
161
+ - Start with `{ "type": "http", "url": "{url}" }`
162
+ - If the skill has a `headers` field in `mcp`, add a `"headers"` object by resolving
163
+ each header value from the collected env var values:
164
+ `{ "{header-name}": "{resolved_value}" }`
165
+ - Omit the `"headers"` key entirely if the skill has no `headers` field
166
+ 5. Add to `mcpServers`:
167
+ ```json
168
+ "{server_name}": {
169
+ "type": "http",
170
+ "url": "{url}",
171
+ "headers": { "{header-name}": "{resolved_value}" }
172
+ }
173
+ ```
174
+ 6. Write updated `.claude/settings.local.json`
175
+
176
+ #### d. Script Setup (if `type: script` or `type: hybrid`)
177
+
178
+ 1. Verify the script file exists at `skills/<name>/{script.path}`
179
+ - If missing and wasn't fetched in step 5 → **ERROR**: "Script file not found. Installation may be incomplete."
180
+ 2. If the skill lists dependencies in `script.dependencies`:
181
+ - For `runtime: node` → run: `npm install {packages}`
182
+ - For `runtime: python` → run: `pip install {packages}`
183
+ - For `runtime: bash` → no dependency installation needed
184
+ 3. If dependency installation fails → warn the user but do not block the skill installation.
185
+
186
+ #### e. Prompt Setup (if `type: prompt`)
187
+
188
+ No additional setup needed. The skill is fully defined by its SKILL.md instructions.
189
+
190
+ 7. **Confirm installation**:
191
+ "✅ {name} installed! Crews can now use `{name}` in their skills list."
192
+
193
+ ### 3. Create a Custom Skill
194
+
195
+ 1. Check if the `opencrew-skill-creator` skill is installed:
196
+ - Look for `skills/opencrew-skill-creator/SKILL.md`
197
+
198
+ 2. **If installed** → read `skills/opencrew-skill-creator/SKILL.md` and follow its
199
+ instructions to guide the user through custom skill creation.
200
+
201
+ 3. **If not installed** → inform the user:
202
+ "The Skill Creator is not installed. Install it first with:
203
+ `/opencrew skills` → Install → `opencrew-skill-creator`"
204
+
205
+ ### 4. Remove a Skill
206
+
207
+ 1. **List installed skills** — present the list as a numbered list and tell the user to reply with a number.
208
+ If only 1 skill is installed, add "Cancel" as a second option.
209
+ If 0 skills are installed, inform the user directly ("No skills installed").
210
+
211
+ 2. **Check for crew dependencies**:
212
+ - Scan all `crews/*/crew.yaml` files
213
+ - For each, read the `skills:` section
214
+ - Collect all crews that reference the selected skill
215
+
216
+ 3. **Warn if crews depend on this skill**:
217
+ - If any crews use it:
218
+ "⚠️ These crews use '{name}': {comma-separated crew list}. They will fail until the skill is reinstalled."
219
+
220
+ 4. **Confirm removal** — ask as a numbered list:
221
+ "Remove '{name}'?"
222
+ 1. Yes, remove it
223
+ 2. No, keep it
224
+
225
+ 5. **If confirmed**:
226
+ a. Delete the entire `skills/<name>/` directory (including all subdirectories and files)
227
+ b. If the skill had MCP configuration (`type: mcp` or `type: hybrid`):
228
+ - Read `.claude/settings.local.json`
229
+ - Remove `mcpServers.{server_name}` (using the `server_name` from the skill's frontmatter)
230
+ - Write updated `.claude/settings.local.json`
231
+ c. Do NOT remove the skill from any `crew.yaml` files — the user may reinstall later,
232
+ and removing references would lose the crew's intended configuration.
233
+
234
+ 6. **Confirm**: "✅ '{name}' has been removed."
235
+
236
+ ### 5. Resolve Skills for Pipeline (called by Pipeline Runner)
237
+
238
+ This operation is called BEFORE pipeline execution starts. All skills must resolve successfully
239
+ before the pipeline begins (fail fast).
240
+
241
+ 1. **Read the crew's skill list**:
242
+ Read `crews/{crew}/crew.yaml` → `skills` section
243
+
244
+ 2. **Separate native skills from installed skills**:
245
+ - Native skills: `web_search`, `web_fetch` — these are built-in and always available
246
+ - All other skills require installation
247
+
248
+ 3. **For each non-native skill**:
249
+
250
+ a. **Check if installed**: Look for `skills/{skill}/SKILL.md`
251
+ - If NOT found → ask the user as a numbered list:
252
+ "Skill '{skill}' is required by this crew but is not installed. What would you like to do?"
253
+ 1. Install now
254
+ 2. Skip and stop pipeline
255
+ - If "Install now" → run Operation 2 (Install a Skill) with this skill name
256
+ - If installation succeeds → continue resolution
257
+ - If installation fails → **ERROR**: stop pipeline
258
+ - If "Skip and stop pipeline" → **ERROR**: stop pipeline with message:
259
+ "Pipeline cannot run without required skill '{skill}'."
260
+
261
+ b. **Read and parse SKILL.md**: Parse the YAML frontmatter to get type, mcp config, etc.
262
+
263
+ c. **Verify MCP configuration** (if `type: mcp` or `type: hybrid`):
264
+ - Read `.claude/settings.local.json`
265
+ - Check that `mcpServers.{server_name}` exists
266
+ - If missing → **ERROR**: "Skill '{skill}' is installed but its MCP server is not configured. Run `/opencrew skills` → Install to reconfigure."
267
+
268
+ d. **Verify env vars** (if `env:` is present):
269
+ - Check each variable in `.env`
270
+ - If any are missing → warn the user but do NOT block pipeline execution.
271
+ "⚠️ Skill '{skill}' is missing environment variable(s): {list}. It may not work correctly."
272
+
273
+ 4. **Return resolved skill list**: Return all resolved skills with their parsed frontmatter
274
+ and SKILL.md body content. This list is used by Operation 6 to inject instructions.
275
+
276
+ ### 6. Inject Skill Context into Agent (called during pipeline execution)
277
+
278
+ Skill injection uses a **two-tier** approach to minimize token consumption:
279
+
280
+ **Tier 1 (Skill Index)** — Always injected. A one-line summary per skill (~30 tokens each).
281
+ **Tier 2 (Full Instructions)** — Loaded only when the agent actively needs the skill in the current step.
282
+
283
+ For each skill declared in an agent's `.agent.md` frontmatter `skills:` field:
284
+
285
+ 1. **Skip native skills**: `web_search` and `web_fetch` do not need instruction injection —
286
+ they are handled natively.
287
+
288
+ 2. **Read each skill's SKILL.md** frontmatter only: Extract `name`, `description`, and `type` fields.
289
+
290
+ 3. **Build the Tier 1 index** and append after all agent instructions:
291
+ ```
292
+ [Agent .agent.md content]
293
+
294
+ --- AVAILABLE SKILLS ---
295
+
296
+ The following skills are available for this step. To use a skill, state which skill
297
+ you are invoking and the system will load its full instructions.
298
+
299
+ - {skill-id}: {description from frontmatter} (type: {type})
300
+ - {skill-id}: {description from frontmatter} (type: {type})
301
+ ```
302
+
303
+ 4. **Tier 2 loading** — When the step's instructions explicitly reference a skill
304
+ (e.g., the step file says "use image-creator to render the slides"), OR when the
305
+ agent declares it will use a specific skill:
306
+ a. Read `skills/{skill}/SKILL.md`
307
+ b. Extract the Markdown body (everything after the YAML frontmatter closing `---`)
308
+ c. Inject the full instructions:
309
+ ```
310
+ --- SKILL INSTRUCTIONS: {name from frontmatter} ---
311
+
312
+ {SKILL.md markdown body}
313
+ ```
314
+
315
+ 5. **Step-level skill hints**: If the step's frontmatter contains a `skills_needed:` field
316
+ (e.g., `skills_needed: [image-creator]`), load Tier 2 for those skills immediately
317
+ without waiting for the agent to request them. This allows the Architect to pre-declare
318
+ which skills a step will need.
319
+
320
+ 6. **Missing skill handling**: If a skill listed in an agent's frontmatter was not resolved
321
+ during Operation 5, skip it silently — the user was already warned during resolution.
322
+
323
+ ### 7. Skill Discovery (called by Architect during Phase 3.5)
324
+
325
+ When the Architect reaches Phase 3.5 during crew creation:
326
+
327
+ 1. **List already-installed skills**:
328
+ Read all subdirectories in `skills/` and parse each SKILL.md frontmatter
329
+ to get name, description, type, and categories.
330
+
331
+ 2. **Fetch the catalog index**:
332
+ Fetch the catalog README from GitHub to see all available skills:
333
+ ```
334
+ https://raw.githubusercontent.com/renatoasse/opensquad/main/skills/README.md
335
+ ```
336
+ - If fetch fails → proceed with only installed skills (do not block crew creation).
337
+
338
+ 3. **Analyze crew requirements**:
339
+ From the discovery phase answers (Phase 1), identify what the crew needs:
340
+ - What platforms or services does it interact with?
341
+ - What data sources does it need?
342
+ - What output formats does it produce?
343
+ - What automations would speed up the workflow?
344
+
345
+ 4. **Match skill categories against crew needs**:
346
+ - Research/data crews → check for: scraping, data, analytics skills
347
+ - Content crews → check for: design, social-media skills
348
+ - Communication crews → check for: messaging, notification skills
349
+ - Automation crews → check for: automation, integration skills
350
+
351
+ 5. **Only suggest skills when native skills are insufficient**:
352
+ `web_search` and `web_fetch` cover basic web research and data fetching.
353
+ Only suggest additional skills when:
354
+ - The crew needs structured data extraction (scraping)
355
+ - The crew interacts with specific APIs (social media, design tools, messaging)
356
+ - The crew requires local script execution (image processing, data transformation)
357
+ - The crew benefits from specialized behavioral prompts
358
+
359
+ 6. **Present recommendations** (if any relevant skills found):
360
+ Present as a numbered list. User can reply with one number or multiple numbers separated by spaces (e.g. "1 3").
361
+ If only 1 skill is relevant,
362
+ add "No thanks, skip" as a second option.
363
+ ```
364
+ These skills could enhance your crew:
365
+
366
+ 1. 🔌 apify: Scrape structured data from any website
367
+ 2. 📜 image-optimizer: Resize and compress images for social media
368
+ 3. 💡 seo-guidelines: Best practices for SEO-optimized content
369
+
370
+ Reply with the numbers of skills you'd like to install (e.g. "1 3"), or press Enter to skip.
371
+ ```
372
+
373
+ 7. **Install accepted skills**:
374
+ For each skill the user selects → run Operation 2 (Install a Skill).
375
+
376
+ 8. **Track installed skills**:
377
+ Record which skills were installed during this phase. They will be added to the
378
+ crew's `crew.yaml` in Phase 5 (Build), under the `skills:` section:
379
+ ```yaml
380
+ skills:
381
+ - web_search
382
+ - web_fetch
383
+ - apify # installed during Phase 3.5
384
+ - seo-guidelines # installed during Phase 3.5
385
+ ```
386
+
387
+ 9. **If no relevant skills found or user declines all** → proceed silently to Phase 4.
388
+ Do not force skill installation — native skills are sufficient for many crews.
File without changes
File without changes
@@ -0,0 +1,8 @@
1
+ node_modules/
2
+ .env
3
+ *.log
4
+ crews/*/output/
5
+ _opencrew/_memory/company.md
6
+ _opencrew/_memory/preferences.md
7
+ _opencrew/_browser_profile/
8
+ _opencrew/logs/
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: apify
3
+ description: >
4
+ Web scraping and automation platform. Extract data from any website,
5
+ run pre-built scrapers (Actors), and automate web workflows using
6
+ thousands of ready-made tools from the Apify Store.
7
+ description_pt-BR: >
8
+ Plataforma de web scraping e automação. Extraia dados de qualquer site,
9
+ execute scrapers prontos (Actors) e automatize fluxos de trabalho web
10
+ com milhares de ferramentas da Apify Store.
11
+ description_es: >
12
+ Plataforma de web scraping y automatización. Extrae datos de cualquier sitio web,
13
+ ejecuta scrapers prediseñados (Actors) y automatiza flujos de trabajo web
14
+ con miles de herramientas de la Apify Store.
15
+ type: mcp
16
+ version: "1.0.0"
17
+ mcp:
18
+ server_name: apify
19
+ command: npx
20
+ args: ["-y", "@apify/actors-mcp-server@latest"]
21
+ env:
22
+ - APIFY_TOKEN
23
+ categories: [scraping, data, automation]
24
+ ---
25
+
26
+ # Apify Web Scraper
27
+
28
+ ## When to use
29
+
30
+ Use Apify when you need to extract data from websites, scrape social media profiles, run search engine queries, or automate web data collection workflows. Apify provides thousands of pre-built scrapers (called Actors) that handle common scraping tasks out of the box.
31
+
32
+ ## Instructions
33
+
34
+ You have access to Apify tools for web scraping and data extraction.
35
+
36
+ ### Key capabilities
37
+
38
+ - Use Apify Actors (pre-built scrapers) to extract data from websites
39
+ - Popular Actors: web-scraper, instagram-scraper, google-search-scraper, youtube-scraper, twitter-scraper, tiktok-scraper
40
+ - Each Actor has its own input schema -- check documentation before running
41
+
42
+ ### Best practices
43
+
44
+ - Start with the simplest Actor that meets the need
45
+ - Use `maxItems` to limit results and avoid excessive costs
46
+ - Check Actor pricing before running (some have per-result costs)
47
+ - Parse results and extract only the fields you need
48
+
49
+ ## Available operations
50
+
51
+ - **Run Actor** -- Execute any Apify Actor with custom input parameters
52
+ - **Web Scraping** -- Extract structured data from any website
53
+ - **Social Media Scraping** -- Scrape profiles, posts, and engagement data from Instagram, YouTube, Twitter/X, TikTok
54
+ - **Search Scraping** -- Run Google, Bing, or other search engine queries and collect results
55
+ - **Data Export** -- Retrieve scraped datasets in JSON format
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: blotato
3
+ description: >
4
+ Social media publishing and scheduling platform.
5
+ Publish and schedule posts across Instagram, LinkedIn, Twitter/X,
6
+ TikTok, YouTube, and more. Upload media and monitor post status.
7
+ description_pt-BR: >
8
+ Plataforma de publicação e agendamento em redes sociais.
9
+ Publique e agende posts no Instagram, LinkedIn, Twitter/X,
10
+ TikTok, YouTube e mais. Faça upload de mídia e monitore o status dos posts.
11
+ description_es: >
12
+ Plataforma de publicación y programación en redes sociales.
13
+ Publica y programa posts en Instagram, LinkedIn, Twitter/X,
14
+ TikTok, YouTube y más. Sube contenido multimedia y monitorea el estado de los posts.
15
+ type: mcp
16
+ version: "1.0.0"
17
+ mcp:
18
+ server_name: blotato
19
+ transport: http
20
+ url: "https://mcp.blotato.com/mcp"
21
+ headers:
22
+ blotato-api-key: BLOTATO_API_KEY
23
+ env:
24
+ - BLOTATO_API_KEY
25
+ categories: [social-media, automation, publishing, scheduling]
26
+ ---
27
+
28
+ # Blotato Publisher
29
+
30
+ ## When to use
31
+
32
+ Use Blotato when you need to publish or schedule social media posts across multiple platforms from a single interface. Blotato supports Instagram, LinkedIn, Twitter/X, TikTok, YouTube, and more. It handles media uploads, post scheduling, and status monitoring.
33
+
34
+ ## Instructions
35
+
36
+ You have access to Blotato for social media publishing.
37
+
38
+ ### Key workflow
39
+
40
+ 1. Use `blotato_list_accounts` to get account IDs and platforms
41
+ 2. If post includes images or videos, upload them with `blotato_upload_media` first and use the returned media IDs in `blotato_create_post`
42
+ 3. Use `blotato_create_post` to publish or schedule
43
+ 4. Use `blotato_get_post_status` to confirm success
44
+
45
+ ### Best practices
46
+
47
+ - Always call `blotato_list_accounts` first to get valid account IDs
48
+ - For scheduled posts, use ISO 8601 format for datetime
49
+ - After posting, poll `blotato_get_post_status` until status is "published" or "scheduled"
50
+ - If status is "failed", report the error details to the user
51
+
52
+ ### Requirements
53
+
54
+ - Blotato account required (blotato.com)
55
+ - API key must be configured (Blotato Settings > API section)
56
+
57
+ ## Available operations
58
+
59
+ - **List Accounts** -- Retrieve connected social media accounts and their platform types
60
+ - **Upload Media** -- Upload images and videos for use in posts
61
+ - **Create Post** -- Publish or schedule a post to one or more platforms
62
+ - **Get Post Status** -- Monitor publishing status (published, scheduled, failed)
63
+ - **Multi-platform Publishing** -- Post the same content across Instagram, LinkedIn, Twitter/X, TikTok, YouTube simultaneously
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: canva
3
+ description: >
4
+ Create, search, autofill, and export designs from Canva.
5
+ Enables agents to generate visual content, fill templates
6
+ with brand assets, and export in various formats.
7
+ description_pt-BR: >
8
+ Crie, busque, preencha e exporte designs do Canva.
9
+ Permite que agentes gerem conteúdo visual, preencham templates
10
+ com assets da marca e exportem em diversos formatos.
11
+ description_es: >
12
+ Crea, busca, completa y exporta diseños de Canva.
13
+ Permite que los agentes generen contenido visual, completen plantillas
14
+ con recursos de marca y exporten en diversos formatos.
15
+ type: mcp
16
+ version: "1.0.0"
17
+ mcp:
18
+ server_name: canva
19
+ transport: http
20
+ url: "https://mcp.canva.com/mcp"
21
+ categories: [design, ui, assets, automation]
22
+ ---
23
+
24
+ # Canva Connect
25
+
26
+ ## When to use
27
+
28
+ Use Canva when you need to create, search, or export visual designs. This skill connects to the user's Canva account via OAuth and enables agents to generate presentations, social media posts, logos, and other visual content. It also supports autofilling templates with brand assets and exporting designs in various formats.
29
+
30
+ ## Instructions
31
+
32
+ You have access to Canva through the Canva Connect MCP server.
33
+
34
+ ### Key capabilities
35
+
36
+ - Create new designs (presentations, social posts, logos, etc.)
37
+ - Autofill templates with content (text, images, brand elements)
38
+ - Search existing designs in the user's Canva account
39
+ - Export designs as PDF or image files
40
+
41
+ ### Best practices
42
+
43
+ - Use templates when possible -- faster and more on-brand
44
+ - When autofilling, match content to template placeholder names
45
+ - Export in the format most useful for the pipeline (PNG for social, PDF for documents)
46
+ - Respect the user's Canva plan limitations (some features require paid plans)
47
+
48
+ ### Requirements
49
+
50
+ - User needs a Canva account (free or paid)
51
+ - OAuth authorization is required on first use (browser popup)
52
+ - Autofill templates require a Canva paid plan
53
+
54
+ ## Available operations
55
+
56
+ - **Create Design** -- Generate new designs from scratch or templates
57
+ - **Search Designs** -- Find existing designs in the user's Canva account
58
+ - **Autofill Template** -- Fill template placeholders with text, images, and brand elements
59
+ - **Export Design** -- Export designs as PDF, PNG, JPG, or other formats
60
+ - **Browse Templates** -- Search Canva's template library for the right starting point