@goodboyjs/schema 1.0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 GoodBoy Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # @goodboyjs/schema
2
+
3
+ The canonical GoodBoy skill manifest schema and generated type definitions.
4
+
5
+ ## Schema
6
+
7
+ The manifest schema lives in `src/manifest.schema.json`. It is a JSON Schema draft-07 document that defines the shape of a skill's `manifest.json` — the registry metadata file GoodBoy manages (not to be confused with `goodboy.json`, the per-project file listing installed skills).
8
+
9
+ ## Versions
10
+
11
+ Immutable snapshots of each published schema major version are stored under `versions/v<N>/manifest.schema.json` (currently `versions/v1/`). Once a version is published it is never modified.
12
+
13
+ ## Generated Types
14
+
15
+ TypeScript type definitions are auto-generated from the schema and written to `generated/ts/index.d.ts`. Do not edit this file by hand — run `npm run generate` to regenerate it.
16
+
17
+ ## Contributing
18
+
19
+ To update the schema, edit `src/manifest.schema.json`, then run:
20
+
21
+ ```sh
22
+ npm run generate
23
+ ```
@@ -0,0 +1,115 @@
1
+ /* AUTO-GENERATED — do not edit by hand */
2
+
3
+ export interface GoodBoySkillManifest {
4
+ /**
5
+ * Must match the skill directory name exactly. Lowercase letters, numbers, and hyphens only.
6
+ */
7
+ name: string;
8
+ /**
9
+ * Semantic version (semver) of this skill
10
+ */
11
+ version: string;
12
+ /**
13
+ * What this skill does and when to use it. Used for registry search and display.
14
+ */
15
+ description: string;
16
+ author: {
17
+ name: string;
18
+ email?: string;
19
+ url?: string;
20
+ };
21
+ /**
22
+ * SPDX license identifier e.g. MIT, Apache-2.0
23
+ */
24
+ license: string;
25
+ /**
26
+ * GoodBoy manifest schema version. Always 1.0.0 for v1.
27
+ */
28
+ schema_version: "1.0.0";
29
+ /**
30
+ * Maturity signal for registry display and filtering
31
+ */
32
+ status: "experimental" | "stable" | "deprecated";
33
+ /**
34
+ * Free-form search terms
35
+ *
36
+ * @maxItems 10
37
+ */
38
+ keywords?: string[];
39
+ /**
40
+ * Primary category for registry browsing
41
+ */
42
+ category?:
43
+ | "code"
44
+ | "writing"
45
+ | "data"
46
+ | "devops"
47
+ | "testing"
48
+ | "documentation"
49
+ | "productivity"
50
+ | "security"
51
+ | "research"
52
+ | "other";
53
+ /**
54
+ * Controlled vocabulary for registry faceted search. Unlike keywords, tags are a fixed enumeration owned by GoodBoy.
55
+ *
56
+ * @maxItems 5
57
+ */
58
+ tags?: (
59
+ | "code-review"
60
+ | "testing"
61
+ | "documentation"
62
+ | "git"
63
+ | "deployment"
64
+ | "security"
65
+ | "refactoring"
66
+ | "architecture"
67
+ | "debugging"
68
+ | "productivity"
69
+ | "writing"
70
+ | "data"
71
+ | "devops"
72
+ | "agent"
73
+ | "orchestration"
74
+ | "formatting"
75
+ | "analysis"
76
+ | "research"
77
+ | "workflow"
78
+ | "other"
79
+ )[];
80
+ homepage?: string;
81
+ repository?: {
82
+ type?: string;
83
+ url?: string;
84
+ };
85
+ changelog?: string;
86
+ /**
87
+ * Registry publisher handle. Set by registry on publish, not by skill author.
88
+ */
89
+ publisher?: string;
90
+ /**
91
+ * Registry visibility. private until explicitly published.
92
+ */
93
+ visibility?: "public" | "private";
94
+ /**
95
+ * Advisory. Runtime version requirements for scripts bundled in scripts/. Not enforced by GoodBoy — shown to user before install.
96
+ */
97
+ engines?: {
98
+ node?: string;
99
+ python?: string;
100
+ bash?: string;
101
+ deno?: string;
102
+ };
103
+ /**
104
+ * Advisory. Operating systems this skill's scripts are compatible with. Not enforced — shown to user before install.
105
+ *
106
+ * @maxItems 3
107
+ */
108
+ os?: ("darwin" | "linux" | "win32")[];
109
+ /**
110
+ * DECLARED INTENT ONLY — not enforced at runtime. Skill authors declare what their scripts intend to access. GoodBoy displays this to users before install as a trust signal. An empty array or omitted field means no elevated access is claimed.
111
+ *
112
+ * @maxItems 5
113
+ */
114
+ permissions?: ("read_files" | "write_files" | "network" | "shell" | "env")[];
115
+ }
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@goodboyjs/schema",
3
+ "version": "1.0.0",
4
+ "description": "GoodBoy skill manifest JSON Schema and generated TypeScript type definitions",
5
+ "keywords": [
6
+ "claude-code",
7
+ "agent-skills",
8
+ "skill",
9
+ "schema",
10
+ "manifest",
11
+ "json-schema"
12
+ ],
13
+ "homepage": "https://goodboyjs.io",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/xpera-ch/goodboy.git",
17
+ "directory": "packages/schema"
18
+ },
19
+ "bugs": {
20
+ "url": "https://github.com/xpera-ch/goodboy/issues"
21
+ },
22
+ "license": "MIT",
23
+ "types": "./generated/ts/index.d.ts",
24
+ "publishConfig": {
25
+ "access": "public",
26
+ "registry": "https://registry.npmjs.org"
27
+ },
28
+ "files": [
29
+ "src/",
30
+ "versions/",
31
+ "generated/",
32
+ "README.md",
33
+ "LICENSE"
34
+ ],
35
+ "scripts": {
36
+ "generate": "ts-node ../../scripts/generate-types.ts"
37
+ },
38
+ "devDependencies": {
39
+ "json-schema-to-typescript": "^15.0.0",
40
+ "typescript": "^5.5.0"
41
+ }
42
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://goodboy.dev/schemas/manifest/1.0.0",
4
+ "title": "GoodBoy Skill Manifest",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["name", "version", "description", "author", "license", "schema_version", "status"],
8
+ "properties": {
9
+ "name": {
10
+ "type": "string",
11
+ "pattern": "^[a-z0-9-]+$",
12
+ "minLength": 1,
13
+ "maxLength": 64,
14
+ "description": "Must match the skill directory name exactly. Lowercase letters, numbers, and hyphens only."
15
+ },
16
+ "version": {
17
+ "type": "string",
18
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
19
+ "maxLength": 32,
20
+ "description": "Semantic version (semver) of this skill"
21
+ },
22
+ "description": {
23
+ "type": "string",
24
+ "minLength": 1,
25
+ "maxLength": 1024,
26
+ "description": "What this skill does and when to use it. Used for registry search and display."
27
+ },
28
+ "author": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": ["name"],
32
+ "properties": {
33
+ "name": { "type": "string", "maxLength": 128 },
34
+ "email": { "type": "string", "format": "email", "maxLength": 254 },
35
+ "url": { "type": "string", "format": "uri", "maxLength": 2048 }
36
+ }
37
+ },
38
+ "license": {
39
+ "type": "string",
40
+ "maxLength": 64,
41
+ "description": "SPDX license identifier e.g. MIT, Apache-2.0"
42
+ },
43
+ "schema_version": {
44
+ "type": "string",
45
+ "const": "1.0.0",
46
+ "description": "GoodBoy manifest schema version. Always 1.0.0 for v1."
47
+ },
48
+ "status": {
49
+ "type": "string",
50
+ "enum": ["experimental", "stable", "deprecated"],
51
+ "default": "experimental",
52
+ "description": "Maturity signal for registry display and filtering"
53
+ },
54
+ "keywords": {
55
+ "type": "array",
56
+ "items": { "type": "string", "maxLength": 64 },
57
+ "maxItems": 10,
58
+ "uniqueItems": true,
59
+ "description": "Free-form search terms"
60
+ },
61
+ "category": {
62
+ "type": "string",
63
+ "enum": ["code", "writing", "data", "devops", "testing", "documentation", "productivity", "security", "research", "other"],
64
+ "description": "Primary category for registry browsing"
65
+ },
66
+ "tags": {
67
+ "type": "array",
68
+ "items": {
69
+ "type": "string",
70
+ "enum": ["code-review", "testing", "documentation", "git", "deployment", "security", "refactoring", "architecture", "debugging", "productivity", "writing", "data", "devops", "agent", "orchestration", "formatting", "analysis", "research", "workflow", "other"]
71
+ },
72
+ "maxItems": 5,
73
+ "uniqueItems": true,
74
+ "description": "Controlled vocabulary for registry faceted search. Unlike keywords, tags are a fixed enumeration owned by GoodBoy."
75
+ },
76
+ "homepage": {
77
+ "type": "string",
78
+ "format": "uri",
79
+ "maxLength": 2048
80
+ },
81
+ "repository": {
82
+ "type": "object",
83
+ "additionalProperties": false,
84
+ "properties": {
85
+ "type": { "type": "string", "maxLength": 32 },
86
+ "url": { "type": "string", "format": "uri", "maxLength": 2048 }
87
+ }
88
+ },
89
+ "changelog": {
90
+ "type": "string",
91
+ "format": "uri",
92
+ "maxLength": 2048
93
+ },
94
+ "publisher": {
95
+ "type": "string",
96
+ "maxLength": 128,
97
+ "description": "Registry publisher handle. Set by registry on publish, not by skill author."
98
+ },
99
+ "visibility": {
100
+ "type": "string",
101
+ "enum": ["public", "private"],
102
+ "default": "private",
103
+ "description": "Registry visibility. private until explicitly published."
104
+ },
105
+ "engines": {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "maxProperties": 4,
109
+ "properties": {
110
+ "node": { "type": "string", "maxLength": 32 },
111
+ "python": { "type": "string", "maxLength": 32 },
112
+ "bash": { "type": "string", "maxLength": 32 },
113
+ "deno": { "type": "string", "maxLength": 32 }
114
+ },
115
+ "description": "Advisory. Runtime version requirements for scripts bundled in scripts/. Not enforced by GoodBoy — shown to user before install."
116
+ },
117
+ "os": {
118
+ "type": "array",
119
+ "items": { "type": "string", "enum": ["darwin", "linux", "win32"] },
120
+ "maxItems": 3,
121
+ "uniqueItems": true,
122
+ "description": "Advisory. Operating systems this skill's scripts are compatible with. Not enforced — shown to user before install."
123
+ },
124
+ "permissions": {
125
+ "type": "array",
126
+ "items": { "type": "string", "enum": ["read_files", "write_files", "network", "shell", "env"] },
127
+ "maxItems": 5,
128
+ "uniqueItems": true,
129
+ "description": "DECLARED INTENT ONLY — not enforced at runtime. Skill authors declare what their scripts intend to access. GoodBoy displays this to users before install as a trust signal. An empty array or omitted field means no elevated access is claimed."
130
+ }
131
+ }
132
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://goodboy.dev/schemas/manifest/1.0.0",
4
+ "title": "GoodBoy Skill Manifest",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["name", "version", "description", "author", "license", "schema_version", "status"],
8
+ "properties": {
9
+ "name": {
10
+ "type": "string",
11
+ "pattern": "^[a-z0-9-]+$",
12
+ "minLength": 1,
13
+ "maxLength": 64,
14
+ "description": "Must match the skill directory name exactly. Lowercase letters, numbers, and hyphens only."
15
+ },
16
+ "version": {
17
+ "type": "string",
18
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
19
+ "maxLength": 32,
20
+ "description": "Semantic version (semver) of this skill"
21
+ },
22
+ "description": {
23
+ "type": "string",
24
+ "minLength": 1,
25
+ "maxLength": 1024,
26
+ "description": "What this skill does and when to use it. Used for registry search and display."
27
+ },
28
+ "author": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": ["name"],
32
+ "properties": {
33
+ "name": { "type": "string", "maxLength": 128 },
34
+ "email": { "type": "string", "format": "email", "maxLength": 254 },
35
+ "url": { "type": "string", "format": "uri", "maxLength": 2048 }
36
+ }
37
+ },
38
+ "license": {
39
+ "type": "string",
40
+ "maxLength": 64,
41
+ "description": "SPDX license identifier e.g. MIT, Apache-2.0"
42
+ },
43
+ "schema_version": {
44
+ "type": "string",
45
+ "const": "1.0.0",
46
+ "description": "GoodBoy manifest schema version. Always 1.0.0 for v1."
47
+ },
48
+ "status": {
49
+ "type": "string",
50
+ "enum": ["experimental", "stable", "deprecated"],
51
+ "default": "experimental",
52
+ "description": "Maturity signal for registry display and filtering"
53
+ },
54
+ "keywords": {
55
+ "type": "array",
56
+ "items": { "type": "string", "maxLength": 64 },
57
+ "maxItems": 10,
58
+ "uniqueItems": true,
59
+ "description": "Free-form search terms"
60
+ },
61
+ "category": {
62
+ "type": "string",
63
+ "enum": ["code", "writing", "data", "devops", "testing", "documentation", "productivity", "security", "research", "other"],
64
+ "description": "Primary category for registry browsing"
65
+ },
66
+ "tags": {
67
+ "type": "array",
68
+ "items": {
69
+ "type": "string",
70
+ "enum": ["code-review", "testing", "documentation", "git", "deployment", "security", "refactoring", "architecture", "debugging", "productivity", "writing", "data", "devops", "agent", "orchestration", "formatting", "analysis", "research", "workflow", "other"]
71
+ },
72
+ "maxItems": 5,
73
+ "uniqueItems": true,
74
+ "description": "Controlled vocabulary for registry faceted search. Unlike keywords, tags are a fixed enumeration owned by GoodBoy."
75
+ },
76
+ "homepage": {
77
+ "type": "string",
78
+ "format": "uri",
79
+ "maxLength": 2048
80
+ },
81
+ "repository": {
82
+ "type": "object",
83
+ "additionalProperties": false,
84
+ "properties": {
85
+ "type": { "type": "string", "maxLength": 32 },
86
+ "url": { "type": "string", "format": "uri", "maxLength": 2048 }
87
+ }
88
+ },
89
+ "changelog": {
90
+ "type": "string",
91
+ "format": "uri",
92
+ "maxLength": 2048
93
+ },
94
+ "publisher": {
95
+ "type": "string",
96
+ "maxLength": 128,
97
+ "description": "Registry publisher handle. Set by registry on publish, not by skill author."
98
+ },
99
+ "visibility": {
100
+ "type": "string",
101
+ "enum": ["public", "private"],
102
+ "default": "private",
103
+ "description": "Registry visibility. private until explicitly published."
104
+ },
105
+ "engines": {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "maxProperties": 4,
109
+ "properties": {
110
+ "node": { "type": "string", "maxLength": 32 },
111
+ "python": { "type": "string", "maxLength": 32 },
112
+ "bash": { "type": "string", "maxLength": 32 },
113
+ "deno": { "type": "string", "maxLength": 32 }
114
+ },
115
+ "description": "Advisory. Runtime version requirements for scripts bundled in scripts/. Not enforced by GoodBoy — shown to user before install."
116
+ },
117
+ "os": {
118
+ "type": "array",
119
+ "items": { "type": "string", "enum": ["darwin", "linux", "win32"] },
120
+ "maxItems": 3,
121
+ "uniqueItems": true,
122
+ "description": "Advisory. Operating systems this skill's scripts are compatible with. Not enforced — shown to user before install."
123
+ },
124
+ "permissions": {
125
+ "type": "array",
126
+ "items": { "type": "string", "enum": ["read_files", "write_files", "network", "shell", "env"] },
127
+ "maxItems": 5,
128
+ "uniqueItems": true,
129
+ "description": "DECLARED INTENT ONLY — not enforced at runtime. Skill authors declare what their scripts intend to access. GoodBoy displays this to users before install as a trust signal. An empty array or omitted field means no elevated access is claimed."
130
+ }
131
+ }
132
+ }