@danieljvdm/dev-kit 0.2.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 (47) hide show
  1. package/README.md +290 -0
  2. package/bin/dev-kit.mjs +3 -0
  3. package/dev-kit.example.jsonc +13 -0
  4. package/package.json +69 -0
  5. package/schema/dev-kit.schema.json +128 -0
  6. package/schema/skill-sources.schema.json +83 -0
  7. package/skill-sources.jsonc +55 -0
  8. package/skill-sources.lock.json +136 -0
  9. package/skills/dev-kit/SKILL.md +145 -0
  10. package/skills/dev-kit/agents/openai.yaml +4 -0
  11. package/skills/effect-ts/SKILL.md +242 -0
  12. package/skills/effect-ts/UPSTREAM.md +28 -0
  13. package/skills/effect-ts/agents/openai.yaml +5 -0
  14. package/skills/effect-ts/references/audit-services.md +144 -0
  15. package/skills/effect-ts/references/features.md +525 -0
  16. package/skills/effect-ts/references/guide-cli.md +106 -0
  17. package/skills/effect-ts/references/guide-effect.md +453 -0
  18. package/skills/effect-ts/references/guide-error-handling.md +574 -0
  19. package/skills/effect-ts/references/guide-http-boundaries.md +55 -0
  20. package/skills/effect-ts/references/guide-layers.md +1017 -0
  21. package/skills/effect-ts/references/guide-observability.md +771 -0
  22. package/skills/effect-ts/references/guide-retries.md +446 -0
  23. package/skills/effect-ts/references/guide-schedule.md +357 -0
  24. package/skills/effect-ts/references/guide-schema.md +671 -0
  25. package/skills/effect-ts/references/guide-sql.md +539 -0
  26. package/skills/effect-ts/references/guide-testing.md +534 -0
  27. package/skills/effect-ts/references/guide-type-safety-and-boundaries.md +131 -0
  28. package/skills/effect-ts/references/version-and-source.md +87 -0
  29. package/src/bin/dev-kit.ts +372 -0
  30. package/src/catalog-manager.ts +345 -0
  31. package/src/catalog.ts +246 -0
  32. package/src/cli-ui.ts +110 -0
  33. package/src/effect-source.ts +325 -0
  34. package/src/effect-tsgo.ts +256 -0
  35. package/src/gitignore.ts +212 -0
  36. package/src/index.ts +98 -0
  37. package/src/manifest.ts +133 -0
  38. package/src/node-symbolic-link.ts +31 -0
  39. package/src/path-digest.ts +140 -0
  40. package/src/project-process-lock.ts +76 -0
  41. package/src/project-state.ts +67 -0
  42. package/src/skill-manager.ts +326 -0
  43. package/src/source-manifest.ts +51 -0
  44. package/src/sync.ts +900 -0
  45. package/src/tool-metadata.ts +3 -0
  46. package/src/typescript-package-name.ts +5 -0
  47. package/src/vendor.ts +848 -0
package/README.md ADDED
@@ -0,0 +1,290 @@
1
+ # Dev Kit
2
+
3
+ Portable agent skills and reproducible project setup, managed from one manifest.
4
+
5
+ Dev Kit gives every project the same development conventions without requiring a
6
+ collection of unrelated postinstall scripts. It can:
7
+
8
+ - install selected skills for Codex, Claude, and OpenCode;
9
+ - run explicit setup tasks such as version-matched Effect source checkout and
10
+ Effect TypeScript-Go patching;
11
+ - preview changes before writing them;
12
+ - lock resolved outputs for reproducible installs; and
13
+ - detect ownership conflicts without overwriting user files.
14
+
15
+ ## Quick start
16
+
17
+ Install Dev Kit from GitHub:
18
+
19
+ ```bash
20
+ bun add -d github:danieljvdm/agent-skills
21
+ ```
22
+
23
+ Initialize the project, browse the approved catalog, and add skills:
24
+
25
+ ```bash
26
+ bunx dev-kit init
27
+ bunx dev-kit list --all
28
+ bunx dev-kit add dev-kit effect
29
+ ```
30
+
31
+ `add` updates `dev-kit.jsonc` and applies the selection immediately. The
32
+ resulting manifest is ordinary JSONC:
33
+
34
+ In an interactive terminal, `dev-kit add` and `dev-kit remove` with no names
35
+ open a multi-select picker. Pass several names to change them in one command,
36
+ or use `--no-apply` to edit the manifest without syncing yet.
37
+
38
+ ```jsonc
39
+ {
40
+ "$schema": "./node_modules/@danieljvdm/dev-kit/schema/dev-kit.schema.json",
41
+ "include": ["dev-kit", "effect"],
42
+ "targets": {
43
+ "agents": { "enabled": true, "mode": "copy" },
44
+ "claude": { "enabled": true, "mode": "symlink" }
45
+ }
46
+ }
47
+ ```
48
+
49
+ For review-first workflows, edit the manifest or pass `--no-apply`, then:
50
+
51
+ ```bash
52
+ bunx dev-kit plan
53
+ bunx dev-kit apply
54
+ ```
55
+
56
+ Commit the generated `dev-kit.lock.json`, then use locked mode in your package
57
+ lifecycle:
58
+
59
+ ```jsonc
60
+ {
61
+ "scripts": {
62
+ "postinstall": "dev-kit apply --locked"
63
+ }
64
+ }
65
+ ```
66
+
67
+ That single postinstall applies every task enabled in `dev-kit.jsonc`.
68
+
69
+ This repository dogfoods the same flow with its committed `dev-kit.jsonc` and
70
+ `dev-kit.lock.json`. From this source checkout, invoke the local CLI with:
71
+
72
+ ```bash
73
+ bun run dev-kit plan
74
+ bun run dev-kit apply --locked
75
+ ```
76
+
77
+ `bun x dev-kit` is for consuming projects where installation has created the
78
+ `node_modules/.bin/dev-kit` link; package managers do not create that link for
79
+ the root package itself.
80
+
81
+ ## Commands
82
+
83
+ | Command | Purpose |
84
+ | --- | --- |
85
+ | `dev-kit` | Show selected skills and the four common next actions. |
86
+ | `dev-kit init` | Create a minimal `dev-kit.jsonc`. |
87
+ | `dev-kit add <skill...>` | Select and immediately install skills. |
88
+ | `dev-kit remove <skill...>` | Deselect and uninstall skills safely. |
89
+ | `dev-kit list [--all]` | List selected skills or browse the catalog. |
90
+ | `dev-kit search <words...>` | Search names and descriptions. |
91
+ | `dev-kit info <skill>` | Show description, source, and approved commit. |
92
+ | `dev-kit status` | Check whether the project matches its selection. |
93
+ | `dev-kit sync` | Apply the current manifest. |
94
+ | `dev-kit plan` | Preview project changes without writing files. |
95
+ | `dev-kit apply` | Apply the manifest and update `dev-kit.lock.json`. |
96
+ | `dev-kit apply --locked` | Reproduce the committed lock or fail on drift. |
97
+ | `dev-kit gitignore` | Add `.repos/` and `.dev-kit/` to `.gitignore`. |
98
+ | `dev-kit effect sync` | Sync `.repos/effect` to the installed Effect version. |
99
+ | `dev-kit tsgo patch` | Validate and patch Effect TypeScript-Go directly. |
100
+ | `dev-kit catalog refresh` | Maintainer command to approve current upstream refs. |
101
+ | `dev-kit catalog add <repository>` | Inspect a repository and approve selected skills. |
102
+ | `dev-kit catalog remove <source-or-skill>` | Revoke an approval (`--yes` outside a terminal). |
103
+ | `dev-kit catalog list` | List approved upstream repositories. |
104
+ | `dev-kit catalog info <source>` | Show a source, commit, and approved skills. |
105
+ | `dev-kit catalog verify` | Verify the committed snapshot without advancing refs. |
106
+
107
+ Options vary by command and include `--dry-run`, `--manifest`, `--lockfile`,
108
+ and `--project-dir`. Run any command with `--help` for its complete usage.
109
+
110
+ ## How it works
111
+
112
+ Dev Kit uses three project-local files:
113
+
114
+ | Path | Role | Commit it? |
115
+ | --- | --- | --- |
116
+ | `dev-kit.jsonc` | Desired skills, targets, and setup tasks. | Yes |
117
+ | `dev-kit.lock.json` | Resolved content digests and setup-tool versions. | Yes |
118
+ | `.dev-kit/state.json` | Local ownership receipts used during apply and cleanup. | No |
119
+
120
+ Skills are copied into `.agents/skills` by default. Other harness targets can
121
+ copy or symlink those project-local skills.
122
+
123
+ Dev Kit only changes paths represented by the manifest. Existing unknown files,
124
+ modified managed files, and unsafe symlink paths are reported as conflicts and
125
+ left untouched. Cleanup removes only unchanged outputs with a matching local
126
+ ownership receipt.
127
+
128
+ Locked mode rejects changes to the manifest, packaged skill content, or setup
129
+ tool versions. A project-local process lock also prevents concurrent applies.
130
+
131
+ ## Manifest
132
+
133
+ `include` accepts individual skill names and skill families:
134
+
135
+ ```jsonc
136
+ {
137
+ "$schema": "./node_modules/@danieljvdm/dev-kit/schema/dev-kit.schema.json",
138
+ "include": ["dev-kit", "effect", "emilkowalski-skills"],
139
+ "exclude": ["animation-vocabulary"],
140
+ "targets": {
141
+ "agents": { "enabled": true, "mode": "copy" },
142
+ "claude": { "enabled": true, "mode": "symlink" },
143
+ "opencode": { "enabled": false, "mode": "symlink" }
144
+ }
145
+ }
146
+ ```
147
+
148
+ - `dev-kit` installs guidance for operating the toolkit itself.
149
+ - `effect` expands to the consolidated `effect-ts` skill.
150
+ - An approved source ID selects every skill from that catalog source.
151
+ - An individual catalog skill can be selected directly.
152
+
153
+ Dev Kit reserves `.repos/<source-id>` for project-local source checkouts. Run
154
+ `dev-kit gitignore` to add `.repos/` and `.dev-kit/` to the project ignore file.
155
+ The patch is idempotent, preserves existing lines, and refuses symlinked
156
+ `.gitignore` files.
157
+
158
+ ## Effect source checkout
159
+
160
+ Enable a local checkout of the exact installed Effect release in the manifest:
161
+
162
+ ```jsonc
163
+ {
164
+ "include": ["effect"],
165
+ "setup": {
166
+ "effectSource": { "enabled": true }
167
+ }
168
+ }
169
+ ```
170
+
171
+ `dev-kit apply` reads `node_modules/effect/package.json`, then shallow-clones or
172
+ updates `.repos/effect` to the detached `effect@<version>` tag. It skips the
173
+ checkout in CI, leaves the repository in place when the task is disabled, and
174
+ refuses to switch a checkout with local changes or an unexpected origin.
175
+
176
+ The path, package name, and repository URL may be overridden for compatible
177
+ Effect package layouts. Use `dev-kit effect sync --dry-run` to inspect this
178
+ task directly.
179
+
180
+ ## Effect TypeScript-Go
181
+
182
+ Enable Effect TypeScript-Go in the same manifest:
183
+
184
+ ```jsonc
185
+ {
186
+ "include": ["effect"],
187
+ "setup": {
188
+ "effectSource": { "enabled": true },
189
+ "effectTsgo": { "enabled": true }
190
+ }
191
+ }
192
+ ```
193
+
194
+ Pin the compatible packages in the consuming project:
195
+
196
+ ```jsonc
197
+ {
198
+ "devDependencies": {
199
+ "@danieljvdm/dev-kit": "github:danieljvdm/agent-skills",
200
+ "@effect/tsgo": "0.24.3",
201
+ "typescript": "7.0.2"
202
+ }
203
+ }
204
+ ```
205
+
206
+ ```jsonc
207
+ {
208
+ "$schema": "./node_modules/@effect/tsgo/schema.json",
209
+ "compilerOptions": {
210
+ "plugins": [{ "name": "@effect/language-service" }]
211
+ }
212
+ }
213
+ ```
214
+
215
+ `dev-kit apply` validates both exact version pins and patches the project-local
216
+ native TypeScript compiler. It does not download dependencies and skips an
217
+ installation that is already patched. Use `dev-kit tsgo patch --dry-run` when
218
+ troubleshooting the task directly.
219
+
220
+ Package and tsconfig edits remain explicit until Dev Kit can safely own parts
221
+ of shared JSONC files.
222
+
223
+ ## Approved external skills
224
+
225
+ This repository is an opinionated catalog, not a mirror of every upstream skill
226
+ tree. `skill-sources.jsonc` declares sources Dan has approved:
227
+
228
+ ```jsonc
229
+ {
230
+ "$schema": "./schema/skill-sources.schema.json",
231
+ "sources": [
232
+ {
233
+ "id": "emilkowalski-skills",
234
+ "repository": "https://github.com/emilkowalski/skills.git",
235
+ "ref": "main",
236
+ "skillsPath": "skills",
237
+ "include": ["*"],
238
+ "licensePath": "LICENSE"
239
+ }
240
+ ]
241
+ }
242
+ ```
243
+
244
+ Maintainers approve a new upstream snapshot with:
245
+
246
+ ```bash
247
+ bun run catalog:refresh
248
+ bun run catalog:check
249
+ ```
250
+
251
+ Adding a source does not require editing JSONC:
252
+
253
+ ```bash
254
+ # Opens a skill picker in a terminal
255
+ dev-kit catalog add https://github.com/owner/repository
256
+
257
+ # Explicit and automation-friendly
258
+ dev-kit catalog add https://github.com/owner/repository \
259
+ --skill one --skill two
260
+ dev-kit catalog add https://github.com/owner/repository --all
261
+ ```
262
+
263
+ GitHub tree URLs are accepted, so a URL such as
264
+ `https://github.com/owner/repository/tree/main/skills` supplies the repository,
265
+ ref, and skills path together. `--all` expands to the skills discovered at that
266
+ exact snapshot; it never writes a wildcard that could silently approve a future
267
+ upstream addition.
268
+
269
+ The current catalog includes approved snapshots from Emil Kowalski,
270
+ Cloudflare, and Evan Bacon. Inspect them with `dev-kit catalog list` and
271
+ `dev-kit catalog info <source>`.
272
+
273
+ The refresh resolves refs to exact commits, validates names and paths, rejects
274
+ symlinks and collisions, extracts short descriptions, and updates
275
+ `skill-sources.lock.json`. It does not copy upstream skill trees into this
276
+ repository.
277
+
278
+ When a consuming project selects an external skill, Dev Kit fetches that exact
279
+ approved commit into the ignored `.dev-kit/cache`, applies declared compatibility
280
+ transforms, and installs the result through the ownership-safe sync path. Normal
281
+ installs never float to a newer upstream commit; only a reviewed catalog refresh
282
+ changes what is approved.
283
+
284
+ ## Development
285
+
286
+ ```bash
287
+ bun install
288
+ bun run check
289
+ vitest run --config vitest.config.ts
290
+ ```
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node --import tsx
2
+
3
+ import "../src/bin/dev-kit.ts";
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "./schema/dev-kit.schema.json",
3
+ "include": ["dev-kit", "effect", "emilkowalski-skills"],
4
+ "setup": {
5
+ "effectSource": { "enabled": true },
6
+ "effectTsgo": { "enabled": true }
7
+ },
8
+ "targets": {
9
+ "agents": { "enabled": true, "mode": "copy" },
10
+ "claude": { "enabled": true, "mode": "symlink" },
11
+ "opencode": { "enabled": false, "mode": "symlink" }
12
+ }
13
+ }
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@danieljvdm/dev-kit",
3
+ "version": "0.2.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "Declarative project development toolkit with portable agent skills.",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/danieljvdm/agent-skills.git"
10
+ },
11
+ "license": "MIT",
12
+ "bin": {
13
+ "dev-kit": "bin/dev-kit.mjs"
14
+ },
15
+ "exports": {
16
+ ".": {
17
+ "types": "./src/index.ts",
18
+ "default": "./src/index.ts"
19
+ },
20
+ "./schema": "./schema/dev-kit.schema.json",
21
+ "./schema/dev-kit.schema.json": "./schema/dev-kit.schema.json",
22
+ "./schema/skill-sources.schema.json": "./schema/skill-sources.schema.json"
23
+ },
24
+ "files": [
25
+ "dev-kit.example.jsonc",
26
+ "bin/",
27
+ "schema/",
28
+ "skills/",
29
+ "skill-sources.jsonc",
30
+ "skill-sources.lock.json",
31
+ "src/"
32
+ ],
33
+ "scripts": {
34
+ "prepare": "./bin/dev-kit.mjs apply --locked",
35
+ "dev-kit": "./bin/dev-kit.mjs",
36
+ "changeset": "changeset",
37
+ "version-packages": "changeset version",
38
+ "release": "changeset publish",
39
+ "check": "tsc --noEmit",
40
+ "plan": "./bin/dev-kit.mjs plan",
41
+ "apply": "./bin/dev-kit.mjs apply",
42
+ "gitignore": "./bin/dev-kit.mjs gitignore",
43
+ "effect:sync": "./bin/dev-kit.mjs effect sync",
44
+ "test": "vitest run --config vitest.config.ts",
45
+ "test:watch": "vitest --config vitest.config.ts",
46
+ "tsgo:patch": "./bin/dev-kit.mjs tsgo patch",
47
+ "typecheck": "tsc --noEmit",
48
+ "catalog:refresh": "./bin/dev-kit.mjs catalog refresh",
49
+ "catalog:check": "./bin/dev-kit.mjs catalog verify"
50
+ },
51
+ "dependencies": {
52
+ "@effect/platform-node": "4.0.0-beta.102",
53
+ "effect": "4.0.0-beta.102",
54
+ "jsonc-parser": "3.3.1",
55
+ "tsx": "4.22.4"
56
+ },
57
+ "devDependencies": {
58
+ "@changesets/cli": "3.0.0-next.10",
59
+ "@effect/tsgo": "0.24.3",
60
+ "@effect/vitest": "4.0.0-beta.102",
61
+ "@types/node": "25.9.1",
62
+ "typescript": "7.0.2",
63
+ "vitest": "4.1.10"
64
+ },
65
+ "engines": {
66
+ "node": ">=22.12.0"
67
+ },
68
+ "packageManager": "bun@1.3.14"
69
+ }
@@ -0,0 +1,128 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/danieljvdm/agent-skills/main/schema/dev-kit.schema.json",
4
+ "title": "Dev Kit Manifest",
5
+ "description": "Project-local desired state for portable skills and explicit dev-kit setup tasks.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "$schema": {
10
+ "type": "string"
11
+ },
12
+ "include": {
13
+ "description": "Skill names or family names to sync. External source ids are available as family names.",
14
+ "type": "array",
15
+ "items": {
16
+ "type": "string",
17
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
18
+ },
19
+ "uniqueItems": true,
20
+ "minItems": 0
21
+ },
22
+ "exclude": {
23
+ "description": "Skill names or family names to remove from the selected set after expanding includes.",
24
+ "type": "array",
25
+ "items": {
26
+ "type": "string",
27
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
28
+ },
29
+ "uniqueItems": true,
30
+ "default": []
31
+ },
32
+ "setup": {
33
+ "description": "Explicit setup tasks executed by dev-kit apply after dependencies are installed.",
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "properties": {
37
+ "effectSource": {
38
+ "$ref": "#/$defs/effectSourceSetup"
39
+ },
40
+ "effectTsgo": {
41
+ "$ref": "#/$defs/effectTsgoSetup"
42
+ }
43
+ },
44
+ "default": {}
45
+ },
46
+ "targets": {
47
+ "type": "object",
48
+ "additionalProperties": false,
49
+ "properties": {
50
+ "agents": { "$ref": "#/$defs/target" },
51
+ "claude": { "$ref": "#/$defs/target" },
52
+ "opencode": { "$ref": "#/$defs/target" }
53
+ },
54
+ "default": {
55
+ "agents": { "enabled": true, "mode": "copy" }
56
+ }
57
+ }
58
+ },
59
+ "required": ["include"],
60
+ "$defs": {
61
+ "effectSourceSetup": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "properties": {
65
+ "enabled": {
66
+ "type": "boolean",
67
+ "default": false
68
+ },
69
+ "packageName": {
70
+ "description": "Installed package whose exact version selects the Effect source tag.",
71
+ "type": "string",
72
+ "pattern": "^(?:[a-z0-9][a-z0-9._-]*|@[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*)$",
73
+ "default": "effect"
74
+ },
75
+ "path": {
76
+ "description": "Project-relative checkout destination.",
77
+ "type": "string",
78
+ "default": ".repos/effect"
79
+ },
80
+ "repository": {
81
+ "description": "Git repository containing effect@<version> tags.",
82
+ "type": "string",
83
+ "default": "https://github.com/Effect-TS/effect.git"
84
+ }
85
+ }
86
+ },
87
+ "effectTsgoSetup": {
88
+ "type": "object",
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "enabled": {
92
+ "type": "boolean",
93
+ "default": false
94
+ },
95
+ "force": {
96
+ "description": "Pass the unsafe upstream --force escape hatch when no commit-exact binary matches.",
97
+ "type": "boolean",
98
+ "default": false
99
+ },
100
+ "typescriptPackage": {
101
+ "description": "Project-local native TypeScript package or alias for effect-tsgo to patch.",
102
+ "type": "string",
103
+ "pattern": "^(?:[a-z0-9][a-z0-9._-]*|@[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*)$",
104
+ "default": "typescript"
105
+ }
106
+ }
107
+ },
108
+ "target": {
109
+ "type": "object",
110
+ "additionalProperties": false,
111
+ "properties": {
112
+ "enabled": {
113
+ "type": "boolean",
114
+ "default": true
115
+ },
116
+ "mode": {
117
+ "description": "copy copies from the package source; symlink links to the primary agents target when possible.",
118
+ "enum": ["copy", "symlink"],
119
+ "default": "copy"
120
+ },
121
+ "path": {
122
+ "type": "string",
123
+ "description": "Project-relative destination directory for skill folders."
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/danieljvdm/agent-skills/main/schema/skill-sources.schema.json",
4
+ "title": "External Agent Skill Sources",
5
+ "description": "Repository-level sources approved for the skill catalog.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "$schema": {
10
+ "type": "string"
11
+ },
12
+ "sources": {
13
+ "type": "array",
14
+ "items": {
15
+ "$ref": "#/$defs/source"
16
+ }
17
+ }
18
+ },
19
+ "required": ["sources"],
20
+ "$defs": {
21
+ "source": {
22
+ "type": "object",
23
+ "additionalProperties": false,
24
+ "properties": {
25
+ "id": {
26
+ "description": "Unique source id. It also becomes a family name in project manifests.",
27
+ "type": "string",
28
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
29
+ },
30
+ "repository": {
31
+ "description": "Git clone URL.",
32
+ "type": "string",
33
+ "minLength": 1
34
+ },
35
+ "ref": {
36
+ "description": "Git branch, tag, or commit to resolve when updating.",
37
+ "type": "string",
38
+ "minLength": 1
39
+ },
40
+ "skillsPath": {
41
+ "description": "Repository-relative directory containing skill folders.",
42
+ "type": "string",
43
+ "minLength": 1
44
+ },
45
+ "include": {
46
+ "description": "Explicit skill names, or [\"*\"] to approve every skill found under skillsPath.",
47
+ "type": "array",
48
+ "items": {
49
+ "type": "string",
50
+ "pattern": "^(\\*|[a-z0-9]+(-[a-z0-9]+)*)$"
51
+ },
52
+ "uniqueItems": true,
53
+ "minItems": 1
54
+ },
55
+ "exclude": {
56
+ "description": "Skills to subtract after expanding include, primarily for [\"*\"] sources.",
57
+ "type": "array",
58
+ "items": {
59
+ "type": "string",
60
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
61
+ },
62
+ "uniqueItems": true,
63
+ "default": []
64
+ },
65
+ "licensePath": {
66
+ "description": "Optional repository-relative license file validated during catalog refresh.",
67
+ "type": "string",
68
+ "minLength": 1
69
+ },
70
+ "stripFrontmatter": {
71
+ "description": "Optional upstream frontmatter keys to remove for local harness compatibility.",
72
+ "type": "array",
73
+ "items": {
74
+ "type": "string",
75
+ "pattern": "^[A-Za-z0-9_-]+$"
76
+ },
77
+ "uniqueItems": true
78
+ }
79
+ },
80
+ "required": ["id", "repository", "ref", "skillsPath", "include"]
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "$schema": "./schema/skill-sources.schema.json",
3
+ "sources": [
4
+ {
5
+ "id": "emilkowalski-skills",
6
+ "repository": "https://github.com/emilkowalski/skills.git",
7
+ "ref": "main",
8
+ "skillsPath": "skills",
9
+ "include": [
10
+ "animation-vocabulary",
11
+ "apple-design",
12
+ "emil-design-eng",
13
+ "find-animation-opportunities",
14
+ "improve-animations",
15
+ "pick-ui-library",
16
+ "prototype",
17
+ "review-animations"
18
+ ],
19
+ "licensePath": "LICENSE",
20
+ "stripFrontmatter": [
21
+ "disable-model-invocation"
22
+ ]
23
+ },
24
+ {
25
+ "id": "cloudflare-skills",
26
+ "repository": "https://github.com/cloudflare/skills.git",
27
+ "ref": "main",
28
+ "skillsPath": "skills",
29
+ "include": [
30
+ "agents-sdk",
31
+ "cloudflare",
32
+ "cloudflare-email-service",
33
+ "cloudflare-one",
34
+ "cloudflare-one-migrations",
35
+ "durable-objects",
36
+ "sandbox-sdk",
37
+ "turnstile-spin",
38
+ "web-perf",
39
+ "workers-best-practices",
40
+ "wrangler"
41
+ ],
42
+ "licensePath": "LICENSE"
43
+ },
44
+ {
45
+ "id": "evanbacon-serve-sim",
46
+ "repository": "https://github.com/EvanBacon/serve-sim.git",
47
+ "ref": "main",
48
+ "skillsPath": "skills",
49
+ "include": [
50
+ "serve-sim"
51
+ ],
52
+ "licensePath": "LICENSE"
53
+ }
54
+ ]
55
+ }