@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.
Files changed (64) hide show
  1. package/CONTRIBUTING.md +231 -0
  2. package/README.md +146 -49
  3. package/dist/catalog.d.ts +105 -6
  4. package/dist/catalog.d.ts.map +1 -1
  5. package/dist/catalog.js +257 -206
  6. package/dist/catalog.js.map +1 -1
  7. package/dist/index.d.ts +30 -8
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +48 -25
  10. package/dist/index.js.map +1 -1
  11. package/dist/schema-types.d.ts +79 -0
  12. package/dist/schema-types.d.ts.map +1 -0
  13. package/dist/schema-types.js +11 -0
  14. package/dist/schema-types.js.map +1 -0
  15. package/dist/workspace-discovery.d.ts +77 -0
  16. package/dist/workspace-discovery.d.ts.map +1 -0
  17. package/dist/workspace-discovery.js +172 -0
  18. package/dist/workspace-discovery.js.map +1 -0
  19. package/package.json +17 -5
  20. package/registry/community/.gitkeep +0 -0
  21. package/registry/curated/1password/SKILL.md +53 -0
  22. package/registry/curated/account-manager/SKILL.md +60 -0
  23. package/registry/curated/apple-notes/SKILL.md +45 -0
  24. package/registry/curated/apple-reminders/SKILL.md +46 -0
  25. package/registry/curated/blog-publisher/SKILL.md +110 -0
  26. package/registry/curated/bluesky-bot/SKILL.md +93 -0
  27. package/registry/curated/cloud-ops/SKILL.md +124 -0
  28. package/registry/curated/coding-agent/SKILL.md +40 -0
  29. package/registry/curated/content-creator/SKILL.md +53 -0
  30. package/registry/curated/deep-research/SKILL.md +56 -0
  31. package/registry/curated/discord-helper/SKILL.md +43 -0
  32. package/registry/curated/facebook-bot/SKILL.md +94 -0
  33. package/registry/curated/git/SKILL.md +39 -0
  34. package/registry/curated/github/SKILL.md +54 -0
  35. package/registry/curated/healthcheck/SKILL.md +43 -0
  36. package/registry/curated/image-gen/SKILL.md +50 -0
  37. package/registry/curated/instagram-bot/SKILL.md +60 -0
  38. package/registry/curated/linkedin-bot/SKILL.md +86 -0
  39. package/registry/curated/mastodon-bot/SKILL.md +104 -0
  40. package/registry/curated/memory-manager/SKILL.md +127 -0
  41. package/registry/curated/notion/SKILL.md +43 -0
  42. package/registry/curated/obsidian/SKILL.md +42 -0
  43. package/registry/curated/pinterest-bot/SKILL.md +45 -0
  44. package/registry/curated/reddit-bot/SKILL.md +74 -0
  45. package/registry/curated/seo-campaign/SKILL.md +51 -0
  46. package/registry/curated/site-deploy/SKILL.md +119 -0
  47. package/registry/curated/slack-helper/SKILL.md +43 -0
  48. package/registry/curated/social-broadcast/SKILL.md +145 -0
  49. package/registry/curated/spotify-player/SKILL.md +45 -0
  50. package/registry/curated/summarize/SKILL.md +40 -0
  51. package/registry/curated/threads-bot/SKILL.md +82 -0
  52. package/registry/curated/tiktok-bot/SKILL.md +104 -0
  53. package/registry/curated/trello/SKILL.md +44 -0
  54. package/registry/curated/twitter-bot/SKILL.md +63 -0
  55. package/registry/curated/voice-conversation/SKILL.md +65 -0
  56. package/registry/curated/weather/SKILL.md +37 -0
  57. package/registry/curated/web-scraper/SKILL.md +60 -0
  58. package/registry/curated/web-search/SKILL.md +49 -0
  59. package/registry/curated/whisper-transcribe/SKILL.md +58 -0
  60. package/registry/curated/youtube-bot/SKILL.md +104 -0
  61. package/registry.json +1478 -0
  62. package/scripts/update-registry.mjs +126 -0
  63. package/scripts/validate-skill.mjs +304 -0
  64. package/types.d.ts +77 -0
@@ -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
+ &nbsp;&nbsp;&nbsp;
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 bundle for [AgentOS](https://github.com/framersai/agentos) — lazy-loading DI of SKILL.md prompt modules.
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
  [![npm](https://img.shields.io/npm/v/@framers/agentos-skills-registry?logo=npm&color=cb3837)](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 package is the **typed SDK** on top of [`@framers/agentos-skills`](https://www.npmjs.com/package/@framers/agentos-skills). It provides:
19
+ This is the **single package** for AgentOS skills. It contains:
14
20
 
15
- - **Static catalog** (`SKILLS_CATALOG`) typed array of all 16+ curated skills with metadata
16
- - **Query helpers** — `searchSkills()`, `getSkillsByCategory()`, `getSkillsByTag()`, `getAvailableSkills()`, etc.
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
- ## Two Import Paths
27
+ ## Quick Start
20
28
 
21
- ### Lightweight (zero peer deps)
29
+ ### 1. Browse the catalog (zero peer deps)
22
30
 
23
- The `./catalog` sub-export works standalone — no `@framers/agentos` needed:
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 devTools = getSkillsByCategory('developer-tools');
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
- // All categories
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', 'devops', 'information', ...]
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
- ### Full registry (requires @framers/agentos)
74
+ Or import the raw JSON:
51
75
 
52
- The factory functions lazy-load `@framers/agentos` via `dynamic import()` — only resolved when called:
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
- // Build a prompt snapshot for agent injection
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
- If `@framers/agentos` is not installed and you call a factory function, you get a clear error:
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
- npm install @framers/agentos
128
+ ### 4. Dynamic skill resolution in Wunderland presets
83
129
 
84
- Or use the lightweight catalog helpers (getSkillsByCategory, searchSkills, etc.)
85
- which have no peer-dep requirement.
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
- ## Lazy Loading
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
- The `@framers/agentos` dependency is loaded **lazily** at runtime via dynamic `import()` and cached after first resolution. This means:
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
- - `import { searchSkills } from '@framers/agentos-skills-registry/catalog'` **zero** peer deps loaded
93
- - `import { createCuratedSkillRegistry } from '@framers/agentos-skills-registry'` — `@framers/agentos` loaded **only when called**
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 includes both **curated** (staff-maintained) and **community** (PR-submitted) skills. Use the source-aware helpers to filter by origin:
178
+ The catalog supports both **curated** (staff-maintained) and **community** (PR-submitted) skills:
98
179
 
99
180
  ```typescript
100
- import {
101
- getCuratedSkills,
102
- getCommunitySkills,
103
- getAllSkills,
104
- } from '@framers/agentos-skills-registry/catalog';
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
- // Only staff-maintained, verified skills
107
- const curated = getCuratedSkills();
187
+ Each entry includes a `source` field (`'curated'` or `'community'`) for provenance filtering.
108
188
 
109
- // Only community-contributed skills
110
- const community = getCommunitySkills();
189
+ ## Schema Types
111
190
 
112
- // Everything (curated + community)
113
- const all = getAllSkills();
191
+ Import registry.json schema types for type-safe access:
114
192
 
115
- // Combine with existing filters
116
- import { getSkillsByCategory } from '@framers/agentos-skills-registry/catalog';
193
+ ```typescript
194
+ import type {
195
+ SkillRegistryEntry,
196
+ SkillsRegistry,
197
+ SkillInstallSpec,
198
+ SkillMetadata,
199
+ } from '@framers/agentos-skills-registry';
117
200
 
118
- const devTools = getSkillsByCategory('developer-tools');
119
- const curatedDevTools = devTools.filter((s) => s.source === 'curated');
120
- const communityDevTools = devTools.filter((s) => s.source === 'community');
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
- Each skill entry includes a `source` field (`'curated'` or `'community'`) so you can distinguish provenance at runtime.
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 (data: SKILL.md files + JSON index)
129
- └── @framers/agentos-skills-registry ← You are here (SDK: typed queries + factories)
130
- └── @framers/agentos (optional peer: live SkillRegistry + snapshots)
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
- * Statically-typed catalog of all curated skills with metadata for
6
- * programmatic discovery, filtering by category/tag, and tool-based
7
- * availability checks.
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 agentos-skills package root to the SKILL.md */
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
- /** All curated skills are in the wunderland namespace */
29
- namespace: 'wunderland';
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
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IAEb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,sBAAsB;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,+DAA+D;IAC/D,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,8EAA8E;IAC9E,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAElB,sEAAsE;IACtE,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IAEjC,yDAAyD;IACzD,SAAS,EAAE,YAAY,CAAC;CACzB;AAMD,eAAO,MAAM,cAAc,EAAE,iBAAiB,EA+N7C,CAAC;AAMF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAEzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAGhF;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAG/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAS/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,iBAAiB,EAAE,CAElD"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}