@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 +21 -0
- package/README.md +23 -0
- package/generated/ts/index.d.ts +115 -0
- package/package.json +42 -0
- package/src/manifest.schema.json +132 -0
- package/versions/v1/manifest.schema.json +132 -0
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
|
+
}
|