opencode-skills-collection 4.0.64 → 4.0.66
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/bundled-skills/.antigravity-install-manifest.json +3 -1
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +1 -1
- package/bundled-skills/seo-aeo-blog-writer/SKILL.md +140 -59
- package/bundled-skills/seo-aeo-content-cluster/SKILL.md +180 -61
- package/bundled-skills/seo-aeo-content-quality-auditor/SKILL.md +221 -64
- package/bundled-skills/seo-aeo-content-quality-auditor/references/seo-audit-checklist.md +63 -0
- package/bundled-skills/seo-aeo-internal-linking/SKILL.md +220 -59
- package/bundled-skills/seo-aeo-keyword-research/SKILL.md +297 -76
- package/bundled-skills/seo-aeo-landing-page-writer/SKILL.md +116 -83
- package/bundled-skills/seo-aeo-meta-description-generator/SKILL.md +316 -62
- package/bundled-skills/seo-aeo-orchestrator/SKILL.md +281 -0
- package/bundled-skills/seo-aeo-schema-generator/SKILL.md +302 -68
- package/bundled-skills/seo-aeo-schema-generator/references/aggregate-rating-schema.json +8 -0
- package/bundled-skills/seo-aeo-schema-generator/references/article-schema.json +10 -0
- package/bundled-skills/seo-aeo-schema-generator/references/breadcrumb-schema.json +5 -0
- package/bundled-skills/seo-aeo-schema-generator/references/faq-schema.json +5 -0
- package/bundled-skills/seo-aeo-schema-generator/references/howto-schema.json +7 -0
- package/bundled-skills/seo-aeo-schema-generator/references/organization-schema.json +7 -0
- package/bundled-skills/seo-aeo-schema-generator/references/product-schema.json +8 -0
- package/bundled-skills/seo-aeo-schema-generator/references/review-schema.json +8 -0
- package/bundled-skills/seo-aeo-schema-generator/references/webpage-schema.json +7 -0
- package/bundled-skills/seo-aeo-schema-generator/references/website-schema.json +7 -0
- package/bundled-skills/youtube-transcript-skills/SKILL.md +110 -0
- package/package.json +1 -1
- package/skills_index.json +125 -8
|
@@ -1,108 +1,342 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: seo-aeo-schema-generator
|
|
3
|
-
description: "Generates
|
|
3
|
+
description: "Generates and validates implementation-ready JSON-LD structured data for relevant page types and rich-result eligibility."
|
|
4
4
|
risk: safe
|
|
5
5
|
source: community
|
|
6
6
|
date_added: "2026-04-01"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# Schema Generator Skill
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Description
|
|
12
|
+
Activate this skill when the user wants to generate, write,
|
|
13
|
+
or validate structured data markup for any page.
|
|
14
|
+
Trigger phrases include: "generate schema", "create JSON-LD",
|
|
15
|
+
"schema markup for", "structured data for",
|
|
16
|
+
"FAQ schema", "product schema", "article schema",
|
|
17
|
+
"help Google understand my page", "rich results schema",
|
|
18
|
+
"schema generator: [type]", "add schema to [page]".
|
|
12
19
|
|
|
13
|
-
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input Format
|
|
23
|
+
````json
|
|
24
|
+
{
|
|
25
|
+
"page_type": "landing-page | blog-post | pillar-page |
|
|
26
|
+
product-page | homepage | faq-page |
|
|
27
|
+
how-to-page",
|
|
28
|
+
"schema_types": ["string — list all types needed for
|
|
29
|
+
this page, see Schema Type Menu below"],
|
|
30
|
+
"page_data": {
|
|
31
|
+
"url": "string — canonical URL of the page",
|
|
32
|
+
"title": "string — page title",
|
|
33
|
+
"description": "string — page meta description
|
|
34
|
+
or content summary",
|
|
35
|
+
"primary_keyword": "string",
|
|
36
|
+
"date_published": "string — ISO format: YYYY-MM-DD",
|
|
37
|
+
"date_modified": "string — ISO format: YYYY-MM-DD",
|
|
38
|
+
"author_name": "string — for Article schema",
|
|
39
|
+
"brand_name": "string",
|
|
40
|
+
"brand_url": "string — homepage URL",
|
|
41
|
+
"logo_url": "string — absolute URL to brand logo",
|
|
42
|
+
"product": {
|
|
43
|
+
"name": "string",
|
|
44
|
+
"description": "string",
|
|
45
|
+
"image_url": "string",
|
|
46
|
+
"price": "decimal",
|
|
47
|
+
"currency": "string — ISO 4217, e.g. USD, GBP",
|
|
48
|
+
"availability": "InStock | OutOfStock | PreOrder",
|
|
49
|
+
"sku": "string — optional"
|
|
50
|
+
},
|
|
51
|
+
"reviews": [
|
|
52
|
+
{
|
|
53
|
+
"author": "string",
|
|
54
|
+
"rating": "integer — 1 to 5",
|
|
55
|
+
"review_body": "string",
|
|
56
|
+
"date": "string — YYYY-MM-DD"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"aggregate_rating": {
|
|
60
|
+
"rating_value": "decimal — e.g. 4.7",
|
|
61
|
+
"review_count": "integer",
|
|
62
|
+
"best_rating": "integer — usually 5",
|
|
63
|
+
"worst_rating": "integer — usually 1"
|
|
64
|
+
},
|
|
65
|
+
"faqs": [
|
|
66
|
+
{
|
|
67
|
+
"question": "string",
|
|
68
|
+
"answer": "string"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"how_to": {
|
|
72
|
+
"name": "string — title of the how-to",
|
|
73
|
+
"description": "string",
|
|
74
|
+
"total_time": "string — ISO 8601 duration, e.g. PT30M",
|
|
75
|
+
"steps": [
|
|
76
|
+
{
|
|
77
|
+
"name": "string — step title",
|
|
78
|
+
"text": "string — step instructions"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"breadcrumbs": [
|
|
83
|
+
{
|
|
84
|
+
"position": "integer — 1, 2, 3...",
|
|
85
|
+
"name": "string — label",
|
|
86
|
+
"url": "string — absolute URL"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
````
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Schema Type Menu
|
|
96
|
+
|
|
97
|
+
This skill supports the following schema types.
|
|
98
|
+
Multiple types can be requested for a single page:
|
|
99
|
+
|
|
100
|
+
| Schema Type | Best For | Rich Result Unlocked |
|
|
101
|
+
|----------------------|---------------------------------------------|-----------------------------------------|
|
|
102
|
+
| `Article` | Blog posts, pillar pages, news | Article rich result, Top Stories |
|
|
103
|
+
| `FAQPage` | FAQ sections on any page | FAQ accordion in SERP — AEO critical |
|
|
104
|
+
| `HowTo` | Step-by-step guides | Step-by-step rich result |
|
|
105
|
+
| `Product` | Product or pricing pages | Price, availability, rating in SERP |
|
|
106
|
+
| `Review` | Individual product or service reviews | Star rating in SERP |
|
|
107
|
+
| `AggregateRating` | Pages with multiple reviews | Star rating with review count |
|
|
108
|
+
| `BreadcrumbList` | Any page with a navigation hierarchy | Breadcrumb path shown in SERP URL |
|
|
109
|
+
| `Organization` | Homepage or About page | Brand knowledge panel signals |
|
|
110
|
+
| `WebPage` | Any page needing basic structured identity | Enhances page understanding by crawlers |
|
|
111
|
+
| `WebSite` | Homepage only | Sitelinks Searchbox in SERP |
|
|
112
|
+
|
|
113
|
+
**AEO Priority:** `FAQPage` and `HowTo` are the two schema
|
|
114
|
+
types most directly responsible for AI engine extraction.
|
|
115
|
+
Always include `FAQPage` on landing pages and blog posts
|
|
116
|
+
that contain a FAQ section.
|
|
14
117
|
|
|
15
|
-
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Rich Result Eligibility Rules
|
|
16
121
|
|
|
17
|
-
|
|
122
|
+
Google requires specific fields to be present for each
|
|
123
|
+
schema type to qualify for rich results.
|
|
124
|
+
Missing required fields disqualifies the page entirely.
|
|
18
125
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
126
|
+
### FAQPage
|
|
127
|
+
| Field | Status | Notes |
|
|
128
|
+
|----------------|-------------|------------------------------------------|
|
|
129
|
+
| `@type` | Required | Must be `FAQPage` |
|
|
130
|
+
| `mainEntity` | Required | Array of `Question` objects |
|
|
131
|
+
| `name` | Required | The question text |
|
|
132
|
+
| `acceptedAnswer` | Required | `Answer` object containing `text` |
|
|
133
|
+
| Minimum Qs | Required | At least 2 question-answer pairs |
|
|
134
|
+
| Answer length | Recommended | Under 300 words per answer |
|
|
23
135
|
|
|
24
|
-
|
|
136
|
+
### Article
|
|
137
|
+
| Field | Status | Notes |
|
|
138
|
+
|--------------------|-------------|--------------------------------------|
|
|
139
|
+
| `headline` | Required | Under 110 characters |
|
|
140
|
+
| `image` | Required | At least one image URL |
|
|
141
|
+
| `datePublished` | Required | ISO 8601 format |
|
|
142
|
+
| `dateModified` | Recommended | ISO 8601 format |
|
|
143
|
+
| `author` | Required | `Person` or `Organization` object |
|
|
144
|
+
| `publisher` | Required | `Organization` with `logo` |
|
|
25
145
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
| WebSite | Sitelinks Searchbox |
|
|
146
|
+
### Product
|
|
147
|
+
| Field | Status | Notes |
|
|
148
|
+
|--------------------|-------------|--------------------------------------|
|
|
149
|
+
| `name` | Required | Product name |
|
|
150
|
+
| `image` | Required | Absolute URL |
|
|
151
|
+
| `description` | Recommended | |
|
|
152
|
+
| `offers` | Required | `Offer` object with price + currency |
|
|
153
|
+
| `price` | Required | Numeric value |
|
|
154
|
+
| `priceCurrency` | Required | ISO 4217 currency code |
|
|
155
|
+
| `availability` | Recommended | Schema.org availability URL |
|
|
156
|
+
| `aggregateRating` | Recommended | Unlocks star rating display |
|
|
38
157
|
|
|
39
|
-
|
|
158
|
+
### HowTo
|
|
159
|
+
| Field | Status | Notes |
|
|
160
|
+
|--------------------|-------------|--------------------------------------|
|
|
161
|
+
| `name` | Required | Title of the how-to |
|
|
162
|
+
| `step` | Required | Array of `HowToStep` objects |
|
|
163
|
+
| `text` | Required | Instructions for each step |
|
|
164
|
+
| `totalTime` | Recommended | ISO 8601 duration |
|
|
165
|
+
| `image` | Recommended | Image per step if available |
|
|
40
166
|
|
|
41
|
-
###
|
|
42
|
-
|
|
167
|
+
### BreadcrumbList
|
|
168
|
+
| Field | Status | Notes |
|
|
169
|
+
|--------------------|-------------|--------------------------------------|
|
|
170
|
+
| `itemListElement` | Required | Array of `ListItem` objects |
|
|
171
|
+
| `position` | Required | Integer, starts at 1 |
|
|
172
|
+
| `name` | Required | Breadcrumb label |
|
|
173
|
+
| `item` | Required | Absolute URL for each crumb |
|
|
174
|
+
|
|
175
|
+
---
|
|
43
176
|
|
|
44
|
-
|
|
45
|
-
Using your knowledge of schema.org and Google's rich result requirements, construct the JSON-LD template for each requested schema type. Use the required and recommended fields listed in the Google Rich Results documentation for that type.
|
|
177
|
+
## Output Structure
|
|
46
178
|
|
|
47
|
-
|
|
48
|
-
|
|
179
|
+
The skill must always produce output in this exact format:
|
|
180
|
+
````markdown
|
|
181
|
+
# Schema Markup Output
|
|
182
|
+
|
|
183
|
+
**Page:** [page title]
|
|
184
|
+
**URL:** [url]
|
|
185
|
+
**Schema Types Generated:** [list all types]
|
|
186
|
+
**Rich Results Unlocked:** [list eligible rich results]
|
|
187
|
+
**AEO Signals Added:** [list AEO-relevant schema types]
|
|
188
|
+
|
|
189
|
+
---
|
|
49
190
|
|
|
50
|
-
|
|
51
|
-
Flag any missing required field as a Critical issue. Flag missing recommended fields as warnings. Do not output schema with missing required fields.
|
|
191
|
+
## Validation Summary
|
|
52
192
|
|
|
53
|
-
|
|
54
|
-
|
|
193
|
+
| Schema Type | Required Fields Complete | Rich Result Eligible | Issues Found |
|
|
194
|
+
|-------------------|--------------------------|----------------------|--------------|
|
|
195
|
+
| [type] | ✅ / ❌ | ✅ / ❌ | [n or none] |
|
|
196
|
+
| [type] | ✅ / ❌ | ✅ / ❌ | [n or none] |
|
|
55
197
|
|
|
56
|
-
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Issues Found
|
|
201
|
+
|
|
202
|
+
[If no issues: ✅ All schema types passed validation.]
|
|
203
|
+
|
|
204
|
+
**Issue:** [Specific field missing or incorrect]
|
|
205
|
+
**Schema Type:** [type]
|
|
206
|
+
**Severity:** Required / Recommended
|
|
207
|
+
**Fix:** [Exact instruction — what to add or change]
|
|
208
|
+
|
|
209
|
+
---
|
|
57
210
|
|
|
58
|
-
|
|
211
|
+
## JSON-LD Output
|
|
212
|
+
|
|
213
|
+
Place all script blocks inside the `<head>` of your HTML.
|
|
214
|
+
Use one `<script>` block per schema type.
|
|
215
|
+
|
|
216
|
+
### [Schema Type 1]
|
|
59
217
|
```html
|
|
60
218
|
<script type="application/ld+json">
|
|
61
219
|
{
|
|
62
220
|
"@context": "https://schema.org",
|
|
63
|
-
"@type": "
|
|
64
|
-
|
|
65
|
-
{
|
|
66
|
-
"@type": "Question",
|
|
67
|
-
"name": "What is Syncro?",
|
|
68
|
-
"acceptedAnswer": {
|
|
69
|
-
"@type": "Answer",
|
|
70
|
-
"text": "Syncro is a remote-first project management platform for distributed engineering teams. It centralises task tracking, async communication, and sprint planning in one tool."
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
]
|
|
221
|
+
"@type": "[type]",
|
|
222
|
+
[all populated fields from references/ template]
|
|
74
223
|
}
|
|
75
224
|
</script>
|
|
76
225
|
```
|
|
77
226
|
|
|
78
|
-
|
|
227
|
+
### [Schema Type 2]
|
|
228
|
+
```html
|
|
229
|
+
<script type="application/ld+json">
|
|
230
|
+
{
|
|
231
|
+
"@context": "https://schema.org",
|
|
232
|
+
"@type": "[type]",
|
|
233
|
+
[all populated fields]
|
|
234
|
+
}
|
|
235
|
+
</script>
|
|
236
|
+
```
|
|
79
237
|
|
|
80
|
-
|
|
81
|
-
- ✅ **Do:** Use one `<script>` block per schema type — never combine multiple types
|
|
82
|
-
- ✅ **Do:** Test every output in Google's Rich Results Test before deploying
|
|
83
|
-
- ❌ **Don't:** Use relative URLs anywhere in schema — all URLs must start with `https://`
|
|
84
|
-
- ❌ **Don't:** Leave placeholder text in any field before deploying
|
|
85
|
-
- ❌ **Don't:** Use HTML tags inside JSON-LD string values
|
|
238
|
+
---
|
|
86
239
|
|
|
87
|
-
##
|
|
240
|
+
## Implementation Instructions
|
|
88
241
|
|
|
89
|
-
|
|
90
|
-
|
|
242
|
+
1. Copy each `<script>` block above
|
|
243
|
+
2. Paste inside the `<head>` tag of your HTML —
|
|
244
|
+
after the `<title>` tag, before `</head>`
|
|
245
|
+
3. One script block per schema type —
|
|
246
|
+
do not combine multiple types in one block
|
|
247
|
+
4. Test immediately using Google's Rich Results
|
|
248
|
+
Test: https://search.google.com/test/rich-results
|
|
249
|
+
5. Test using Schema.org Validator:
|
|
250
|
+
https://validator.schema.org
|
|
251
|
+
6. After deploying, request re-indexing in
|
|
252
|
+
Google Search Console
|
|
91
253
|
|
|
92
|
-
|
|
93
|
-
**Solution:** Add AggregateRating object with ratingValue, reviewCount, bestRating, and worstRating — all four fields required.
|
|
254
|
+
---
|
|
94
255
|
|
|
95
|
-
##
|
|
256
|
+
## Testing Checklist
|
|
96
257
|
|
|
97
|
-
-
|
|
98
|
-
-
|
|
258
|
+
- [ ] All required fields populated for each schema type
|
|
259
|
+
- [ ] No placeholder text left in any field
|
|
260
|
+
- [ ] All URLs are absolute (https://...) not relative (/page)
|
|
261
|
+
- [ ] Date fields use ISO 8601 format (YYYY-MM-DD)
|
|
262
|
+
- [ ] Price uses decimal format (e.g. 49.00 not $49)
|
|
263
|
+
- [ ] Currency uses ISO 4217 code (USD not $)
|
|
264
|
+
- [ ] FAQPage has minimum 2 question-answer pairs
|
|
265
|
+
- [ ] No HTML tags inside JSON-LD string values
|
|
266
|
+
- [ ] Each schema type in its own `<script>` block
|
|
267
|
+
- [ ] Tested in Google Rich Results Test ✅
|
|
268
|
+
- [ ] Tested in Schema.org Validator ✅
|
|
269
|
+
````
|
|
99
270
|
|
|
100
|
-
|
|
271
|
+
---
|
|
101
272
|
|
|
102
|
-
|
|
103
|
-
|
|
273
|
+
## References Folder
|
|
274
|
+
|
|
275
|
+
The `references/` folder contains pre-validated
|
|
276
|
+
JSON-LD templates for all supported schema types.
|
|
277
|
+
The script uses these as base structures and
|
|
278
|
+
populates them with page data.
|
|
279
|
+
````
|
|
280
|
+
references/
|
|
281
|
+
├── faq-schema.json
|
|
282
|
+
├── article-schema.json
|
|
283
|
+
├── product-schema.json
|
|
284
|
+
├── review-schema.json
|
|
285
|
+
├── aggregate-rating-schema.json
|
|
286
|
+
├── howto-schema.json
|
|
287
|
+
├── breadcrumb-schema.json
|
|
288
|
+
├── organization-schema.json
|
|
289
|
+
├── webpage-schema.json
|
|
290
|
+
└── website-schema.json
|
|
291
|
+
````
|
|
292
|
+
|
|
293
|
+
Each template contains all required and recommended
|
|
294
|
+
fields with placeholder values in this format:
|
|
295
|
+
`"{{field_name}}"`. The `schema_builder.py` script
|
|
296
|
+
replaces all placeholders with the values from `page_data`.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Execution Steps
|
|
301
|
+
|
|
302
|
+
1. Read `page_type` and `schema_types` —
|
|
303
|
+
if `schema_types` is empty, recommend the
|
|
304
|
+
appropriate types based on `page_type` using
|
|
305
|
+
the Schema Type Menu before proceeding
|
|
306
|
+
2. For each requested schema type, load the
|
|
307
|
+
corresponding template from `references/`
|
|
308
|
+
3. Map all fields from `page_data` to the
|
|
309
|
+
template placeholders
|
|
310
|
+
4. Check every required field against the
|
|
311
|
+
Rich Result Eligibility Rules —
|
|
312
|
+
flag any missing required field as an issue
|
|
313
|
+
before outputting
|
|
314
|
+
5. Check every recommended field — flag as
|
|
315
|
+
a warning if missing but do not block output
|
|
316
|
+
6. Validate all URLs are absolute,
|
|
317
|
+
all dates are ISO 8601,
|
|
318
|
+
all prices are decimal format
|
|
319
|
+
7. Generate one clean `<script>` block
|
|
320
|
+
per schema type
|
|
321
|
+
8. Build the Validation Summary table
|
|
322
|
+
9. List all issues with severity and exact fix instructions
|
|
323
|
+
10. Write Implementation Instructions
|
|
324
|
+
and Testing Checklist
|
|
325
|
+
11. Populate the selected reference template from supplied page data, validate required fields, and show unresolved placeholders as blocking issues. Use a project-provided schema helper only as a supplementary check; never emit fabricated review, rating, or product claims.
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Connected Skills
|
|
330
|
+
- Receives output from: `seo-aeo-landing-page-writer`,
|
|
331
|
+
`seo-aeo-blog-writer`, `seo-aeo-content-quality-auditor`,
|
|
332
|
+
`seo-aeo-internal-linking`
|
|
333
|
+
- Feeds output to: orchestrator workflow —
|
|
334
|
+
final step before publish checklist
|
|
335
|
+
|
|
336
|
+
## When to Use
|
|
337
|
+
|
|
338
|
+
Use when adding or validating JSON-LD structured data for a page and the supplied visible content supports the selected schema type.
|
|
104
339
|
|
|
105
340
|
## Limitations
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
|
|
341
|
+
|
|
342
|
+
- Structured data must match visible, truthful page content; valid JSON-LD does not guarantee rich results, indexing, or display.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": "Article",
|
|
4
|
+
"headline": "{{headline}}",
|
|
5
|
+
"description": "{{description}}",
|
|
6
|
+
"author": {"@type": "Person", "name": "{{author_name}}"},
|
|
7
|
+
"datePublished": "{{date_published}}",
|
|
8
|
+
"dateModified": "{{date_modified}}",
|
|
9
|
+
"mainEntityOfPage": "{{url}}"
|
|
10
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": "Product",
|
|
4
|
+
"name": "{{name}}",
|
|
5
|
+
"description": "{{description}}",
|
|
6
|
+
"brand": {"@type": "Brand", "name": "{{brand_name}}"},
|
|
7
|
+
"offers": {"@type": "Offer", "url": "{{url}}", "priceCurrency": "{{price_currency}}", "price": "{{price}}", "availability": "{{availability}}"}
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": "Review",
|
|
4
|
+
"itemReviewed": {"@type": "Product", "name": "{{item_name}}"},
|
|
5
|
+
"reviewRating": {"@type": "Rating", "ratingValue": "{{rating_value}}", "bestRating": "{{best_rating}}"},
|
|
6
|
+
"author": {"@type": "Person", "name": "{{author_name}}"},
|
|
7
|
+
"reviewBody": "{{review_body}}"
|
|
8
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: youtube-transcript-skills
|
|
3
|
+
description: "Fetch YouTube video transcripts, search videos/channels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required."
|
|
4
|
+
category: api-integration
|
|
5
|
+
risk: safe
|
|
6
|
+
source: community
|
|
7
|
+
source_repo: tubeagentkit/youtube-transcript-skills
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: "2026-09-13"
|
|
10
|
+
author: tubeagentkit
|
|
11
|
+
tags: [youtube, transcripts, video-search, channels, playlists, api]
|
|
12
|
+
tools: [claude, cursor, codex, gemini]
|
|
13
|
+
license: "MIT"
|
|
14
|
+
license_source: "https://github.com/tubeagentkit/youtube-transcript-skills/blob/main/LICENSE"
|
|
15
|
+
upstream: "https://github.com/tubeagentkit/youtube-transcript-skills"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# YouTube Transcript
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
Fetches transcripts, search results, and playlist/channel data from YouTube
|
|
23
|
+
via the [getyoutubetranscript.com](https://getyoutubetranscript.com) REST
|
|
24
|
+
API, so an agent can summarize, quote, search, or analyze a video's actual
|
|
25
|
+
spoken content without the user copy-pasting it in by hand. No `yt-dlp` and
|
|
26
|
+
no Google API key required.
|
|
27
|
+
|
|
28
|
+
- `source_repo: tubeagentkit/youtube-transcript-skills`
|
|
29
|
+
- `source_type: community`
|
|
30
|
+
|
|
31
|
+
## When to Use This Skill
|
|
32
|
+
|
|
33
|
+
- Use when the user wants a YouTube video's transcript fetched, summarized, quoted, or analyzed.
|
|
34
|
+
- Use when the user wants to search YouTube (globally, or within one channel by handle).
|
|
35
|
+
- Use when the user wants a channel handle resolved to a channel ID, or wants a channel's info and upload history.
|
|
36
|
+
- Use when the user wants the videos in a YouTube playlist.
|
|
37
|
+
|
|
38
|
+
## How It Works
|
|
39
|
+
|
|
40
|
+
### Step 1: Get an API key
|
|
41
|
+
|
|
42
|
+
Every call needs an API key: the `YOUTUBE_TRANSCRIPT_API_KEY` environment
|
|
43
|
+
variable, or one the user has already provided. If neither exists, the skill
|
|
44
|
+
can sign the user up for a free account (100 credits, no card required) via a
|
|
45
|
+
two-step email + verification-code flow against the API - only after the
|
|
46
|
+
user has explicitly given consent and an email address to use.
|
|
47
|
+
|
|
48
|
+
### Step 2: Call the API
|
|
49
|
+
|
|
50
|
+
Base URL: `https://getyoutubetranscript.com/api/v1`. Send the key as
|
|
51
|
+
`Authorization: Bearer <API_KEY>` or `x-api-key: <API_KEY>`.
|
|
52
|
+
|
|
53
|
+
- `GET /transcript?v=<VIDEO_ID_OR_URL>&language=en` - fetch a transcript.
|
|
54
|
+
- `GET /search?q=<query>&type=video|channel` - search YouTube.
|
|
55
|
+
- `GET /resolve?handle=@name` - resolve a channel handle to a channel ID (free).
|
|
56
|
+
- `GET /channel/latest?channel=@name` - channel info and latest videos (free).
|
|
57
|
+
- `GET /channel/videos?channel=@name` - a channel's full upload history (paginated).
|
|
58
|
+
- `GET /channel/search?channel=@name&q=<query>` - search within a channel (paginated).
|
|
59
|
+
- `GET /playlist?list=<playlist ID or URL>` - playlist videos (paginated).
|
|
60
|
+
|
|
61
|
+
### Step 3: Handle errors and pagination
|
|
62
|
+
|
|
63
|
+
Every error is JSON with a stable `code` (e.g. `TRANSCRIPT_NOT_FOUND`,
|
|
64
|
+
`PAYMENT_REQUIRED`, `RATE_LIMITED`) and a matching HTTP status - relay the
|
|
65
|
+
`message` field to the user rather than guessing at a fix. Paginated
|
|
66
|
+
endpoints return an opaque `data.continuation_token`; pass it back verbatim
|
|
67
|
+
as `continuation` to get the next page, `null` means no more pages.
|
|
68
|
+
|
|
69
|
+
## Examples
|
|
70
|
+
|
|
71
|
+
### Example 1: Summarize a video
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
curl -s "https://getyoutubetranscript.com/api/v1/transcript?v=jNQXAC9IVRw&language=en" \
|
|
75
|
+
-H "Authorization: Bearer $YOUTUBE_TRANSCRIPT_API_KEY"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Example 2: Browse a channel's uploads
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
curl -s "https://getyoutubetranscript.com/api/v1/channel/videos?channel=@mkbhd" \
|
|
82
|
+
-H "Authorization: Bearer $YOUTUBE_TRANSCRIPT_API_KEY"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Best Practices
|
|
86
|
+
|
|
87
|
+
- Do reuse an existing `YOUTUBE_TRANSCRIPT_API_KEY` before offering to create a new account.
|
|
88
|
+
- Do ask explicit consent before sending an email address anywhere during signup.
|
|
89
|
+
- Don't retry a `402 PAYMENT_REQUIRED` response - direct the user to top up instead.
|
|
90
|
+
- Don't hammer a `429 RATE_LIMITED` response in a retry loop - back off.
|
|
91
|
+
|
|
92
|
+
## Limitations
|
|
93
|
+
|
|
94
|
+
- The transcript endpoint returns the full spoken text as one string; there is no per-line timestamp breakdown.
|
|
95
|
+
- This skill does not replace environment-specific validation, testing, or expert review.
|
|
96
|
+
- Stop and ask for clarification if required inputs, permissions, or safety boundaries are missing.
|
|
97
|
+
|
|
98
|
+
## Security & Safety Notes
|
|
99
|
+
|
|
100
|
+
- This skill only makes outbound HTTPS requests to `getyoutubetranscript.com` endpoints, plus - during first-time setup - an email address the user explicitly provides. It runs no other shell commands and installs nothing.
|
|
101
|
+
- Never persist a newly issued API key to a shell profile or other file without the user's explicit confirmation first.
|
|
102
|
+
|
|
103
|
+
## Common Pitfalls
|
|
104
|
+
|
|
105
|
+
- **Problem:** Assuming the transcript response includes timestamps.
|
|
106
|
+
**Solution:** Tell the user timestamps aren't available from this endpoint rather than inventing them.
|
|
107
|
+
|
|
108
|
+
## Related Skills
|
|
109
|
+
|
|
110
|
+
- `@youtube-full` - an alternative YouTube transcript/search/channel/playlist skill backed by a different upstream API.
|
package/package.json
CHANGED