@a1st/aix-schema 0.0.4 → 0.0.12

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/schema.json CHANGED
@@ -1,1408 +1,1326 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://x.a1st.dev/schemas/v1/ai.json",
4
- "title": "ai.json Configuration",
5
- "description": "Configuration file for aix - unified AI agent and editor configuration",
6
- "$ref": "#/definitions/AiJsonConfig",
7
- "definitions": {
8
- "AiJsonConfig": {
9
- "type": "object",
10
- "properties": {
11
- "$schema": {
12
- "type": "string",
13
- "format": "uri",
14
- "description": "URL to JSON Schema for validation"
15
- },
16
- "extends": {
17
- "anyOf": [
18
- {
19
- "type": "string",
20
- "description": "Single config to extend (npm package or local path)"
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://x.a1st.dev/schemas/v1/ai.json",
4
+ "title": "ai.json Configuration",
5
+ "description": "Configuration file for aix - unified AI agent and editor configuration",
6
+ "$ref": "#/definitions/AiJsonConfig",
7
+ "definitions": {
8
+ "AiJsonConfig": {
9
+ "type": "object",
10
+ "properties": {
11
+ "$schema": {
12
+ "type": "string",
13
+ "format": "uri",
14
+ "description": "URL to JSON Schema for validation"
21
15
  },
22
- {
23
- "type": "array",
24
- "items": {
25
- "type": "string"
26
- },
27
- "description": "Array of configs to extend (resolved in order)"
28
- }
29
- ],
30
- "description": "Extend from other ai.json configs"
31
- },
32
- "skills": {
33
- "type": "object",
34
- "additionalProperties": {
35
- "anyOf": [
36
- {
37
- "anyOf": [
16
+ "extends": {
17
+ "anyOf": [
38
18
  {
39
- "anyOf": [
40
- {
41
- "type": "string",
42
- "description": "Shorthand: version range or local path"
43
- },
44
- {
45
- "type": "object",
46
- "properties": {
47
- "git": {
48
- "type": "string",
49
- "description": "Git URL (e.g., \"github:user/repo\", \"https://...\")"
50
- },
51
- "ref": {
52
- "type": "string",
53
- "description": "Git ref (branch, tag, commit)"
54
- },
55
- "path": {
56
- "type": "string",
57
- "description": "Subdirectory within repo"
58
- }
59
- },
60
- "required": [
61
- "git"
62
- ],
63
- "additionalProperties": false
64
- },
65
- {
66
- "type": "object",
67
- "properties": {
68
- "path": {
69
- "type": "string",
70
- "description": "Local file or directory path"
71
- }
72
- },
73
- "required": [
74
- "path"
75
- ],
76
- "additionalProperties": false
77
- },
78
- {
79
- "type": "object",
80
- "properties": {
81
- "version": {
82
- "type": "string",
83
- "description": "Version range from registry"
84
- },
85
- "registry": {
86
- "type": "string",
87
- "format": "uri",
88
- "description": "Custom registry URL"
89
- }
90
- },
91
- "required": [
92
- "version"
93
- ],
94
- "additionalProperties": false
95
- }
96
- ],
97
- "description": "Reference to a skill, config, or resource"
19
+ "type": "string",
20
+ "description": "Single config to extend (npm package or local path)"
98
21
  },
99
22
  {
100
- "type": "object",
101
- "properties": {
102
- "source": {
103
- "anyOf": [
104
- {
105
- "type": "string",
106
- "description": "Shorthand: version range or local path"
107
- },
108
- {
109
- "type": "object",
110
- "properties": {
111
- "git": {
112
- "type": "string",
113
- "description": "Git URL (e.g., \"github:user/repo\", \"https://...\")"
114
- },
115
- "ref": {
116
- "type": "string",
117
- "description": "Git ref (branch, tag, commit)"
118
- },
119
- "path": {
120
- "type": "string",
121
- "description": "Subdirectory within repo"
122
- }
123
- },
124
- "required": [
125
- "git"
126
- ],
127
- "additionalProperties": false
128
- },
129
- {
130
- "type": "object",
131
- "properties": {
132
- "path": {
133
- "type": "string",
134
- "description": "Local file or directory path"
135
- }
136
- },
137
- "required": [
138
- "path"
139
- ],
140
- "additionalProperties": false
141
- },
142
- {
143
- "type": "object",
144
- "properties": {
145
- "version": {
146
- "type": "string",
147
- "description": "Version range from registry"
148
- },
149
- "registry": {
150
- "type": "string",
151
- "format": "uri",
152
- "description": "Custom registry URL"
153
- }
154
- },
155
- "required": [
156
- "version"
157
- ],
158
- "additionalProperties": false
159
- }
160
- ],
161
- "description": "Where to load the skill from"
162
- },
163
- "enabled": {
164
- "type": "boolean",
165
- "default": true,
166
- "description": "Whether skill is active"
167
- },
168
- "config": {
169
- "type": "object",
170
- "additionalProperties": {},
171
- "description": "Skill-specific configuration"
172
- }
173
- },
174
- "required": [
175
- "source"
176
- ],
177
- "additionalProperties": false
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string"
26
+ },
27
+ "description": "Array of configs to extend (resolved in order)"
178
28
  }
179
- ],
180
- "description": "Skill reference (Agent Skills spec compliant)"
181
- },
182
- {
183
- "type": "boolean",
184
- "const": false
185
- }
186
- ]
187
- },
188
- "propertyNames": {
189
- "minLength": 1,
190
- "maxLength": 64,
191
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
192
- },
193
- "description": "Map of skill names to their configurations (or false to disable)",
194
- "default": {}
195
- },
196
- "mcp": {
197
- "type": "object",
198
- "additionalProperties": {
199
- "anyOf": [
200
- {
201
- "anyOf": [
202
- {
203
- "type": "object",
204
- "properties": {
205
- "enabled": {
206
- "type": "boolean",
207
- "description": "Whether server is active (default: true)"
208
- },
209
- "tools": {
210
- "anyOf": [
211
- {
212
- "type": "array",
213
- "items": {
214
- "type": "string"
215
- },
216
- "description": "Allowed tool names"
217
- },
218
- {
219
- "type": "object",
220
- "properties": {
221
- "include": {
222
- "type": "array",
223
- "items": {
224
- "type": "string"
225
- },
226
- "description": "Tools to include"
227
- },
228
- "exclude": {
229
- "type": "array",
230
- "items": {
231
- "type": "string"
232
- },
233
- "description": "Tools to exclude"
234
- }
235
- },
236
- "additionalProperties": false
237
- }
238
- ],
239
- "description": "Tool access control"
240
- },
241
- "disabledTools": {
242
- "type": "array",
243
- "items": {
244
- "type": "string"
245
- },
246
- "description": "Tools to disable (Windsurf format)"
247
- },
248
- "resources": {
249
- "anyOf": [
250
- {
251
- "type": "array",
252
- "items": {
253
- "type": "string"
254
- },
255
- "description": "Allowed resource patterns (glob)"
256
- },
257
- {
258
- "type": "object",
259
- "properties": {
260
- "include": {
261
- "type": "array",
262
- "items": {
263
- "type": "string"
264
- },
265
- "description": "Resource patterns to include"
266
- },
267
- "exclude": {
268
- "type": "array",
269
- "items": {
270
- "type": "string"
271
- },
272
- "description": "Resource patterns to exclude"
273
- }
274
- },
275
- "additionalProperties": false
276
- }
277
- ],
278
- "description": "Resource access control"
279
- },
280
- "autoStart": {
281
- "type": "boolean",
282
- "description": "Start with editor (default: true)"
283
- },
284
- "restartOnFailure": {
285
- "type": "boolean",
286
- "description": "Auto-restart on crash (default: true)"
287
- },
288
- "maxRestarts": {
289
- "type": "integer",
290
- "exclusiveMinimum": 0,
291
- "description": "Max restart attempts (default: 3)"
292
- },
293
- "command": {
294
- "type": "string",
295
- "description": "Command to execute"
296
- },
297
- "args": {
298
- "type": "array",
299
- "items": {
300
- "type": "string"
301
- },
302
- "description": "Command arguments"
303
- },
304
- "env": {
305
- "type": "object",
306
- "additionalProperties": {
307
- "type": "string",
308
- "description": "Environment variable value. Use ${VAR_NAME} for dynamic resolution."
309
- },
310
- "description": "Environment variables"
311
- },
312
- "cwd": {
313
- "type": "string",
314
- "description": "Working directory"
315
- },
316
- "shell": {
317
- "type": "boolean",
318
- "description": "Run in shell"
319
- }
320
- },
321
- "required": [
322
- "command"
323
- ],
324
- "additionalProperties": false
325
- },
326
- {
327
- "type": "object",
328
- "properties": {
329
- "enabled": {
330
- "type": "boolean",
331
- "description": "Whether server is active (default: true)"
332
- },
333
- "tools": {
334
- "anyOf": [
335
- {
336
- "type": "array",
337
- "items": {
338
- "type": "string"
339
- },
340
- "description": "Allowed tool names"
341
- },
342
- {
343
- "type": "object",
344
- "properties": {
345
- "include": {
346
- "type": "array",
347
- "items": {
348
- "type": "string"
349
- },
350
- "description": "Tools to include"
351
- },
352
- "exclude": {
353
- "type": "array",
354
- "items": {
355
- "type": "string"
356
- },
357
- "description": "Tools to exclude"
358
- }
359
- },
360
- "additionalProperties": false
361
- }
362
- ],
363
- "description": "Tool access control"
364
- },
365
- "disabledTools": {
366
- "type": "array",
367
- "items": {
368
- "type": "string"
369
- },
370
- "description": "Tools to disable (Windsurf format)"
371
- },
372
- "resources": {
29
+ ],
30
+ "description": "Extend from other ai.json configs"
31
+ },
32
+ "skills": {
33
+ "type": "object",
34
+ "additionalProperties": {
35
+ "anyOf": [
36
+ {
373
37
  "anyOf": [
374
- {
375
- "type": "array",
376
- "items": {
377
- "type": "string"
378
- },
379
- "description": "Allowed resource patterns (glob)"
380
- },
381
- {
382
- "type": "object",
383
- "properties": {
384
- "include": {
385
- "type": "array",
386
- "items": {
387
- "type": "string"
388
- },
389
- "description": "Resource patterns to include"
390
- },
391
- "exclude": {
392
- "type": "array",
393
- "items": {
394
- "type": "string"
395
- },
396
- "description": "Resource patterns to exclude"
397
- }
398
- },
399
- "additionalProperties": false
400
- }
401
- ],
402
- "description": "Resource access control"
403
- },
404
- "autoStart": {
405
- "type": "boolean",
406
- "description": "Start with editor (default: true)"
407
- },
408
- "restartOnFailure": {
409
- "type": "boolean",
410
- "description": "Auto-restart on crash (default: true)"
411
- },
412
- "maxRestarts": {
413
- "type": "integer",
414
- "exclusiveMinimum": 0,
415
- "description": "Max restart attempts (default: 3)"
416
- },
417
- "url": {
418
- "type": "string",
419
- "format": "uri",
420
- "description": "MCP endpoint URL (Streamable HTTP)"
421
- },
422
- "headers": {
423
- "type": "object",
424
- "additionalProperties": {
425
- "type": "string",
426
- "description": "Environment variable value. Use ${VAR_NAME} for dynamic resolution."
427
- },
428
- "description": "HTTP headers"
429
- },
430
- "timeout": {
431
- "type": "number",
432
- "exclusiveMinimum": 0,
433
- "description": "Connection timeout (ms)"
434
- },
435
- "validateOrigin": {
436
- "type": "boolean",
437
- "description": "Validate Origin header (security)"
438
- }
439
- },
440
- "required": [
441
- "url"
442
- ],
443
- "additionalProperties": false
444
- }
445
- ]
446
- },
447
- {
448
- "type": "boolean",
449
- "const": false
450
- }
451
- ]
452
- },
453
- "propertyNames": {
454
- "minLength": 1
455
- },
456
- "description": "Map of MCP server names to configurations (or false to disable)",
457
- "default": {}
458
- },
459
- "rules": {
460
- "type": "object",
461
- "additionalProperties": {
462
- "anyOf": [
463
- {
464
- "anyOf": [
465
- {
466
- "type": "string",
467
- "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
468
- },
469
- {
470
- "type": "object",
471
- "properties": {
472
- "description": {
473
- "type": "string",
474
- "description": "When the rule should apply (required for auto mode)"
475
- },
476
- "activation": {
477
- "type": "string",
478
- "enum": [
479
- "always",
480
- "auto",
481
- "glob",
482
- "manual"
483
- ],
484
- "default": "always",
485
- "description": "When the rule should be activated"
486
- },
487
- "globs": {
488
- "type": "array",
489
- "items": {
490
- "type": "string"
491
- },
492
- "description": "File patterns (required for glob mode)"
493
- },
494
- "content": {
495
- "type": "string",
496
- "description": "Inline rule content"
497
- },
498
- "path": {
499
- "type": "string",
500
- "description": "Local file path to rule content"
501
- },
502
- "git": {
503
- "type": "object",
504
- "properties": {
505
- "url": {
506
- "type": "string",
507
- "description": "Git repository URL or shorthand (e.g., github:user/repo)"
508
- },
509
- "path": {
510
- "type": "string",
511
- "description": "Path to rule file within repo (default: root)"
512
- },
513
- "ref": {
514
- "type": "string",
515
- "description": "Branch, tag, or commit (default: main/master)"
516
- }
517
- },
518
- "required": [
519
- "url"
520
- ],
521
- "additionalProperties": false,
522
- "description": "Git repository source"
523
- },
524
- "npm": {
525
- "type": "object",
526
- "properties": {
527
- "npm": {
528
- "type": "string",
529
- "description": "NPM package name (e.g., \"@company/rules\")"
530
- },
531
- "path": {
532
- "type": "string",
533
- "description": "Path to file within package (e.g., \"rules/style.md\")"
534
- },
535
- "version": {
536
- "type": "string",
537
- "description": "Version to auto-install (omit to use project node_modules)"
538
- }
539
- },
540
- "required": [
541
- "npm",
542
- "path"
543
- ],
544
- "additionalProperties": false,
545
- "description": "NPM package source"
546
- }
547
- },
548
- "additionalProperties": false,
549
- "description": "Rule with metadata and content source"
550
- }
551
- ]
552
- },
553
- {
554
- "type": "boolean",
555
- "const": false
556
- }
557
- ]
558
- },
559
- "propertyNames": {
560
- "minLength": 1,
561
- "maxLength": 64,
562
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
563
- },
564
- "description": "Map of rule names to their definitions (or false to disable)",
565
- "default": {}
566
- },
567
- "prompts": {
568
- "type": "object",
569
- "additionalProperties": {
570
- "anyOf": [
571
- {
572
- "anyOf": [
573
- {
574
- "type": "string",
575
- "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
576
- },
577
- {
578
- "type": "object",
579
- "properties": {
580
- "description": {
581
- "type": "string",
582
- "description": "Shown in command picker"
583
- },
584
- "argumentHint": {
585
- "type": "string",
586
- "description": "Hint for arguments (e.g., \"[file] [message]\")"
587
- },
588
- "content": {
589
- "type": "string",
590
- "description": "Inline prompt content"
591
- },
592
- "path": {
593
- "type": "string",
594
- "description": "Local file path to prompt content"
595
- },
596
- "git": {
597
- "type": "object",
598
- "properties": {
599
- "url": {
600
- "type": "string",
601
- "description": "Git repository URL or shorthand (e.g., github:user/repo)"
602
- },
603
- "path": {
604
- "type": "string",
605
- "description": "Path to rule file within repo (default: root)"
606
- },
607
- "ref": {
608
- "type": "string",
609
- "description": "Branch, tag, or commit (default: main/master)"
610
- }
611
- },
612
- "required": [
613
- "url"
614
- ],
615
- "additionalProperties": false,
616
- "description": "Git repository source"
617
- },
618
- "npm": {
619
- "type": "object",
620
- "properties": {
621
- "npm": {
622
- "type": "string",
623
- "description": "NPM package name (e.g., \"@company/rules\")"
624
- },
625
- "path": {
626
- "type": "string",
627
- "description": "Path to file within package (e.g., \"rules/style.md\")"
628
- },
629
- "version": {
630
- "type": "string",
631
- "description": "Version to auto-install (omit to use project node_modules)"
632
- }
633
- },
634
- "required": [
635
- "npm",
636
- "path"
637
- ],
638
- "additionalProperties": false,
639
- "description": "NPM package source"
640
- }
641
- },
642
- "additionalProperties": false,
643
- "description": "Prompt/command definition"
644
- }
645
- ]
646
- },
647
- {
648
- "type": "boolean",
649
- "const": false
650
- }
651
- ]
652
- },
653
- "propertyNames": {
654
- "minLength": 1,
655
- "maxLength": 64,
656
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
657
- },
658
- "description": "Map of prompt names to their definitions (or false to disable)",
659
- "default": {}
660
- },
661
- "editors": {
662
- "anyOf": [
663
- {
664
- "type": "array",
665
- "items": {
666
- "anyOf": [
667
- {
668
- "type": "string",
669
- "enum": [
670
- "windsurf",
671
- "cursor",
672
- "claude-code",
673
- "vscode",
674
- "zed",
675
- "neovim"
676
- ],
677
- "description": "Supported editor/agent"
678
- },
679
- {
680
- "type": "object",
681
- "additionalProperties": {
682
- "type": "object",
683
- "properties": {
684
- "enabled": {
685
- "type": "boolean",
686
- "default": true,
687
- "description": "Whether to configure this editor"
688
- },
689
- "rules": {
690
- "type": "object",
691
- "additionalProperties": {
692
- "anyOf": [
693
- {
694
- "anyOf": [
695
- {
38
+ {
39
+ "anyOf": [
40
+ {
696
41
  "type": "string",
697
- "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
698
- },
699
- {
42
+ "description": "Shorthand: version range or local path"
43
+ },
44
+ {
700
45
  "type": "object",
701
46
  "properties": {
702
- "description": {
703
- "type": "string",
704
- "description": "When the rule should apply (required for auto mode)"
705
- },
706
- "activation": {
707
- "type": "string",
708
- "enum": [
709
- "always",
710
- "auto",
711
- "glob",
712
- "manual"
713
- ],
714
- "default": "always",
715
- "description": "When the rule should be activated"
716
- },
717
- "globs": {
718
- "type": "array",
719
- "items": {
720
- "type": "string"
721
- },
722
- "description": "File patterns (required for glob mode)"
723
- },
724
- "content": {
725
- "type": "string",
726
- "description": "Inline rule content"
727
- },
728
- "path": {
729
- "type": "string",
730
- "description": "Local file path to rule content"
731
- },
732
- "git": {
733
- "type": "object",
734
- "properties": {
735
- "url": {
736
- "type": "string",
737
- "description": "Git repository URL or shorthand (e.g., github:user/repo)"
738
- },
739
- "path": {
740
- "type": "string",
741
- "description": "Path to rule file within repo (default: root)"
47
+ "git": {
48
+ "type": "string",
49
+ "description": "Git URL (e.g., \"github:user/repo\", \"https://...\")"
50
+ },
51
+ "ref": {
52
+ "type": "string",
53
+ "description": "Git ref (branch, tag, commit)"
54
+ },
55
+ "path": {
56
+ "type": "string",
57
+ "description": "Subdirectory within repo"
58
+ }
59
+ },
60
+ "required": ["git"],
61
+ "additionalProperties": false
62
+ },
63
+ {
64
+ "type": "object",
65
+ "properties": {
66
+ "path": {
67
+ "type": "string",
68
+ "description": "Local file or directory path"
69
+ }
70
+ },
71
+ "required": ["path"],
72
+ "additionalProperties": false
73
+ },
74
+ {
75
+ "type": "object",
76
+ "properties": {
77
+ "version": {
78
+ "type": "string",
79
+ "description": "Version range from registry"
80
+ },
81
+ "registry": {
82
+ "type": "string",
83
+ "format": "uri",
84
+ "description": "Custom registry URL"
85
+ }
86
+ },
87
+ "required": ["version"],
88
+ "additionalProperties": false
89
+ }
90
+ ],
91
+ "description": "Reference to a skill, config, or resource"
92
+ },
93
+ {
94
+ "type": "object",
95
+ "properties": {
96
+ "source": {
97
+ "anyOf": [
98
+ {
99
+ "type": "string",
100
+ "description": "Shorthand: version range or local path"
101
+ },
102
+ {
103
+ "type": "object",
104
+ "properties": {
105
+ "git": {
106
+ "type": "string",
107
+ "description": "Git URL (e.g., \"github:user/repo\", \"https://...\")"
108
+ },
109
+ "ref": {
110
+ "type": "string",
111
+ "description": "Git ref (branch, tag, commit)"
112
+ },
113
+ "path": {
114
+ "type": "string",
115
+ "description": "Subdirectory within repo"
116
+ }
742
117
  },
743
- "ref": {
744
- "type": "string",
745
- "description": "Branch, tag, or commit (default: main/master)"
746
- }
747
- },
748
- "required": [
749
- "url"
750
- ],
751
- "additionalProperties": false,
752
- "description": "Git repository source"
753
- },
754
- "npm": {
755
- "type": "object",
756
- "properties": {
757
- "npm": {
758
- "type": "string",
759
- "description": "NPM package name (e.g., \"@company/rules\")"
118
+ "required": ["git"],
119
+ "additionalProperties": false
120
+ },
121
+ {
122
+ "type": "object",
123
+ "properties": {
124
+ "path": {
125
+ "type": "string",
126
+ "description": "Local file or directory path"
127
+ }
760
128
  },
761
- "path": {
762
- "type": "string",
763
- "description": "Path to file within package (e.g., \"rules/style.md\")"
129
+ "required": ["path"],
130
+ "additionalProperties": false
131
+ },
132
+ {
133
+ "type": "object",
134
+ "properties": {
135
+ "version": {
136
+ "type": "string",
137
+ "description": "Version range from registry"
138
+ },
139
+ "registry": {
140
+ "type": "string",
141
+ "format": "uri",
142
+ "description": "Custom registry URL"
143
+ }
764
144
  },
765
- "version": {
766
- "type": "string",
767
- "description": "Version to auto-install (omit to use project node_modules)"
768
- }
769
- },
770
- "required": [
771
- "npm",
772
- "path"
773
- ],
774
- "additionalProperties": false,
775
- "description": "NPM package source"
776
- }
777
- },
778
- "additionalProperties": false,
779
- "description": "Rule with metadata and content source"
780
- }
781
- ]
145
+ "required": ["version"],
146
+ "additionalProperties": false
147
+ }
148
+ ],
149
+ "description": "Where to load the skill from"
150
+ },
151
+ "enabled": {
152
+ "type": "boolean",
153
+ "default": true,
154
+ "description": "Whether skill is active"
155
+ },
156
+ "config": {
157
+ "type": "object",
158
+ "additionalProperties": {},
159
+ "description": "Skill-specific configuration"
160
+ }
782
161
  },
783
- {
784
- "type": "boolean",
785
- "const": false
786
- }
787
- ]
788
- },
789
- "propertyNames": {
790
- "minLength": 1,
791
- "maxLength": 64,
792
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
793
- },
794
- "description": "Editor-specific rules (in addition to global rules)"
795
- }
796
- },
797
- "additionalProperties": false
798
- }
799
- }
800
- ]
801
- },
802
- "description": "Shorthand: array of editor names or configs"
162
+ "required": ["source"],
163
+ "additionalProperties": false
164
+ }
165
+ ],
166
+ "description": "Skill reference (Agent Skills spec compliant)"
167
+ },
168
+ {
169
+ "type": "boolean",
170
+ "const": false
171
+ }
172
+ ]
173
+ },
174
+ "propertyNames": {
175
+ "minLength": 1,
176
+ "maxLength": 64,
177
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
178
+ },
179
+ "description": "Map of skill names to their configurations (or false to disable)",
180
+ "default": {}
803
181
  },
804
- {
805
- "type": "object",
806
- "properties": {
807
- "windsurf": {
808
- "type": "object",
809
- "properties": {
810
- "enabled": {
811
- "type": "boolean",
812
- "default": true,
813
- "description": "Whether to configure this editor"
814
- },
815
- "rules": {
816
- "type": "object",
817
- "additionalProperties": {
182
+ "mcp": {
183
+ "type": "object",
184
+ "additionalProperties": {
185
+ "anyOf": [
186
+ {
818
187
  "anyOf": [
819
- {
820
- "anyOf": [
821
- {
822
- "type": "string",
823
- "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
824
- },
825
- {
826
- "type": "object",
827
- "properties": {
828
- "description": {
829
- "type": "string",
830
- "description": "When the rule should apply (required for auto mode)"
831
- },
832
- "activation": {
833
- "type": "string",
834
- "enum": [
835
- "always",
836
- "auto",
837
- "glob",
838
- "manual"
188
+ {
189
+ "type": "object",
190
+ "properties": {
191
+ "enabled": {
192
+ "type": "boolean",
193
+ "description": "Whether server is active (default: true)"
194
+ },
195
+ "tools": {
196
+ "anyOf": [
197
+ {
198
+ "type": "array",
199
+ "items": {
200
+ "type": "string"
201
+ },
202
+ "description": "Allowed tool names"
203
+ },
204
+ {
205
+ "type": "object",
206
+ "properties": {
207
+ "include": {
208
+ "type": "array",
209
+ "items": {
210
+ "type": "string"
211
+ },
212
+ "description": "Tools to include"
213
+ },
214
+ "exclude": {
215
+ "type": "array",
216
+ "items": {
217
+ "type": "string"
218
+ },
219
+ "description": "Tools to exclude"
220
+ }
221
+ },
222
+ "additionalProperties": false
223
+ }
839
224
  ],
840
- "default": "always",
841
- "description": "When the rule should be activated"
842
- },
843
- "globs": {
225
+ "description": "Tool access control"
226
+ },
227
+ "disabledTools": {
844
228
  "type": "array",
845
229
  "items": {
846
- "type": "string"
230
+ "type": "string"
847
231
  },
848
- "description": "File patterns (required for glob mode)"
849
- },
850
- "content": {
851
- "type": "string",
852
- "description": "Inline rule content"
853
- },
854
- "path": {
232
+ "description": "Tools to disable (Windsurf format)"
233
+ },
234
+ "resources": {
235
+ "anyOf": [
236
+ {
237
+ "type": "array",
238
+ "items": {
239
+ "type": "string"
240
+ },
241
+ "description": "Allowed resource patterns (glob)"
242
+ },
243
+ {
244
+ "type": "object",
245
+ "properties": {
246
+ "include": {
247
+ "type": "array",
248
+ "items": {
249
+ "type": "string"
250
+ },
251
+ "description": "Resource patterns to include"
252
+ },
253
+ "exclude": {
254
+ "type": "array",
255
+ "items": {
256
+ "type": "string"
257
+ },
258
+ "description": "Resource patterns to exclude"
259
+ }
260
+ },
261
+ "additionalProperties": false
262
+ }
263
+ ],
264
+ "description": "Resource access control"
265
+ },
266
+ "autoStart": {
267
+ "type": "boolean",
268
+ "description": "Start with editor (default: true)"
269
+ },
270
+ "restartOnFailure": {
271
+ "type": "boolean",
272
+ "description": "Auto-restart on crash (default: true)"
273
+ },
274
+ "maxRestarts": {
275
+ "type": "integer",
276
+ "exclusiveMinimum": 0,
277
+ "description": "Max restart attempts (default: 3)"
278
+ },
279
+ "command": {
855
280
  "type": "string",
856
- "description": "Local file path to rule content"
857
- },
858
- "git": {
281
+ "description": "Command to execute"
282
+ },
283
+ "args": {
284
+ "type": "array",
285
+ "items": {
286
+ "type": "string"
287
+ },
288
+ "description": "Command arguments"
289
+ },
290
+ "env": {
859
291
  "type": "object",
860
- "properties": {
861
- "url": {
862
- "type": "string",
863
- "description": "Git repository URL or shorthand (e.g., github:user/repo)"
864
- },
865
- "path": {
866
- "type": "string",
867
- "description": "Path to rule file within repo (default: root)"
868
- },
869
- "ref": {
870
- "type": "string",
871
- "description": "Branch, tag, or commit (default: main/master)"
872
- }
292
+ "additionalProperties": {
293
+ "type": "string",
294
+ "description": "Environment variable value. Use ${VAR_NAME} for dynamic resolution."
873
295
  },
874
- "required": [
875
- "url"
296
+ "description": "Environment variables"
297
+ },
298
+ "cwd": {
299
+ "type": "string",
300
+ "description": "Working directory"
301
+ },
302
+ "shell": {
303
+ "type": "boolean",
304
+ "description": "Run in shell"
305
+ }
306
+ },
307
+ "required": ["command"],
308
+ "additionalProperties": false
309
+ },
310
+ {
311
+ "type": "object",
312
+ "properties": {
313
+ "enabled": {
314
+ "type": "boolean",
315
+ "description": "Whether server is active (default: true)"
316
+ },
317
+ "tools": {
318
+ "anyOf": [
319
+ {
320
+ "type": "array",
321
+ "items": {
322
+ "type": "string"
323
+ },
324
+ "description": "Allowed tool names"
325
+ },
326
+ {
327
+ "type": "object",
328
+ "properties": {
329
+ "include": {
330
+ "type": "array",
331
+ "items": {
332
+ "type": "string"
333
+ },
334
+ "description": "Tools to include"
335
+ },
336
+ "exclude": {
337
+ "type": "array",
338
+ "items": {
339
+ "type": "string"
340
+ },
341
+ "description": "Tools to exclude"
342
+ }
343
+ },
344
+ "additionalProperties": false
345
+ }
876
346
  ],
877
- "additionalProperties": false,
878
- "description": "Git repository source"
879
- },
880
- "npm": {
881
- "type": "object",
882
- "properties": {
883
- "npm": {
884
- "type": "string",
885
- "description": "NPM package name (e.g., \"@company/rules\")"
886
- },
887
- "path": {
888
- "type": "string",
889
- "description": "Path to file within package (e.g., \"rules/style.md\")"
890
- },
891
- "version": {
892
- "type": "string",
893
- "description": "Version to auto-install (omit to use project node_modules)"
894
- }
347
+ "description": "Tool access control"
348
+ },
349
+ "disabledTools": {
350
+ "type": "array",
351
+ "items": {
352
+ "type": "string"
895
353
  },
896
- "required": [
897
- "npm",
898
- "path"
354
+ "description": "Tools to disable (Windsurf format)"
355
+ },
356
+ "resources": {
357
+ "anyOf": [
358
+ {
359
+ "type": "array",
360
+ "items": {
361
+ "type": "string"
362
+ },
363
+ "description": "Allowed resource patterns (glob)"
364
+ },
365
+ {
366
+ "type": "object",
367
+ "properties": {
368
+ "include": {
369
+ "type": "array",
370
+ "items": {
371
+ "type": "string"
372
+ },
373
+ "description": "Resource patterns to include"
374
+ },
375
+ "exclude": {
376
+ "type": "array",
377
+ "items": {
378
+ "type": "string"
379
+ },
380
+ "description": "Resource patterns to exclude"
381
+ }
382
+ },
383
+ "additionalProperties": false
384
+ }
899
385
  ],
900
- "additionalProperties": false,
901
- "description": "NPM package source"
902
- }
903
- },
904
- "additionalProperties": false,
905
- "description": "Rule with metadata and content source"
906
- }
907
- ]
908
- },
909
- {
910
- "type": "boolean",
911
- "const": false
912
- }
386
+ "description": "Resource access control"
387
+ },
388
+ "autoStart": {
389
+ "type": "boolean",
390
+ "description": "Start with editor (default: true)"
391
+ },
392
+ "restartOnFailure": {
393
+ "type": "boolean",
394
+ "description": "Auto-restart on crash (default: true)"
395
+ },
396
+ "maxRestarts": {
397
+ "type": "integer",
398
+ "exclusiveMinimum": 0,
399
+ "description": "Max restart attempts (default: 3)"
400
+ },
401
+ "url": {
402
+ "type": "string",
403
+ "format": "uri",
404
+ "description": "MCP endpoint URL (Streamable HTTP)"
405
+ },
406
+ "headers": {
407
+ "type": "object",
408
+ "additionalProperties": {
409
+ "type": "string",
410
+ "description": "Environment variable value. Use ${VAR_NAME} for dynamic resolution."
411
+ },
412
+ "description": "HTTP headers"
413
+ },
414
+ "timeout": {
415
+ "type": "number",
416
+ "exclusiveMinimum": 0,
417
+ "description": "Connection timeout (ms)"
418
+ },
419
+ "validateOrigin": {
420
+ "type": "boolean",
421
+ "description": "Validate Origin header (security)"
422
+ }
423
+ },
424
+ "required": ["url"],
425
+ "additionalProperties": false
426
+ }
913
427
  ]
914
- },
915
- "propertyNames": {
916
- "minLength": 1,
917
- "maxLength": 64,
918
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
919
- },
920
- "description": "Editor-specific rules (in addition to global rules)"
921
- },
922
- "cascadeSettings": {
923
- "type": "object",
924
- "additionalProperties": {},
925
- "description": "Windsurf Cascade settings"
926
- }
927
- },
928
- "additionalProperties": false
929
- },
930
- "cursor": {
931
- "type": "object",
932
- "properties": {
933
- "enabled": {
934
- "type": "boolean",
935
- "default": true,
936
- "description": "Whether to configure this editor"
937
- },
938
- "rules": {
939
- "type": "object",
940
- "additionalProperties": {
428
+ },
429
+ {
430
+ "type": "boolean",
431
+ "const": false
432
+ }
433
+ ]
434
+ },
435
+ "propertyNames": {
436
+ "minLength": 1
437
+ },
438
+ "description": "Map of MCP server names to configurations (or false to disable)",
439
+ "default": {}
440
+ },
441
+ "rules": {
442
+ "type": "object",
443
+ "additionalProperties": {
444
+ "anyOf": [
445
+ {
941
446
  "anyOf": [
942
- {
943
- "anyOf": [
944
- {
945
- "type": "string",
946
- "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
947
- },
948
- {
949
- "type": "object",
950
- "properties": {
951
- "description": {
447
+ {
448
+ "type": "string",
449
+ "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
450
+ },
451
+ {
452
+ "type": "object",
453
+ "properties": {
454
+ "description": {
952
455
  "type": "string",
953
456
  "description": "When the rule should apply (required for auto mode)"
954
- },
955
- "activation": {
457
+ },
458
+ "activation": {
956
459
  "type": "string",
957
- "enum": [
958
- "always",
959
- "auto",
960
- "glob",
961
- "manual"
962
- ],
460
+ "enum": ["always", "auto", "glob", "manual"],
963
461
  "default": "always",
964
462
  "description": "When the rule should be activated"
965
- },
966
- "globs": {
463
+ },
464
+ "globs": {
967
465
  "type": "array",
968
466
  "items": {
969
- "type": "string"
467
+ "type": "string"
970
468
  },
971
469
  "description": "File patterns (required for glob mode)"
972
- },
973
- "content": {
470
+ },
471
+ "content": {
974
472
  "type": "string",
975
473
  "description": "Inline rule content"
976
- },
977
- "path": {
474
+ },
475
+ "path": {
978
476
  "type": "string",
979
477
  "description": "Local file path to rule content"
980
- },
981
- "git": {
478
+ },
479
+ "git": {
982
480
  "type": "object",
983
481
  "properties": {
984
- "url": {
985
- "type": "string",
986
- "description": "Git repository URL or shorthand (e.g., github:user/repo)"
987
- },
988
- "path": {
989
- "type": "string",
990
- "description": "Path to rule file within repo (default: root)"
991
- },
992
- "ref": {
993
- "type": "string",
994
- "description": "Branch, tag, or commit (default: main/master)"
995
- }
482
+ "url": {
483
+ "type": "string",
484
+ "description": "Git repository URL or shorthand (e.g., github:user/repo)"
485
+ },
486
+ "path": {
487
+ "type": "string",
488
+ "description": "Path to rule file within repo (default: root)"
489
+ },
490
+ "ref": {
491
+ "type": "string",
492
+ "description": "Branch, tag, or commit (default: main/master)"
493
+ }
996
494
  },
997
- "required": [
998
- "url"
999
- ],
495
+ "required": ["url"],
1000
496
  "additionalProperties": false,
1001
497
  "description": "Git repository source"
1002
- },
1003
- "npm": {
498
+ },
499
+ "npm": {
1004
500
  "type": "object",
1005
501
  "properties": {
1006
- "npm": {
1007
- "type": "string",
1008
- "description": "NPM package name (e.g., \"@company/rules\")"
1009
- },
1010
- "path": {
1011
- "type": "string",
1012
- "description": "Path to file within package (e.g., \"rules/style.md\")"
1013
- },
1014
- "version": {
1015
- "type": "string",
1016
- "description": "Version to auto-install (omit to use project node_modules)"
1017
- }
502
+ "npm": {
503
+ "type": "string",
504
+ "description": "NPM package name (e.g., \"@company/rules\")"
505
+ },
506
+ "path": {
507
+ "type": "string",
508
+ "description": "Path to file within package (e.g., \"rules/style.md\")"
509
+ },
510
+ "version": {
511
+ "type": "string",
512
+ "description": "Version to auto-install (omit to use project node_modules)"
513
+ }
1018
514
  },
1019
- "required": [
1020
- "npm",
1021
- "path"
1022
- ],
515
+ "required": ["npm", "path"],
1023
516
  "additionalProperties": false,
1024
517
  "description": "NPM package source"
1025
- }
1026
- },
1027
- "additionalProperties": false,
1028
- "description": "Rule with metadata and content source"
1029
- }
1030
- ]
1031
- },
1032
- {
1033
- "type": "boolean",
1034
- "const": false
1035
- }
518
+ }
519
+ },
520
+ "additionalProperties": false,
521
+ "description": "Rule with metadata and content source"
522
+ }
1036
523
  ]
1037
- },
1038
- "propertyNames": {
1039
- "minLength": 1,
1040
- "maxLength": 64,
1041
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
1042
- },
1043
- "description": "Editor-specific rules (in addition to global rules)"
1044
- },
1045
- "aiSettings": {
1046
- "type": "object",
1047
- "additionalProperties": {},
1048
- "description": "Cursor AI settings"
1049
- }
1050
- },
1051
- "additionalProperties": false
1052
- },
1053
- "claude-code": {
1054
- "type": "object",
1055
- "properties": {
1056
- "enabled": {
1057
- "type": "boolean",
1058
- "default": true,
1059
- "description": "Whether to configure this editor"
1060
- },
1061
- "rules": {
1062
- "type": "object",
1063
- "additionalProperties": {
524
+ },
525
+ {
526
+ "type": "boolean",
527
+ "const": false
528
+ }
529
+ ]
530
+ },
531
+ "propertyNames": {
532
+ "minLength": 1,
533
+ "maxLength": 64,
534
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
535
+ },
536
+ "description": "Map of rule names to their definitions (or false to disable)",
537
+ "default": {}
538
+ },
539
+ "prompts": {
540
+ "type": "object",
541
+ "additionalProperties": {
542
+ "anyOf": [
543
+ {
1064
544
  "anyOf": [
1065
- {
1066
- "anyOf": [
1067
- {
1068
- "type": "string",
1069
- "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
1070
- },
1071
- {
1072
- "type": "object",
1073
- "properties": {
1074
- "description": {
545
+ {
546
+ "type": "string",
547
+ "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
548
+ },
549
+ {
550
+ "type": "object",
551
+ "properties": {
552
+ "description": {
1075
553
  "type": "string",
1076
- "description": "When the rule should apply (required for auto mode)"
1077
- },
1078
- "activation": {
554
+ "description": "Shown in command picker"
555
+ },
556
+ "argumentHint": {
1079
557
  "type": "string",
1080
- "enum": [
1081
- "always",
1082
- "auto",
1083
- "glob",
1084
- "manual"
1085
- ],
1086
- "default": "always",
1087
- "description": "When the rule should be activated"
1088
- },
1089
- "globs": {
1090
- "type": "array",
1091
- "items": {
1092
- "type": "string"
1093
- },
1094
- "description": "File patterns (required for glob mode)"
1095
- },
1096
- "content": {
558
+ "description": "Hint for arguments (e.g., \"[file] [message]\")"
559
+ },
560
+ "content": {
1097
561
  "type": "string",
1098
- "description": "Inline rule content"
1099
- },
1100
- "path": {
562
+ "description": "Inline prompt content"
563
+ },
564
+ "path": {
1101
565
  "type": "string",
1102
- "description": "Local file path to rule content"
1103
- },
1104
- "git": {
566
+ "description": "Local file path to prompt content"
567
+ },
568
+ "git": {
1105
569
  "type": "object",
1106
570
  "properties": {
1107
- "url": {
1108
- "type": "string",
1109
- "description": "Git repository URL or shorthand (e.g., github:user/repo)"
1110
- },
1111
- "path": {
1112
- "type": "string",
1113
- "description": "Path to rule file within repo (default: root)"
1114
- },
1115
- "ref": {
1116
- "type": "string",
1117
- "description": "Branch, tag, or commit (default: main/master)"
1118
- }
571
+ "url": {
572
+ "type": "string",
573
+ "description": "Git repository URL or shorthand (e.g., github:user/repo)"
574
+ },
575
+ "path": {
576
+ "type": "string",
577
+ "description": "Path to rule file within repo (default: root)"
578
+ },
579
+ "ref": {
580
+ "type": "string",
581
+ "description": "Branch, tag, or commit (default: main/master)"
582
+ }
1119
583
  },
1120
- "required": [
1121
- "url"
1122
- ],
584
+ "required": ["url"],
1123
585
  "additionalProperties": false,
1124
586
  "description": "Git repository source"
1125
- },
1126
- "npm": {
587
+ },
588
+ "npm": {
1127
589
  "type": "object",
1128
590
  "properties": {
1129
- "npm": {
1130
- "type": "string",
1131
- "description": "NPM package name (e.g., \"@company/rules\")"
1132
- },
1133
- "path": {
1134
- "type": "string",
1135
- "description": "Path to file within package (e.g., \"rules/style.md\")"
1136
- },
1137
- "version": {
1138
- "type": "string",
1139
- "description": "Version to auto-install (omit to use project node_modules)"
1140
- }
591
+ "npm": {
592
+ "type": "string",
593
+ "description": "NPM package name (e.g., \"@company/rules\")"
594
+ },
595
+ "path": {
596
+ "type": "string",
597
+ "description": "Path to file within package (e.g., \"rules/style.md\")"
598
+ },
599
+ "version": {
600
+ "type": "string",
601
+ "description": "Version to auto-install (omit to use project node_modules)"
602
+ }
1141
603
  },
1142
- "required": [
1143
- "npm",
1144
- "path"
1145
- ],
604
+ "required": ["npm", "path"],
1146
605
  "additionalProperties": false,
1147
606
  "description": "NPM package source"
1148
- }
1149
- },
1150
- "additionalProperties": false,
1151
- "description": "Rule with metadata and content source"
1152
- }
1153
- ]
1154
- },
1155
- {
1156
- "type": "boolean",
1157
- "const": false
1158
- }
607
+ }
608
+ },
609
+ "additionalProperties": false,
610
+ "description": "Prompt/command definition"
611
+ }
1159
612
  ]
1160
- },
1161
- "propertyNames": {
1162
- "minLength": 1,
1163
- "maxLength": 64,
1164
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
1165
- },
1166
- "description": "Editor-specific rules (in addition to global rules)"
1167
- },
1168
- "permissions": {
1169
- "type": "object",
1170
- "additionalProperties": {},
1171
- "description": "Claude Code permissions"
1172
- }
1173
- },
1174
- "additionalProperties": false
1175
- }
1176
- },
1177
- "additionalProperties": {
1178
- "type": "object",
1179
- "properties": {
1180
- "enabled": {
1181
- "type": "boolean",
1182
- "default": true,
1183
- "description": "Whether to configure this editor"
1184
- },
1185
- "rules": {
1186
- "type": "object",
1187
- "additionalProperties": {
1188
- "anyOf": [
1189
- {
1190
- "anyOf": [
1191
- {
613
+ },
614
+ {
615
+ "type": "boolean",
616
+ "const": false
617
+ }
618
+ ]
619
+ },
620
+ "propertyNames": {
621
+ "minLength": 1,
622
+ "maxLength": 64,
623
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
624
+ },
625
+ "description": "Map of prompt names to their definitions (or false to disable)",
626
+ "default": {}
627
+ },
628
+ "editors": {
629
+ "anyOf": [
630
+ {
631
+ "type": "array",
632
+ "items": {
633
+ "anyOf": [
634
+ {
1192
635
  "type": "string",
1193
- "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
1194
- },
1195
- {
636
+ "enum": [
637
+ "windsurf",
638
+ "cursor",
639
+ "claude-code",
640
+ "copilot",
641
+ "zed",
642
+ "neovim"
643
+ ],
644
+ "description": "Supported editor/agent"
645
+ },
646
+ {
1196
647
  "type": "object",
1197
- "properties": {
1198
- "description": {
1199
- "type": "string",
1200
- "description": "When the rule should apply (required for auto mode)"
1201
- },
1202
- "activation": {
1203
- "type": "string",
1204
- "enum": [
1205
- "always",
1206
- "auto",
1207
- "glob",
1208
- "manual"
1209
- ],
1210
- "default": "always",
1211
- "description": "When the rule should be activated"
1212
- },
1213
- "globs": {
1214
- "type": "array",
1215
- "items": {
1216
- "type": "string"
1217
- },
1218
- "description": "File patterns (required for glob mode)"
1219
- },
1220
- "content": {
1221
- "type": "string",
1222
- "description": "Inline rule content"
1223
- },
1224
- "path": {
1225
- "type": "string",
1226
- "description": "Local file path to rule content"
1227
- },
1228
- "git": {
1229
- "type": "object",
1230
- "properties": {
1231
- "url": {
1232
- "type": "string",
1233
- "description": "Git repository URL or shorthand (e.g., github:user/repo)"
648
+ "additionalProperties": {
649
+ "type": "object",
650
+ "properties": {
651
+ "enabled": {
652
+ "type": "boolean",
653
+ "default": true,
654
+ "description": "Whether to configure this editor"
1234
655
  },
1235
- "path": {
1236
- "type": "string",
1237
- "description": "Path to rule file within repo (default: root)"
1238
- },
1239
- "ref": {
1240
- "type": "string",
1241
- "description": "Branch, tag, or commit (default: main/master)"
656
+ "rules": {
657
+ "type": "object",
658
+ "additionalProperties": {
659
+ "anyOf": [
660
+ {
661
+ "anyOf": [
662
+ {
663
+ "type": "string",
664
+ "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
665
+ },
666
+ {
667
+ "type": "object",
668
+ "properties": {
669
+ "description": {
670
+ "type": "string",
671
+ "description": "When the rule should apply (required for auto mode)"
672
+ },
673
+ "activation": {
674
+ "type": "string",
675
+ "enum": [
676
+ "always",
677
+ "auto",
678
+ "glob",
679
+ "manual"
680
+ ],
681
+ "default": "always",
682
+ "description": "When the rule should be activated"
683
+ },
684
+ "globs": {
685
+ "type": "array",
686
+ "items": {
687
+ "type": "string"
688
+ },
689
+ "description": "File patterns (required for glob mode)"
690
+ },
691
+ "content": {
692
+ "type": "string",
693
+ "description": "Inline rule content"
694
+ },
695
+ "path": {
696
+ "type": "string",
697
+ "description": "Local file path to rule content"
698
+ },
699
+ "git": {
700
+ "type": "object",
701
+ "properties": {
702
+ "url": {
703
+ "type": "string",
704
+ "description": "Git repository URL or shorthand (e.g., github:user/repo)"
705
+ },
706
+ "path": {
707
+ "type": "string",
708
+ "description": "Path to rule file within repo (default: root)"
709
+ },
710
+ "ref": {
711
+ "type": "string",
712
+ "description": "Branch, tag, or commit (default: main/master)"
713
+ }
714
+ },
715
+ "required": ["url"],
716
+ "additionalProperties": false,
717
+ "description": "Git repository source"
718
+ },
719
+ "npm": {
720
+ "type": "object",
721
+ "properties": {
722
+ "npm": {
723
+ "type": "string",
724
+ "description": "NPM package name (e.g., \"@company/rules\")"
725
+ },
726
+ "path": {
727
+ "type": "string",
728
+ "description": "Path to file within package (e.g., \"rules/style.md\")"
729
+ },
730
+ "version": {
731
+ "type": "string",
732
+ "description": "Version to auto-install (omit to use project node_modules)"
733
+ }
734
+ },
735
+ "required": ["npm", "path"],
736
+ "additionalProperties": false,
737
+ "description": "NPM package source"
738
+ }
739
+ },
740
+ "additionalProperties": false,
741
+ "description": "Rule with metadata and content source"
742
+ }
743
+ ]
744
+ },
745
+ {
746
+ "type": "boolean",
747
+ "const": false
748
+ }
749
+ ]
750
+ },
751
+ "propertyNames": {
752
+ "minLength": 1,
753
+ "maxLength": 64,
754
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
755
+ },
756
+ "description": "Editor-specific rules (in addition to global rules)"
1242
757
  }
1243
- },
1244
- "required": [
1245
- "url"
1246
- ],
1247
- "additionalProperties": false,
1248
- "description": "Git repository source"
1249
- },
1250
- "npm": {
1251
- "type": "object",
1252
- "properties": {
1253
- "npm": {
1254
- "type": "string",
1255
- "description": "NPM package name (e.g., \"@company/rules\")"
1256
- },
1257
- "path": {
1258
- "type": "string",
1259
- "description": "Path to file within package (e.g., \"rules/style.md\")"
758
+ },
759
+ "additionalProperties": false
760
+ }
761
+ }
762
+ ]
763
+ },
764
+ "description": "Shorthand: array of editor names or configs"
765
+ },
766
+ {
767
+ "type": "object",
768
+ "properties": {
769
+ "windsurf": {
770
+ "type": "object",
771
+ "properties": {
772
+ "enabled": {
773
+ "type": "boolean",
774
+ "default": true,
775
+ "description": "Whether to configure this editor"
776
+ },
777
+ "rules": {
778
+ "type": "object",
779
+ "additionalProperties": {
780
+ "anyOf": [
781
+ {
782
+ "anyOf": [
783
+ {
784
+ "type": "string",
785
+ "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
786
+ },
787
+ {
788
+ "type": "object",
789
+ "properties": {
790
+ "description": {
791
+ "type": "string",
792
+ "description": "When the rule should apply (required for auto mode)"
793
+ },
794
+ "activation": {
795
+ "type": "string",
796
+ "enum": ["always", "auto", "glob", "manual"],
797
+ "default": "always",
798
+ "description": "When the rule should be activated"
799
+ },
800
+ "globs": {
801
+ "type": "array",
802
+ "items": {
803
+ "type": "string"
804
+ },
805
+ "description": "File patterns (required for glob mode)"
806
+ },
807
+ "content": {
808
+ "type": "string",
809
+ "description": "Inline rule content"
810
+ },
811
+ "path": {
812
+ "type": "string",
813
+ "description": "Local file path to rule content"
814
+ },
815
+ "git": {
816
+ "type": "object",
817
+ "properties": {
818
+ "url": {
819
+ "type": "string",
820
+ "description": "Git repository URL or shorthand (e.g., github:user/repo)"
821
+ },
822
+ "path": {
823
+ "type": "string",
824
+ "description": "Path to rule file within repo (default: root)"
825
+ },
826
+ "ref": {
827
+ "type": "string",
828
+ "description": "Branch, tag, or commit (default: main/master)"
829
+ }
830
+ },
831
+ "required": ["url"],
832
+ "additionalProperties": false,
833
+ "description": "Git repository source"
834
+ },
835
+ "npm": {
836
+ "type": "object",
837
+ "properties": {
838
+ "npm": {
839
+ "type": "string",
840
+ "description": "NPM package name (e.g., \"@company/rules\")"
841
+ },
842
+ "path": {
843
+ "type": "string",
844
+ "description": "Path to file within package (e.g., \"rules/style.md\")"
845
+ },
846
+ "version": {
847
+ "type": "string",
848
+ "description": "Version to auto-install (omit to use project node_modules)"
849
+ }
850
+ },
851
+ "required": ["npm", "path"],
852
+ "additionalProperties": false,
853
+ "description": "NPM package source"
854
+ }
855
+ },
856
+ "additionalProperties": false,
857
+ "description": "Rule with metadata and content source"
858
+ }
859
+ ]
860
+ },
861
+ {
862
+ "type": "boolean",
863
+ "const": false
864
+ }
865
+ ]
866
+ },
867
+ "propertyNames": {
868
+ "minLength": 1,
869
+ "maxLength": 64,
870
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
871
+ },
872
+ "description": "Editor-specific rules (in addition to global rules)"
873
+ },
874
+ "cascadeSettings": {
875
+ "type": "object",
876
+ "additionalProperties": {},
877
+ "description": "Windsurf Cascade settings"
878
+ }
879
+ },
880
+ "additionalProperties": false
881
+ },
882
+ "cursor": {
883
+ "type": "object",
884
+ "properties": {
885
+ "enabled": {
886
+ "type": "boolean",
887
+ "default": true,
888
+ "description": "Whether to configure this editor"
889
+ },
890
+ "rules": {
891
+ "type": "object",
892
+ "additionalProperties": {
893
+ "anyOf": [
894
+ {
895
+ "anyOf": [
896
+ {
897
+ "type": "string",
898
+ "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
899
+ },
900
+ {
901
+ "type": "object",
902
+ "properties": {
903
+ "description": {
904
+ "type": "string",
905
+ "description": "When the rule should apply (required for auto mode)"
906
+ },
907
+ "activation": {
908
+ "type": "string",
909
+ "enum": ["always", "auto", "glob", "manual"],
910
+ "default": "always",
911
+ "description": "When the rule should be activated"
912
+ },
913
+ "globs": {
914
+ "type": "array",
915
+ "items": {
916
+ "type": "string"
917
+ },
918
+ "description": "File patterns (required for glob mode)"
919
+ },
920
+ "content": {
921
+ "type": "string",
922
+ "description": "Inline rule content"
923
+ },
924
+ "path": {
925
+ "type": "string",
926
+ "description": "Local file path to rule content"
927
+ },
928
+ "git": {
929
+ "type": "object",
930
+ "properties": {
931
+ "url": {
932
+ "type": "string",
933
+ "description": "Git repository URL or shorthand (e.g., github:user/repo)"
934
+ },
935
+ "path": {
936
+ "type": "string",
937
+ "description": "Path to rule file within repo (default: root)"
938
+ },
939
+ "ref": {
940
+ "type": "string",
941
+ "description": "Branch, tag, or commit (default: main/master)"
942
+ }
943
+ },
944
+ "required": ["url"],
945
+ "additionalProperties": false,
946
+ "description": "Git repository source"
947
+ },
948
+ "npm": {
949
+ "type": "object",
950
+ "properties": {
951
+ "npm": {
952
+ "type": "string",
953
+ "description": "NPM package name (e.g., \"@company/rules\")"
954
+ },
955
+ "path": {
956
+ "type": "string",
957
+ "description": "Path to file within package (e.g., \"rules/style.md\")"
958
+ },
959
+ "version": {
960
+ "type": "string",
961
+ "description": "Version to auto-install (omit to use project node_modules)"
962
+ }
963
+ },
964
+ "required": ["npm", "path"],
965
+ "additionalProperties": false,
966
+ "description": "NPM package source"
967
+ }
968
+ },
969
+ "additionalProperties": false,
970
+ "description": "Rule with metadata and content source"
971
+ }
972
+ ]
973
+ },
974
+ {
975
+ "type": "boolean",
976
+ "const": false
977
+ }
978
+ ]
979
+ },
980
+ "propertyNames": {
981
+ "minLength": 1,
982
+ "maxLength": 64,
983
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
984
+ },
985
+ "description": "Editor-specific rules (in addition to global rules)"
986
+ },
987
+ "aiSettings": {
988
+ "type": "object",
989
+ "additionalProperties": {},
990
+ "description": "Cursor AI settings"
991
+ }
992
+ },
993
+ "additionalProperties": false
994
+ },
995
+ "claude-code": {
996
+ "type": "object",
997
+ "properties": {
998
+ "enabled": {
999
+ "type": "boolean",
1000
+ "default": true,
1001
+ "description": "Whether to configure this editor"
1002
+ },
1003
+ "rules": {
1004
+ "type": "object",
1005
+ "additionalProperties": {
1006
+ "anyOf": [
1007
+ {
1008
+ "anyOf": [
1009
+ {
1010
+ "type": "string",
1011
+ "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
1012
+ },
1013
+ {
1014
+ "type": "object",
1015
+ "properties": {
1016
+ "description": {
1017
+ "type": "string",
1018
+ "description": "When the rule should apply (required for auto mode)"
1019
+ },
1020
+ "activation": {
1021
+ "type": "string",
1022
+ "enum": ["always", "auto", "glob", "manual"],
1023
+ "default": "always",
1024
+ "description": "When the rule should be activated"
1025
+ },
1026
+ "globs": {
1027
+ "type": "array",
1028
+ "items": {
1029
+ "type": "string"
1030
+ },
1031
+ "description": "File patterns (required for glob mode)"
1032
+ },
1033
+ "content": {
1034
+ "type": "string",
1035
+ "description": "Inline rule content"
1036
+ },
1037
+ "path": {
1038
+ "type": "string",
1039
+ "description": "Local file path to rule content"
1040
+ },
1041
+ "git": {
1042
+ "type": "object",
1043
+ "properties": {
1044
+ "url": {
1045
+ "type": "string",
1046
+ "description": "Git repository URL or shorthand (e.g., github:user/repo)"
1047
+ },
1048
+ "path": {
1049
+ "type": "string",
1050
+ "description": "Path to rule file within repo (default: root)"
1051
+ },
1052
+ "ref": {
1053
+ "type": "string",
1054
+ "description": "Branch, tag, or commit (default: main/master)"
1055
+ }
1056
+ },
1057
+ "required": ["url"],
1058
+ "additionalProperties": false,
1059
+ "description": "Git repository source"
1060
+ },
1061
+ "npm": {
1062
+ "type": "object",
1063
+ "properties": {
1064
+ "npm": {
1065
+ "type": "string",
1066
+ "description": "NPM package name (e.g., \"@company/rules\")"
1067
+ },
1068
+ "path": {
1069
+ "type": "string",
1070
+ "description": "Path to file within package (e.g., \"rules/style.md\")"
1071
+ },
1072
+ "version": {
1073
+ "type": "string",
1074
+ "description": "Version to auto-install (omit to use project node_modules)"
1075
+ }
1076
+ },
1077
+ "required": ["npm", "path"],
1078
+ "additionalProperties": false,
1079
+ "description": "NPM package source"
1080
+ }
1081
+ },
1082
+ "additionalProperties": false,
1083
+ "description": "Rule with metadata and content source"
1084
+ }
1085
+ ]
1086
+ },
1087
+ {
1088
+ "type": "boolean",
1089
+ "const": false
1090
+ }
1091
+ ]
1092
+ },
1093
+ "propertyNames": {
1094
+ "minLength": 1,
1095
+ "maxLength": 64,
1096
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
1097
+ },
1098
+ "description": "Editor-specific rules (in addition to global rules)"
1099
+ },
1100
+ "permissions": {
1101
+ "type": "object",
1102
+ "additionalProperties": {},
1103
+ "description": "Claude Code permissions"
1104
+ }
1105
+ },
1106
+ "additionalProperties": false
1107
+ }
1108
+ },
1109
+ "additionalProperties": {
1110
+ "type": "object",
1111
+ "properties": {
1112
+ "enabled": {
1113
+ "type": "boolean",
1114
+ "default": true,
1115
+ "description": "Whether to configure this editor"
1116
+ },
1117
+ "rules": {
1118
+ "type": "object",
1119
+ "additionalProperties": {
1120
+ "anyOf": [
1121
+ {
1122
+ "anyOf": [
1123
+ {
1124
+ "type": "string",
1125
+ "description": "Source reference: local path (./, ../, /, file:), git URL (https://), or git shorthand (github:)"
1126
+ },
1127
+ {
1128
+ "type": "object",
1129
+ "properties": {
1130
+ "description": {
1131
+ "type": "string",
1132
+ "description": "When the rule should apply (required for auto mode)"
1133
+ },
1134
+ "activation": {
1135
+ "type": "string",
1136
+ "enum": ["always", "auto", "glob", "manual"],
1137
+ "default": "always",
1138
+ "description": "When the rule should be activated"
1139
+ },
1140
+ "globs": {
1141
+ "type": "array",
1142
+ "items": {
1143
+ "type": "string"
1144
+ },
1145
+ "description": "File patterns (required for glob mode)"
1146
+ },
1147
+ "content": {
1148
+ "type": "string",
1149
+ "description": "Inline rule content"
1150
+ },
1151
+ "path": {
1152
+ "type": "string",
1153
+ "description": "Local file path to rule content"
1154
+ },
1155
+ "git": {
1156
+ "type": "object",
1157
+ "properties": {
1158
+ "url": {
1159
+ "type": "string",
1160
+ "description": "Git repository URL or shorthand (e.g., github:user/repo)"
1161
+ },
1162
+ "path": {
1163
+ "type": "string",
1164
+ "description": "Path to rule file within repo (default: root)"
1165
+ },
1166
+ "ref": {
1167
+ "type": "string",
1168
+ "description": "Branch, tag, or commit (default: main/master)"
1169
+ }
1170
+ },
1171
+ "required": ["url"],
1172
+ "additionalProperties": false,
1173
+ "description": "Git repository source"
1174
+ },
1175
+ "npm": {
1176
+ "type": "object",
1177
+ "properties": {
1178
+ "npm": {
1179
+ "type": "string",
1180
+ "description": "NPM package name (e.g., \"@company/rules\")"
1181
+ },
1182
+ "path": {
1183
+ "type": "string",
1184
+ "description": "Path to file within package (e.g., \"rules/style.md\")"
1185
+ },
1186
+ "version": {
1187
+ "type": "string",
1188
+ "description": "Version to auto-install (omit to use project node_modules)"
1189
+ }
1190
+ },
1191
+ "required": ["npm", "path"],
1192
+ "additionalProperties": false,
1193
+ "description": "NPM package source"
1194
+ }
1195
+ },
1196
+ "additionalProperties": false,
1197
+ "description": "Rule with metadata and content source"
1198
+ }
1199
+ ]
1260
1200
  },
1261
- "version": {
1262
- "type": "string",
1263
- "description": "Version to auto-install (omit to use project node_modules)"
1201
+ {
1202
+ "type": "boolean",
1203
+ "const": false
1264
1204
  }
1265
- },
1266
- "required": [
1267
- "npm",
1268
- "path"
1269
- ],
1270
- "additionalProperties": false,
1271
- "description": "NPM package source"
1272
- }
1205
+ ]
1273
1206
  },
1274
- "additionalProperties": false,
1275
- "description": "Rule with metadata and content source"
1276
- }
1277
- ]
1207
+ "propertyNames": {
1208
+ "minLength": 1,
1209
+ "maxLength": 64,
1210
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
1211
+ },
1212
+ "description": "Editor-specific rules (in addition to global rules)"
1213
+ }
1278
1214
  },
1279
- {
1280
- "type": "boolean",
1281
- "const": false
1282
- }
1283
- ]
1284
- },
1285
- "propertyNames": {
1286
- "minLength": 1,
1287
- "maxLength": 64,
1288
- "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
1289
- },
1290
- "description": "Editor-specific rules (in addition to global rules)"
1215
+ "additionalProperties": false
1216
+ }
1291
1217
  }
1292
- },
1293
- "additionalProperties": false
1294
- }
1295
- }
1296
- ],
1297
- "description": "Editor-specific configurations"
1298
- },
1299
- "hooks": {
1300
- "type": "object",
1301
- "additionalProperties": {
1302
- "type": "array",
1303
- "items": {
1304
- "type": "object",
1305
- "properties": {
1306
- "matcher": {
1307
- "type": "string",
1308
- "description": "Pattern to match (regex supported, editor-specific)"
1309
- },
1310
- "hooks": {
1218
+ ],
1219
+ "description": "Editor-specific configurations"
1220
+ },
1221
+ "hooks": {
1222
+ "type": "object",
1223
+ "additionalProperties": {
1311
1224
  "type": "array",
1312
1225
  "items": {
1313
- "type": "object",
1314
- "properties": {
1315
- "command": {
1316
- "type": "string",
1317
- "description": "Shell command to execute"
1318
- },
1319
- "timeout": {
1320
- "type": "number",
1321
- "exclusiveMinimum": 0,
1322
- "description": "Timeout in seconds"
1323
- },
1324
- "show_output": {
1325
- "type": "boolean",
1326
- "description": "Whether to show command output in UI"
1327
- },
1328
- "working_directory": {
1329
- "type": "string",
1330
- "description": "Working directory for the command"
1331
- }
1332
- },
1333
- "required": [
1334
- "command"
1335
- ],
1336
- "additionalProperties": false,
1337
- "description": "Hook action configuration"
1338
- },
1339
- "description": "Hooks to execute when matched"
1340
- }
1341
- },
1342
- "required": [
1343
- "hooks"
1344
- ],
1345
- "additionalProperties": false,
1346
- "description": "Hook matcher configuration"
1347
- }
1348
- },
1349
- "propertyNames": {
1350
- "enum": [
1351
- "pre_tool_use",
1352
- "post_tool_use",
1353
- "pre_file_read",
1354
- "post_file_read",
1355
- "pre_file_write",
1356
- "post_file_write",
1357
- "pre_command",
1358
- "post_command",
1359
- "pre_mcp_tool",
1360
- "post_mcp_tool",
1361
- "pre_prompt",
1362
- "session_start",
1363
- "session_end",
1364
- "agent_stop"
1365
- ]
1366
- },
1367
- "description": "Lifecycle hooks for AI agent events"
1368
- },
1369
- "aix": {
1370
- "type": "object",
1371
- "properties": {
1372
- "cache": {
1373
- "type": "object",
1374
- "properties": {
1375
- "maxBackups": {
1376
- "type": "integer",
1377
- "minimum": 1,
1378
- "maximum": 100,
1379
- "default": 5,
1380
- "description": "Maximum number of backup files to keep per file"
1381
- },
1382
- "maxBackupAgeDays": {
1383
- "type": "integer",
1384
- "minimum": 1,
1385
- "maximum": 365,
1386
- "default": 30,
1387
- "description": "Delete backups older than this many days"
1388
- },
1389
- "maxCacheAgeDays": {
1390
- "type": "integer",
1391
- "minimum": 1,
1392
- "maximum": 365,
1393
- "default": 7,
1394
- "description": "Delete git-sourced cache entries older than this many days"
1395
- }
1396
- },
1397
- "additionalProperties": false,
1398
- "description": "Cache and backup retention settings"
1226
+ "type": "object",
1227
+ "properties": {
1228
+ "matcher": {
1229
+ "type": "string",
1230
+ "description": "Pattern to match (regex supported, editor-specific)"
1231
+ },
1232
+ "hooks": {
1233
+ "type": "array",
1234
+ "items": {
1235
+ "type": "object",
1236
+ "properties": {
1237
+ "command": {
1238
+ "type": "string",
1239
+ "description": "Shell command to execute"
1240
+ },
1241
+ "timeout": {
1242
+ "type": "number",
1243
+ "exclusiveMinimum": 0,
1244
+ "description": "Timeout in seconds"
1245
+ },
1246
+ "show_output": {
1247
+ "type": "boolean",
1248
+ "description": "Whether to show command output in UI"
1249
+ },
1250
+ "working_directory": {
1251
+ "type": "string",
1252
+ "description": "Working directory for the command"
1253
+ }
1254
+ },
1255
+ "required": ["command"],
1256
+ "additionalProperties": false,
1257
+ "description": "Hook action configuration"
1258
+ },
1259
+ "description": "Hooks to execute when matched"
1260
+ }
1261
+ },
1262
+ "required": ["hooks"],
1263
+ "additionalProperties": false,
1264
+ "description": "Hook matcher configuration"
1265
+ }
1266
+ },
1267
+ "propertyNames": {
1268
+ "enum": [
1269
+ "pre_tool_use",
1270
+ "post_tool_use",
1271
+ "pre_file_read",
1272
+ "post_file_read",
1273
+ "pre_file_write",
1274
+ "post_file_write",
1275
+ "pre_command",
1276
+ "post_command",
1277
+ "pre_mcp_tool",
1278
+ "post_mcp_tool",
1279
+ "pre_prompt",
1280
+ "session_start",
1281
+ "session_end",
1282
+ "agent_stop"
1283
+ ]
1284
+ },
1285
+ "description": "Lifecycle hooks for AI agent events"
1286
+ },
1287
+ "aix": {
1288
+ "type": "object",
1289
+ "properties": {
1290
+ "cache": {
1291
+ "type": "object",
1292
+ "properties": {
1293
+ "maxBackups": {
1294
+ "type": "integer",
1295
+ "minimum": 1,
1296
+ "maximum": 100,
1297
+ "default": 5,
1298
+ "description": "Maximum number of backup files to keep per file"
1299
+ },
1300
+ "maxBackupAgeDays": {
1301
+ "type": "integer",
1302
+ "minimum": 1,
1303
+ "maximum": 365,
1304
+ "default": 30,
1305
+ "description": "Delete backups older than this many days"
1306
+ },
1307
+ "maxCacheAgeDays": {
1308
+ "type": "integer",
1309
+ "minimum": 1,
1310
+ "maximum": 365,
1311
+ "default": 7,
1312
+ "description": "Delete git-sourced cache entries older than this many days"
1313
+ }
1314
+ },
1315
+ "additionalProperties": false,
1316
+ "description": "Cache and backup retention settings"
1317
+ }
1318
+ },
1319
+ "additionalProperties": false,
1320
+ "description": "aix CLI tool settings"
1399
1321
  }
1400
- },
1401
- "additionalProperties": false,
1402
- "description": "aix CLI tool settings"
1403
- }
1404
- },
1405
- "additionalProperties": false
1406
- }
1407
- }
1408
- }
1322
+ },
1323
+ "additionalProperties": false
1324
+ }
1325
+ }
1326
+ }