@framers/agentos-skills-registry 0.9.0 → 0.11.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/agentos-skills-registry",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "registry",
@@ -37,3 +37,13 @@ Use `git` to inspect history, create branches, commit changes, and resolve confl
37
37
  - Create a branch: `git checkout -b my-branch`
38
38
  - Stage + commit: `git add -A && git commit -m "message"`
39
39
  - Rebase: `git rebase -i origin/main`
40
+
41
+ ## GitHub Integration
42
+
43
+ After making local commits with git, use the GitHub tools to push your work upstream and open pull requests:
44
+
45
+ - **Create a remote branch** — Use `github_branch_create` to create a branch on the remote from a given SHA. Get the SHA from your local HEAD with `git rev-parse HEAD`, then create the matching remote branch.
46
+ - **Open a pull request** — Use `github_pr_create` to open a PR from your feature branch to the default branch, with a clear title and description summarizing the changes.
47
+ - **Full GitHub API operations** — The `github` skill provides 26 tools covering PR review, merge, issue triage, release management, Actions CI/CD, and more. Reference it for anything beyond local git operations.
48
+
49
+ **Division of responsibility:** Use `git` for local operations (staging, committing, branching, rebasing, diffing, log inspection) and the `github_*` tools for remote API operations (creating PRs, reviewing code, managing issues, triggering workflows). The two complement each other — git handles your local working copy while the GitHub tools interact with the hosted platform.
@@ -1,54 +1,142 @@
1
1
  ---
2
2
  name: github
3
- version: '1.0.0'
4
- description: Manage GitHub repositories, issues, pull requests, releases, and Actions workflows using the gh CLI.
3
+ version: '2.0.0'
4
+ description: Full GitHub API integration — 26 tools for repos, issues, PRs, branches, commits, releases, Actions, files, gists, and codebase indexing.
5
5
  author: Wunderland
6
6
  namespace: wunderland
7
- category: developer-tools
8
- tags: [github, git, issues, pull-requests, ci-cd, code-review]
7
+ category: developer
8
+ tags: [github, git, repository, issues, pull-requests, code-review, ci-cd, releases, actions, api]
9
9
  requires_secrets: [github.token]
10
- requires_tools: [filesystem]
10
+ requires_tools: [github_search, github_repo_list, github_repo_info, github_repo_create, github_repo_index, github_file_read, github_file_write, github_gist_create, github_issue_list, github_issue_create, github_issue_update, github_comment_list, github_pr_list, github_pr_create, github_pr_diff, github_pr_review, github_pr_merge, github_pr_comment_list, github_pr_comment_create, github_branch_list, github_branch_create, github_commit_list, github_release_list, github_release_create, github_actions_list, github_actions_trigger]
11
11
  metadata:
12
12
  agentos:
13
- emoji: "\U0001F419"
14
- primaryEnv: GITHUB_TOKEN
15
- requires:
16
- bins: ['gh']
17
- install:
18
- - id: brew
19
- kind: brew
20
- formula: gh
21
- bins: ['gh']
22
- label: 'Install GitHub CLI (brew)'
23
- - id: apt
24
- kind: apt
25
- package: gh
26
- bins: ['gh']
27
- os: ['linux']
28
- label: 'Install GitHub CLI (apt)'
13
+ emoji: "\U0001F4BB"
29
14
  ---
30
15
 
31
- # GitHub (gh CLI)
16
+ # GitHub
32
17
 
33
- Use the `gh` CLI to interact with GitHub repositories, issues, pull requests, releases, and GitHub Actions. You have full access to the GitHub API through the CLI, which supports both interactive and scriptable workflows.
18
+ You have **26 GitHub tools** that cover the full developer workflow: searching code, managing repositories, reading and writing files, triaging issues, reviewing and merging pull requests, creating releases, and orchestrating CI/CD pipelines. These tools call the GitHub REST API directly no CLI binary required.
34
19
 
35
- When managing issues, always check for existing duplicates before creating new ones. For pull requests, include a clear title and description summarizing the changes. When reviewing PRs, provide specific, actionable feedback referencing line numbers. Use labels and milestones to organize work when the repository supports them.
20
+ ## Available Tools
36
21
 
37
- For repository operations, prefer `gh api` for advanced queries that the standard subcommands do not cover. You can use `gh api graphql` for complex queries involving nested relationships. Always verify authentication status with `gh auth status` before performing write operations.
22
+ | Tool | Description | Mode |
23
+ |------|-------------|------|
24
+ | `github_search` | Search repositories, code, issues, and users across GitHub | read |
25
+ | `github_repo_list` | List repositories for a user or organization | read |
26
+ | `github_repo_info` | Get detailed metadata for a single repository | read |
27
+ | `github_repo_create` | Create a new repository (public or private) | write |
28
+ | `github_repo_index` | Embed an entire repository into the knowledge base for RAG queries | write |
29
+ | `github_file_read` | Read a file or directory listing from a repo at a given ref | read |
30
+ | `github_file_write` | Create or update a file in a repository (commit directly) | write |
31
+ | `github_gist_create` | Create a new GitHub Gist (public or secret) | write |
32
+ | `github_issue_list` | List and filter issues by state, labels, assignee, milestone | read |
33
+ | `github_issue_create` | Open a new issue with title, body, labels, and assignees | write |
34
+ | `github_issue_update` | Update an issue's title, body, state, labels, or assignees | write |
35
+ | `github_comment_list` | List comments on an issue | read |
36
+ | `github_pr_list` | List pull requests filtered by state, head, base, or author | read |
37
+ | `github_pr_create` | Open a new pull request from a head branch to a base branch | write |
38
+ | `github_pr_diff` | Get the unified diff of a pull request | read |
39
+ | `github_pr_review` | Submit a review (approve, request changes, or comment) with inline comments | write |
40
+ | `github_pr_merge` | Merge a pull request (merge, squash, or rebase strategy) | write |
41
+ | `github_pr_comment_list` | List review comments on a pull request | read |
42
+ | `github_pr_comment_create` | Post a new review comment on a pull request diff | write |
43
+ | `github_branch_list` | List branches in a repository | read |
44
+ | `github_branch_create` | Create a new branch from a given SHA or ref | write |
45
+ | `github_commit_list` | List commits on a branch, path, or date range | read |
46
+ | `github_release_list` | List releases for a repository | read |
47
+ | `github_release_create` | Create a new release with tag, name, body, and asset uploads | write |
48
+ | `github_actions_list` | List workflow runs, filtered by workflow, branch, or status | read |
49
+ | `github_actions_trigger` | Trigger a workflow_dispatch event on a workflow | write |
38
50
 
39
- When working with GitHub Actions, you can trigger workflows with `gh workflow run`, check run status with `gh run list`, and view logs with `gh run view --log`. Use `gh release create` to manage releases with proper semantic versioning and changelogs.
51
+ ## Workflow: Repository Exploration
40
52
 
41
- ## Examples
53
+ Discover and navigate repositories step by step:
42
54
 
43
- - `gh issue list --label bug --state open`
44
- - `gh pr create --title "Fix auth bug" --body "Resolves #42"`
45
- - `gh pr review 123 --approve`
46
- - `gh api repos/{owner}/{repo}/actions/runs --jq '.workflow_runs[:5]'`
47
- - `gh release create v1.2.0 --generate-notes`
55
+ 1. **List repos** — `github_repo_list` with an owner to see all their repositories.
56
+ 2. **Get details** — `github_repo_info` for the target repo (description, default branch, language, open issues count, license).
57
+ 3. **Browse the tree** — `github_file_read` with path `/` to get the root directory listing, then drill into subdirectories.
58
+ 4. **Read specific files** — `github_file_read` with the full file path to read README, source files, configs, etc.
48
59
 
49
- ## Constraints
60
+ When exploring an unfamiliar project, start with the README and package manifests (package.json, Cargo.toml, pyproject.toml) to understand the stack before diving into source code.
50
61
 
51
- - Requires the `gh` CLI to be installed and authenticated.
52
- - Write operations require appropriate repository permissions.
53
- - API rate limits apply (5,000 requests/hour for authenticated users).
54
- - Large file operations should use Git LFS rather than the GitHub API.
62
+ ## Workflow: Codebase Deep-Dive
63
+
64
+ For large repositories where you need to answer questions across many files:
65
+
66
+ 1. **Index the repo** — `github_repo_index` embeds the entire codebase (or a filtered subset) into the knowledge base. This may take a moment for large repos.
67
+ 2. **Ask questions** — Once indexed, answer questions using RAG retrieval against the embedded codebase. This is far more efficient than reading files one by one.
68
+
69
+ Use this workflow when the user asks broad questions like "how does authentication work in this project?" or "find all usages of the database connection pool."
70
+
71
+ ## Workflow: Code Contribution
72
+
73
+ Make changes to a repository through the API:
74
+
75
+ 1. **Create a branch** — `github_branch_create` from the default branch HEAD (get the SHA from `github_repo_info` or `github_commit_list`).
76
+ 2. **Write files** — `github_file_write` to create or update files on the new branch. Each call creates a commit. For multiple file changes, make sequential writes to the same branch.
77
+ 3. **Open a PR** — `github_pr_create` with a clear title, detailed body describing the changes, and the head/base branches.
78
+
79
+ Always create feature branches rather than committing directly to the default branch.
80
+
81
+ ## Workflow: PR Review
82
+
83
+ Review pull requests with specific, actionable feedback:
84
+
85
+ 1. **Read the diff** — `github_pr_diff` to get the full unified diff of the PR.
86
+ 2. **Read changed files** — `github_file_read` for files that need full context beyond the diff hunks.
87
+ 3. **Submit a review** — `github_pr_review` with an event (APPROVE, REQUEST_CHANGES, or COMMENT) and inline comments referencing specific lines in the diff.
88
+
89
+ When reviewing, focus on correctness, security implications, test coverage, and adherence to project conventions. Reference specific line numbers in your inline comments.
90
+
91
+ ## Workflow: Issue Triage
92
+
93
+ Organize and manage the issue backlog:
94
+
95
+ 1. **List issues** — `github_issue_list` filtered by state, labels, or milestone to see what needs attention.
96
+ 2. **Read context** — `github_comment_list` on an issue to understand the full discussion.
97
+ 3. **Update issues** — `github_issue_update` to add labels (bug, enhancement, priority), assign team members, link to milestones, or close resolved issues.
98
+ 4. **Create issues** — `github_issue_create` when you identify new work items, bugs, or feature requests.
99
+
100
+ When triaging, check for duplicate issues first using `github_search` before creating new ones.
101
+
102
+ ## Workflow: Release Management
103
+
104
+ Cut releases with proper versioning and changelogs:
105
+
106
+ 1. **Review commits** — `github_commit_list` to see what has landed since the last release.
107
+ 2. **Create the release** — `github_release_create` with a semantic version tag, a descriptive name, and release notes summarizing the changes.
108
+
109
+ Use conventional commit messages or the auto-generated notes feature to build changelogs. Tag format should follow the project's convention (e.g., `v1.2.0` or `1.2.0`).
110
+
111
+ ## Workflow: CI/CD
112
+
113
+ Monitor and trigger GitHub Actions workflows:
114
+
115
+ 1. **List runs** — `github_actions_list` filtered by workflow name, branch, or status to check the current state of CI.
116
+ 2. **Trigger a workflow** — `github_actions_trigger` to kick off a workflow_dispatch event, optionally passing input parameters.
117
+ 3. **Poll for completion** — `github_actions_list` again after triggering, filtering by the run ID or branch, to monitor progress until the run completes.
118
+
119
+ When a workflow fails, use `github_actions_list` to identify the failing run, then investigate the related commits and PR for debugging context.
120
+
121
+ ## Safety Rules
122
+
123
+ - **Confirm before write operations** — Always confirm with the user before creating repos, writing files, merging PRs, creating releases, or triggering workflows.
124
+ - **Check branch protection** — Before writing files or merging, be aware that protected branches may reject direct pushes. Use feature branches and PRs instead.
125
+ - **Never force-push** — These tools do not support force-push, and you should never attempt destructive history rewrites through the API.
126
+ - **Rate limit awareness** — Authenticated requests are limited to 5,000/hour. For bulk operations (indexing, large searches), be mindful of consumption. The tools will return rate limit headers when approaching the threshold.
127
+ - **Destructive actions are irreversible** — Deleting branches, closing issues, and merging PRs cannot be undone through these tools. Double-check before proceeding.
128
+
129
+ ## Authentication
130
+
131
+ The GitHub tools authenticate using a personal access token from one of these sources, checked in order:
132
+
133
+ 1. `GITHUB_TOKEN` environment variable
134
+ 2. `GH_TOKEN` environment variable
135
+ 3. `gh auth token` CLI fallback (if `gh` is installed and authenticated)
136
+
137
+ **Required scopes:**
138
+ - `repo` — full access to private repositories (read/write code, issues, PRs, releases, Actions)
139
+ - `public_repo` — sufficient if you only work with public repositories
140
+ - `gist` — needed for `github_gist_create`
141
+
142
+ To create a token, visit [github.com/settings/tokens](https://github.com/settings/tokens) and select the scopes above. Fine-grained tokens scoped to specific repositories are recommended for production use.
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: video-ingestion
3
+ version: '1.0.0'
4
+ description: Video processing for RAG — extract frames via vision pipeline + audio via STT, index into knowledge base.
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: productivity
8
+ tags: [video, ffmpeg, frames, transcription, multimodal, RAG]
9
+ requires_secrets: []
10
+ requires_tools: []
11
+ metadata:
12
+ agentos:
13
+ emoji: "\U0001F3AC"
14
+ ---
15
+
16
+ # Video Ingestion for Multimodal RAG
17
+
18
+ Use this skill when the user wants to index video content into the agent's knowledge base so it can be searched and recalled during conversation.
19
+
20
+ Video ingestion works through the `MultimodalMemoryBridge`, which orchestrates two parallel extraction pipelines and feeds the results into both the RAG vector store and (optionally) cognitive memory.
21
+
22
+ ## How It Works
23
+
24
+ 1. **Frame extraction** — ffmpeg samples frames at a configurable interval (default: 1 frame every 5 seconds). Each frame is passed to a vision-capable LLM (e.g. GPT-4o) which generates a text description. That description is embedded and indexed into the vector store with `modality: 'image'` metadata.
25
+
26
+ 2. **Audio extraction** — ffmpeg demuxes the audio track and pipes it to the configured STT provider (e.g. Whisper). The resulting transcript is chunked, embedded, and indexed with `modality: 'audio'` metadata.
27
+
28
+ 3. **Memory traces** — When cognitive memory is enabled, the bridge encodes both visual descriptions and audio transcript chunks as memory traces so the agent can recall video content during future conversations.
29
+
30
+ ## When to Ingest Video vs. Just Extract Audio
31
+
32
+ - **Ingest full video** when visual content matters: tutorials, screen recordings, product demos, surveillance, presentations with slides, anything where "what is shown" conveys information the transcript alone misses.
33
+ - **Extract audio only** when the video is essentially a podcast, voice memo, meeting recording, or phone call where the visual track adds no information. Audio-only ingestion is faster, cheaper (no vision LLM calls), and produces smaller index footprints.
34
+
35
+ If you are unsure, prefer full video ingestion. The frame extraction is lightweight and the vision descriptions are short — the marginal cost is small compared to the value of not losing visual context.
36
+
37
+ ## Prerequisites
38
+
39
+ - **ffmpeg** must be installed and on the system PATH. The bridge shells out to `ffmpeg` for frame and audio extraction. Without it, video ingestion will fail with a clear error.
40
+ - A **vision-capable LLM** must be configured (OPENAI_API_KEY or equivalent) for frame description.
41
+ - An **STT provider** must be configured for audio transcription.
42
+
43
+ ## Usage
44
+
45
+ Video ingestion is triggered through the `MultimodalMemoryBridge.ingestVideo()` method. When using the HTTP API, POST the video file to:
46
+
47
+ ```
48
+ POST /api/agentos/rag/multimodal/documents/ingest
49
+ Content-Type: multipart/form-data
50
+ ```
51
+
52
+ with the video file in the `document` field. The system auto-detects video MIME types and routes to the video pipeline.
53
+
54
+ Programmatic usage:
55
+
56
+ ```typescript
57
+ import { MultimodalMemoryBridge } from 'agentos/rag/multimodal';
58
+
59
+ await bridge.ingestVideo(videoBuffer, {
60
+ source: 'user-upload',
61
+ fileName: 'meeting-2024-03-15.mp4',
62
+ extractFrames: true, // default true
63
+ frameIntervalSeconds: 10, // sample 1 frame every 10s (default 5)
64
+ language: 'en', // STT language hint
65
+ });
66
+ ```
67
+
68
+ ## Configuration Options
69
+
70
+ | Option | Default | Description |
71
+ |--------|---------|-------------|
72
+ | `extractFrames` | `true` | Set `false` for audio-only ingestion |
73
+ | `frameIntervalSeconds` | `5` | Seconds between sampled frames |
74
+ | `language` | auto-detect | BCP-47 language code for STT |
75
+ | `collection` | `'multimodal'` | Target vector store collection |
76
+
77
+ ## Examples
78
+
79
+ - "Ingest this tutorial video so I can search it later."
80
+ - "Extract the audio from this meeting recording and add it to my knowledge base."
81
+ - "Index this product demo video — I need to reference the UI screenshots shown at 2:30."
82
+ - "Process all MP4 files in this folder and make them searchable."
83
+
84
+ ## Constraints
85
+
86
+ - ffmpeg must be installed. The system does not bundle or auto-install it.
87
+ - Long videos (>1 hour) produce many frames; consider increasing `frameIntervalSeconds` to 15-30 for very long content.
88
+ - Vision LLM calls are billed per frame. A 1-hour video at the default 5-second interval generates ~720 frames.
89
+ - Supported container formats: MP4, MKV, WebM, AVI, MOV (anything ffmpeg can demux).
90
+ - Video ingestion is not real-time; expect processing time proportional to video length.
package/registry.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "updated": "2026-03-26T21:55:02.698Z",
3
+ "updated": "2026-03-27T01:15:04.856Z",
4
4
  "categories": {
5
5
  "curated": [
6
6
  "1password",
7
7
  "account-manager",
8
+ "agent-config",
8
9
  "amazon-polly",
9
10
  "apple-notes",
10
11
  "apple-reminders",
@@ -27,12 +28,14 @@
27
28
  "google-cloud-tts",
28
29
  "grounding-guard",
29
30
  "healthcheck",
31
+ "image-editing",
30
32
  "image-gen",
31
33
  "instagram-bot",
32
34
  "linkedin-bot",
33
35
  "mastodon-bot",
34
36
  "memory-manager",
35
37
  "ml-content-classifier",
38
+ "multimodal-rag",
36
39
  "notion",
37
40
  "obsidian",
38
41
  "openwakeword",
@@ -50,12 +53,14 @@
50
53
  "streaming-stt-whisper",
51
54
  "streaming-tts-elevenlabs",
52
55
  "streaming-tts-openai",
56
+ "structured-output",
53
57
  "summarize",
54
58
  "threads-bot",
55
59
  "tiktok-bot",
56
60
  "topicality",
57
61
  "trello",
58
62
  "twitter-bot",
63
+ "vision-ocr",
59
64
  "voice-conversation",
60
65
  "vosk",
61
66
  "weather",
@@ -79,7 +84,7 @@
79
84
  "namespace": "wunderland",
80
85
  "verified": true,
81
86
  "source": "curated",
82
- "verifiedAt": "2026-03-26T21:55:02.698Z",
87
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
83
88
  "keywords": [
84
89
  "1password",
85
90
  "passwords",
@@ -124,7 +129,7 @@
124
129
  "namespace": "wunderland",
125
130
  "verified": true,
126
131
  "source": "curated",
127
- "verifiedAt": "2026-03-26T21:55:02.698Z",
132
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
128
133
  "keywords": [
129
134
  "accounts",
130
135
  "credentials",
@@ -149,6 +154,27 @@
149
154
  "emoji": "🔑"
150
155
  }
151
156
  },
157
+ {
158
+ "id": "com.framers.skill.agent-config",
159
+ "name": "agent-config",
160
+ "displayName": "agent-config",
161
+ "version": "1.0.0",
162
+ "path": "registry/curated/agent-config",
163
+ "description": "Export and import agent configurations for sharing and backup",
164
+ "category": "uncategorized",
165
+ "namespace": "wunderland",
166
+ "verified": true,
167
+ "source": "curated",
168
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
169
+ "keywords": [
170
+ "agent",
171
+ "config",
172
+ "export",
173
+ "import",
174
+ "yaml",
175
+ "json"
176
+ ]
177
+ },
152
178
  {
153
179
  "id": "com.framers.skill.amazon-polly",
154
180
  "name": "amazon-polly",
@@ -160,7 +186,7 @@
160
186
  "namespace": "wunderland",
161
187
  "verified": true,
162
188
  "source": "curated",
163
- "verifiedAt": "2026-03-26T21:55:02.698Z",
189
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
164
190
  "keywords": [
165
191
  "voice",
166
192
  "tts",
@@ -191,7 +217,7 @@
191
217
  "namespace": "wunderland",
192
218
  "verified": true,
193
219
  "source": "curated",
194
- "verifiedAt": "2026-03-26T21:55:02.698Z",
220
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
195
221
  "keywords": [
196
222
  "apple-notes",
197
223
  "macos",
@@ -225,7 +251,7 @@
225
251
  "namespace": "wunderland",
226
252
  "verified": true,
227
253
  "source": "curated",
228
- "verifiedAt": "2026-03-26T21:55:02.698Z",
254
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
229
255
  "keywords": [
230
256
  "apple-reminders",
231
257
  "macos",
@@ -260,7 +286,7 @@
260
286
  "namespace": "wunderland",
261
287
  "verified": true,
262
288
  "source": "curated",
263
- "verifiedAt": "2026-03-26T21:55:02.698Z",
289
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
264
290
  "keywords": [
265
291
  "blog",
266
292
  "publishing",
@@ -304,7 +330,7 @@
304
330
  "namespace": "wunderland",
305
331
  "verified": true,
306
332
  "source": "curated",
307
- "verifiedAt": "2026-03-26T21:55:02.698Z",
333
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
308
334
  "keywords": [
309
335
  "bluesky",
310
336
  "social-media",
@@ -344,7 +370,7 @@
344
370
  "namespace": "wunderland",
345
371
  "verified": true,
346
372
  "source": "curated",
347
- "verifiedAt": "2026-03-26T21:55:02.698Z",
373
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
348
374
  "keywords": [
349
375
  "cloud",
350
376
  "devops",
@@ -371,7 +397,7 @@
371
397
  "namespace": "wunderland",
372
398
  "verified": true,
373
399
  "source": "curated",
374
- "verifiedAt": "2026-03-26T21:55:02.698Z",
400
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
375
401
  "keywords": [
376
402
  "guardrails",
377
403
  "code-safety",
@@ -399,7 +425,7 @@
399
425
  "namespace": "wunderland",
400
426
  "verified": true,
401
427
  "source": "curated",
402
- "verifiedAt": "2026-03-26T21:55:02.698Z",
428
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
403
429
  "keywords": [
404
430
  "coding",
405
431
  "programming",
@@ -426,7 +452,7 @@
426
452
  "namespace": "wunderland",
427
453
  "verified": true,
428
454
  "source": "curated",
429
- "verifiedAt": "2026-03-26T21:55:02.698Z",
455
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
430
456
  "keywords": [
431
457
  "content",
432
458
  "writing",
@@ -456,7 +482,7 @@
456
482
  "namespace": "wunderland",
457
483
  "verified": true,
458
484
  "source": "curated",
459
- "verifiedAt": "2026-03-26T21:55:02.698Z",
485
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
460
486
  "keywords": [
461
487
  "research",
462
488
  "investigation",
@@ -494,7 +520,7 @@
494
520
  "namespace": "wunderland",
495
521
  "verified": true,
496
522
  "source": "curated",
497
- "verifiedAt": "2026-03-26T21:55:02.698Z",
523
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
498
524
  "keywords": [
499
525
  "voice",
500
526
  "diarization",
@@ -519,7 +545,7 @@
519
545
  "namespace": "wunderland",
520
546
  "verified": true,
521
547
  "source": "curated",
522
- "verifiedAt": "2026-03-26T21:55:02.698Z",
548
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
523
549
  "keywords": [
524
550
  "discord",
525
551
  "messaging",
@@ -547,7 +573,7 @@
547
573
  "namespace": "wunderland",
548
574
  "verified": true,
549
575
  "source": "curated",
550
- "verifiedAt": "2026-03-26T21:55:02.698Z",
576
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
551
577
  "metadata": {
552
578
  "primaryEnv": "INTERNAL_API_SECRET",
553
579
  "emoji": "📧",
@@ -588,7 +614,7 @@
588
614
  "namespace": "wunderland",
589
615
  "verified": true,
590
616
  "source": "curated",
591
- "verifiedAt": "2026-03-26T21:55:02.698Z",
617
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
592
618
  "keywords": [
593
619
  "emergent",
594
620
  "tools",
@@ -616,7 +642,7 @@
616
642
  "namespace": "wunderland",
617
643
  "verified": true,
618
644
  "source": "curated",
619
- "verifiedAt": "2026-03-26T21:55:02.698Z",
645
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
620
646
  "keywords": [
621
647
  "voice",
622
648
  "endpointing",
@@ -642,7 +668,7 @@
642
668
  "namespace": "wunderland",
643
669
  "verified": true,
644
670
  "source": "curated",
645
- "verifiedAt": "2026-03-26T21:55:02.698Z",
671
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
646
672
  "keywords": [
647
673
  "facebook",
648
674
  "social-media",
@@ -681,7 +707,7 @@
681
707
  "namespace": "wunderland",
682
708
  "verified": true,
683
709
  "source": "curated",
684
- "verifiedAt": "2026-03-26T21:55:02.698Z",
710
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
685
711
  "keywords": [
686
712
  "git",
687
713
  "version-control",
@@ -728,59 +754,59 @@
728
754
  "id": "com.framers.skill.github",
729
755
  "name": "github",
730
756
  "displayName": "github",
731
- "version": "1.0.0",
757
+ "version": "2.0.0",
732
758
  "path": "registry/curated/github",
733
- "description": "Manage GitHub repositories, issues, pull requests, releases, and Actions workflows using the gh CLI.",
734
- "category": "developer-tools",
759
+ "description": "Full GitHub API integration — 26 tools for repos, issues, PRs, branches, commits, releases, Actions, files, gists, and codebase indexing.",
760
+ "category": "developer",
735
761
  "namespace": "wunderland",
736
762
  "verified": true,
737
763
  "source": "curated",
738
- "verifiedAt": "2026-03-26T21:55:02.698Z",
764
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
739
765
  "keywords": [
740
766
  "github",
741
767
  "git",
768
+ "repository",
742
769
  "issues",
743
770
  "pull-requests",
771
+ "code-review",
744
772
  "ci-cd",
745
- "code-review"
773
+ "releases",
774
+ "actions",
775
+ "api"
746
776
  ],
747
777
  "requiredSecrets": [
748
778
  "github.token"
749
779
  ],
750
780
  "requiredTools": [
751
- "filesystem"
781
+ "github_search",
782
+ "github_repo_list",
783
+ "github_repo_info",
784
+ "github_repo_create",
785
+ "github_repo_index",
786
+ "github_file_read",
787
+ "github_file_write",
788
+ "github_gist_create",
789
+ "github_issue_list",
790
+ "github_issue_create",
791
+ "github_issue_update",
792
+ "github_comment_list",
793
+ "github_pr_list",
794
+ "github_pr_create",
795
+ "github_pr_diff",
796
+ "github_pr_review",
797
+ "github_pr_merge",
798
+ "github_pr_comment_list",
799
+ "github_pr_comment_create",
800
+ "github_branch_list",
801
+ "github_branch_create",
802
+ "github_commit_list",
803
+ "github_release_list",
804
+ "github_release_create",
805
+ "github_actions_list",
806
+ "github_actions_trigger"
752
807
  ],
753
808
  "metadata": {
754
- "emoji": "🐙",
755
- "primaryEnv": "GITHUB_TOKEN",
756
- "requires": {
757
- "bins": [
758
- "gh"
759
- ]
760
- },
761
- "install": [
762
- {
763
- "id": "brew",
764
- "kind": "brew",
765
- "formula": "gh",
766
- "bins": [
767
- "gh"
768
- ],
769
- "label": "Install GitHub CLI (brew)"
770
- },
771
- {
772
- "id": "apt",
773
- "kind": "apt",
774
- "package": "gh",
775
- "bins": [
776
- "gh"
777
- ],
778
- "os": [
779
- "linux"
780
- ],
781
- "label": "Install GitHub CLI (apt)"
782
- }
783
- ]
809
+ "emoji": "💻"
784
810
  }
785
811
  },
786
812
  {
@@ -794,7 +820,7 @@
794
820
  "namespace": "wunderland",
795
821
  "verified": true,
796
822
  "source": "curated",
797
- "verifiedAt": "2026-03-26T21:55:02.698Z",
823
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
798
824
  "keywords": [
799
825
  "voice",
800
826
  "stt",
@@ -823,7 +849,7 @@
823
849
  "namespace": "wunderland",
824
850
  "verified": true,
825
851
  "source": "curated",
826
- "verifiedAt": "2026-03-26T21:55:02.698Z",
852
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
827
853
  "keywords": [
828
854
  "voice",
829
855
  "tts",
@@ -852,7 +878,7 @@
852
878
  "namespace": "wunderland",
853
879
  "verified": true,
854
880
  "source": "curated",
855
- "verifiedAt": "2026-03-26T21:55:02.698Z",
881
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
856
882
  "keywords": [
857
883
  "guardrails",
858
884
  "hallucination",
@@ -880,7 +906,7 @@
880
906
  "namespace": "wunderland",
881
907
  "verified": true,
882
908
  "source": "curated",
883
- "verifiedAt": "2026-03-26T21:55:02.698Z",
909
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
884
910
  "keywords": [
885
911
  "monitoring",
886
912
  "health",
@@ -902,6 +928,27 @@
902
928
  }
903
929
  }
904
930
  },
931
+ {
932
+ "id": "com.framers.skill.image-editing",
933
+ "name": "image-editing",
934
+ "displayName": "image-editing",
935
+ "version": "1.0.0",
936
+ "path": "registry/curated/image-editing",
937
+ "description": "Edit, transform, and enhance images using AI models",
938
+ "category": "uncategorized",
939
+ "namespace": "wunderland",
940
+ "verified": true,
941
+ "source": "curated",
942
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
943
+ "keywords": [
944
+ "image",
945
+ "editing",
946
+ "img2img",
947
+ "inpainting",
948
+ "upscaling",
949
+ "variation"
950
+ ]
951
+ },
905
952
  {
906
953
  "id": "com.framers.skill.image-gen",
907
954
  "name": "image-gen",
@@ -913,7 +960,7 @@
913
960
  "namespace": "wunderland",
914
961
  "verified": true,
915
962
  "source": "curated",
916
- "verifiedAt": "2026-03-26T21:55:02.698Z",
963
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
917
964
  "keywords": [
918
965
  "image-generation",
919
966
  "ai-art",
@@ -945,7 +992,7 @@
945
992
  "namespace": "wunderland",
946
993
  "verified": true,
947
994
  "source": "curated",
948
- "verifiedAt": "2026-03-26T21:55:02.698Z",
995
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
949
996
  "keywords": [
950
997
  "instagram",
951
998
  "social-media",
@@ -983,7 +1030,7 @@
983
1030
  "namespace": "wunderland",
984
1031
  "verified": true,
985
1032
  "source": "curated",
986
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1033
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
987
1034
  "keywords": [
988
1035
  "linkedin",
989
1036
  "social-media",
@@ -1021,7 +1068,7 @@
1021
1068
  "namespace": "wunderland",
1022
1069
  "verified": true,
1023
1070
  "source": "curated",
1024
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1071
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1025
1072
  "keywords": [
1026
1073
  "mastodon",
1027
1074
  "fediverse",
@@ -1061,7 +1108,7 @@
1061
1108
  "namespace": "wunderland",
1062
1109
  "verified": true,
1063
1110
  "source": "curated",
1064
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1111
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1065
1112
  "keywords": [
1066
1113
  "memory",
1067
1114
  "cognitive",
@@ -1085,7 +1132,7 @@
1085
1132
  "namespace": "wunderland",
1086
1133
  "verified": true,
1087
1134
  "source": "curated",
1088
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1135
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1089
1136
  "keywords": [
1090
1137
  "guardrails",
1091
1138
  "safety",
@@ -1104,6 +1151,28 @@
1104
1151
  "emoji": "🛡"
1105
1152
  }
1106
1153
  },
1154
+ {
1155
+ "id": "com.framers.skill.multimodal-rag",
1156
+ "name": "multimodal-rag",
1157
+ "displayName": "multimodal-rag",
1158
+ "version": "1.0.0",
1159
+ "path": "registry/curated/multimodal-rag",
1160
+ "description": "Index and search across text, images, audio, video, and PDFs",
1161
+ "category": "uncategorized",
1162
+ "namespace": "wunderland",
1163
+ "verified": true,
1164
+ "source": "curated",
1165
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1166
+ "keywords": [
1167
+ "rag",
1168
+ "multimodal",
1169
+ "image",
1170
+ "audio",
1171
+ "video",
1172
+ "pdf",
1173
+ "search"
1174
+ ]
1175
+ },
1107
1176
  {
1108
1177
  "id": "com.framers.skill.notion",
1109
1178
  "name": "notion",
@@ -1115,7 +1184,7 @@
1115
1184
  "namespace": "wunderland",
1116
1185
  "verified": true,
1117
1186
  "source": "curated",
1118
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1187
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1119
1188
  "keywords": [
1120
1189
  "notion",
1121
1190
  "wiki",
@@ -1144,7 +1213,7 @@
1144
1213
  "namespace": "wunderland",
1145
1214
  "verified": true,
1146
1215
  "source": "curated",
1147
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1216
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1148
1217
  "keywords": [
1149
1218
  "obsidian",
1150
1219
  "markdown",
@@ -1172,7 +1241,7 @@
1172
1241
  "namespace": "wunderland",
1173
1242
  "verified": true,
1174
1243
  "source": "curated",
1175
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1244
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1176
1245
  "keywords": [
1177
1246
  "voice",
1178
1247
  "wake-word",
@@ -1200,7 +1269,7 @@
1200
1269
  "namespace": "wunderland",
1201
1270
  "verified": true,
1202
1271
  "source": "curated",
1203
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1272
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1204
1273
  "keywords": [
1205
1274
  "pii",
1206
1275
  "privacy",
@@ -1231,7 +1300,7 @@
1231
1300
  "namespace": "wunderland",
1232
1301
  "verified": true,
1233
1302
  "source": "curated",
1234
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1303
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1235
1304
  "keywords": [
1236
1305
  "pinterest",
1237
1306
  "social-media",
@@ -1268,7 +1337,7 @@
1268
1337
  "namespace": "wunderland",
1269
1338
  "verified": true,
1270
1339
  "source": "curated",
1271
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1340
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1272
1341
  "keywords": [
1273
1342
  "voice",
1274
1343
  "tts",
@@ -1295,7 +1364,7 @@
1295
1364
  "namespace": "wunderland",
1296
1365
  "verified": true,
1297
1366
  "source": "curated",
1298
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1367
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1299
1368
  "keywords": [
1300
1369
  "voice",
1301
1370
  "wake-word",
@@ -1326,7 +1395,7 @@
1326
1395
  "namespace": "wunderland",
1327
1396
  "verified": true,
1328
1397
  "source": "curated",
1329
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1398
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1330
1399
  "keywords": [
1331
1400
  "reddit",
1332
1401
  "social-media",
@@ -1367,7 +1436,7 @@
1367
1436
  "namespace": "wunderland",
1368
1437
  "verified": true,
1369
1438
  "source": "curated",
1370
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1439
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1371
1440
  "keywords": [
1372
1441
  "seo",
1373
1442
  "link-building",
@@ -1402,7 +1471,7 @@
1402
1471
  "namespace": "wunderland",
1403
1472
  "verified": true,
1404
1473
  "source": "curated",
1405
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1474
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1406
1475
  "keywords": [
1407
1476
  "deploy",
1408
1477
  "cloud",
@@ -1438,7 +1507,7 @@
1438
1507
  "namespace": "wunderland",
1439
1508
  "verified": true,
1440
1509
  "source": "curated",
1441
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1510
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1442
1511
  "keywords": [
1443
1512
  "slack",
1444
1513
  "messaging",
@@ -1470,7 +1539,7 @@
1470
1539
  "namespace": "wunderland",
1471
1540
  "verified": true,
1472
1541
  "source": "curated",
1473
- "verifiedAt": "2026-03-26T21:55:02.698Z"
1542
+ "verifiedAt": "2026-03-27T01:15:04.856Z"
1474
1543
  },
1475
1544
  {
1476
1545
  "id": "com.framers.skill.spotify-player",
@@ -1483,7 +1552,7 @@
1483
1552
  "namespace": "wunderland",
1484
1553
  "verified": true,
1485
1554
  "source": "curated",
1486
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1555
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1487
1556
  "keywords": [
1488
1557
  "spotify",
1489
1558
  "music",
@@ -1518,7 +1587,7 @@
1518
1587
  "namespace": "wunderland",
1519
1588
  "verified": true,
1520
1589
  "source": "curated",
1521
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1590
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1522
1591
  "keywords": [
1523
1592
  "voice",
1524
1593
  "stt",
@@ -1548,7 +1617,7 @@
1548
1617
  "namespace": "wunderland",
1549
1618
  "verified": true,
1550
1619
  "source": "curated",
1551
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1620
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1552
1621
  "keywords": [
1553
1622
  "voice",
1554
1623
  "stt",
@@ -1579,7 +1648,7 @@
1579
1648
  "namespace": "wunderland",
1580
1649
  "verified": true,
1581
1650
  "source": "curated",
1582
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1651
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1583
1652
  "keywords": [
1584
1653
  "voice",
1585
1654
  "tts",
@@ -1609,7 +1678,7 @@
1609
1678
  "namespace": "wunderland",
1610
1679
  "verified": true,
1611
1680
  "source": "curated",
1612
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1681
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1613
1682
  "keywords": [
1614
1683
  "voice",
1615
1684
  "tts",
@@ -1627,6 +1696,26 @@
1627
1696
  "homepage": "https://platform.openai.com/docs/guides/text-to-speech"
1628
1697
  }
1629
1698
  },
1699
+ {
1700
+ "id": "com.framers.skill.structured-output",
1701
+ "name": "structured-output",
1702
+ "displayName": "structured-output",
1703
+ "version": "1.0.0",
1704
+ "path": "registry/curated/structured-output",
1705
+ "description": "Extract structured JSON data from text using Zod schemas",
1706
+ "category": "uncategorized",
1707
+ "namespace": "wunderland",
1708
+ "verified": true,
1709
+ "source": "curated",
1710
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1711
+ "keywords": [
1712
+ "structured-output",
1713
+ "json",
1714
+ "extraction",
1715
+ "schema",
1716
+ "zod"
1717
+ ]
1718
+ },
1630
1719
  {
1631
1720
  "id": "com.framers.skill.summarize",
1632
1721
  "name": "summarize",
@@ -1638,7 +1727,7 @@
1638
1727
  "namespace": "wunderland",
1639
1728
  "verified": true,
1640
1729
  "source": "curated",
1641
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1730
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1642
1731
  "keywords": [
1643
1732
  "summarization",
1644
1733
  "text-processing",
@@ -1664,7 +1753,7 @@
1664
1753
  "namespace": "wunderland",
1665
1754
  "verified": true,
1666
1755
  "source": "curated",
1667
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1756
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1668
1757
  "keywords": [
1669
1758
  "threads",
1670
1759
  "social-media",
@@ -1700,7 +1789,7 @@
1700
1789
  "namespace": "wunderland",
1701
1790
  "verified": true,
1702
1791
  "source": "curated",
1703
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1792
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1704
1793
  "keywords": [
1705
1794
  "tiktok",
1706
1795
  "video",
@@ -1737,7 +1826,7 @@
1737
1826
  "namespace": "wunderland",
1738
1827
  "verified": true,
1739
1828
  "source": "curated",
1740
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1829
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1741
1830
  "keywords": [
1742
1831
  "guardrails",
1743
1832
  "topics",
@@ -1764,7 +1853,7 @@
1764
1853
  "namespace": "wunderland",
1765
1854
  "verified": true,
1766
1855
  "source": "curated",
1767
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1856
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1768
1857
  "keywords": [
1769
1858
  "trello",
1770
1859
  "kanban",
@@ -1797,7 +1886,7 @@
1797
1886
  "namespace": "wunderland",
1798
1887
  "verified": true,
1799
1888
  "source": "curated",
1800
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1889
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1801
1890
  "keywords": [
1802
1891
  "twitter",
1803
1892
  "social-media",
@@ -1829,6 +1918,26 @@
1829
1918
  "primaryEnv": "TWITTER_BEARER_TOKEN"
1830
1919
  }
1831
1920
  },
1921
+ {
1922
+ "id": "com.framers.skill.vision-ocr",
1923
+ "name": "vision-ocr",
1924
+ "displayName": "vision-ocr",
1925
+ "version": "1.0.0",
1926
+ "path": "registry/curated/vision-ocr",
1927
+ "description": "Extract text from images using OCR and vision AI",
1928
+ "category": "uncategorized",
1929
+ "namespace": "wunderland",
1930
+ "verified": true,
1931
+ "source": "curated",
1932
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1933
+ "keywords": [
1934
+ "vision",
1935
+ "ocr",
1936
+ "text-extraction",
1937
+ "document",
1938
+ "handwriting"
1939
+ ]
1940
+ },
1832
1941
  {
1833
1942
  "id": "com.framers.skill.voice-conversation",
1834
1943
  "name": "voice-conversation",
@@ -1840,7 +1949,7 @@
1840
1949
  "namespace": "wunderland",
1841
1950
  "verified": true,
1842
1951
  "source": "curated",
1843
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1952
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1844
1953
  "keywords": [
1845
1954
  "voice",
1846
1955
  "speech",
@@ -1867,7 +1976,7 @@
1867
1976
  "namespace": "wunderland",
1868
1977
  "verified": true,
1869
1978
  "source": "curated",
1870
- "verifiedAt": "2026-03-26T21:55:02.698Z",
1979
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1871
1980
  "keywords": [
1872
1981
  "voice",
1873
1982
  "stt",
@@ -1893,7 +2002,7 @@
1893
2002
  "namespace": "wunderland",
1894
2003
  "verified": true,
1895
2004
  "source": "curated",
1896
- "verifiedAt": "2026-03-26T21:55:02.698Z",
2005
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1897
2006
  "keywords": [
1898
2007
  "weather",
1899
2008
  "forecast",
@@ -1919,7 +2028,7 @@
1919
2028
  "namespace": "wunderland",
1920
2029
  "verified": true,
1921
2030
  "source": "curated",
1922
- "verifiedAt": "2026-03-26T21:55:02.698Z",
2031
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1923
2032
  "keywords": [
1924
2033
  "scraping",
1925
2034
  "browser",
@@ -1956,7 +2065,7 @@
1956
2065
  "namespace": "wunderland",
1957
2066
  "verified": true,
1958
2067
  "source": "curated",
1959
- "verifiedAt": "2026-03-26T21:55:02.698Z",
2068
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1960
2069
  "keywords": [
1961
2070
  "search",
1962
2071
  "web",
@@ -1983,7 +2092,7 @@
1983
2092
  "namespace": "wunderland",
1984
2093
  "verified": true,
1985
2094
  "source": "curated",
1986
- "verifiedAt": "2026-03-26T21:55:02.698Z",
2095
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
1987
2096
  "keywords": [
1988
2097
  "transcription",
1989
2098
  "whisper",
@@ -2046,7 +2155,7 @@
2046
2155
  "namespace": "wunderland",
2047
2156
  "verified": true,
2048
2157
  "source": "curated",
2049
- "verifiedAt": "2026-03-26T21:55:02.698Z",
2158
+ "verifiedAt": "2026-03-27T01:15:04.856Z",
2050
2159
  "keywords": [
2051
2160
  "youtube",
2052
2161
  "video",
@@ -2079,8 +2188,8 @@
2079
2188
  "community": []
2080
2189
  },
2081
2190
  "stats": {
2082
- "totalSkills": 60,
2083
- "curatedCount": 60,
2191
+ "totalSkills": 65,
2192
+ "curatedCount": 65,
2084
2193
  "communityCount": 0
2085
2194
  }
2086
2195
  }