sdtk-kit 0.3.3 → 0.3.5

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/README.md CHANGED
@@ -36,7 +36,9 @@ sdtk generate --feature-key USER_PROFILE --feature-name "User Profile"
36
36
  Initialize SDTK workspace in the current or specified project directory.
37
37
 
38
38
  ```bash
39
- sdtk init --runtime <codex|claude> [--project-path <path>] [--force] [--skip-skills]
39
+ sdtk init --runtime <codex|claude> [--project-path <path>] [--force] [--runtime-scope <project|user>] [--skip-runtime-assets]
40
+
41
+ # Deprecated: --skip-skills (use --skip-runtime-assets instead)
40
42
  ```
41
43
 
42
44
  Creates:
@@ -44,7 +46,9 @@ Creates:
44
46
  - `sdtk.config.json` -- project configuration
45
47
  - `sdtk.config.profiles.example.json` -- stack profile examples
46
48
  - `CODEX.md` or `CLAUDE.md` -- runtime adapter
47
- - for `--runtime claude`, local `.claude/skills` and `.claude/skills/references` are installed unless `--skip-skills` is used
49
+ - for `--runtime claude`, skill files are installed into `.claude/skills/` (project scope, default) or `~/.claude/skills/` (user scope) unless `--skip-runtime-assets` is used
50
+ - for `--runtime codex`, skill files are installed into `$CODEX_HOME/skills/` or `~/.codex/skills/` (user scope only) unless `--skip-runtime-assets` is used
51
+ - `--skip-skills` is deprecated; use `--skip-runtime-assets` instead
48
52
 
49
53
  ### `sdtk auth`
50
54
 
@@ -83,6 +87,36 @@ sdtk generate --feature-key <UPPER_SNAKE_CASE> --feature-name "<text>" [--projec
83
87
 
84
88
  Output files include: project initiation, BA spec, flow-action spec, PRD, backlog, architecture design, database spec, API specs (OpenAPI + endpoints + design detail + flow list), UI design layout, implementation plan, test cases, and QA release report.
85
89
 
90
+ ### `sdtk runtime`
91
+
92
+ Manage runtime skill assets independently of `sdtk init`.
93
+
94
+ ```bash
95
+ sdtk runtime install --runtime <codex|claude> [--scope <project|user>]
96
+ sdtk runtime uninstall --runtime <codex|claude> [--scope <project|user>]
97
+ sdtk runtime status --runtime <codex|claude>
98
+ ```
99
+
100
+ Scope defaults:
101
+ - `claude`: `project` (installs to `.claude/skills/`); `user` installs to `~/.claude/skills/`
102
+ - `codex`: `user` only (installs to `$CODEX_HOME/skills/` or `~/.codex/skills/`); project scope is not supported (Gate C0)
103
+
104
+ Examples:
105
+
106
+ ```bash
107
+ # Install Claude skills at project scope (default)
108
+ sdtk runtime install --runtime claude
109
+
110
+ # Install Claude skills at user scope
111
+ sdtk runtime install --runtime claude --scope user
112
+
113
+ # Check installed runtime assets
114
+ sdtk runtime status --runtime claude
115
+
116
+ # Remove runtime assets
117
+ sdtk runtime uninstall --runtime claude --scope project
118
+ ```
119
+
86
120
  ### `sdtk --help` / `sdtk --version`
87
121
 
88
122
  ```bash
@@ -1,5 +1,8 @@
1
1
  {
2
- "buildTimestamp": "2026-03-07T00:53:22Z",
2
+ "version": "0.3.5",
3
+ "sourceCommit": "537f76cfcb2d42882cc5fb19946f0389279e1583",
4
+ "buildTimestamp": "2026-03-11T08:51:43Z",
5
+ "fileCount": 81,
3
6
  "files": [
4
7
  {
5
8
  "path": "toolkit/AGENTS.md",
@@ -8,8 +11,8 @@
8
11
  },
9
12
  {
10
13
  "path": "toolkit/install.ps1",
11
- "sha256": "531da17e88a05b6946a5012f7b13a2871212df1fe0d052720f9511e02aba7e32",
12
- "size": 8830
14
+ "sha256": "e717a2791fb597d7a21f57f4c4790dbc545e954f0af3ca0c47f160f78c8a2474",
15
+ "size": 9777
13
16
  },
14
17
  {
15
18
  "path": "toolkit/runtimes/claude/CLAUDE_TEMPLATE.md",
@@ -26,10 +29,20 @@
26
29
  "sha256": "5c1f5442fd3c26b8bf62db4b25e9f1c4207258c7fe52f12ed533968f77dfbf65",
27
30
  "size": 10557
28
31
  },
32
+ {
33
+ "path": "toolkit/scripts/install-claude-skills.ps1",
34
+ "sha256": "8c66c27262ad4abc3c42bbcbe3a97752a5f29956ac93397133e6780354911549",
35
+ "size": 4315
36
+ },
29
37
  {
30
38
  "path": "toolkit/scripts/install-codex-skills.ps1",
31
- "sha256": "68a82e421d0309e47cdb79e949b1044c17375ad7fd52e2ab9ccdc9dd33f8cdd0",
32
- "size": 9175
39
+ "sha256": "ca64e0c2a0f13137bc6b780a57442de46a3e0551778bbcbadd4eb779c21cb203",
40
+ "size": 9427
41
+ },
42
+ {
43
+ "path": "toolkit/scripts/uninstall-claude-skills.ps1",
44
+ "sha256": "809ffc1f96528ac1cd453214cd1c2d231ca0753f0d3c19b4a20f11835a64a152",
45
+ "size": 4482
33
46
  },
34
47
  {
35
48
  "path": "toolkit/scripts/uninstall-codex-skills.ps1",
@@ -88,8 +101,8 @@
88
101
  },
89
102
  {
90
103
  "path": "toolkit/skills/sdtk-api-doc/SKILL.md",
91
- "sha256": "d93980bc0332f25852a5e4b0e5187bde7185a5ede70c59c8ebaf542afdb42188",
92
- "size": 1966
104
+ "sha256": "2c4bc8edda84f20bf05130fdf19b9abd562dd87b03508301dff9ccd877b52a2f",
105
+ "size": 2248
93
106
  },
94
107
  {
95
108
  "path": "toolkit/skills/sdtk-arch/references/API_DESIGN_CREATION_RULES.md",
@@ -118,13 +131,13 @@
118
131
  },
119
132
  {
120
133
  "path": "toolkit/skills/sdtk-arch/SKILL.md",
121
- "sha256": "ddf57e65096fc6f1bdd0f2c829f2580d2d7edb99f79d3cba7a3f68e69d373f46",
122
- "size": 2489
134
+ "sha256": "78275557bbea966134422423fb6910cecdc5468e7bf2abb777ff1c4233345639",
135
+ "size": 2597
123
136
  },
124
137
  {
125
138
  "path": "toolkit/skills/sdtk-ba/SKILL.md",
126
- "sha256": "7bc02ad898b5e7dc36282026dcc718818600a507d18046a9e80d8e6eba588131",
127
- "size": 1041
139
+ "sha256": "0a7c6aa20be2e29aa2124355264ee45847df76f635437c2d05ddd26f7121f12e",
140
+ "size": 1177
128
141
  },
129
142
  {
130
143
  "path": "toolkit/skills/sdtk-design-layout/SKILL.md",
@@ -158,8 +171,8 @@
158
171
  },
159
172
  {
160
173
  "path": "toolkit/skills/sdtk-qa/SKILL.md",
161
- "sha256": "c221eb80c68ba8672fb8a3c13fd6b36d5b65ccdd9988a32be88c6589c4594498",
162
- "size": 1142
174
+ "sha256": "564c536395227511ac9be215e41a3b5604e2f249da28319417ca75a6bfe8ed3b",
175
+ "size": 1459
163
176
  },
164
177
  {
165
178
  "path": "toolkit/skills/sdtk-screen-design-spec/references/excel-image-export.md",
@@ -208,8 +221,8 @@
208
221
  },
209
222
  {
210
223
  "path": "toolkit/skills/sdtk-test-case-spec/SKILL.md",
211
- "sha256": "72ca16e07c286910333243954610e116217ca2abb3a5e276cbe91e92eb826ad5",
212
- "size": 2652
224
+ "sha256": "727a9870a455e9c455b2c405cb52c6b9867f229fa56d8ce9408e66b6f6cae4a5",
225
+ "size": 2842
213
226
  },
214
227
  {
215
228
  "path": "toolkit/skills-claude/api-design-spec/SKILL.md",
@@ -218,18 +231,18 @@
218
231
  },
219
232
  {
220
233
  "path": "toolkit/skills-claude/api-doc/SKILL.md",
221
- "sha256": "57176bb3d74e19ef5feb1a8d59d8c7c1714634f67e1d51bf4667d3f189093319",
222
- "size": 2240
234
+ "sha256": "6f6ddb470bc61d286b84418e299b360d5f148e6bed75fa50b6c8f2929e6fe49c",
235
+ "size": 2518
223
236
  },
224
237
  {
225
238
  "path": "toolkit/skills-claude/arch/SKILL.md",
226
- "sha256": "5ab03dc8a928c6528d1ccaad427a15c686427e8fd9114421da495d9223652337",
227
- "size": 4108
239
+ "sha256": "e293fd71f9fc71ac63e5e53bf55fbfe9c71e186e298b2fd3429c71a4e972a8b1",
240
+ "size": 4175
228
241
  },
229
242
  {
230
243
  "path": "toolkit/skills-claude/ba/SKILL.md",
231
- "sha256": "1956fd69ff1a0adb54c8abbf06b37bd5c21b7f0ca597b6d8b94dfed0606cd2e4",
232
- "size": 2551
244
+ "sha256": "4dd1db27839c73a8ec0bba2b465b7cacffd55393a325a822ced8f2f209f6b51b",
245
+ "size": 2648
233
246
  },
234
247
  {
235
248
  "path": "toolkit/skills-claude/design-layout/SKILL.md",
@@ -263,8 +276,8 @@
263
276
  },
264
277
  {
265
278
  "path": "toolkit/skills-claude/qa/SKILL.md",
266
- "sha256": "eb0a540d28144855b5026e7b40ce965c4049a9b56f6e7ffd9732964006f63d1a",
267
- "size": 2687
279
+ "sha256": "3ab5af1b27aa0947052ef7b76abca132d89b78b74516b8668474c08c344289aa",
280
+ "size": 2956
268
281
  },
269
282
  {
270
283
  "path": "toolkit/skills-claude/screen-design-spec/SKILL.md",
@@ -273,8 +286,8 @@
273
286
  },
274
287
  {
275
288
  "path": "toolkit/skills-claude/test-case-spec/SKILL.md",
276
- "sha256": "efd43e2087961f4e30177144c42e06b6c9b3d73f9533dad34f9ce1284fcdf126",
277
- "size": 2625
289
+ "sha256": "c397431a7752fcdee1dbb7720472703d262bfcc8fb543c4562fbc24a79064769",
290
+ "size": 2806
278
291
  },
279
292
  {
280
293
  "path": "toolkit/templates/docs/api/API_DESIGN_CREATION_RULES.md",
@@ -396,8 +409,5 @@
396
409
  "sha256": "2b5d4d10019e3c9b3219d92b8123acc85872d9c76230107206e7a270a5ece5a2",
397
410
  "size": 3255
398
411
  }
399
- ],
400
- "sourceCommit": "4437ad41659a38e9e80dcbf32cb03f9b6df64e0d",
401
- "version": "0.3.3",
402
- "fileCount": 79
412
+ ]
403
413
  }
@@ -1,9 +1,11 @@
1
1
  868430474b46e4e8d27ed26b780a794936e84cf4f0278f2cc3d061f54877f498 toolkit/AGENTS.md
2
- 531da17e88a05b6946a5012f7b13a2871212df1fe0d052720f9511e02aba7e32 toolkit/install.ps1
2
+ e717a2791fb597d7a21f57f4c4790dbc545e954f0af3ca0c47f160f78c8a2474 toolkit/install.ps1
3
3
  0f3e0bfe1b5165250f0da4da5790a9e6220023752713088a0076eb7f17fd6397 toolkit/runtimes/claude/CLAUDE_TEMPLATE.md
4
4
  4154c15c71f44d2f2caf07fb41722fa65d4f9ec7e78f798ee084effd12345c62 toolkit/runtimes/codex/CODEX_TEMPLATE.md
5
5
  5c1f5442fd3c26b8bf62db4b25e9f1c4207258c7fe52f12ed533968f77dfbf65 toolkit/scripts/init-feature.ps1
6
- 68a82e421d0309e47cdb79e949b1044c17375ad7fd52e2ab9ccdc9dd33f8cdd0 toolkit/scripts/install-codex-skills.ps1
6
+ 8c66c27262ad4abc3c42bbcbe3a97752a5f29956ac93397133e6780354911549 toolkit/scripts/install-claude-skills.ps1
7
+ ca64e0c2a0f13137bc6b780a57442de46a3e0551778bbcbadd4eb779c21cb203 toolkit/scripts/install-codex-skills.ps1
8
+ 809ffc1f96528ac1cd453214cd1c2d231ca0753f0d3c19b4a20f11835a64a152 toolkit/scripts/uninstall-claude-skills.ps1
7
9
  e0d462bd6dcdb17cc003d459063ff341bd2e4f60b245cda9b7e9b9e94b3cf01f toolkit/scripts/uninstall-codex-skills.ps1
8
10
  de2921da9ce504487d9c7d97bf862b65d0ba00b9f1593a4fbfadf41ac36adb49 toolkit/sdtk.config.json
9
11
  21b1b0212f85c76dc6a89ae5936b39c4c1df7837a333f7a3db337f3039babb7b toolkit/sdtk.config.profiles.example.json
@@ -15,21 +17,21 @@ c6147e7b01632cb6ffa017af43e4e5c9e1f98d160ed812ade1d087b1f3ca5490 toolkit/skills
15
17
  13f26a3307894b9bfb570d75f6db4ccb61104064d19661ec2a26a1b9984f4c97 toolkit/skills/sdtk-api-doc/references/API_DESIGN_FLOWCHART_CREATION_RULES.md
16
18
  decffe52425e22b3dd82e9c8f3768aefbb209ec58237107d84f583fee876ea8f toolkit/skills/sdtk-api-doc/references/FLOWCHART_CREATION_RULES.md
17
19
  f29c6774019ef0789dfb88678e1ab31d4d8eb7b3ab69b2115368ef5d879e5276 toolkit/skills/sdtk-api-doc/references/YAML_CREATION_RULES.md
18
- d93980bc0332f25852a5e4b0e5187bde7185a5ede70c59c8ebaf542afdb42188 toolkit/skills/sdtk-api-doc/SKILL.md
20
+ 2c4bc8edda84f20bf05130fdf19b9abd562dd87b03508301dff9ccd877b52a2f toolkit/skills/sdtk-api-doc/SKILL.md
19
21
  9adf1e46833411a861fb7426c37baac69689b9e3120a8ed1e4a3224de44a8dd2 toolkit/skills/sdtk-arch/references/API_DESIGN_CREATION_RULES.md
20
22
  13f26a3307894b9bfb570d75f6db4ccb61104064d19661ec2a26a1b9984f4c97 toolkit/skills/sdtk-arch/references/API_DESIGN_FLOWCHART_CREATION_RULES.md
21
23
  b1ed7f7cad8f4098bd305fa9aaea6cdf1c78cf909284547baa50235fa677d8c0 toolkit/skills/sdtk-arch/references/FLOW_ACTION_SPEC_CREATION_RULES.md
22
24
  decffe52425e22b3dd82e9c8f3768aefbb209ec58237107d84f583fee876ea8f toolkit/skills/sdtk-arch/references/FLOWCHART_CREATION_RULES.md
23
25
  f29c6774019ef0789dfb88678e1ab31d4d8eb7b3ab69b2115368ef5d879e5276 toolkit/skills/sdtk-arch/references/YAML_CREATION_RULES.md
24
- ddf57e65096fc6f1bdd0f2c829f2580d2d7edb99f79d3cba7a3f68e69d373f46 toolkit/skills/sdtk-arch/SKILL.md
25
- 7bc02ad898b5e7dc36282026dcc718818600a507d18046a9e80d8e6eba588131 toolkit/skills/sdtk-ba/SKILL.md
26
+ 78275557bbea966134422423fb6910cecdc5468e7bf2abb777ff1c4233345639 toolkit/skills/sdtk-arch/SKILL.md
27
+ 0a7c6aa20be2e29aa2124355264ee45847df76f635437c2d05ddd26f7121f12e toolkit/skills/sdtk-ba/SKILL.md
26
28
  8eabb7bdb821a91766ccd5b5fdcc1a4e876b51052cd6c6429b98b4d9946e2b1a toolkit/skills/sdtk-design-layout/SKILL.md
27
29
  7a7f5a799247896a8ddebc5cefec25450bf9284d34044b6b69b13e4535c005a1 toolkit/skills/sdtk-dev/SKILL.md
28
30
  4b242b5f86d0074538e14721cc66c0fbaac5757e984796145f5e4477c89c6729 toolkit/skills/sdtk-dev-backend/SKILL.md
29
31
  390d895ab5da1fd214efecdbbd13c81e92815d4db157a7e9e8f32c79e09439dd toolkit/skills/sdtk-dev-frontend/SKILL.md
30
32
  e6560b5a0c893d66117eedac3762bb0758553a80bcd1e7c24c84ba91f6ab7f9c toolkit/skills/sdtk-orchestrator/SKILL.md
31
33
  7dd81943172b1d7a96093424b0ba76519db3d713272374d5c4aedb15f37adbe2 toolkit/skills/sdtk-pm/SKILL.md
32
- c221eb80c68ba8672fb8a3c13fd6b36d5b65ccdd9988a32be88c6589c4594498 toolkit/skills/sdtk-qa/SKILL.md
34
+ 564c536395227511ac9be215e41a3b5604e2f249da28319417ca75a6bfe8ed3b toolkit/skills/sdtk-qa/SKILL.md
33
35
  97f65fd84c80e4836c9bbb82d8b7fc81527336c55dbbd82ea5e69672e21b22e4 toolkit/skills/sdtk-screen-design-spec/references/excel-image-export.md
34
36
  a9b414a07d76e63331ffc832dea2381357f9a99e2cd82ea74f713b3a9d7acee7 toolkit/skills/sdtk-screen-design-spec/references/figma-mcp.md
35
37
  b1ed7f7cad8f4098bd305fa9aaea6cdf1c78cf909284547baa50235fa677d8c0 toolkit/skills/sdtk-screen-design-spec/references/FLOW_ACTION_SPEC_CREATION_RULES.md
@@ -39,20 +41,20 @@ ae0bc9b120c19a142f10cc79168a8f7d6bf8a37e48341fc16cbc74bbdc2e692c toolkit/skills
39
41
  876d546e077ce451082792776360a4a309cc79a34c74234f1b55f80c56b159d1 toolkit/skills/sdtk-screen-design-spec/SKILL.md
40
42
  7c21e74f5eee712c6b65665b4f10483ed008113186a92dc0a4673ce1fcd3ef5c toolkit/skills/sdtk-test-case-spec/references/TEST_CASE_CREATION_RULES.md
41
43
  4d1e813908114f2be68007fb7373973e2c6e0aebc5a6305b8b19443d5ae477d0 toolkit/skills/sdtk-test-case-spec/scripts/validate_test_case_spec.py
42
- 72ca16e07c286910333243954610e116217ca2abb3a5e276cbe91e92eb826ad5 toolkit/skills/sdtk-test-case-spec/SKILL.md
44
+ 727a9870a455e9c455b2c405cb52c6b9867f229fa56d8ce9408e66b6f6cae4a5 toolkit/skills/sdtk-test-case-spec/SKILL.md
43
45
  123873681ff65792a9a269b264155c65a5feb68b23e4eeb1e68cb7da1a137d54 toolkit/skills-claude/api-design-spec/SKILL.md
44
- 57176bb3d74e19ef5feb1a8d59d8c7c1714634f67e1d51bf4667d3f189093319 toolkit/skills-claude/api-doc/SKILL.md
45
- 5ab03dc8a928c6528d1ccaad427a15c686427e8fd9114421da495d9223652337 toolkit/skills-claude/arch/SKILL.md
46
- 1956fd69ff1a0adb54c8abbf06b37bd5c21b7f0ca597b6d8b94dfed0606cd2e4 toolkit/skills-claude/ba/SKILL.md
46
+ 6f6ddb470bc61d286b84418e299b360d5f148e6bed75fa50b6c8f2929e6fe49c toolkit/skills-claude/api-doc/SKILL.md
47
+ e293fd71f9fc71ac63e5e53bf55fbfe9c71e186e298b2fd3429c71a4e972a8b1 toolkit/skills-claude/arch/SKILL.md
48
+ 4dd1db27839c73a8ec0bba2b465b7cacffd55393a325a822ced8f2f209f6b51b toolkit/skills-claude/ba/SKILL.md
47
49
  9765f229108c5aff27457489707218570ad83dc362353a79c2f5a78607adf4de toolkit/skills-claude/design-layout/SKILL.md
48
50
  cea9f6512bc805d5b22a84a4ef8dbd229b4f7a3f073f9e125e933e6e79a206d5 toolkit/skills-claude/dev/SKILL.md
49
51
  142a8fe088a4b0326ca79e00200cb5f562c53728b7adc83e6b749db6e29f1d0d toolkit/skills-claude/dev-backend/SKILL.md
50
52
  1631bd51bc3d0106c18f4c00412f6279626bdce9f0e310822d5dcdff08063a88 toolkit/skills-claude/dev-frontend/SKILL.md
51
53
  c8e8303f1833e71cacdf20b1f398e476b44b3de14fbffad9a404c2a68fa713a3 toolkit/skills-claude/orchestrator/SKILL.md
52
54
  b34621fe61957e573c616ad816d591a60a6c8d1333d0bfb71f39f45b93331cb0 toolkit/skills-claude/pm/SKILL.md
53
- eb0a540d28144855b5026e7b40ce965c4049a9b56f6e7ffd9732964006f63d1a toolkit/skills-claude/qa/SKILL.md
55
+ 3ab5af1b27aa0947052ef7b76abca132d89b78b74516b8668474c08c344289aa toolkit/skills-claude/qa/SKILL.md
54
56
  5686da60872f1a3c6791e9a740897d4a564f40d53d54902a47fbc3165e68a1ec toolkit/skills-claude/screen-design-spec/SKILL.md
55
- efd43e2087961f4e30177144c42e06b6c9b3d73f9533dad34f9ce1284fcdf126 toolkit/skills-claude/test-case-spec/SKILL.md
57
+ c397431a7752fcdee1dbb7720472703d262bfcc8fb543c4562fbc24a79064769 toolkit/skills-claude/test-case-spec/SKILL.md
56
58
  9adf1e46833411a861fb7426c37baac69689b9e3120a8ed1e4a3224de44a8dd2 toolkit/templates/docs/api/API_DESIGN_CREATION_RULES.md
57
59
  d2aa0ee3a7c5351700b3bffb4ba66e8056ed955f55903c744c694624730038cb toolkit/templates/docs/api/API_DESIGN_DETAIL_TEMPLATE.md
58
60
  13f26a3307894b9bfb570d75f6db4ccb61104064d19661ec2a26a1b9984f4c97 toolkit/templates/docs/api/API_DESIGN_FLOWCHART_CREATION_RULES.md
@@ -2,9 +2,12 @@ param(
2
2
  [string]$ProjectPath,
3
3
  [switch]$Force,
4
4
  [switch]$SkipSkills,
5
+ [switch]$SkipRuntimeAssets,
5
6
  [switch]$Quiet,
6
7
  [ValidateSet('codex', 'claude')]
7
- [string]$Runtime = 'codex'
8
+ [string]$Runtime = 'codex',
9
+ [ValidateSet('project', 'user', '')]
10
+ [string]$Scope = ''
8
11
  )
9
12
 
10
13
  $ErrorActionPreference = 'Stop'
@@ -181,6 +184,15 @@ if (-not $ProjectPath) {
181
184
  }
182
185
  $projectRoot = Resolve-Path -LiteralPath $ProjectPath
183
186
 
187
+ # Merge SkipRuntimeAssets and legacy SkipSkills
188
+ if ($SkipRuntimeAssets) { $SkipSkills = $true }
189
+
190
+ # Default scope: project for Claude, user for Codex
191
+ if (-not $Scope -or $Scope -eq '') {
192
+ if ($Runtime -eq 'claude') { $Scope = 'project' }
193
+ else { $Scope = 'user' }
194
+ }
195
+
184
196
  if (-not $Quiet) {
185
197
  Write-Host "SDTK toolkit : $toolkitRoot"
186
198
  Write-Host "Project root : $projectRoot"
@@ -217,17 +229,29 @@ if (($Runtime -eq 'codex') -and (-not $SkipSkills)) {
217
229
  }
218
230
 
219
231
  Write-Host ""
220
- Write-Host "Installing Codex skills globally..."
232
+ Write-Host "Installing Codex skills (scope: $Scope)..."
221
233
  if ($Force) {
222
- & $skillInstaller -Force | Out-Host
234
+ & $skillInstaller -Scope $Scope -Force | Out-Host
223
235
  } else {
224
- & $skillInstaller | Out-Host
236
+ & $skillInstaller -Scope $Scope | Out-Host
225
237
  }
226
238
  }
227
239
  elseif (($Runtime -eq 'claude') -and (-not $SkipSkills)) {
228
- Write-Host ""
229
- Write-Host "Installing Claude Code skills..."
230
- Install-ClaudeSkills -ToolkitRoot $toolkitRoot -ProjectRoot $projectRoot -Overwrite ([bool]$Force)
240
+ $skillInstaller = Join-Path $toolkitRoot 'scripts/install-claude-skills.ps1'
241
+ if (-not (Test-Path -LiteralPath $skillInstaller)) {
242
+ # Fallback to inline Install-ClaudeSkills for backward compatibility
243
+ Write-Host ""
244
+ Write-Host "Installing Claude Code skills..."
245
+ Install-ClaudeSkills -ToolkitRoot $toolkitRoot -ProjectRoot $projectRoot -Overwrite ([bool]$Force)
246
+ } else {
247
+ Write-Host ""
248
+ Write-Host "Installing Claude Code skills (scope: $Scope)..."
249
+ if ($Force) {
250
+ & $skillInstaller -Scope $Scope -ProjectPath $projectRoot.ToString() -Force | Out-Host
251
+ } else {
252
+ & $skillInstaller -Scope $Scope -ProjectPath $projectRoot.ToString() | Out-Host
253
+ }
254
+ }
231
255
  }
232
256
 
233
257
  if (-not $Quiet) {
@@ -0,0 +1,129 @@
1
+ param(
2
+ [string]$ProjectPath,
3
+ [ValidateSet('project', 'user')]
4
+ [string]$Scope = 'project',
5
+ [switch]$Force
6
+ )
7
+
8
+ $ErrorActionPreference = 'Stop'
9
+ Set-StrictMode -Version Latest
10
+
11
+ function Copy-File {
12
+ param(
13
+ [Parameter(Mandatory = $true)][string]$SourcePath,
14
+ [Parameter(Mandatory = $true)][string]$DestinationPath,
15
+ [Parameter(Mandatory = $true)][bool]$Overwrite
16
+ )
17
+
18
+ if (-not (Test-Path -LiteralPath $SourcePath)) {
19
+ throw "Missing source: $SourcePath"
20
+ }
21
+
22
+ if (Test-Path -LiteralPath $DestinationPath) {
23
+ if (-not $Overwrite) {
24
+ Write-Warning "Already exists (skipping). Use -Force to overwrite: $DestinationPath"
25
+ return
26
+ }
27
+ }
28
+
29
+ $parent = Split-Path -Parent $DestinationPath
30
+ if ($parent -and -not (Test-Path -LiteralPath $parent)) {
31
+ New-Item -ItemType Directory -Force -Path $parent | Out-Null
32
+ }
33
+
34
+ Copy-Item -LiteralPath $SourcePath -Destination $DestinationPath -Force
35
+ }
36
+
37
+ $toolkitRoot = Resolve-Path (Join-Path $PSScriptRoot '..')
38
+
39
+ # Resolve destination based on scope
40
+ if ($Scope -eq 'user') {
41
+ $skillsDest = Join-Path $HOME '.claude/skills'
42
+ Write-Host "Scope: user (installing to $skillsDest)"
43
+ } else {
44
+ if (-not $ProjectPath) {
45
+ $ProjectPath = (Resolve-Path (Join-Path $toolkitRoot '..')).Path
46
+ }
47
+ $projectRoot = Resolve-Path -LiteralPath $ProjectPath
48
+ $skillsDest = Join-Path $projectRoot '.claude/skills'
49
+ Write-Host "Scope: project (installing to $skillsDest)"
50
+ }
51
+
52
+ $skillsSource = Join-Path $toolkitRoot 'skills-claude'
53
+ if (-not (Test-Path -LiteralPath $skillsSource)) {
54
+ throw "Claude skills source not found: $skillsSource"
55
+ }
56
+
57
+ $skillCount = 0
58
+ foreach ($skillDir in (Get-ChildItem -Path $skillsSource -Directory)) {
59
+ $srcFile = Join-Path $skillDir.FullName 'SKILL.md'
60
+ if (-not (Test-Path -LiteralPath $srcFile)) { continue }
61
+
62
+ $destFile = Join-Path $skillsDest "$($skillDir.Name)/SKILL.md"
63
+ Copy-File -SourcePath $srcFile -DestinationPath $destFile -Overwrite ([bool]$Force)
64
+ $skillCount++
65
+ }
66
+
67
+ # Install reference files
68
+ $refDest = Join-Path $skillsDest 'references'
69
+ if (-not (Test-Path -LiteralPath $refDest)) {
70
+ New-Item -ItemType Directory -Force -Path $refDest | Out-Null
71
+ }
72
+
73
+ $refCount = 0
74
+ $missingRefs = @()
75
+
76
+ # 6 files from toolkit/templates/docs/
77
+ $templateRefs = @(
78
+ @{ Src = 'templates/docs/api/YAML_CREATION_RULES.md' },
79
+ @{ Src = 'templates/docs/api/API_DESIGN_FLOWCHART_CREATION_RULES.md' },
80
+ @{ Src = 'templates/docs/api/FLOWCHART_CREATION_RULES.md' },
81
+ @{ Src = 'templates/docs/api/API_DESIGN_CREATION_RULES.md' },
82
+ @{ Src = 'templates/docs/specs/FLOW_ACTION_SPEC_CREATION_RULES.md' },
83
+ @{ Src = 'templates/docs/qa/TEST_CASE_CREATION_RULES.md' }
84
+ )
85
+
86
+ foreach ($ref in $templateRefs) {
87
+ $srcPath = Join-Path $toolkitRoot $ref.Src
88
+ $fileName = Split-Path -Leaf $srcPath
89
+ $destPath = Join-Path $refDest $fileName
90
+ if (Test-Path -LiteralPath $srcPath) {
91
+ Copy-File -SourcePath $srcPath -DestinationPath $destPath -Overwrite ([bool]$Force)
92
+ $refCount++
93
+ } else {
94
+ $missingRefs += $srcPath
95
+ }
96
+ }
97
+
98
+ # 3 files from toolkit/skills/sdtk-screen-design-spec/references/
99
+ $screenRefs = @('numbering-rules.md', 'figma-mcp.md', 'excel-image-export.md')
100
+ foreach ($fileName in $screenRefs) {
101
+ $srcPath = Join-Path $toolkitRoot "skills/sdtk-screen-design-spec/references/$fileName"
102
+ $destPath = Join-Path $refDest $fileName
103
+ if (Test-Path -LiteralPath $srcPath) {
104
+ Copy-File -SourcePath $srcPath -DestinationPath $destPath -Overwrite ([bool]$Force)
105
+ $refCount++
106
+ } else {
107
+ $missingRefs += $srcPath
108
+ }
109
+ }
110
+
111
+ # Fail-fast: abort if any reference files are missing
112
+ if ($missingRefs.Count -gt 0) {
113
+ $list = ($missingRefs | ForEach-Object { " - $_" }) -join "`n"
114
+ throw "Claude install failed. Missing reference files:`n$list"
115
+ }
116
+
117
+ # Strict count assertions
118
+ $expectedSkills = 13
119
+ $expectedRefs = 9
120
+ if ($skillCount -ne $expectedSkills) {
121
+ throw "Claude install failed. Expected $expectedSkills skills but installed $skillCount."
122
+ }
123
+ if ($refCount -ne $expectedRefs) {
124
+ throw "Claude install failed. Expected $expectedRefs reference files but installed $refCount."
125
+ }
126
+
127
+ Write-Host " Skills installed: $skillCount"
128
+ Write-Host " Reference files : $refCount"
129
+ Write-Host " Destination : $skillsDest"
@@ -1,7 +1,15 @@
1
1
  param(
2
+ [ValidateSet('project', 'user')]
3
+ [string]$Scope = 'user',
2
4
  [switch]$Force
3
5
  )
4
6
 
7
+ # Gate C0: Codex does not support project-local skills
8
+ if ($Scope -eq 'project') {
9
+ Write-Error "Codex does not support project-local skills. Use --scope user instead."
10
+ exit 1
11
+ }
12
+
5
13
  $ErrorActionPreference = 'Stop'
6
14
  Set-StrictMode -Version Latest
7
15
 
@@ -0,0 +1,139 @@
1
+ param(
2
+ [string]$ProjectPath,
3
+ [ValidateSet('project', 'user')]
4
+ [string]$Scope = 'project',
5
+ [string]$SkillName,
6
+ [switch]$All,
7
+ [switch]$BackupExisting,
8
+ [string]$BackupPath
9
+ )
10
+
11
+ $ErrorActionPreference = 'Stop'
12
+ Set-StrictMode -Version Latest
13
+
14
+ function Backup-Directory {
15
+ param(
16
+ [Parameter(Mandatory = $true)][string]$SourcePath,
17
+ [Parameter(Mandatory = $true)][string]$BackupRoot,
18
+ [Parameter(Mandatory = $true)][string]$Name
19
+ )
20
+
21
+ if (-not (Test-Path -LiteralPath $SourcePath)) {
22
+ return $null
23
+ }
24
+
25
+ New-Item -ItemType Directory -Force -Path $BackupRoot | Out-Null
26
+ $dest = Join-Path $BackupRoot $Name
27
+ if (Test-Path -LiteralPath $dest) {
28
+ Remove-Item -LiteralPath $dest -Recurse -Force
29
+ }
30
+ Copy-Item -LiteralPath $SourcePath -Destination $dest -Recurse -Force
31
+ return $dest
32
+ }
33
+
34
+ if ($All -and $SkillName) {
35
+ throw "Use either -All or -SkillName, not both."
36
+ }
37
+
38
+ $toolkitRoot = Resolve-Path (Join-Path $PSScriptRoot '..')
39
+ $skillsSrc = Join-Path $toolkitRoot 'skills-claude'
40
+ if (-not (Test-Path -LiteralPath $skillsSrc)) {
41
+ throw "Missing toolkit Claude skills source directory: $skillsSrc"
42
+ }
43
+
44
+ $managedSkillNames = Get-ChildItem -LiteralPath $skillsSrc -Directory | Select-Object -ExpandProperty Name
45
+ if (-not $managedSkillNames -or $managedSkillNames.Count -eq 0) {
46
+ throw "No managed Claude skills found in: $skillsSrc"
47
+ }
48
+
49
+ $targetNames = @()
50
+ if ($SkillName) {
51
+ if ($managedSkillNames -notcontains $SkillName) {
52
+ throw "Skill '$SkillName' is not in managed Claude skills list. Known skills: $($managedSkillNames -join ', ')"
53
+ }
54
+ $targetNames = @($SkillName)
55
+ } elseif ($All) {
56
+ $targetNames = @($managedSkillNames)
57
+ } else {
58
+ $targetNames = @($managedSkillNames)
59
+ }
60
+
61
+ # Resolve destination based on scope
62
+ if ($Scope -eq 'user') {
63
+ $skillsDest = Join-Path $HOME '.claude/skills'
64
+ } else {
65
+ if (-not $ProjectPath) {
66
+ $ProjectPath = (Resolve-Path (Join-Path $toolkitRoot '..')).Path
67
+ }
68
+ $projectRoot = Resolve-Path -LiteralPath $ProjectPath
69
+ $skillsDest = Join-Path $projectRoot '.claude/skills'
70
+ }
71
+
72
+ if (-not (Test-Path -LiteralPath $skillsDest)) {
73
+ Write-Host "Claude skills directory not found: $skillsDest"
74
+ exit 0
75
+ }
76
+
77
+ $backupRootResolved = $null
78
+ if ($BackupExisting) {
79
+ if (-not $BackupPath -or $BackupPath.Trim().Length -eq 0) {
80
+ $timestamp = Get-Date -Format 'yyyyMMdd-HHmmss'
81
+ $parentDir = if ($Scope -eq 'user') { Join-Path $HOME '.claude' } else { $projectRoot }
82
+ $BackupPath = Join-Path $parentDir (Join-Path 'skills-backups' ("uninstall-" + $timestamp))
83
+ }
84
+ New-Item -ItemType Directory -Force -Path $BackupPath | Out-Null
85
+ $backupRootResolved = (Resolve-Path -LiteralPath $BackupPath).Path
86
+ Write-Host "Backup mode enabled: $backupRootResolved"
87
+ }
88
+
89
+ $removed = New-Object System.Collections.Generic.List[string]
90
+ $missing = New-Object System.Collections.Generic.List[string]
91
+
92
+ foreach ($name in $targetNames) {
93
+ $dest = Join-Path $skillsDest $name
94
+ if (-not (Test-Path -LiteralPath $dest)) {
95
+ $missing.Add($name) | Out-Null
96
+ Write-Warning "Skill not installed, skipping: $name"
97
+ continue
98
+ }
99
+
100
+ if ($BackupExisting) {
101
+ $backupDest = Backup-Directory -SourcePath $dest -BackupRoot $backupRootResolved -Name $name
102
+ if ($backupDest) {
103
+ Write-Host "Backed up: $name -> $backupDest"
104
+ }
105
+ }
106
+
107
+ Remove-Item -LiteralPath $dest -Recurse -Force
108
+ $removed.Add($name) | Out-Null
109
+ Write-Host "Uninstalled: $name"
110
+ }
111
+
112
+ # Also remove references directory if uninstalling all
113
+ if ($All -or (-not $SkillName)) {
114
+ $refDir = Join-Path $skillsDest 'references'
115
+ if (Test-Path -LiteralPath $refDir) {
116
+ if ($BackupExisting) {
117
+ Backup-Directory -SourcePath $refDir -BackupRoot $backupRootResolved -Name 'references' | Out-Null
118
+ Write-Host "Backed up: references -> $backupRootResolved/references"
119
+ }
120
+ Remove-Item -LiteralPath $refDir -Recurse -Force
121
+ Write-Host "Removed references directory."
122
+ }
123
+ }
124
+
125
+ Write-Host ""
126
+ Write-Host "Uninstall summary:"
127
+ Write-Host "- Scope: $Scope"
128
+ Write-Host "- Destination: $skillsDest"
129
+ Write-Host "- Removed: $($removed.Count)"
130
+ if ($removed.Count -gt 0) {
131
+ $removed | ForEach-Object { Write-Host " - $_" }
132
+ }
133
+ Write-Host "- Missing/Skipped: $($missing.Count)"
134
+ if ($missing.Count -gt 0) {
135
+ $missing | ForEach-Object { Write-Host " - $_" }
136
+ }
137
+ if ($backupRootResolved) {
138
+ Write-Host "- Backup directory: $backupRootResolved"
139
+ }
@@ -23,16 +23,17 @@ description: Generate OpenAPI 3.x YAML and PlantUML flow diagrams for a feature
23
23
  2. Read and apply split API rule sources:
24
24
  - `./references/YAML_CREATION_RULES.md` for YAML contract rules
25
25
  - `./references/API_DESIGN_FLOWCHART_CREATION_RULES.md` for flow list / flowchart rules
26
- 3. Define endpoints mapped to UC-xx; keep path naming consistent across CRUD/search/list/mst patterns.
26
+ 3. Define endpoints mapped to UC-xx; keep path naming consistent across CRUD/search/list/mst patterns and apply `governance/ai/core/SDTK_API_PATH_STYLE_POLICY.md` for canonical resource naming.
27
27
  4. For each endpoint, document request/response schema and error cases.
28
28
  5. Generate/update endpoint markdown (`[FEATURE_KEY]_ENDPOINTS.md`) with summary tables, API type grouping, and screen-logic mapping.
29
- 6. Generate PlantUML flows including: auth, permission check, validation, main logic, error exits.
29
+ 6. Generate PlantUML flows including auth, permission check, validation, main logic, and error exits.
30
30
  7. Ensure traceability notes reference UC/BR where relevant.
31
- 8. Validate English output hygiene when generating English artifacts:
31
+ 8. For benchmark runs, if the requirement or upstream artifacts mark an OQ as expected OPEN, keep that ambiguity explicit in flow list / endpoint docs instead of silently collapsing it.
32
+ 9. Validate English output hygiene when generating English artifacts:
32
33
  - no mixed-language leftovers in narrative text
33
34
  - no mojibake/encoding corruption markers
34
35
  - terminology consistency across endpoint detail, summary tables, and flow labels
35
- 9. If orchestrator mode requires API design detail generation (`apiDesignDetailMode=auto/on`), handoff to `sdtk-api-design-spec` after YAML + flow list are updated.
36
+ 10. If orchestrator mode requires API design detail generation (`apiDesignDetailMode=auto/on`), handoff to `sdtk-api-design-spec` after YAML + flow list are updated.
36
37
 
37
38
  ## Reference
38
39
  - Deeper analysis: `docs/specs/API_DOC_SKILL_ANALYSIS.md` (if present).