@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.
- package/CHANGELOG.md +19 -0
- package/LICENSE +24 -0
- package/README.md +118 -0
- package/bin/opencrew.js +8 -0
- package/package.json +57 -0
- package/src/cli.js +70 -0
- package/src/commands/init.js +97 -0
- package/src/commands/update.js +58 -0
- package/src/lib/fsx.js +55 -0
- package/src/lib/ides.js +120 -0
- package/src/lib/paths.js +8 -0
- package/src/lib/prompts.js +35 -0
- package/src/lib/ui.js +20 -0
- package/templates/.env.example +23 -0
- package/templates/.mcp.json +8 -0
- package/templates/AGENTS.md +105 -0
- package/templates/_opencrew/.opencrew-version +1 -0
- package/templates/_opencrew/_investigations/.gitkeep +0 -0
- package/templates/_opencrew/_memory/company.md +4 -0
- package/templates/_opencrew/_memory/preferences.md +9 -0
- package/templates/_opencrew/config/playwright.config.json +11 -0
- package/templates/_opencrew/core/architect.agent.yaml +110 -0
- package/templates/_opencrew/core/best-practices/_catalog.yaml +116 -0
- package/templates/_opencrew/core/best-practices/blog-post.md +151 -0
- package/templates/_opencrew/core/best-practices/blog-seo.md +146 -0
- package/templates/_opencrew/core/best-practices/copywriting.md +446 -0
- package/templates/_opencrew/core/best-practices/data-analysis.md +420 -0
- package/templates/_opencrew/core/best-practices/email-newsletter.md +136 -0
- package/templates/_opencrew/core/best-practices/email-sales.md +127 -0
- package/templates/_opencrew/core/best-practices/image-design.md +365 -0
- package/templates/_opencrew/core/best-practices/instagram-feed.md +252 -0
- package/templates/_opencrew/core/best-practices/instagram-reels.md +128 -0
- package/templates/_opencrew/core/best-practices/instagram-stories.md +123 -0
- package/templates/_opencrew/core/best-practices/linkedin-article.md +133 -0
- package/templates/_opencrew/core/best-practices/linkedin-post.md +138 -0
- package/templates/_opencrew/core/best-practices/researching.md +366 -0
- package/templates/_opencrew/core/best-practices/review.md +286 -0
- package/templates/_opencrew/core/best-practices/social-networks-publishing.md +311 -0
- package/templates/_opencrew/core/best-practices/strategist.md +361 -0
- package/templates/_opencrew/core/best-practices/technical-writing.md +382 -0
- package/templates/_opencrew/core/best-practices/twitter-post.md +122 -0
- package/templates/_opencrew/core/best-practices/twitter-thread.md +139 -0
- package/templates/_opencrew/core/best-practices/whatsapp-broadcast.md +124 -0
- package/templates/_opencrew/core/best-practices/youtube-script.md +139 -0
- package/templates/_opencrew/core/best-practices/youtube-shorts.md +129 -0
- package/templates/_opencrew/core/prompts/build.prompt.md +547 -0
- package/templates/_opencrew/core/prompts/design.prompt.md +469 -0
- package/templates/_opencrew/core/prompts/discovery.prompt.md +269 -0
- package/templates/_opencrew/core/prompts/sherlock-instagram.md +123 -0
- package/templates/_opencrew/core/prompts/sherlock-linkedin.md +73 -0
- package/templates/_opencrew/core/prompts/sherlock-shared.md +684 -0
- package/templates/_opencrew/core/prompts/sherlock-twitter.md +78 -0
- package/templates/_opencrew/core/prompts/sherlock-youtube.md +85 -0
- package/templates/_opencrew/core/runner.pipeline.md +611 -0
- package/templates/_opencrew/core/skills.engine.md +388 -0
- package/templates/_opencrew/logs/.gitkeep +0 -0
- package/templates/crews/.gitkeep +0 -0
- package/templates/gitignore +8 -0
- package/templates/skills/apify/SKILL.md +55 -0
- package/templates/skills/blotato/SKILL.md +63 -0
- package/templates/skills/canva/SKILL.md +60 -0
- package/templates/skills/image-ai-generator/SKILL.md +124 -0
- package/templates/skills/image-ai-generator/scripts/generate.py +175 -0
- package/templates/skills/image-creator/SKILL.md +155 -0
- package/templates/skills/image-fetcher/SKILL.md +91 -0
- package/templates/skills/instagram-publisher/SKILL.md +119 -0
- package/templates/skills/instagram-publisher/scripts/publish.js +165 -0
- package/templates/skills/opencrew-best-practice-creator/SKILL.md +192 -0
- package/templates/skills/opencrew-skill-creator/SKILL.md +420 -0
- package/templates/skills/opencrew-skill-creator/agents/analyzer.md +274 -0
- package/templates/skills/opencrew-skill-creator/agents/comparator.md +202 -0
- package/templates/skills/opencrew-skill-creator/agents/grader.md +223 -0
- package/templates/skills/opencrew-skill-creator/assets/eval_review.html +146 -0
- package/templates/skills/opencrew-skill-creator/eval-viewer/generate_review.py +471 -0
- package/templates/skills/opencrew-skill-creator/eval-viewer/viewer.html +1325 -0
- package/templates/skills/opencrew-skill-creator/references/schemas.md +430 -0
- package/templates/skills/opencrew-skill-creator/references/skill-format.md +235 -0
- package/templates/skills/opencrew-skill-creator/scripts/__init__.py +0 -0
- package/templates/skills/opencrew-skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/templates/skills/opencrew-skill-creator/scripts/quick_validate.py +103 -0
- package/templates/skills/opencrew-skill-creator/scripts/run_eval.py +310 -0
- package/templates/skills/opencrew-skill-creator/scripts/utils.py +47 -0
- package/templates/skills/resend/SKILL.md +80 -0
- package/templates/skills/template-designer/SKILL.md +208 -0
- package/templates/skills/template-designer/base-templates/model-a.html +27 -0
- package/templates/skills/template-designer/base-templates/model-b.html +31 -0
- 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,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
|