@agentproto/corpus-cli 0.1.0-alpha.1 → 0.1.0-alpha.2

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 (48) hide show
  1. package/dist/cli.mjs +26 -8
  2. package/dist/cli.mjs.map +1 -1
  3. package/dist/index.d.ts +1 -5
  4. package/dist/index.mjs +15 -4
  5. package/dist/index.mjs.map +1 -1
  6. package/dist/specs/resources/aip-10/draft/KNOWLEDGE.schema.json +457 -0
  7. package/dist/specs/resources/aip-11/draft/LESSON.schema.json +149 -0
  8. package/dist/specs/resources/aip-12/draft/PLAYBOOK.schema.json +349 -0
  9. package/dist/specs/resources/aip-13/draft/WORK_ITEM.schema.json +547 -0
  10. package/dist/specs/resources/aip-14/draft/TOOL.schema.json +169 -0
  11. package/dist/specs/resources/aip-15/draft/WORKFLOW.schema.json +356 -0
  12. package/dist/specs/resources/aip-16/draft/IO.schema.json +64 -0
  13. package/dist/specs/resources/aip-17/draft/RUNNER.schema.json +81 -0
  14. package/dist/specs/resources/aip-18/draft/COLLECTION.schema.json +436 -0
  15. package/dist/specs/resources/aip-19/draft/SECRETS.schema.json +261 -0
  16. package/dist/specs/resources/aip-20/draft/WORK.schema.json +371 -0
  17. package/dist/specs/resources/aip-21/draft/AGENCY.schema.json +454 -0
  18. package/dist/specs/resources/aip-22/draft/OFFICE.schema.json +390 -0
  19. package/dist/specs/resources/aip-23/draft/IDENTITY.schema.json +358 -0
  20. package/dist/specs/resources/aip-24/draft/ASSEMBLY.schema.json +411 -0
  21. package/dist/specs/resources/aip-25/draft/PERSONA.schema.json +257 -0
  22. package/dist/specs/resources/aip-26/draft/CODE.schema.json +172 -0
  23. package/dist/specs/resources/aip-28/draft/INTENT.schema.json +215 -0
  24. package/dist/specs/resources/aip-29/draft/CLI.schema.json +339 -0
  25. package/dist/specs/resources/aip-3/draft/SKILL.schema.json +206 -0
  26. package/dist/specs/resources/aip-30/draft/DRIVER.schema.json +237 -0
  27. package/dist/specs/resources/aip-31/draft/HTTP.schema.json +80 -0
  28. package/dist/specs/resources/aip-32/draft/MCP.schema.json +88 -0
  29. package/dist/specs/resources/aip-33/draft/SDK.schema.json +60 -0
  30. package/dist/specs/resources/aip-34/draft/WORKSPACE.schema.json +252 -0
  31. package/dist/specs/resources/aip-35/draft/STORAGE.schema.json +237 -0
  32. package/dist/specs/resources/aip-36/draft/SANDBOX.schema.json +246 -0
  33. package/dist/specs/resources/aip-38/draft/POLICY.schema.json +217 -0
  34. package/dist/specs/resources/aip-39/draft/ACTION.schema.json +134 -0
  35. package/dist/specs/resources/aip-4/draft/DESIGN.schema.json +189 -0
  36. package/dist/specs/resources/aip-40/draft/EXTENSION.schema.json +116 -0
  37. package/dist/specs/resources/aip-41/draft/ROUTINE.schema.json +345 -0
  38. package/dist/specs/resources/aip-42/draft/AGENT.schema.json +268 -0
  39. package/dist/specs/resources/aip-44/draft/ACP.schema.json +170 -0
  40. package/dist/specs/resources/aip-45/draft/AGENT-CLI.schema.json +371 -0
  41. package/dist/specs/resources/aip-47/draft/ROLE.schema.json +199 -0
  42. package/dist/specs/resources/aip-48/draft/MultiAgentRuntime.schema.json +108 -0
  43. package/dist/specs/resources/aip-5/draft/TEMPLATE.schema.json +231 -0
  44. package/dist/specs/resources/aip-6/draft/COMPANY.schema.json +268 -0
  45. package/dist/specs/resources/aip-7/draft/GOVERNANCE.schema.json +581 -0
  46. package/dist/specs/resources/aip-8/draft/AGENCY.schema.json +518 -0
  47. package/dist/specs/resources/aip-9/draft/OPERATOR.schema.json +297 -0
  48. package/package.json +4 -4
@@ -0,0 +1,339 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agentproto.sh/docs/aip-29/CLI.schema.json",
4
+ "title": "CLI.md frontmatter — agentcli/v1",
5
+ "description": "JSON Schema for the YAML frontmatter of an AIP-29 CLI.md manifest.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["name", "id", "description", "version", "bin", "install", "version_check", "sandbox", "commands"],
9
+ "properties": {
10
+ "name": { "type": "string", "minLength": 1, "maxLength": 80 },
11
+ "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9\\-]{1,63}$" },
12
+ "description": { "type": "string", "minLength": 1, "maxLength": 2000 },
13
+ "version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+(?:[-+][\\w.\\-]+)?$" },
14
+ "bin": { "type": "string", "pattern": "^[A-Za-z0-9._\\-/]+$" },
15
+ "bin_args": { "type": "array", "items": { "type": "string" } },
16
+ "install": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "items": { "$ref": "#/$defs/installMethod" }
20
+ },
21
+ "version_check": { "$ref": "#/$defs/versionCheck" },
22
+ "setup": {
23
+ "type": "array",
24
+ "description": "Ordered, idempotent post-install configuration steps. Run once after `install` and before the bundle is considered ready. Each step has a `kind` discriminator. Hosts MUST persist completion state per `(bundle.id, workspace.id, user.id)` so steps don't re-run on every invocation; `skip_if` allows in-band re-checks.",
25
+ "items": { "$ref": "#/$defs/setupStep" }
26
+ },
27
+ "auth": { "$ref": "#/$defs/auth" },
28
+ "runner": {
29
+ "oneOf": [
30
+ { "type": "string", "description": "Workspace-relative path to a RUNNER.md (AIP-17)." },
31
+ { "type": "object", "description": "Inline AIP-17 runner block." }
32
+ ]
33
+ },
34
+ "sandbox": { "$ref": "#/$defs/sandbox" },
35
+ "output": { "$ref": "#/$defs/output" },
36
+ "commands": { "$ref": "#/$defs/commandTree" },
37
+ "actions": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "object",
41
+ "additionalProperties": false,
42
+ "required": ["ref"],
43
+ "properties": { "ref": { "type": "string" } }
44
+ }
45
+ },
46
+ "requires": {
47
+ "type": "object",
48
+ "additionalProperties": false,
49
+ "properties": {
50
+ "os": { "type": "array", "items": { "type": "string", "enum": ["darwin", "linux", "windows"] } },
51
+ "arch": { "type": "array", "items": { "type": "string", "enum": ["x64", "arm64", "x86", "arm"] } },
52
+ "min_disk_mb": { "type": "integer", "minimum": 0 },
53
+ "min_memory_mb": { "type": "integer", "minimum": 0 }
54
+ }
55
+ },
56
+ "examples": {
57
+ "type": "array",
58
+ "items": {
59
+ "type": "object",
60
+ "additionalProperties": false,
61
+ "required": ["goal", "cmd"],
62
+ "properties": {
63
+ "goal": { "type": "string" },
64
+ "cmd": { "type": "string" },
65
+ "note": { "type": "string" }
66
+ }
67
+ }
68
+ },
69
+ "tags": {
70
+ "type": "array",
71
+ "items": { "type": "string", "pattern": "^[a-z0-9][a-z0-9\\-]{0,63}$" },
72
+ "uniqueItems": true
73
+ },
74
+ "metadata": { "type": "object" }
75
+ },
76
+ "$defs": {
77
+ "installMethod": {
78
+ "oneOf": [
79
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "brew" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
80
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "apt" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
81
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "dnf" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
82
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "pacman" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
83
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "choco" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
84
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "scoop" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
85
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "npm" }, "package": { "type": "string" }, "global": { "type": "boolean" }, "experimental": { "type": "boolean" } } },
86
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "pip" }, "package": { "type": "string" }, "user": { "type": "boolean" }, "experimental": { "type": "boolean" } } },
87
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "cargo" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
88
+ { "type": "object", "additionalProperties": false, "required": ["method", "package"], "properties": { "method": { "const": "go" }, "package": { "type": "string" }, "experimental": { "type": "boolean" } } },
89
+ { "type": "object", "additionalProperties": false, "required": ["method", "url"], "properties": { "method": { "const": "curl" }, "url": { "type": "string", "format": "uri" }, "verify_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "experimental": { "type": "boolean" } } },
90
+ { "type": "object", "additionalProperties": false, "required": ["method", "url", "extract_bin"], "properties": { "method": { "const": "download" }, "url": { "type": "string", "format": "uri" }, "extract_bin": { "type": "string" }, "verify_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "experimental": { "type": "boolean" } } },
91
+ { "type": "object", "additionalProperties": false, "required": ["method", "path"], "properties": { "method": { "const": "vendored" }, "path": { "type": "string" }, "experimental": { "type": "boolean" } } }
92
+ ]
93
+ },
94
+ "versionCheck": {
95
+ "type": "object",
96
+ "additionalProperties": false,
97
+ "required": ["cmd", "parse", "range"],
98
+ "properties": {
99
+ "cmd": { "type": "string" },
100
+ "parse": { "type": "string", "description": "ECMAScript regex with at least one capture group." },
101
+ "range": { "type": "string", "description": "npm-style semver range." },
102
+ "timeout_ms": { "type": "integer", "minimum": 100, "default": 5000 }
103
+ }
104
+ },
105
+ "auth": {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "properties": {
109
+ "ref": { "type": "string", "description": "Workspace-relative path to SECRETS.md (AIP-19)." },
110
+ "state": {
111
+ "type": "object",
112
+ "additionalProperties": false,
113
+ "properties": {
114
+ "paths": { "type": "array", "items": { "type": "string" } },
115
+ "env": { "type": "array", "items": { "type": "string" } }
116
+ }
117
+ },
118
+ "login": {
119
+ "type": "object",
120
+ "additionalProperties": false,
121
+ "required": ["cmd"],
122
+ "properties": {
123
+ "cmd": { "type": "string" },
124
+ "interactive": { "type": "boolean" },
125
+ "requires_callback_url": { "type": "boolean" },
126
+ "completes_when": {
127
+ "type": "object",
128
+ "additionalProperties": false,
129
+ "required": ["cmd"],
130
+ "properties": {
131
+ "cmd": { "type": "string" },
132
+ "exit_code": { "type": "integer" }
133
+ }
134
+ }
135
+ }
136
+ },
137
+ "refresh": {
138
+ "type": "object",
139
+ "additionalProperties": false,
140
+ "required": ["cmd"],
141
+ "properties": {
142
+ "cmd": { "type": "string" },
143
+ "every": { "type": "string", "pattern": "^P(?:T)?\\S+$", "description": "ISO-8601 duration." }
144
+ }
145
+ },
146
+ "expiry": {
147
+ "type": "object",
148
+ "additionalProperties": false,
149
+ "properties": {
150
+ "detect": { "type": "string", "pattern": "^exit_code:\\d+$" }
151
+ }
152
+ }
153
+ }
154
+ },
155
+ "setupStep": {
156
+ "description": "One step in the post-install setup pipeline. Discriminated by `kind`. Steps run in declared order; failures abort the pipeline.",
157
+ "oneOf": [
158
+ {
159
+ "type": "object",
160
+ "additionalProperties": false,
161
+ "required": ["id", "kind", "cmd"],
162
+ "properties": {
163
+ "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9\\-]{0,63}$", "description": "Stable per-step identifier; appears in audit logs and the host's setup ledger." },
164
+ "kind": { "const": "cmd", "description": "Run a shell command. Useful for installers, daemon bootstraps, health checks." },
165
+ "cmd": { "type": "string", "description": "Command to run. Hosts MUST shell-escape any interpolated values from prior steps (`${input.X}`, `${secrets.X}`)." },
166
+ "description": { "type": "string", "maxLength": 2000 },
167
+ "skip_if": { "$ref": "#/$defs/skipIf" },
168
+ "timeout_ms": { "type": "integer", "minimum": 100, "default": 60000 },
169
+ "interactive": { "type": "boolean", "default": false, "description": "When true, the host MUST attach a PTY; useful for `openclaw onboard` style installers that draw a TUI." },
170
+ "persist": { "$ref": "#/$defs/setupPersist", "description": "When the cmd's stdout / parsed output should be captured into a secret slot or env var." }
171
+ }
172
+ },
173
+ {
174
+ "type": "object",
175
+ "additionalProperties": false,
176
+ "required": ["id", "kind", "prompt"],
177
+ "properties": {
178
+ "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9\\-]{0,63}$" },
179
+ "kind": { "const": "prompt", "description": "Ask the user for a value. Surface adapter renders the appropriate UI (text input, select, confirm, masked secret)." },
180
+ "prompt": { "type": "string", "description": "Question text shown to the user." },
181
+ "description": { "type": "string", "maxLength": 2000 },
182
+ "type": { "type": "string", "enum": ["text", "select", "boolean", "secret"], "default": "text" },
183
+ "default": { "type": "string", "description": "Pre-filled value the user may accept by pressing Enter." },
184
+ "options": {
185
+ "description": "For `type: select`, either a static enum or a command whose stdout produces the choices (one per line, optional `value\\tlabel` tab-separated).",
186
+ "oneOf": [
187
+ { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1 },
188
+ {
189
+ "type": "object",
190
+ "additionalProperties": false,
191
+ "required": ["cmd"],
192
+ "properties": {
193
+ "cmd": { "type": "string" },
194
+ "timeout_ms": { "type": "integer", "minimum": 100, "default": 30000 }
195
+ }
196
+ }
197
+ ]
198
+ },
199
+ "skip_if": { "$ref": "#/$defs/skipIf" },
200
+ "persist": { "$ref": "#/$defs/setupPersist" }
201
+ }
202
+ },
203
+ {
204
+ "type": "object",
205
+ "additionalProperties": false,
206
+ "required": ["id", "kind", "secret_slug"],
207
+ "properties": {
208
+ "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9\\-]{0,63}$" },
209
+ "kind": { "const": "oauth", "description": "Drive an AIP-19 OAuth flow. Host opens the consent URL, exchanges the callback, stores tokens in the named SECRETS.md slug." },
210
+ "secret_slug": { "type": "string", "minLength": 2, "maxLength": 80, "description": "Slug declared in the bundle's SECRETS.md with `kind: oauth`." },
211
+ "description": { "type": "string", "maxLength": 2000 },
212
+ "skip_if": { "$ref": "#/$defs/skipIf" }
213
+ }
214
+ },
215
+ {
216
+ "type": "object",
217
+ "additionalProperties": false,
218
+ "required": ["id", "kind", "url"],
219
+ "properties": {
220
+ "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9\\-]{0,63}$" },
221
+ "kind": { "const": "external", "description": "Open a URL and wait for an external action — manual token paste, OAuth-like callback, or a third-party UI choice (Discord channel pick, Slack workspace bind)." },
222
+ "url": { "type": "string", "format": "uri", "description": "URL the host opens in the user's browser. May contain `${input.X}` interpolations from earlier steps." },
223
+ "description": { "type": "string", "maxLength": 2000 },
224
+ "callback": {
225
+ "type": "object",
226
+ "description": "When the external flow returns to a host-allocated callback URL, this declares how to read the result.",
227
+ "additionalProperties": false,
228
+ "properties": {
229
+ "param": { "type": "string", "description": "Query-string parameter holding the result value (e.g. `code` or `channel_id`)." },
230
+ "timeout_ms": { "type": "integer", "minimum": 1000, "default": 600000 }
231
+ }
232
+ },
233
+ "skip_if": { "$ref": "#/$defs/skipIf" },
234
+ "persist": { "$ref": "#/$defs/setupPersist" }
235
+ }
236
+ }
237
+ ]
238
+ },
239
+ "skipIf": {
240
+ "type": "object",
241
+ "description": "Health check that, when matching, skips the enclosing step. Lets re-runs of `agentproto setup <slug>` be idempotent without storing extra state.",
242
+ "additionalProperties": false,
243
+ "required": ["cmd"],
244
+ "properties": {
245
+ "cmd": { "type": "string" },
246
+ "exit_code": { "type": "integer", "default": 0, "description": "Skip the step when the cmd exits with this code. Default 0." },
247
+ "timeout_ms": { "type": "integer", "minimum": 100, "default": 5000 }
248
+ }
249
+ },
250
+ "setupPersist": {
251
+ "type": "object",
252
+ "description": "How the step's resulting value reaches future invocations of the bundle. Exactly one of `env` / `secret_slug` / `cmd` MUST be present.",
253
+ "additionalProperties": false,
254
+ "properties": {
255
+ "env": { "type": "string", "description": "Env var the runner injects on every spawn (lifted from the workspace secrets store, never logged)." },
256
+ "secret_slug": { "type": "string", "minLength": 2, "maxLength": 80, "description": "AIP-19 secret slug to write into. Use when the value is sensitive and the bundle's SECRETS.md declares the slug." },
257
+ "cmd": { "type": "string", "description": "Run this command with `${value}` substituted by the captured value. Use for CLIs that expect their own config command (e.g. `openclaw config set gateway.remote.token ${value}`)." }
258
+ },
259
+ "oneOf": [
260
+ { "required": ["env"] },
261
+ { "required": ["secret_slug"] },
262
+ { "required": ["cmd"] }
263
+ ]
264
+ },
265
+ "sandbox": {
266
+ "type": "object",
267
+ "additionalProperties": false,
268
+ "required": ["network", "fs", "exec", "env"],
269
+ "properties": {
270
+ "network": {
271
+ "type": "object",
272
+ "additionalProperties": false,
273
+ "properties": {
274
+ "egress": { "type": "array", "items": { "type": "string" } },
275
+ "ingress": { "type": "array", "items": { "type": "string" } }
276
+ }
277
+ },
278
+ "fs": {
279
+ "type": "object",
280
+ "additionalProperties": false,
281
+ "properties": {
282
+ "read": { "type": "array", "items": { "type": "string" } },
283
+ "write": { "type": "array", "items": { "type": "string" } },
284
+ "deny": { "type": "array", "items": { "type": "string" } }
285
+ }
286
+ },
287
+ "exec": {
288
+ "type": "object",
289
+ "additionalProperties": false,
290
+ "required": ["allow"],
291
+ "properties": {
292
+ "allow": { "type": "boolean" },
293
+ "spawn": { "type": "array", "items": { "type": "string" } }
294
+ }
295
+ },
296
+ "env": {
297
+ "type": "object",
298
+ "additionalProperties": false,
299
+ "properties": {
300
+ "pass": { "type": "array", "items": { "type": "string" } },
301
+ "set": { "type": "object", "additionalProperties": { "type": "string" } }
302
+ }
303
+ },
304
+ "tty": {
305
+ "type": "object",
306
+ "additionalProperties": false,
307
+ "properties": {
308
+ "required": { "type": "boolean" }
309
+ }
310
+ }
311
+ }
312
+ },
313
+ "output": {
314
+ "type": "object",
315
+ "additionalProperties": false,
316
+ "properties": {
317
+ "default_format": { "type": "string", "enum": ["text", "json", "yaml", "binary"] },
318
+ "json_flag": { "type": "string" },
319
+ "json_flag_args": { "type": "array", "items": { "type": "string" } },
320
+ "exit_codes": {
321
+ "type": "object",
322
+ "additionalProperties": { "type": "string", "pattern": "^[a-z][a-z0-9_]+$" },
323
+ "propertyNames": { "pattern": "^\\d+$" }
324
+ },
325
+ "stream": { "type": "string", "enum": ["stdout", "stderr", "mixed"] },
326
+ "error_stream": { "type": "string", "enum": ["stdout", "stderr", "mixed"] }
327
+ }
328
+ },
329
+ "commandTree": {
330
+ "type": "object",
331
+ "additionalProperties": {
332
+ "oneOf": [
333
+ { "type": "string", "description": "Workspace-relative path to a TOOL.md (AIP-14)." },
334
+ { "$ref": "#/$defs/commandTree" }
335
+ ]
336
+ }
337
+ }
338
+ }
339
+ }
@@ -0,0 +1,206 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agentproto.sh/schemas/aip-3/SKILL.schema.json",
4
+ "title": "SKILL.md frontmatter (AIP-3)",
5
+ "description": "Validates the YAML frontmatter portion of an AIP-3 SKILL.md manifest. AIP-3 is a profile of agentskills.io: top-level fields mirror the upstream agentskills.io specification (name, description, license, compatibility, allowed-tools, metadata). AIP-3-specific extensions live under `metadata.aip3.*` so a skill authored against AIP-3 remains a valid agentskills.io skill in any conformant runtime (Claude Code, Cursor, Goose, Letta, OpenCode, Junie, Hermes Agent, OpenAI Codex, etc.). Note: this very schema is exercised by the AIP-3 authoring SKILL.md in the same folder — the authoring skill is itself a valid AIP-3 skill and validates against this file.",
6
+ "type": "object",
7
+ "required": ["name", "description"],
8
+ "additionalProperties": true,
9
+ "properties": {
10
+ "name": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "maxLength": 64,
14
+ "pattern": "^[a-z0-9](?:[a-z0-9]|-(?!-))*[a-z0-9]$|^[a-z0-9]$",
15
+ "description": "Machine identifier. 1–64 chars, lowercase alphanumeric and hyphens only, no leading/trailing/consecutive hyphens. MUST equal the parent directory name. Inherited verbatim from agentskills.io."
16
+ },
17
+ "description": {
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "maxLength": 1024,
21
+ "description": "One-paragraph purpose, written for the LLM caller. SHOULD describe both what the skill does and when to use it. Inherited from agentskills.io (1024-char cap)."
22
+ },
23
+ "license": {
24
+ "type": "string",
25
+ "maxLength": 200,
26
+ "description": "Optional. License identifier (e.g. SPDX 'MIT', 'Apache-2.0') or a pointer to a bundled license file (e.g. 'LICENSE.txt has complete terms'). Inherited from agentskills.io."
27
+ },
28
+ "compatibility": {
29
+ "type": "string",
30
+ "minLength": 1,
31
+ "maxLength": 500,
32
+ "description": "Optional. Free-form environment requirements: intended product, required system packages, network access, etc. Most skills omit this. Inherited from agentskills.io."
33
+ },
34
+ "allowed-tools": {
35
+ "type": "string",
36
+ "description": "Optional. Space-separated list of pre-approved tool patterns (e.g. 'Bash(git:*) Bash(jq:*) Read'). Experimental upstream — runtimes MAY ignore. The field is a request, not a grant: runtimes apply policy mediation before honoring it. Inherited from agentskills.io."
37
+ },
38
+ "metadata": {
39
+ "type": "object",
40
+ "additionalProperties": true,
41
+ "default": {},
42
+ "description": "Free-form key-value mapping. Hosts and standards stash extension fields under namespaced keys (e.g. `metadata.aip3.*`, `metadata.acme.*`). Inherited from agentskills.io.",
43
+ "properties": {
44
+ "aip3": {
45
+ "$ref": "#/$defs/Aip3Extensions"
46
+ }
47
+ }
48
+ }
49
+ },
50
+ "$defs": {
51
+ "Aip3Extensions": {
52
+ "type": "object",
53
+ "additionalProperties": true,
54
+ "description": "AIP-3 extensions to the agentskills.io baseline. Runtimes that don't implement AIP-3 MUST preserve this object verbatim (it lives in agentskills.io's `metadata`).",
55
+ "properties": {
56
+ "schema": {
57
+ "const": "skills/v1",
58
+ "description": "Schema dispatch tag. Required for AIP-3 conformance. Pinned to 'skills/v1' for the current spec version."
59
+ },
60
+ "variant": {
61
+ "enum": ["instruction", "executable", "composite"],
62
+ "default": "instruction",
63
+ "description": "Skill variant. `instruction` is prose-only (default); `executable` bundles runnable code via `execution`; `composite` references other skills via `uses`."
64
+ },
65
+ "version": {
66
+ "type": "string",
67
+ "pattern": "^\\d+\\.\\d+\\.\\d+(?:[-+][a-zA-Z0-9.-]+)?$",
68
+ "description": "Semver. Bump on breaking changes to the skill's behavior or required tools."
69
+ },
70
+ "tags": {
71
+ "type": "array",
72
+ "items": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$" },
73
+ "default": [],
74
+ "maxItems": 12,
75
+ "description": "Catalog tags. Lowercase kebab-case; no leading symbols. 3–6 tags is typical."
76
+ },
77
+ "category": {
78
+ "type": "string",
79
+ "minLength": 1,
80
+ "maxLength": 64,
81
+ "description": "Coarse grouping (e.g. 'productivity', 'creative', 'development'). Free-form; runtimes SHOULD NOT enumerate."
82
+ },
83
+ "requires": {
84
+ "type": "array",
85
+ "items": { "type": "integer", "minimum": 1 },
86
+ "default": [],
87
+ "description": "Other AIPs this skill depends on (e.g. `[9]` for the operator runtime). Runtimes MAY warn when a declared dependency is unsupported."
88
+ },
89
+ "author": {
90
+ "type": "string",
91
+ "maxLength": 200,
92
+ "description": "Optional. Conventional shape: 'Name <email>' or stable handle. Mirrors the agentskills.io `metadata.author` convention; if both are present, `metadata.aip3.author` wins for AIP-3 runtimes."
93
+ },
94
+ "title": {
95
+ "type": "string",
96
+ "minLength": 1,
97
+ "maxLength": 120,
98
+ "description": "Optional human-readable display title. Headless runtimes that can't render the body H1 MAY use this. The body H1 is preferred."
99
+ },
100
+ "uses": {
101
+ "type": "array",
102
+ "items": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9]|-(?!-))*[a-z0-9]$|^[a-z0-9]$" },
103
+ "default": [],
104
+ "description": "Skill names this skill composes with. Required and non-empty when variant=composite."
105
+ },
106
+ "execution": {
107
+ "type": "object",
108
+ "required": ["language", "code"],
109
+ "additionalProperties": false,
110
+ "description": "Executable bindings. Required when variant=executable.",
111
+ "properties": {
112
+ "language": {
113
+ "enum": ["typescript", "javascript", "python", "shell"],
114
+ "description": "Implementation language. Runtimes MAY refuse languages they don't support."
115
+ },
116
+ "code": {
117
+ "oneOf": [
118
+ {
119
+ "type": "object",
120
+ "required": ["file"],
121
+ "additionalProperties": false,
122
+ "properties": {
123
+ "file": {
124
+ "type": "string",
125
+ "minLength": 1,
126
+ "description": "Relative path to the entry file. SHOULD live under `scripts/`. Path traversal (`..` segments escaping the skill dir) MUST be rejected."
127
+ }
128
+ }
129
+ },
130
+ {
131
+ "type": "object",
132
+ "required": ["inline"],
133
+ "additionalProperties": false,
134
+ "properties": {
135
+ "inline": {
136
+ "type": "string",
137
+ "description": "Inline source. Runtimes MUST sandbox before executing."
138
+ }
139
+ }
140
+ }
141
+ ],
142
+ "description": "Exactly one of { file } or { inline }. File paths are relative to SKILL.md."
143
+ },
144
+ "entrypoint": {
145
+ "type": "string",
146
+ "minLength": 1,
147
+ "description": "Optional function name within the entry file."
148
+ },
149
+ "runtime": {
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "properties": {
153
+ "provider": {
154
+ "type": "string",
155
+ "description": "Optional execution backend hint (e.g. 'modal', 'daytona', 'vercel-sandbox', 'local')."
156
+ },
157
+ "timeout": {
158
+ "type": "integer",
159
+ "minimum": 1,
160
+ "description": "Maximum execution time in milliseconds. Runtimes MUST enforce."
161
+ },
162
+ "memory": {
163
+ "type": "string",
164
+ "description": "Memory cap, e.g. '512MB', '2GB'."
165
+ }
166
+ }
167
+ },
168
+ "artifacts": {
169
+ "type": "object",
170
+ "additionalProperties": false,
171
+ "required": ["patterns"],
172
+ "properties": {
173
+ "patterns": {
174
+ "type": "array",
175
+ "items": { "type": "string" },
176
+ "minItems": 1,
177
+ "description": "Glob patterns of output files the runtime should capture."
178
+ }
179
+ }
180
+ },
181
+ "dependencies": {
182
+ "type": "object",
183
+ "additionalProperties": { "type": "string" },
184
+ "description": "Package -> version map (e.g. lockfile-style)."
185
+ }
186
+ }
187
+ }
188
+ },
189
+ "allOf": [
190
+ {
191
+ "if": { "properties": { "variant": { "const": "executable" } }, "required": ["variant"] },
192
+ "then": { "required": ["execution"] }
193
+ },
194
+ {
195
+ "if": { "properties": { "variant": { "const": "composite" } }, "required": ["variant"] },
196
+ "then": {
197
+ "properties": {
198
+ "uses": { "type": "array", "minItems": 1 }
199
+ },
200
+ "required": ["uses"]
201
+ }
202
+ }
203
+ ]
204
+ }
205
+ }
206
+ }