@framers/agentos-skills-registry 0.2.0 → 0.3.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/CONTRIBUTING.md +231 -0
- package/README.md +146 -49
- package/dist/catalog.d.ts +105 -6
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +257 -206
- package/dist/catalog.js.map +1 -1
- package/dist/index.d.ts +30 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -25
- package/dist/index.js.map +1 -1
- package/dist/schema-types.d.ts +79 -0
- package/dist/schema-types.d.ts.map +1 -0
- package/dist/schema-types.js +11 -0
- package/dist/schema-types.js.map +1 -0
- package/dist/workspace-discovery.d.ts +77 -0
- package/dist/workspace-discovery.d.ts.map +1 -0
- package/dist/workspace-discovery.js +172 -0
- package/dist/workspace-discovery.js.map +1 -0
- package/package.json +17 -5
- package/registry/community/.gitkeep +0 -0
- package/registry/curated/1password/SKILL.md +53 -0
- package/registry/curated/account-manager/SKILL.md +60 -0
- package/registry/curated/apple-notes/SKILL.md +45 -0
- package/registry/curated/apple-reminders/SKILL.md +46 -0
- package/registry/curated/blog-publisher/SKILL.md +110 -0
- package/registry/curated/bluesky-bot/SKILL.md +93 -0
- package/registry/curated/cloud-ops/SKILL.md +124 -0
- package/registry/curated/coding-agent/SKILL.md +40 -0
- package/registry/curated/content-creator/SKILL.md +53 -0
- package/registry/curated/deep-research/SKILL.md +56 -0
- package/registry/curated/discord-helper/SKILL.md +43 -0
- package/registry/curated/facebook-bot/SKILL.md +94 -0
- package/registry/curated/git/SKILL.md +39 -0
- package/registry/curated/github/SKILL.md +54 -0
- package/registry/curated/healthcheck/SKILL.md +43 -0
- package/registry/curated/image-gen/SKILL.md +50 -0
- package/registry/curated/instagram-bot/SKILL.md +60 -0
- package/registry/curated/linkedin-bot/SKILL.md +86 -0
- package/registry/curated/mastodon-bot/SKILL.md +104 -0
- package/registry/curated/memory-manager/SKILL.md +127 -0
- package/registry/curated/notion/SKILL.md +43 -0
- package/registry/curated/obsidian/SKILL.md +42 -0
- package/registry/curated/pinterest-bot/SKILL.md +45 -0
- package/registry/curated/reddit-bot/SKILL.md +74 -0
- package/registry/curated/seo-campaign/SKILL.md +51 -0
- package/registry/curated/site-deploy/SKILL.md +119 -0
- package/registry/curated/slack-helper/SKILL.md +43 -0
- package/registry/curated/social-broadcast/SKILL.md +145 -0
- package/registry/curated/spotify-player/SKILL.md +45 -0
- package/registry/curated/summarize/SKILL.md +40 -0
- package/registry/curated/threads-bot/SKILL.md +82 -0
- package/registry/curated/tiktok-bot/SKILL.md +104 -0
- package/registry/curated/trello/SKILL.md +44 -0
- package/registry/curated/twitter-bot/SKILL.md +63 -0
- package/registry/curated/voice-conversation/SKILL.md +65 -0
- package/registry/curated/weather/SKILL.md +37 -0
- package/registry/curated/web-scraper/SKILL.md +60 -0
- package/registry/curated/web-search/SKILL.md +49 -0
- package/registry/curated/whisper-transcribe/SKILL.md +58 -0
- package/registry/curated/youtube-bot/SKILL.md +104 -0
- package/registry.json +1478 -0
- package/scripts/update-registry.mjs +126 -0
- package/scripts/validate-skill.mjs +304 -0
- package/types.d.ts +77 -0
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Contributing to @framers/agentos-skills-registry
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing a skill to the AgentOS ecosystem! This guide walks you through the process of creating, testing, and submitting a new skill.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Skills are **SKILL.md files** — each containing YAML frontmatter (metadata) and a markdown body (instructions for the AI agent). They live inside the `@framers/agentos-skills-registry` package alongside the typed SDK. There are no individual packages per skill.
|
|
8
|
+
|
|
9
|
+
Skills are organized into two tiers:
|
|
10
|
+
|
|
11
|
+
| Tier | Directory | Namespace | Maintained By | Verified |
|
|
12
|
+
| ------------- | --------------------- | ------------ | --------------------------- | -------- |
|
|
13
|
+
| **Curated** | `registry/curated/` | `wunderland` | Framers staff | Yes |
|
|
14
|
+
| **Community** | `registry/community/` | `community` | Original author / community | No |
|
|
15
|
+
|
|
16
|
+
Curated skills ship pre-verified and are maintained by the Framers team. Community skills are submitted via pull request by anyone and are maintained by their authors.
|
|
17
|
+
|
|
18
|
+
## Creating a New Skill
|
|
19
|
+
|
|
20
|
+
### Step 1 — Fork the repo
|
|
21
|
+
|
|
22
|
+
Fork [framersai/agentos-skills-registry](https://github.com/framersai/agentos-skills-registry) and clone it locally.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
git clone https://github.com/<your-username>/agentos-skills-registry.git
|
|
26
|
+
cd agentos-skills-registry
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Step 2 — Create the skill directory
|
|
30
|
+
|
|
31
|
+
Create a new directory under `registry/community/` with your skill name. The directory name must be lowercase, use hyphens for separators, and match the `name` field in your frontmatter.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
mkdir -p registry/community/my-skill
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Step 3 — Write the SKILL.md file
|
|
38
|
+
|
|
39
|
+
Create `registry/community/my-skill/SKILL.md` with two parts:
|
|
40
|
+
|
|
41
|
+
1. **YAML frontmatter** between `---` delimiters containing metadata
|
|
42
|
+
2. **Markdown body** containing instructions for the AI agent
|
|
43
|
+
|
|
44
|
+
The markdown body should be written in **2nd person** ("You can...", "Use the...") because it is injected directly into an agent's system prompt.
|
|
45
|
+
|
|
46
|
+
### Step 4 — Write the YAML frontmatter
|
|
47
|
+
|
|
48
|
+
Fill in all required fields. See the [SKILL.md Format Reference](#skillmd-format-reference) below for the complete spec.
|
|
49
|
+
|
|
50
|
+
### Step 5 — Write the markdown body
|
|
51
|
+
|
|
52
|
+
The body is the actual instructions the AI agent will follow. It should include:
|
|
53
|
+
|
|
54
|
+
- A heading with the skill name
|
|
55
|
+
- A description of what the skill enables the agent to do
|
|
56
|
+
- Step-by-step guidance for how the agent should use the skill
|
|
57
|
+
- An **Examples** section with concrete usage examples
|
|
58
|
+
- A **Constraints** section documenting limitations
|
|
59
|
+
|
|
60
|
+
### Step 6 — Validate your skill
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm run validate registry/community/my-skill/SKILL.md
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## SKILL.md Format Reference
|
|
67
|
+
|
|
68
|
+
### Required Fields
|
|
69
|
+
|
|
70
|
+
| Field | Type | Description |
|
|
71
|
+
| ------------- | ------ | -------------------------------------------------------------------------- |
|
|
72
|
+
| `name` | string | Skill identifier. Must match the directory name. Lowercase, hyphens only. |
|
|
73
|
+
| `version` | string | Semantic version (e.g., `'1.0.0'`). Quote it to avoid YAML parsing issues. |
|
|
74
|
+
| `description` | string | Short description, under 200 characters. |
|
|
75
|
+
| `author` | string | Your name or GitHub username. |
|
|
76
|
+
| `namespace` | string | Must be `community` for community submissions. |
|
|
77
|
+
| `category` | string | One of the valid categories listed below. |
|
|
78
|
+
| `tags` | array | At least one tag. Use lowercase, hyphenated strings. |
|
|
79
|
+
|
|
80
|
+
### Optional Fields
|
|
81
|
+
|
|
82
|
+
| Field | Type | Description |
|
|
83
|
+
| --------------------------- | ------ | ------------------------------------------------------------------------- |
|
|
84
|
+
| `requires_secrets` | array | Secret keys the skill needs (e.g., `[service.token]`). Use `[]` if none. |
|
|
85
|
+
| `requires_tools` | array | Tool names the skill depends on (e.g., `[web-search]`). Use `[]` if none. |
|
|
86
|
+
| `metadata.agentos.emoji` | string | Emoji icon for the skill in UIs. |
|
|
87
|
+
| `metadata.agentos.homepage` | string | URL to the skill's related service or docs. |
|
|
88
|
+
|
|
89
|
+
### Valid Categories
|
|
90
|
+
|
|
91
|
+
- `automation` — Workflow automation, orchestration, repetitive task handling
|
|
92
|
+
- `communication` — Chat, email, messaging platforms
|
|
93
|
+
- `content` — Content planning, drafting, publishing pipelines
|
|
94
|
+
- `creative` — Art, writing, design, generation
|
|
95
|
+
- `developer-tools` — Code, repos, CI/CD, debugging
|
|
96
|
+
- `devops` — Operational tooling, monitoring, reliability checks
|
|
97
|
+
- `information` — Data lookup, search, knowledge retrieval
|
|
98
|
+
- `infrastructure` — Infrastructure provisioning, hosting, deployment workflows
|
|
99
|
+
- `marketing` — SEO, campaigns, growth workflows
|
|
100
|
+
- `media` — Audio, video, image, streaming
|
|
101
|
+
- `productivity` — Note-taking, task management, organization
|
|
102
|
+
- `research` — Multi-source investigation and synthesis
|
|
103
|
+
- `security` — Passwords, encryption, access control
|
|
104
|
+
- `social-automation` — Social publishing, engagement, and channel management
|
|
105
|
+
|
|
106
|
+
### Full Template
|
|
107
|
+
|
|
108
|
+
Copy and paste this into `registry/community/<your-skill>/SKILL.md`:
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
---
|
|
112
|
+
name: my-skill
|
|
113
|
+
version: '1.0.0'
|
|
114
|
+
description: A short description of what this skill does (under 200 characters).
|
|
115
|
+
author: your-github-username
|
|
116
|
+
namespace: community
|
|
117
|
+
category: information
|
|
118
|
+
tags: [example, template]
|
|
119
|
+
requires_secrets: []
|
|
120
|
+
requires_tools: []
|
|
121
|
+
metadata:
|
|
122
|
+
agentos:
|
|
123
|
+
emoji: "\U0001F527"
|
|
124
|
+
homepage: https://example.com
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
# My Skill
|
|
128
|
+
|
|
129
|
+
You can use this skill to [describe what the agent can do]. When the user asks about [topic], you should [describe the agent's behavior].
|
|
130
|
+
|
|
131
|
+
Provide clear, structured responses. If the user's request is ambiguous, ask for clarification before proceeding.
|
|
132
|
+
|
|
133
|
+
## Examples
|
|
134
|
+
|
|
135
|
+
- "Example user query 1"
|
|
136
|
+
- "Example user query 2"
|
|
137
|
+
- "Example user query 3"
|
|
138
|
+
|
|
139
|
+
## Constraints
|
|
140
|
+
|
|
141
|
+
- Limitation or caveat 1.
|
|
142
|
+
- Limitation or caveat 2.
|
|
143
|
+
- Limitation or caveat 3.
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Testing Your Skill
|
|
147
|
+
|
|
148
|
+
Run the validation script against your SKILL.md file:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
npm run validate registry/community/my-skill/SKILL.md
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
The validator checks:
|
|
155
|
+
|
|
156
|
+
- All required frontmatter fields are present
|
|
157
|
+
- Category is valid
|
|
158
|
+
- Description is under 200 characters
|
|
159
|
+
- Tags array has at least one entry
|
|
160
|
+
- Namespace is `community` or `wunderland`
|
|
161
|
+
- Skill name matches the directory name
|
|
162
|
+
- Markdown body is not empty
|
|
163
|
+
- No obvious secrets or API keys are embedded in the file
|
|
164
|
+
|
|
165
|
+
Fix any reported issues before submitting your PR.
|
|
166
|
+
|
|
167
|
+
## Submitting a PR
|
|
168
|
+
|
|
169
|
+
### 1. Create a branch
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
git checkout -b add-skill/my-skill
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 2. Commit your SKILL.md
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
git add registry/community/my-skill/SKILL.md
|
|
179
|
+
git commit -m "feat: add my-skill community skill"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 3. Push and open a PR
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git push origin add-skill/my-skill
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Open a pull request against the `main` branch. The PR template will guide you through the checklist.
|
|
189
|
+
|
|
190
|
+
### PR Checklist
|
|
191
|
+
|
|
192
|
+
Before submitting, confirm:
|
|
193
|
+
|
|
194
|
+
- [ ] Skill is in `registry/community/<name>/SKILL.md`
|
|
195
|
+
- [ ] All required YAML fields are present
|
|
196
|
+
- [ ] `namespace` is set to `community`
|
|
197
|
+
- [ ] Category is one of the 8 valid categories
|
|
198
|
+
- [ ] Description is under 200 characters
|
|
199
|
+
- [ ] Markdown body includes usage instructions, Examples, and Constraints
|
|
200
|
+
- [ ] No secrets, API keys, or credentials are in the file
|
|
201
|
+
- [ ] `npm run validate` passes
|
|
202
|
+
|
|
203
|
+
### What Reviewers Look For
|
|
204
|
+
|
|
205
|
+
- **Quality**: Is the skill well-written? Are instructions clear and actionable?
|
|
206
|
+
- **No secrets**: The file must not contain API keys, tokens, passwords, or credentials.
|
|
207
|
+
- **Valid format**: Frontmatter must parse correctly with all required fields.
|
|
208
|
+
- **Usefulness**: Does the skill provide value that is not already covered by an existing skill?
|
|
209
|
+
- **Specificity**: Is the scope well-defined? Skills should do one thing well.
|
|
210
|
+
|
|
211
|
+
## Promotion to Curated
|
|
212
|
+
|
|
213
|
+
Community skills can be promoted to the curated tier. Promotion criteria:
|
|
214
|
+
|
|
215
|
+
1. **Longevity** — The skill has been in `registry/community/` for at least 3 months.
|
|
216
|
+
2. **Positive feedback** — The skill has received positive user feedback or adoption.
|
|
217
|
+
3. **Maintained** — The original author is responsive to issues and keeps the skill up to date.
|
|
218
|
+
4. **Staff review** — A Framers team member reviews the skill for quality and completeness.
|
|
219
|
+
|
|
220
|
+
When a skill is promoted:
|
|
221
|
+
|
|
222
|
+
- It moves from `registry/community/<name>/` to `registry/curated/<name>/`.
|
|
223
|
+
- The `namespace` field changes from `community` to `wunderland`.
|
|
224
|
+
- The `verified` flag is set to `true` in `registry.json`.
|
|
225
|
+
- The Framers team assumes co-maintenance responsibility.
|
|
226
|
+
|
|
227
|
+
To nominate a community skill for promotion, open an issue titled "Promote: <skill-name>" with a brief justification.
|
|
228
|
+
|
|
229
|
+
## Code of Conduct
|
|
230
|
+
|
|
231
|
+
This project follows the [Contributor Covenant Code of Conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). By participating, you agree to uphold this code. Please report unacceptable behavior to [team@frame.dev](mailto:team@frame.dev).
|
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://agentos.sh"><img src="logos/agentos-primary-no-tagline-transparent-2x.png" alt="AgentOS" height="56" /></a>
|
|
3
|
+
|
|
4
|
+
<a href="https://frame.dev"><img src="logos/frame-logo-green-no-tagline.svg" alt="Frame.dev" height="36" /></a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
1
7
|
# @framers/agentos-skills-registry
|
|
2
8
|
|
|
3
|
-
Curated skills registry
|
|
9
|
+
Curated skills registry for [AgentOS](https://github.com/framersai/agentos) — 40 SKILL.md prompt modules, typed catalog, and lazy-loading factories.
|
|
4
10
|
|
|
5
11
|
[](https://www.npmjs.com/package/@framers/agentos-skills-registry)
|
|
6
12
|
|
|
@@ -10,17 +16,19 @@ npm install @framers/agentos-skills-registry
|
|
|
10
16
|
|
|
11
17
|
## What's Inside
|
|
12
18
|
|
|
13
|
-
This
|
|
19
|
+
This is the **single package** for AgentOS skills. It contains:
|
|
14
20
|
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
21
|
+
- **40 curated SKILL.md files** — prompt modules spanning social automation, developer tooling, productivity, research, voice, and more
|
|
22
|
+
- **registry.json** — machine-readable index of all skills with metadata
|
|
23
|
+
- **Static catalog** (`SKILLS_CATALOG`) — typed array with query helpers
|
|
17
24
|
- **Registry factories** — `createCuratedSkillRegistry()`, `createCuratedSkillSnapshot()` (requires `@framers/agentos`)
|
|
25
|
+
- **Validation script** — `npm run validate` to lint SKILL.md files
|
|
18
26
|
|
|
19
|
-
##
|
|
27
|
+
## Quick Start
|
|
20
28
|
|
|
21
|
-
###
|
|
29
|
+
### 1. Browse the catalog (zero peer deps)
|
|
22
30
|
|
|
23
|
-
The `./catalog` sub-export
|
|
31
|
+
The `./catalog` sub-export has no peer dependencies:
|
|
24
32
|
|
|
25
33
|
```typescript
|
|
26
34
|
import {
|
|
@@ -33,23 +41,46 @@ import {
|
|
|
33
41
|
getSkillsByTag,
|
|
34
42
|
} from '@framers/agentos-skills-registry/catalog';
|
|
35
43
|
|
|
36
|
-
// Search
|
|
44
|
+
// Search across names, descriptions, and tags
|
|
37
45
|
const matches = searchSkills('github');
|
|
38
46
|
|
|
39
47
|
// Filter by category
|
|
40
|
-
const
|
|
48
|
+
const social = getSkillsByCategory('social-automation');
|
|
41
49
|
|
|
42
50
|
// Filter by installed tools
|
|
43
51
|
const available = getAvailableSkills(['web-search', 'filesystem']);
|
|
44
52
|
|
|
45
|
-
//
|
|
53
|
+
// Get a specific skill
|
|
54
|
+
const github = getSkillByName('github');
|
|
55
|
+
console.log(github?.requiredSecrets); // ['github.token']
|
|
56
|
+
|
|
57
|
+
// All unique categories
|
|
46
58
|
const categories = getCategories();
|
|
47
|
-
// ['communication', 'creative', 'developer-tools', '
|
|
59
|
+
// ['automation', 'communication', 'creative', 'developer-tools', 'social-automation', ...]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Load raw registry data
|
|
63
|
+
|
|
64
|
+
Access the JSON index directly:
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { getSkillsCatalog } from '@framers/agentos-skills-registry';
|
|
68
|
+
|
|
69
|
+
const catalog = await getSkillsCatalog();
|
|
70
|
+
console.log(catalog.skills.curated.length); // 40
|
|
71
|
+
console.log(catalog.version); // '1.0.0'
|
|
48
72
|
```
|
|
49
73
|
|
|
50
|
-
|
|
74
|
+
Or import the raw JSON:
|
|
51
75
|
|
|
52
|
-
|
|
76
|
+
```typescript
|
|
77
|
+
import registry from '@framers/agentos-skills-registry/registry.json';
|
|
78
|
+
console.log(registry.skills.curated[0].name); // 'weather'
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 3. Dynamically load skills into an agent (requires @framers/agentos)
|
|
82
|
+
|
|
83
|
+
The factory functions lazy-load `@framers/agentos` via dynamic `import()`:
|
|
53
84
|
|
|
54
85
|
```bash
|
|
55
86
|
npm install @framers/agentos-skills-registry @framers/agentos
|
|
@@ -59,77 +90,143 @@ npm install @framers/agentos-skills-registry @framers/agentos
|
|
|
59
90
|
import {
|
|
60
91
|
createCuratedSkillRegistry,
|
|
61
92
|
createCuratedSkillSnapshot,
|
|
93
|
+
getBundledCuratedSkillsDir,
|
|
94
|
+
loadSkillByName,
|
|
62
95
|
} from '@framers/agentos-skills-registry';
|
|
63
96
|
|
|
64
|
-
// Create a live SkillRegistry loaded with all curated skills
|
|
97
|
+
// Option A: Create a live SkillRegistry loaded with all curated skills
|
|
65
98
|
const registry = await createCuratedSkillRegistry();
|
|
66
|
-
console.log(registry.size); // 16+
|
|
67
99
|
|
|
68
|
-
//
|
|
100
|
+
// Or load only a specific curated subset
|
|
101
|
+
const selectedRegistry = await createCuratedSkillRegistry({
|
|
102
|
+
skills: ['github', 'weather'],
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// Option B: Build a prompt snapshot for specific skills
|
|
69
106
|
const snapshot = await createCuratedSkillSnapshot({
|
|
70
107
|
skills: ['github', 'weather', 'notion'], // or 'all'
|
|
71
108
|
platform: 'darwin',
|
|
72
109
|
});
|
|
73
|
-
console.log(snapshot.prompt); // Formatted markdown for the LLM
|
|
74
|
-
```
|
|
75
110
|
|
|
76
|
-
|
|
111
|
+
// Only the selected skills are loaded when you pass an explicit list.
|
|
112
|
+
console.log(snapshot.skills.map((skill) => skill.name));
|
|
113
|
+
// ['github', 'weather', 'notion']
|
|
114
|
+
|
|
115
|
+
// Inject the snapshot prompt into your agent's system message
|
|
116
|
+
const systemPrompt = `You are an AI assistant.\n\n${snapshot.prompt}`;
|
|
117
|
+
|
|
118
|
+
// Option C: Load a single SKILL.md lazily with parsed metadata
|
|
119
|
+
const githubSkill = await loadSkillByName('github');
|
|
120
|
+
console.log(githubSkill?.metadata?.primaryEnv); // 'GITHUB_TOKEN'
|
|
121
|
+
console.log(githubSkill?.frontmatter.requires_tools); // ['filesystem']
|
|
77
122
|
|
|
123
|
+
// Option D: Get the directory path and load manually
|
|
124
|
+
const skillsDir = getBundledCuratedSkillsDir();
|
|
125
|
+
// → '/path/to/node_modules/@framers/agentos-skills-registry/registry/curated'
|
|
78
126
|
```
|
|
79
|
-
Error: @framers/agentos is required for createCuratedSkillRegistry() and
|
|
80
|
-
createCuratedSkillSnapshot(). Install it:
|
|
81
127
|
|
|
82
|
-
|
|
128
|
+
### 4. Dynamic skill resolution in Wunderland presets
|
|
83
129
|
|
|
84
|
-
|
|
85
|
-
|
|
130
|
+
```typescript
|
|
131
|
+
// In agent.config.json:
|
|
132
|
+
// { "suggestedSkills": ["github", "web-search", "notion"] }
|
|
133
|
+
|
|
134
|
+
import { getSkillByName } from '@framers/agentos-skills-registry/catalog';
|
|
135
|
+
import { createCuratedSkillSnapshot } from '@framers/agentos-skills-registry';
|
|
136
|
+
|
|
137
|
+
// Validate skill names exist before loading
|
|
138
|
+
const skillNames = ['github', 'web-search', 'notion'];
|
|
139
|
+
const valid = skillNames.filter((name) => {
|
|
140
|
+
const entry = getSkillByName(name);
|
|
141
|
+
if (!entry) {
|
|
142
|
+
console.warn(`Unknown skill "${name}", skipping`);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return true;
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// Build snapshot with only validated skills
|
|
149
|
+
const snapshot = await createCuratedSkillSnapshot({ skills: valid });
|
|
86
150
|
```
|
|
87
151
|
|
|
88
|
-
|
|
152
|
+
When `skills` is a string array, the registry only loads those specific `SKILL.md`
|
|
153
|
+
files before building the snapshot. It does not walk the full curated bundle first.
|
|
154
|
+
Loaded skills also include parsed `metadata` so consumers do not need to decode
|
|
155
|
+
the `metadata.agentos` block manually.
|
|
156
|
+
|
|
157
|
+
## Two Import Paths
|
|
89
158
|
|
|
90
|
-
|
|
159
|
+
| Import | Peer deps | Use case |
|
|
160
|
+
|--------|-----------|----------|
|
|
161
|
+
| `@framers/agentos-skills-registry/catalog` | None | UI browsing, search, filtering |
|
|
162
|
+
| `@framers/agentos-skills-registry` | `@framers/agentos` (optional) | Runtime loading, snapshots, factories |
|
|
91
163
|
|
|
92
|
-
|
|
93
|
-
|
|
164
|
+
The `@framers/agentos` dependency is loaded **lazily** at runtime and cached after first resolution. If it's not installed and you call a factory function, you get a clear error with install instructions.
|
|
165
|
+
|
|
166
|
+
## Included Skills (40)
|
|
167
|
+
|
|
168
|
+
The catalog now includes both foundational utility skills and social automation modules, including:
|
|
169
|
+
|
|
170
|
+
- Information and research: `web-search`, `weather`, `summarize`, `deep-research`
|
|
171
|
+
- Developer tools: `github`, `coding-agent`, `git`
|
|
172
|
+
- Productivity: `notion`, `obsidian`, `trello`, `apple-notes`, `apple-reminders`
|
|
173
|
+
- Social automation: `social-broadcast`, `twitter-bot`, `instagram-bot`, `linkedin-bot`, `facebook-bot`, `threads-bot`, `bluesky-bot`, `mastodon-bot`, `youtube-bot`, `tiktok-bot`, `pinterest-bot`, `reddit-bot`, `blog-publisher`
|
|
174
|
+
- Additional categories: `automation`, `communication`, `devops`, `media`, `marketing`, `creative`, `security`
|
|
94
175
|
|
|
95
176
|
## Community Skills
|
|
96
177
|
|
|
97
|
-
The catalog
|
|
178
|
+
The catalog supports both **curated** (staff-maintained) and **community** (PR-submitted) skills:
|
|
98
179
|
|
|
99
180
|
```typescript
|
|
100
|
-
import {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
181
|
+
import { getCuratedSkills, getCommunitySkills } from '@framers/agentos-skills-registry/catalog';
|
|
182
|
+
|
|
183
|
+
const curated = getCuratedSkills(); // Staff-verified skills
|
|
184
|
+
const community = getCommunitySkills(); // Community-contributed
|
|
185
|
+
```
|
|
105
186
|
|
|
106
|
-
|
|
107
|
-
const curated = getCuratedSkills();
|
|
187
|
+
Each entry includes a `source` field (`'curated'` or `'community'`) for provenance filtering.
|
|
108
188
|
|
|
109
|
-
|
|
110
|
-
const community = getCommunitySkills();
|
|
189
|
+
## Schema Types
|
|
111
190
|
|
|
112
|
-
|
|
113
|
-
const all = getAllSkills();
|
|
191
|
+
Import registry.json schema types for type-safe access:
|
|
114
192
|
|
|
115
|
-
|
|
116
|
-
import {
|
|
193
|
+
```typescript
|
|
194
|
+
import type {
|
|
195
|
+
SkillRegistryEntry,
|
|
196
|
+
SkillsRegistry,
|
|
197
|
+
SkillInstallSpec,
|
|
198
|
+
SkillMetadata,
|
|
199
|
+
} from '@framers/agentos-skills-registry';
|
|
117
200
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
201
|
+
// SkillRegistryEntry — shape of entries in registry.json
|
|
202
|
+
// SkillsRegistry — shape of the full registry.json file
|
|
203
|
+
// SkillInstallSpec — install instructions for skill dependencies
|
|
121
204
|
```
|
|
122
205
|
|
|
123
|
-
|
|
206
|
+
## Exports
|
|
207
|
+
|
|
208
|
+
| Export path | Contents |
|
|
209
|
+
|-------------|----------|
|
|
210
|
+
| `.` | Full SDK: catalog helpers + factory functions + schema types |
|
|
211
|
+
| `./catalog` | Lightweight: `SKILLS_CATALOG`, query helpers (zero peer deps) |
|
|
212
|
+
| `./registry.json` | Raw JSON index of all skills |
|
|
213
|
+
| `./types` | TypeScript declarations for registry.json schema |
|
|
124
214
|
|
|
125
215
|
## Relationship to Other Packages
|
|
126
216
|
|
|
127
217
|
```
|
|
128
|
-
@framers/agentos-skills
|
|
129
|
-
|
|
130
|
-
|
|
218
|
+
@framers/agentos-skills-registry ← This package (data + SDK)
|
|
219
|
+
├── registry/curated/*/SKILL.md (bundled prompt modules)
|
|
220
|
+
├── registry.json (machine-readable index)
|
|
221
|
+
├── catalog.ts (typed queries: search, filter, browse)
|
|
222
|
+
└── index.ts (factories: lazy-load @framers/agentos)
|
|
223
|
+
└── @framers/agentos (optional peer: live SkillRegistry + snapshots)
|
|
131
224
|
```
|
|
132
225
|
|
|
226
|
+
## Contributing
|
|
227
|
+
|
|
228
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for how to submit new skills.
|
|
229
|
+
|
|
133
230
|
## License
|
|
134
231
|
|
|
135
232
|
MIT
|
package/dist/catalog.d.ts
CHANGED
|
@@ -2,10 +2,53 @@
|
|
|
2
2
|
* @fileoverview Curated Skills Catalog for AgentOS
|
|
3
3
|
* @module @framers/agentos-skills-registry/catalog
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Programmatic catalog derived from registry.json so it stays in sync with
|
|
6
|
+
* bundled SKILL.md entries.
|
|
7
|
+
*
|
|
8
|
+
* Pattern mirrors `@framers/agentos-extensions-registry/tool-registry`:
|
|
9
|
+
* - `SKILLS_CATALOG` array with metadata + lazy `loadSkill` factory
|
|
10
|
+
* - `createLocalSkillProxy()` for lazy-loading from local paths
|
|
11
|
+
* - `loadSkillByName()` for on-demand loading by name
|
|
12
|
+
*/
|
|
13
|
+
import type { SkillMetadata } from './schema-types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Result of loading a skill via its `loadSkill()` factory.
|
|
16
|
+
*
|
|
17
|
+
* Contains the parsed SKILL.md content, frontmatter, and body text — everything
|
|
18
|
+
* needed to inject the skill into an agent's prompt context.
|
|
8
19
|
*/
|
|
20
|
+
export interface LoadedSkill {
|
|
21
|
+
/** Skill name */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Human-readable display name */
|
|
24
|
+
displayName: string;
|
|
25
|
+
/** Brief description */
|
|
26
|
+
description: string;
|
|
27
|
+
/** Full SKILL.md body content (after frontmatter) */
|
|
28
|
+
content: string;
|
|
29
|
+
/** Raw parsed frontmatter key/value pairs */
|
|
30
|
+
frontmatter: LoadedSkillFrontmatter;
|
|
31
|
+
/** Parsed metadata extracted from frontmatter (when available) */
|
|
32
|
+
metadata?: SkillMetadata;
|
|
33
|
+
/** Absolute path to the SKILL.md file that was loaded */
|
|
34
|
+
sourcePath: string;
|
|
35
|
+
}
|
|
36
|
+
export interface LoadedSkillFrontmatter extends Record<string, unknown> {
|
|
37
|
+
name?: string;
|
|
38
|
+
version?: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
author?: string;
|
|
41
|
+
namespace?: string;
|
|
42
|
+
category?: string;
|
|
43
|
+
tags?: string[];
|
|
44
|
+
requires_secrets?: string[];
|
|
45
|
+
requires_tools?: string[];
|
|
46
|
+
metadata?: unknown;
|
|
47
|
+
userInvocable?: boolean | string;
|
|
48
|
+
'user-invocable'?: boolean | string;
|
|
49
|
+
disableModelInvocation?: boolean | string;
|
|
50
|
+
'disable-model-invocation'?: boolean | string;
|
|
51
|
+
}
|
|
9
52
|
export interface SkillCatalogEntry {
|
|
10
53
|
/** Unique skill name (matches directory name under registry/curated/) */
|
|
11
54
|
name: string;
|
|
@@ -21,13 +64,35 @@ export interface SkillCatalogEntry {
|
|
|
21
64
|
requiredSecrets: string[];
|
|
22
65
|
/** Tool identifiers the skill depends on (e.g. 'web-search', 'filesystem') */
|
|
23
66
|
requiredTools: string[];
|
|
24
|
-
/** Relative path from the
|
|
67
|
+
/** Relative path from the package root to the SKILL.md */
|
|
25
68
|
skillPath: string;
|
|
26
69
|
/** Skill source: curated (staff-maintained) or community-submitted */
|
|
27
70
|
source?: 'curated' | 'community';
|
|
28
|
-
/**
|
|
29
|
-
namespace:
|
|
71
|
+
/** Namespace used by the skill registry */
|
|
72
|
+
namespace: string;
|
|
73
|
+
/** Whether this skill is available (SKILL.md exists on disk). Always true for bundled skills. */
|
|
74
|
+
available: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Lazy factory function that loads and parses the SKILL.md on demand.
|
|
77
|
+
*
|
|
78
|
+
* Mirrors the `createPack` pattern from `@framers/agentos-extensions-registry`.
|
|
79
|
+
* Returns parsed skill content including frontmatter and body text.
|
|
80
|
+
*/
|
|
81
|
+
loadSkill: () => Promise<LoadedSkill>;
|
|
30
82
|
}
|
|
83
|
+
export declare function extractLoadedSkillMetadata(frontmatter: LoadedSkillFrontmatter): SkillMetadata | undefined;
|
|
84
|
+
export declare function loadSkillFromAbsolutePath(absolutePath: string, displayName: string): Promise<LoadedSkill>;
|
|
85
|
+
/**
|
|
86
|
+
* Create a lazy-loading skill proxy for a relative SKILL.md path.
|
|
87
|
+
*
|
|
88
|
+
* Mirrors `createLocalPackProxy()` from the extensions-registry: the SKILL.md
|
|
89
|
+
* is only read and parsed when the returned function is called.
|
|
90
|
+
*
|
|
91
|
+
* @param relativePath - Path from the package root to the SKILL.md file
|
|
92
|
+
* (e.g. 'registry/curated/github/SKILL.md')
|
|
93
|
+
* @param displayName - Human-readable display name for the loaded skill
|
|
94
|
+
*/
|
|
95
|
+
export declare function createLocalSkillProxy(relativePath: string, displayName: string): () => Promise<LoadedSkill>;
|
|
31
96
|
export declare const SKILLS_CATALOG: SkillCatalogEntry[];
|
|
32
97
|
/**
|
|
33
98
|
* Get all skills in a given category.
|
|
@@ -67,4 +132,38 @@ export declare function getCommunitySkills(): SkillCatalogEntry[];
|
|
|
67
132
|
* Get all skills (curated + community). Alias for SKILLS_CATALOG.
|
|
68
133
|
*/
|
|
69
134
|
export declare function getAllSkills(): SkillCatalogEntry[];
|
|
135
|
+
/**
|
|
136
|
+
* Get skill entries filtered by name.
|
|
137
|
+
*
|
|
138
|
+
* Mirrors `getToolEntries()` from the extensions-registry.
|
|
139
|
+
*/
|
|
140
|
+
export declare function getSkillEntries(names?: string[] | 'all' | 'none'): SkillCatalogEntry[];
|
|
141
|
+
/**
|
|
142
|
+
* Load a skill by name from the catalog.
|
|
143
|
+
*
|
|
144
|
+
* Finds the entry in SKILLS_CATALOG and calls its `loadSkill()` factory to
|
|
145
|
+
* read and parse the SKILL.md file on demand. Returns `null` if the skill
|
|
146
|
+
* is not found in the catalog.
|
|
147
|
+
*
|
|
148
|
+
* This is the primary consumer-facing API for lazy skill loading, mirroring
|
|
149
|
+
* how the extensions-registry resolves and loads extension packs.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* import { loadSkillByName } from '@framers/agentos-skills-registry';
|
|
154
|
+
*
|
|
155
|
+
* const skill = await loadSkillByName('github');
|
|
156
|
+
* if (skill) {
|
|
157
|
+
* console.log(skill.content); // SKILL.md body for injection into prompt
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export declare function loadSkillByName(name: string): Promise<LoadedSkill | null>;
|
|
162
|
+
/**
|
|
163
|
+
* Load multiple skills by name from the catalog.
|
|
164
|
+
*
|
|
165
|
+
* Convenience wrapper that calls `loadSkillByName()` for each name in parallel.
|
|
166
|
+
* Silently skips skills that are not found in the catalog.
|
|
167
|
+
*/
|
|
168
|
+
export declare function loadSkillsByNames(names: string[]): Promise<LoadedSkill[]>;
|
|
70
169
|
//# sourceMappingURL=catalog.d.ts.map
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|