aiden-runtime 3.19.5 → 3.19.7
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/README.md +1 -1
- package/dist/api/server.js +24 -25
- package/dist/core/agentLoop.js +8 -6
- package/dist/core/aidenPersonality.js +20 -3
- package/dist/core/protectedContext.js +15 -2
- package/dist/core/skillLoader.js +2 -0
- package/dist/core/skillTeacher.js +18 -5
- package/dist/core/version.js +1 -1
- package/dist-bundle/cli.js +50 -18
- package/dist-bundle/index.js +73 -35
- package/package.json +2 -1
- package/scripts/postinstall.js +70 -1
- package/workspace-templates/HEARTBEAT.md +16 -0
- package/workspace-templates/SOUL.md +267 -0
- package/workspace-templates/STANDING_ORDERS.md +21 -0
- package/workspace-templates/permissions.yaml +180 -0
- package/workspace-templates/skills/architecture-diagram/SKILL.md +126 -0
- package/workspace-templates/skills/architecture-diagram/skill.json +25 -0
- package/workspace-templates/skills/arxiv/SKILL.md +124 -0
- package/workspace-templates/skills/arxiv/skill.json +26 -0
- package/workspace-templates/skills/ascii-art/SKILL.md +142 -0
- package/workspace-templates/skills/ascii-art/skill.json +26 -0
- package/workspace-templates/skills/blogwatcher/SKILL.md +147 -0
- package/workspace-templates/skills/blogwatcher/skill.json +26 -0
- package/workspace-templates/skills/censys/SKILL.md +104 -0
- package/workspace-templates/skills/censys/index.ts +133 -0
- package/workspace-templates/skills/censys/skill.json +25 -0
- package/workspace-templates/skills/clipboard-history/SKILL.md +101 -0
- package/workspace-templates/skills/clipboard-history/skill.json +23 -0
- package/workspace-templates/skills/crt-sh/SKILL.md +102 -0
- package/workspace-templates/skills/crt-sh/index.ts +59 -0
- package/workspace-templates/skills/crt-sh/skill.json +25 -0
- package/workspace-templates/skills/cveapi/SKILL.md +114 -0
- package/workspace-templates/skills/cveapi/index.ts +249 -0
- package/workspace-templates/skills/cveapi/skill.json +25 -0
- package/workspace-templates/skills/docker-management/SKILL.md +156 -0
- package/workspace-templates/skills/docker-management/skill.json +25 -0
- package/workspace-templates/skills/excalidraw/SKILL.md +148 -0
- package/workspace-templates/skills/excalidraw/skill.json +25 -0
- package/workspace-templates/skills/explainshell/SKILL.md +93 -0
- package/workspace-templates/skills/explainshell/index.ts +132 -0
- package/workspace-templates/skills/explainshell/skill.json +25 -0
- package/workspace-templates/skills/financial_research/SKILL.md +21 -0
- package/workspace-templates/skills/financial_research/skill.json +24 -0
- package/workspace-templates/skills/gif-search/SKILL.md +122 -0
- package/workspace-templates/skills/gif-search/skill.json +25 -0
- package/workspace-templates/skills/github-auth/SKILL.md +134 -0
- package/workspace-templates/skills/github-auth/skill.json +26 -0
- package/workspace-templates/skills/github-issues/SKILL.md +130 -0
- package/workspace-templates/skills/github-issues/skill.json +25 -0
- package/workspace-templates/skills/github-pr-workflow/SKILL.md +143 -0
- package/workspace-templates/skills/github-pr-workflow/skill.json +26 -0
- package/workspace-templates/skills/github-repo-management/SKILL.md +147 -0
- package/workspace-templates/skills/github-repo-management/skill.json +26 -0
- package/workspace-templates/skills/google-workspace/SKILL.md +110 -0
- package/workspace-templates/skills/google-workspace/skill.json +26 -0
- package/workspace-templates/skills/greynoise/SKILL.md +96 -0
- package/workspace-templates/skills/greynoise/index.ts +107 -0
- package/workspace-templates/skills/greynoise/skill.json +25 -0
- package/workspace-templates/skills/haveibeenpwned/SKILL.md +100 -0
- package/workspace-templates/skills/haveibeenpwned/index.ts +72 -0
- package/workspace-templates/skills/haveibeenpwned/skill.json +24 -0
- package/workspace-templates/skills/jupyter-live-kernel/SKILL.md +116 -0
- package/workspace-templates/skills/jupyter-live-kernel/skill.json +25 -0
- package/workspace-templates/skills/linear/SKILL.md +107 -0
- package/workspace-templates/skills/linear/skill.json +25 -0
- package/workspace-templates/skills/nano-pdf/SKILL.md +113 -0
- package/workspace-templates/skills/nano-pdf/skill.json +26 -0
- package/workspace-templates/skills/notion/SKILL.md +108 -0
- package/workspace-templates/skills/notion/skill.json +24 -0
- package/workspace-templates/skills/obsidian/SKILL.md +115 -0
- package/workspace-templates/skills/obsidian/skill.json +24 -0
- package/workspace-templates/skills/ocr-and-documents/SKILL.md +125 -0
- package/workspace-templates/skills/ocr-and-documents/skill.json +26 -0
- package/workspace-templates/skills/p5js/SKILL.md +163 -0
- package/workspace-templates/skills/p5js/skill.json +24 -0
- package/workspace-templates/skills/research-paper-writing/SKILL.md +158 -0
- package/workspace-templates/skills/research-paper-writing/skill.json +26 -0
- package/workspace-templates/skills/securityheaders/SKILL.md +99 -0
- package/workspace-templates/skills/securityheaders/index.ts +213 -0
- package/workspace-templates/skills/securityheaders/skill.json +26 -0
- package/workspace-templates/skills/shodan/SKILL.md +113 -0
- package/workspace-templates/skills/shodan/index.ts +94 -0
- package/workspace-templates/skills/shodan/skill.json +26 -0
- package/workspace-templates/skills/songsee/SKILL.md +152 -0
- package/workspace-templates/skills/songsee/skill.json +25 -0
- package/workspace-templates/skills/ssllabs/SKILL.md +107 -0
- package/workspace-templates/skills/ssllabs/index.ts +208 -0
- package/workspace-templates/skills/ssllabs/skill.json +27 -0
- package/workspace-templates/skills/stable-diffusion-image-generation/SKILL.md +136 -0
- package/workspace-templates/skills/stable-diffusion-image-generation/skill.json +24 -0
- package/workspace-templates/skills/systematic-debugging/SKILL.md +131 -0
- package/workspace-templates/skills/systematic-debugging/skill.json +25 -0
- package/workspace-templates/skills/test-driven-development/SKILL.md +164 -0
- package/workspace-templates/skills/test-driven-development/skill.json +25 -0
- package/workspace-templates/skills/urlscan/SKILL.md +118 -0
- package/workspace-templates/skills/urlscan/index.ts +94 -0
- package/workspace-templates/skills/urlscan/skill.json +24 -0
- package/workspace-templates/skills/virustotal/SKILL.md +120 -0
- package/workspace-templates/skills/virustotal/index.ts +124 -0
- package/workspace-templates/skills/virustotal/skill.json +26 -0
- package/workspace-templates/skills/web_research/SKILL.md +18 -0
- package/workspace-templates/skills/web_research/skill.json +20 -0
- package/workspace-templates/skills/xitter/SKILL.md +148 -0
- package/workspace-templates/skills/xitter/skill.json +26 -0
- package/workspace-templates/skills/youtube-content/SKILL.md +121 -0
- package/workspace-templates/skills/youtube-content/skill.json +25 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web_research
|
|
3
|
+
description: Deep web research with multi-source verification
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: web, research, search, analyze
|
|
6
|
+
license: Apache-2.0
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Web Research
|
|
10
|
+
|
|
11
|
+
When performing web research:
|
|
12
|
+
1. Search broad first, then narrow by entity
|
|
13
|
+
2. Fetch actual page content, not just snippets
|
|
14
|
+
3. Cross-reference at least 2 sources before stating facts
|
|
15
|
+
4. Extract specific data points: names, numbers, dates, comparisons
|
|
16
|
+
5. Never state information you cannot verify from the fetched content
|
|
17
|
+
6. For comparisons: create structured tables with consistent attributes
|
|
18
|
+
7. Always note the source URL for key facts
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "web_research",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Deep web research with multi-source verification",
|
|
5
|
+
"author": "local",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"web",
|
|
15
|
+
"research",
|
|
16
|
+
"search",
|
|
17
|
+
"analyze"
|
|
18
|
+
],
|
|
19
|
+
"created": "2026-04-27T17:11:41.095Z"
|
|
20
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: xitter
|
|
3
|
+
description: Post, read, and search X (Twitter) content using x-cli or the X API v2
|
|
4
|
+
category: social
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
origin: aiden
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
tags: twitter, x, social-media, tweet, post, search, api, x-cli, timeline, mentions
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# X (Twitter) Automation
|
|
12
|
+
|
|
13
|
+
Read, post, and search X content using the `x-cli` command-line tool or the X API v2 directly. Requires X API credentials.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to post a tweet or thread on X
|
|
18
|
+
- User wants to search for recent tweets on a topic
|
|
19
|
+
- User wants to read their home timeline or mentions
|
|
20
|
+
- User wants to fetch tweets from a specific account
|
|
21
|
+
- User wants to schedule or automate social media posts
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### 1. Set up X API credentials
|
|
26
|
+
|
|
27
|
+
Register at https://developer.twitter.com → Create Project → Create App. Get:
|
|
28
|
+
- `API_KEY`, `API_SECRET`
|
|
29
|
+
- `ACCESS_TOKEN`, `ACCESS_TOKEN_SECRET`
|
|
30
|
+
- `BEARER_TOKEN` (for read-only app-only auth)
|
|
31
|
+
|
|
32
|
+
```powershell
|
|
33
|
+
$env:X_BEARER_TOKEN = "your_bearer_token"
|
|
34
|
+
$env:X_API_KEY = "your_api_key"
|
|
35
|
+
$env:X_API_SECRET = "your_api_secret"
|
|
36
|
+
$env:X_ACCESS_TOKEN = "your_access_token"
|
|
37
|
+
$env:X_ACCESS_SECRET = "your_access_secret"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. Search recent tweets (Bearer Token — no user auth needed)
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
import requests, os
|
|
44
|
+
|
|
45
|
+
def search_tweets(query, max_results=10):
|
|
46
|
+
headers = {"Authorization": f"Bearer {os.environ['X_BEARER_TOKEN']}"}
|
|
47
|
+
params = {
|
|
48
|
+
"query": f"{query} -is:retweet lang:en",
|
|
49
|
+
"max_results": max_results,
|
|
50
|
+
"tweet.fields": "created_at,author_id,public_metrics"
|
|
51
|
+
}
|
|
52
|
+
resp = requests.get("https://api.twitter.com/2/tweets/search/recent", headers=headers, params=params)
|
|
53
|
+
resp.raise_for_status()
|
|
54
|
+
for tweet in resp.json().get("data", []):
|
|
55
|
+
print(f"• {tweet['text'][:120]}")
|
|
56
|
+
print(f" {tweet['created_at']} likes={tweet['public_metrics']['like_count']}\n")
|
|
57
|
+
|
|
58
|
+
search_tweets("Aiden AI agent 2026", max_results=5)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 3. Post a tweet (OAuth 1.0a)
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
import requests, os, time, hashlib, hmac, base64, urllib.parse, uuid
|
|
65
|
+
|
|
66
|
+
def post_tweet(text):
|
|
67
|
+
url = "https://api.twitter.com/2/tweets"
|
|
68
|
+
params = {"text": text}
|
|
69
|
+
|
|
70
|
+
# OAuth 1.0a signature
|
|
71
|
+
oauth_params = {
|
|
72
|
+
"oauth_consumer_key": os.environ["X_API_KEY"],
|
|
73
|
+
"oauth_nonce": uuid.uuid4().hex,
|
|
74
|
+
"oauth_signature_method": "HMAC-SHA1",
|
|
75
|
+
"oauth_timestamp": str(int(time.time())),
|
|
76
|
+
"oauth_token": os.environ["X_ACCESS_TOKEN"],
|
|
77
|
+
"oauth_version": "1.0",
|
|
78
|
+
}
|
|
79
|
+
signing_key = "&".join([urllib.parse.quote(os.environ["X_API_SECRET"], safe=""),
|
|
80
|
+
urllib.parse.quote(os.environ["X_ACCESS_SECRET"], safe="")])
|
|
81
|
+
base_string = "&".join(["POST", urllib.parse.quote(url, safe=""),
|
|
82
|
+
urllib.parse.quote("&".join(f"{k}={v}" for k,v in sorted(oauth_params.items())), safe="")])
|
|
83
|
+
signature = base64.b64encode(hmac.new(signing_key.encode(), base_string.encode(), hashlib.sha1).digest()).decode()
|
|
84
|
+
oauth_params["oauth_signature"] = signature
|
|
85
|
+
|
|
86
|
+
auth_header = "OAuth " + ", ".join(f'{k}="{urllib.parse.quote(v, safe="")}"' for k,v in oauth_params.items())
|
|
87
|
+
resp = requests.post(url, json=params, headers={"Authorization": auth_header, "Content-Type": "application/json"})
|
|
88
|
+
resp.raise_for_status()
|
|
89
|
+
print(f"Posted tweet: {resp.json()['data']['id']}")
|
|
90
|
+
|
|
91
|
+
post_tweet("Hello from Aiden! 🤖 #AI #automation")
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 4. Fetch user timeline
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
import requests, os
|
|
98
|
+
|
|
99
|
+
def get_user_timeline(username, max_results=10):
|
|
100
|
+
headers = {"Authorization": f"Bearer {os.environ['X_BEARER_TOKEN']}"}
|
|
101
|
+
user = requests.get(f"https://api.twitter.com/2/users/by/username/{username}", headers=headers).json()
|
|
102
|
+
user_id = user["data"]["id"]
|
|
103
|
+
|
|
104
|
+
resp = requests.get(
|
|
105
|
+
f"https://api.twitter.com/2/users/{user_id}/tweets",
|
|
106
|
+
headers=headers,
|
|
107
|
+
params={"max_results": max_results, "tweet.fields": "created_at,public_metrics", "exclude": "retweets"}
|
|
108
|
+
)
|
|
109
|
+
for tweet in resp.json().get("data", []):
|
|
110
|
+
print(f"• {tweet['text'][:120]}\n {tweet['created_at']}\n")
|
|
111
|
+
|
|
112
|
+
get_user_timeline("elonmusk", max_results=5)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 5. Read mentions
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
import requests, os
|
|
119
|
+
|
|
120
|
+
def get_mentions(user_id, max_results=10):
|
|
121
|
+
headers = {"Authorization": f"Bearer {os.environ['X_BEARER_TOKEN']}"}
|
|
122
|
+
resp = requests.get(
|
|
123
|
+
f"https://api.twitter.com/2/users/{user_id}/mentions",
|
|
124
|
+
headers=headers,
|
|
125
|
+
params={"max_results": max_results, "tweet.fields": "created_at,author_id"}
|
|
126
|
+
)
|
|
127
|
+
for tweet in resp.json().get("data", []):
|
|
128
|
+
print(f"• {tweet['text'][:120]}\n {tweet['created_at']}\n")
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Examples
|
|
132
|
+
|
|
133
|
+
**"Search for recent tweets about LLM agents"**
|
|
134
|
+
→ Use step 2 with query `"LLM agents"`.
|
|
135
|
+
|
|
136
|
+
**"Post a tweet saying 'Aiden just automated my morning report'"**
|
|
137
|
+
→ Ask user to confirm before posting, then use step 3.
|
|
138
|
+
|
|
139
|
+
**"Show me the last 10 tweets from a specific account"**
|
|
140
|
+
→ Use step 4 with the target username.
|
|
141
|
+
|
|
142
|
+
## Cautions
|
|
143
|
+
|
|
144
|
+
- Posting tweets requires user-context OAuth 1.0a — Bearer Token alone cannot post
|
|
145
|
+
- X API free tier limits search results to the last 7 days and 1 request per 15 minutes
|
|
146
|
+
- Always ask user for explicit confirmation before posting any tweet on their behalf
|
|
147
|
+
- X API rate limits are strict — cache results locally rather than re-fetching on every call
|
|
148
|
+
- Never hardcode API credentials — always use environment variables
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "xitter",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Post, read, and search X (Twitter) content using x-cli or the X API v2",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"twitter",
|
|
15
|
+
"x",
|
|
16
|
+
"social-media",
|
|
17
|
+
"tweet",
|
|
18
|
+
"post",
|
|
19
|
+
"search",
|
|
20
|
+
"api",
|
|
21
|
+
"x-cli",
|
|
22
|
+
"timeline",
|
|
23
|
+
"mentions"
|
|
24
|
+
],
|
|
25
|
+
"created": "2026-04-27T17:11:41.209Z"
|
|
26
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: youtube-content
|
|
3
|
+
description: Extract transcripts, download audio/video, and analyze YouTube content using youtube-transcript-api and yt-dlp
|
|
4
|
+
category: research
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
origin: aiden
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
tags: youtube, transcript, video, audio, download, subtitles, yt-dlp, content, summary
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# YouTube Content Extraction
|
|
12
|
+
|
|
13
|
+
Extract transcripts, download audio or video, and retrieve metadata from YouTube using `youtube-transcript-api` (Python) and `yt-dlp`.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to get the transcript of a YouTube video
|
|
18
|
+
- User wants to summarize a YouTube video without watching it
|
|
19
|
+
- User wants to download audio from a YouTube video
|
|
20
|
+
- User wants to download a video for offline viewing
|
|
21
|
+
- User wants to search for metadata (title, duration, views) of a video
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### 1. Install required tools
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
pip install youtube-transcript-api
|
|
29
|
+
pip install yt-dlp
|
|
30
|
+
# Verify
|
|
31
|
+
yt-dlp --version
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 2. Get a video transcript (Python)
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
from youtube_transcript_api import YouTubeTranscriptApi
|
|
38
|
+
|
|
39
|
+
video_id = "dQw4w9WgXcQ" # from youtube.com/watch?v=<id>
|
|
40
|
+
transcript = YouTubeTranscriptApi.get_transcript(video_id)
|
|
41
|
+
text = " ".join(entry["text"] for entry in transcript)
|
|
42
|
+
print(text[:2000])
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 3. Get transcript in a specific language
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from youtube_transcript_api import YouTubeTranscriptApi
|
|
49
|
+
|
|
50
|
+
video_id = "dQw4w9WgXcQ"
|
|
51
|
+
# Try English first, then auto-generated
|
|
52
|
+
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=["en", "en-US"])
|
|
53
|
+
text = " ".join(entry["text"] for entry in transcript)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 4. List available transcript languages for a video
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from youtube_transcript_api import YouTubeTranscriptApi
|
|
60
|
+
|
|
61
|
+
video_id = "dQw4w9WgXcQ"
|
|
62
|
+
transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
|
|
63
|
+
for t in transcript_list:
|
|
64
|
+
print(t.language, t.language_code, "auto-generated:", t.is_generated)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 5. Download audio (MP3) with yt-dlp
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
$videoUrl = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
|
71
|
+
yt-dlp -x --audio-format mp3 -o "%(title)s.%(ext)s" $videoUrl
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 6. Download video (best quality)
|
|
75
|
+
|
|
76
|
+
```powershell
|
|
77
|
+
$videoUrl = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
|
78
|
+
yt-dlp -f "bestvideo+bestaudio" --merge-output-format mp4 -o "%(title)s.%(ext)s" $videoUrl
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 7. Download video at specific quality
|
|
82
|
+
|
|
83
|
+
```powershell
|
|
84
|
+
# List available formats first
|
|
85
|
+
yt-dlp -F $videoUrl
|
|
86
|
+
|
|
87
|
+
# Download 720p
|
|
88
|
+
yt-dlp -f "bestvideo[height<=720]+bestaudio" --merge-output-format mp4 -o "%(title)s.%(ext)s" $videoUrl
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 8. Get video metadata (no download)
|
|
92
|
+
|
|
93
|
+
```powershell
|
|
94
|
+
yt-dlp --dump-json --no-download $videoUrl | python -m json.tool | Select-String -Pattern '"title"|"duration"|"view_count"|"upload_date"'
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 9. Download an entire playlist
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
$playlistUrl = "https://www.youtube.com/playlist?list=PLxxxxxx"
|
|
101
|
+
yt-dlp -x --audio-format mp3 -o "%(playlist_index)s-%(title)s.%(ext)s" $playlistUrl
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Examples
|
|
105
|
+
|
|
106
|
+
**"Get me the transcript of this YouTube tutorial so I can read it"**
|
|
107
|
+
→ Use step 2 — extract video ID from URL and call `get_transcript`.
|
|
108
|
+
|
|
109
|
+
**"Download the audio from this podcast episode on YouTube"**
|
|
110
|
+
→ Use step 5 with the video URL to download as MP3.
|
|
111
|
+
|
|
112
|
+
**"What languages are available for transcripts on this video?"**
|
|
113
|
+
→ Use step 4 to list available transcript languages.
|
|
114
|
+
|
|
115
|
+
## Cautions
|
|
116
|
+
|
|
117
|
+
- `youtube-transcript-api` only works for videos that have transcripts (manual or auto-generated)
|
|
118
|
+
- Auto-generated transcripts may have errors, especially for technical content or non-English speech
|
|
119
|
+
- Downloading videos may be subject to YouTube's Terms of Service — use for personal research and fair use only
|
|
120
|
+
- yt-dlp may need updates when YouTube changes its API: run `yt-dlp -U` to update
|
|
121
|
+
- Rate limiting may occur on rapid consecutive downloads — add delays between requests for playlists
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "youtube-content",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Extract transcripts, download audio/video, and analyze YouTube content using youtube-transcript-api and yt-dlp",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"youtube",
|
|
15
|
+
"transcript",
|
|
16
|
+
"video",
|
|
17
|
+
"audio",
|
|
18
|
+
"download",
|
|
19
|
+
"subtitles",
|
|
20
|
+
"yt-dlp",
|
|
21
|
+
"content",
|
|
22
|
+
"summary"
|
|
23
|
+
],
|
|
24
|
+
"created": "2026-04-27T17:11:41.233Z"
|
|
25
|
+
}
|