agentic-skill-mill 1.0.6 → 1.0.8

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
@@ -12,12 +12,24 @@ bash install-local.sh # local repo setup (auto-detect tools)
12
12
  bash install-local.sh --all # local repo setup for all tools
13
13
  ```
14
14
 
15
+ ```powershell
16
+ npm install
17
+ npm run build
18
+ npm run compile
19
+ powershell -ExecutionPolicy Bypass -File .\install-local.ps1
20
+ powershell -ExecutionPolicy Bypass -File .\install-local.ps1 --all
21
+ ```
22
+
15
23
  ## One-Line Remote Install (No Clone)
16
24
 
17
25
  ```bash
18
26
  bash <(curl -fsSL https://agenticskillmill.com/install.sh) --all
19
27
  ```
20
28
 
29
+ ```powershell
30
+ powershell -ExecutionPolicy Bypass -Command "& ([ScriptBlock]::Create((Invoke-RestMethod 'https://agenticskillmill.com/install.ps1'))) --all"
31
+ ```
32
+
21
33
  This bootstrap script installs the npm utility library globally, then installs skills for the targets you specify.
22
34
 
23
35
  ## Architecture
@@ -81,14 +93,16 @@ compiled/ # Machine-generated, one subdir per IDE target
81
93
  contributions/ # Field observations from real runs
82
94
  site/ # GitHub Pages site (agenticskillmill.com)
83
95
  install-local.sh # One-command local setup: build CLI + install skills
96
+ install-local.ps1 # One-command local setup for Windows PowerShell
84
97
  install.sh # One-command remote bootstrap: install package + skills
98
+ install.ps1 # One-command remote bootstrap for Windows PowerShell
85
99
  ```
86
100
 
87
101
  ## How to Add a Skill
88
102
 
89
103
  1. Create the source file at `skill/skills/<name>/<name>.md` with YAML frontmatter
90
104
  2. Register it in `skill/build/manifest.json`
91
- 3. Add the skill name to the `SKILLS` array in `install-local.sh`
105
+ 3. Add the skill name to the `SKILLS` array in `install-local.sh` and `install-local.ps1`
92
106
  4. Compile and validate: `npm run compile && npm run compile:validate`
93
107
 
94
108
  ## How to Add a Fragment
@@ -148,3 +162,15 @@ Workflow behavior:
148
162
  5. `npm run compile:validate`
149
163
  6. `git push --follow-tags`
150
164
  7. `npm publish --access public`
165
+
166
+ ## Ecosystem
167
+
168
+ Agentic Skill Mill is the parent project that defines the skill-system-template architecture. The following projects are built on the same fragment-composition, 7-target compilation, and companion-CLI pattern:
169
+
170
+ | Project | What it does | Site | Repo |
171
+ |---------|-------------|------|------|
172
+ | **[AgentThreader](https://github.com/barretts/AgentThreader)** | Manifest-driven agentic CLI orchestration with structured contracts, resumable state, and bounded self-healing | [agentthreader.com](https://agentthreader.com) | [GitHub](https://github.com/barretts/AgentThreader) |
173
+ | **[TechDemoDirector](https://github.com/barretts/TechDemoDirector)** | Code walk-through presentation scripting with file:line references and speaker notes | [Site](https://barretts.github.io/TechDemoDirector) | [GitHub](https://github.com/barretts/TechDemoDirector) |
174
+ | **[AgentHistoric](https://github.com/barretts/AgentHistoric)** | Mixture-of-Experts persona prompt system with philosophical grounding and adversarial verification | [agenthistoric.com](https://agenthistoric.com) | [GitHub](https://github.com/barretts/AgentHistoric) |
175
+
176
+ AgentHistoric shares the compilation tooling but has its own MoE routing layer and regression suite. The other two are direct descendants of the skill-system-template.
@@ -0,0 +1,385 @@
1
+ $ErrorActionPreference = 'Stop'
2
+
3
+ $ProjectName = 'agentic-skill-mill'
4
+ $CliBinName = 'skillmill'
5
+ $ManagedMarker = 'managed_by: agentic-skill-mill'
6
+ $Skills = @('agentic-skill-mill')
7
+ $SkillDir = Split-Path -Parent $MyInvocation.MyCommand.Path
8
+ $UserHome = [Environment]::GetFolderPath('UserProfile')
9
+ $AppData = [Environment]::GetFolderPath('ApplicationData')
10
+ $CodeXHomeDir = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { Join-Path $UserHome '.codex' }
11
+
12
+ $ClaudeSkillsDir = Join-Path $UserHome '.claude\skills'
13
+ $CursorRulesDir = Join-Path $UserHome '.cursor\rules'
14
+ $CursorSkillsDir = Join-Path $UserHome '.cursor\skills'
15
+ $WindsurfRulesDir = Join-Path $UserHome '.windsurf\rules'
16
+ $WindsurfSkillsDir = Join-Path $UserHome '.codeium\windsurf\skills'
17
+ $OpenCodeAgentsDirs = @(
18
+ Join-Path $AppData 'opencode\agents',
19
+ Join-Path $UserHome '.opencode\agents'
20
+ )
21
+ $CodeXSkillsDir = Join-Path $CodeXHomeDir 'skills'
22
+ $CompiledDir = Join-Path $SkillDir 'compiled'
23
+
24
+ function Show-Help {
25
+ Write-Host 'Usage: powershell -ExecutionPolicy Bypass -File .\install-local.ps1 [options]'
26
+ Write-Host ''
27
+ Write-Host 'Options:'
28
+ Write-Host ' --claude Install skills for Claude Code'
29
+ Write-Host ' --cursor Install skills for Cursor'
30
+ Write-Host ' --windsurf Install skills for Windsurf'
31
+ Write-Host ' --opencode Install skills for OpenCode'
32
+ Write-Host ' --codex Install skills for Codex'
33
+ Write-Host ' --all Install for all five tools'
34
+ Write-Host ' --skills-only Skip npm install/build/link (just copy skills)'
35
+ Write-Host ' --uninstall Remove installed skills from target tools'
36
+ Write-Host ' --compile-only Generate compiled/ output directory (no install)'
37
+ Write-Host ' -h, --help Show this help'
38
+ Write-Host ''
39
+ Write-Host 'No flags = auto-detect installed tools.'
40
+ }
41
+
42
+ function Invoke-Step {
43
+ param(
44
+ [Parameter(Mandatory = $true)][string]$FilePath,
45
+ [string[]]$Arguments = @(),
46
+ [string]$WorkingDirectory = $SkillDir,
47
+ [switch]$AllowFailure
48
+ )
49
+
50
+ $argText = if ($Arguments.Count -gt 0) { ' ' + ($Arguments -join ' ') } else { '' }
51
+ Write-Host ("> {0}{1}" -f $FilePath, $argText)
52
+ Push-Location $WorkingDirectory
53
+ try {
54
+ & $FilePath @Arguments
55
+ if (-not $AllowFailure -and $LASTEXITCODE -ne 0) {
56
+ throw "Command failed with exit code $LASTEXITCODE: $FilePath$argText"
57
+ }
58
+ }
59
+ finally {
60
+ Pop-Location
61
+ }
62
+ }
63
+
64
+ function Ensure-Directory {
65
+ param([Parameter(Mandatory = $true)][string]$Path)
66
+ New-Item -ItemType Directory -Force -Path $Path | Out-Null
67
+ }
68
+
69
+ function Remove-ManagedFiles {
70
+ param([Parameter(Mandatory = $true)][string]$Path)
71
+
72
+ if (-not (Test-Path -LiteralPath $Path -PathType Container)) {
73
+ return
74
+ }
75
+
76
+ Get-ChildItem -LiteralPath $Path -Recurse -File | ForEach-Object {
77
+ $file = $_
78
+ $matches = Select-String -Path $file.FullName -SimpleMatch -Pattern $ManagedMarker -Quiet -ErrorAction SilentlyContinue
79
+ if ($matches) {
80
+ Remove-Item -LiteralPath $file.FullName -Force
81
+ Write-Host " Removed: $($file.FullName)"
82
+ $parent = Split-Path -Parent $file.FullName
83
+ if ($parent -and ([IO.Path]::GetFullPath($parent) -ne [IO.Path]::GetFullPath($Path))) {
84
+ try {
85
+ Remove-Item -LiteralPath $parent -Force -ErrorAction Stop
86
+ }
87
+ catch {
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ function Install-Claude {
95
+ param([Parameter(Mandatory = $true)][string]$SkillName)
96
+ $src = Join-Path $CompiledDir "claude\$SkillName\SKILL.md"
97
+ $destDir = Join-Path $ClaudeSkillsDir $SkillName
98
+ Ensure-Directory -Path $destDir
99
+ Copy-Item -LiteralPath $src -Destination (Join-Path $destDir 'SKILL.md') -Force
100
+ Write-Host " Claude: $(Join-Path $destDir 'SKILL.md')"
101
+ }
102
+
103
+ function Install-Cursor {
104
+ param([Parameter(Mandatory = $true)][string]$SkillName)
105
+ $srcRule = Join-Path $CompiledDir "cursor\rules\$SkillName.mdc"
106
+ Ensure-Directory -Path $CursorRulesDir
107
+ Copy-Item -LiteralPath $srcRule -Destination (Join-Path $CursorRulesDir "$SkillName.mdc") -Force
108
+ Write-Host " Cursor (rule): $(Join-Path $CursorRulesDir "$SkillName.mdc")"
109
+ $srcSkill = Join-Path $CompiledDir "cursor\skills\$SkillName\SKILL.md"
110
+ $destDir = Join-Path $CursorSkillsDir $SkillName
111
+ Ensure-Directory -Path $destDir
112
+ Copy-Item -LiteralPath $srcSkill -Destination (Join-Path $destDir 'SKILL.md') -Force
113
+ Write-Host " Cursor (skill): $(Join-Path $destDir 'SKILL.md')"
114
+ }
115
+
116
+ function Install-Windsurf {
117
+ param([Parameter(Mandatory = $true)][string]$SkillName)
118
+ $srcRule = Join-Path $CompiledDir "windsurf\rules\$SkillName.md"
119
+ Ensure-Directory -Path $WindsurfRulesDir
120
+ Copy-Item -LiteralPath $srcRule -Destination (Join-Path $WindsurfRulesDir "$SkillName.md") -Force
121
+ Write-Host " Windsurf (rule): $(Join-Path $WindsurfRulesDir "$SkillName.md")"
122
+ $srcSkill = Join-Path $CompiledDir "windsurf\skills\$SkillName\SKILL.md"
123
+ $destDir = Join-Path $WindsurfSkillsDir $SkillName
124
+ Ensure-Directory -Path $destDir
125
+ Copy-Item -LiteralPath $srcSkill -Destination (Join-Path $destDir 'SKILL.md') -Force
126
+ Write-Host " Windsurf (skill): $(Join-Path $destDir 'SKILL.md')"
127
+ }
128
+
129
+ function Install-OpenCode {
130
+ param([Parameter(Mandatory = $true)][string]$SkillName)
131
+ $src = Join-Path $CompiledDir "opencode\$SkillName.md"
132
+ $destRoot = $OpenCodeAgentsDirs[0]
133
+ Ensure-Directory -Path $destRoot
134
+ Copy-Item -LiteralPath $src -Destination (Join-Path $destRoot "$SkillName.md") -Force
135
+ Write-Host " OpenCode: $(Join-Path $destRoot "$SkillName.md")"
136
+ }
137
+
138
+ function Install-Codex {
139
+ param([Parameter(Mandatory = $true)][string]$SkillName)
140
+ $src = Join-Path $CompiledDir "codex\$SkillName\SKILL.md"
141
+ $destDir = Join-Path $CodeXSkillsDir $SkillName
142
+ Ensure-Directory -Path $destDir
143
+ Copy-Item -LiteralPath $src -Destination (Join-Path $destDir 'SKILL.md') -Force
144
+ Write-Host " Codex: $(Join-Path $destDir 'SKILL.md')"
145
+ }
146
+
147
+ function Uninstall-Claude {
148
+ foreach ($skill in $Skills) {
149
+ $path = Join-Path $ClaudeSkillsDir $skill
150
+ if (Test-Path -LiteralPath $path) {
151
+ Remove-Item -LiteralPath $path -Recurse -Force
152
+ }
153
+ }
154
+ Write-Host ' Claude: removed'
155
+ }
156
+
157
+ function Uninstall-Cursor {
158
+ foreach ($skill in $Skills) {
159
+ $rulePath = Join-Path $CursorRulesDir "$skill.mdc"
160
+ $skillPath = Join-Path $CursorSkillsDir $skill
161
+ if (Test-Path -LiteralPath $rulePath) {
162
+ Remove-Item -LiteralPath $rulePath -Force
163
+ }
164
+ if (Test-Path -LiteralPath $skillPath) {
165
+ Remove-Item -LiteralPath $skillPath -Recurse -Force
166
+ }
167
+ }
168
+ Write-Host ' Cursor: removed'
169
+ }
170
+
171
+ function Uninstall-Windsurf {
172
+ foreach ($skill in $Skills) {
173
+ $rulePath = Join-Path $WindsurfRulesDir "$skill.md"
174
+ $skillPath = Join-Path $WindsurfSkillsDir $skill
175
+ if (Test-Path -LiteralPath $rulePath) {
176
+ Remove-Item -LiteralPath $rulePath -Force
177
+ }
178
+ if (Test-Path -LiteralPath $skillPath) {
179
+ Remove-Item -LiteralPath $skillPath -Recurse -Force
180
+ }
181
+ }
182
+ Write-Host ' Windsurf: removed'
183
+ }
184
+
185
+ function Uninstall-OpenCode {
186
+ foreach ($root in $OpenCodeAgentsDirs) {
187
+ foreach ($skill in $Skills) {
188
+ $path = Join-Path $root "$skill.md"
189
+ if (Test-Path -LiteralPath $path) {
190
+ Remove-Item -LiteralPath $path -Force
191
+ }
192
+ }
193
+ }
194
+ Write-Host ' OpenCode: removed'
195
+ }
196
+
197
+ function Uninstall-Codex {
198
+ foreach ($skill in $Skills) {
199
+ $path = Join-Path $CodeXSkillsDir $skill
200
+ if (Test-Path -LiteralPath $path) {
201
+ Remove-Item -LiteralPath $path -Recurse -Force
202
+ }
203
+ }
204
+ Write-Host ' Codex: removed'
205
+ }
206
+
207
+ function Get-DetectedEditors {
208
+ $detected = New-Object System.Collections.Generic.List[string]
209
+ if (Test-Path -LiteralPath (Join-Path $UserHome '.claude')) { $detected.Add('claude') }
210
+ if (Test-Path -LiteralPath (Join-Path $UserHome '.cursor')) { $detected.Add('cursor') }
211
+ if ((Test-Path -LiteralPath (Join-Path $UserHome '.windsurf')) -or (Test-Path -LiteralPath (Join-Path $UserHome '.codeium\windsurf'))) { $detected.Add('windsurf') }
212
+ foreach ($root in $OpenCodeAgentsDirs) {
213
+ $parent = Split-Path -Parent $root
214
+ if (Test-Path -LiteralPath $parent) {
215
+ $detected.Add('opencode')
216
+ break
217
+ }
218
+ }
219
+ if ($env:CODEX_HOME -or (Test-Path -LiteralPath $CodeXHomeDir)) { $detected.Add('codex') }
220
+ return $detected.ToArray()
221
+ }
222
+
223
+ $targets = New-Object System.Collections.Generic.List[string]
224
+ $doBuild = $true
225
+ $doUninstall = $false
226
+ $doCompileOnly = $false
227
+
228
+ for ($i = 0; $i -lt $args.Count; $i++) {
229
+ switch ($args[$i]) {
230
+ '--claude' { $targets.Add('claude'); continue }
231
+ '--cursor' { $targets.Add('cursor'); continue }
232
+ '--windsurf' { $targets.Add('windsurf'); continue }
233
+ '--opencode' { $targets.Add('opencode'); continue }
234
+ '--codex' { $targets.Add('codex'); continue }
235
+ '--all' {
236
+ $targets.Clear()
237
+ @('claude', 'cursor', 'windsurf', 'opencode', 'codex') | ForEach-Object { $targets.Add($_) }
238
+ continue
239
+ }
240
+ '--skills-only' { $doBuild = $false; continue }
241
+ '--uninstall' { $doUninstall = $true; continue }
242
+ '--compile-only' { $doCompileOnly = $true; continue }
243
+ '--help' { Show-Help; exit 0 }
244
+ '-h' { Show-Help; exit 0 }
245
+ default {
246
+ Write-Error "Unknown option: $($args[$i])`nRun: powershell -ExecutionPolicy Bypass -File .\install-local.ps1 --help"
247
+ }
248
+ }
249
+ }
250
+
251
+ if ($doCompileOnly) {
252
+ Write-Host '==> Delegating to compile.mjs...'
253
+ Invoke-Step -FilePath 'node' -Arguments @((Join-Path $SkillDir 'skill\build\compile.mjs'))
254
+ exit 0
255
+ }
256
+
257
+ if ($targets.Count -eq 0) {
258
+ (Get-DetectedEditors) | ForEach-Object { $targets.Add($_) }
259
+ }
260
+
261
+ if ($targets.Count -eq 0) {
262
+ throw 'ERROR: No supported tools detected. Use --claude, --cursor, --windsurf, --opencode, or --codex.'
263
+ }
264
+
265
+ Write-Host "==> $ProjectName setup"
266
+ Write-Host " Project: $SkillDir"
267
+ Write-Host " Targets: $($targets -join ' ')"
268
+ Write-Host ''
269
+
270
+ if ($doUninstall) {
271
+ Write-Host "==> Uninstalling $ProjectName"
272
+ Write-Host " Targets: $($targets -join ' ')"
273
+ Write-Host ''
274
+
275
+ foreach ($target in $targets) {
276
+ switch ($target) {
277
+ 'claude' { Uninstall-Claude }
278
+ 'cursor' { Uninstall-Cursor }
279
+ 'windsurf' { Uninstall-Windsurf }
280
+ 'opencode' { Uninstall-OpenCode }
281
+ 'codex' { Uninstall-Codex }
282
+ }
283
+ }
284
+
285
+ Write-Host "--> Removing $CliBinName CLI..."
286
+ Invoke-Step -FilePath 'npm' -Arguments @('unlink', $ProjectName) -AllowFailure
287
+ $skillmillCmd = Get-Command $CliBinName -ErrorAction SilentlyContinue
288
+ if ($skillmillCmd) {
289
+ Write-Host " WARNING: $CliBinName still in PATH at $($skillmillCmd.Source)"
290
+ }
291
+ else {
292
+ Write-Host " $CliBinName removed"
293
+ }
294
+
295
+ Write-Host ''
296
+ Write-Host '==> Done. Skills and CLI removed.'
297
+ exit 0
298
+ }
299
+
300
+ if ($doBuild) {
301
+ Write-Host '--> Installing dependencies...'
302
+ Invoke-Step -FilePath 'npm' -Arguments @('install')
303
+
304
+ Write-Host '--> Cleaning previous build...'
305
+ $distDir = Join-Path $SkillDir 'dist'
306
+ if (Test-Path -LiteralPath $distDir) {
307
+ Remove-Item -LiteralPath $distDir -Recurse -Force
308
+ }
309
+
310
+ Write-Host '--> Building TypeScript...'
311
+ Invoke-Step -FilePath 'npm' -Arguments @('run', 'build')
312
+
313
+ Write-Host '--> Compiling skills...'
314
+ Invoke-Step -FilePath 'npm' -Arguments @('run', 'compile')
315
+
316
+ Write-Host "--> Installing $CliBinName CLI globally..."
317
+ Invoke-Step -FilePath 'npm' -Arguments @('link')
318
+
319
+ $npmPrefix = (& npm prefix -g).Trim()
320
+ if ($LASTEXITCODE -ne 0) {
321
+ throw 'Failed to determine npm global prefix.'
322
+ }
323
+ $candidateBins = @(
324
+ Join-Path $npmPrefix "$CliBinName.cmd",
325
+ Join-Path $npmPrefix $CliBinName,
326
+ Join-Path (Join-Path $npmPrefix 'bin') "$CliBinName.cmd",
327
+ Join-Path (Join-Path $npmPrefix 'bin') $CliBinName
328
+ )
329
+ $cliPath = $candidateBins | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
330
+ if ($cliPath) {
331
+ Write-Host " $CliBinName: $cliPath"
332
+ $cliVersion = (& $cliPath --version 2>$null)
333
+ if ($LASTEXITCODE -eq 0 -and $cliVersion) {
334
+ Write-Host " version: $cliVersion"
335
+ }
336
+ else {
337
+ Write-Host ' version: unknown'
338
+ }
339
+ }
340
+ else {
341
+ Write-Host " WARNING: $CliBinName not found under npm global prefix after npm link."
342
+ Write-Host ' Try running: npm link'
343
+ }
344
+ }
345
+
346
+ Write-Host "--> Cleaning stale $ProjectName files..."
347
+ foreach ($target in $targets) {
348
+ switch ($target) {
349
+ 'claude' { Remove-ManagedFiles -Path $ClaudeSkillsDir }
350
+ 'cursor' {
351
+ Remove-ManagedFiles -Path $CursorRulesDir
352
+ Remove-ManagedFiles -Path $CursorSkillsDir
353
+ }
354
+ 'windsurf' {
355
+ Remove-ManagedFiles -Path $WindsurfRulesDir
356
+ Remove-ManagedFiles -Path $WindsurfSkillsDir
357
+ }
358
+ 'opencode' {
359
+ foreach ($root in $OpenCodeAgentsDirs) {
360
+ Remove-ManagedFiles -Path $root
361
+ }
362
+ }
363
+ 'codex' { Remove-ManagedFiles -Path $CodeXSkillsDir }
364
+ }
365
+ }
366
+
367
+ Write-Host '--> Installing skills...'
368
+ foreach ($skill in $Skills) {
369
+ Write-Host " ${skill}:"
370
+ foreach ($target in $targets) {
371
+ switch ($target) {
372
+ 'claude' { Install-Claude -SkillName $skill }
373
+ 'cursor' { Install-Cursor -SkillName $skill }
374
+ 'windsurf' { Install-Windsurf -SkillName $skill }
375
+ 'opencode' { Install-OpenCode -SkillName $skill }
376
+ 'codex' { Install-Codex -SkillName $skill }
377
+ }
378
+ }
379
+ }
380
+
381
+ Write-Host ''
382
+ Write-Host '==> Done.'
383
+ Write-Host ''
384
+ Write-Host "Skills installed for: $($targets -join ' ')"
385
+ Write-Host "CLI available as: $CliBinName"
package/install-local.sh CHANGED
File without changes
package/install.ps1 ADDED
@@ -0,0 +1,48 @@
1
+ $ErrorActionPreference = 'Stop'
2
+
3
+ $PackageName = if ($env:SKILLMILL_PACKAGE_NAME) { $env:SKILLMILL_PACKAGE_NAME } else { 'agentic-skill-mill' }
4
+ $PackageVersion = if ($env:SKILLMILL_PACKAGE_VERSION) { $env:SKILLMILL_PACKAGE_VERSION } else { 'latest' }
5
+
6
+ if ($args.Count -gt 0 -and ($args[0] -eq '--help' -or $args[0] -eq '-h')) {
7
+ Write-Host 'Usage: powershell -ExecutionPolicy Bypass -File .\install.ps1 [tool flags]'
8
+ Write-Host ''
9
+ Write-Host "This script installs ${PackageName}@${PackageVersion} globally and then"
10
+ Write-Host 'runs install-local.ps1 --skills-only with the flags you provide.'
11
+ Write-Host ''
12
+ Write-Host 'Examples:'
13
+ Write-Host ' powershell -ExecutionPolicy Bypass -File .\install.ps1 --all'
14
+ Write-Host ' powershell -ExecutionPolicy Bypass -File .\install.ps1 --cursor'
15
+ Write-Host ''
16
+ Write-Host 'Environment overrides:'
17
+ Write-Host ' SKILLMILL_PACKAGE_NAME Package to install (default: agentic-skill-mill)'
18
+ Write-Host ' SKILLMILL_PACKAGE_VERSION Version tag (default: latest)'
19
+ exit 0
20
+ }
21
+
22
+ Write-Host "==> Installing utility library: ${PackageName}@${PackageVersion}"
23
+ & npm install -g "${PackageName}@${PackageVersion}"
24
+ if ($LASTEXITCODE -ne 0) {
25
+ throw 'npm install -g failed.'
26
+ }
27
+
28
+ $globalNodeModules = (& npm root -g).Trim()
29
+ if ($LASTEXITCODE -ne 0 -or -not $globalNodeModules) {
30
+ throw 'Failed to resolve npm global node_modules directory.'
31
+ }
32
+
33
+ $packageDir = Join-Path $globalNodeModules $PackageName
34
+ $localInstaller = Join-Path $packageDir 'install-local.ps1'
35
+
36
+ if (-not (Test-Path -LiteralPath $localInstaller -PathType Leaf)) {
37
+ throw "ERROR: Could not find install-local.ps1 at: $localInstaller`nCheck the package 'files' list to ensure install-local.ps1 is published."
38
+ }
39
+
40
+ Write-Host '==> Installing skills via local installer (skills-only mode)'
41
+ & powershell -ExecutionPolicy Bypass -File $localInstaller --skills-only @args
42
+ if ($LASTEXITCODE -ne 0) {
43
+ throw 'The local PowerShell installer failed.'
44
+ }
45
+
46
+ Write-Host ''
47
+ Write-Host '==> Done.'
48
+ Write-Host 'Utility and skills installed.'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-skill-mill",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Forge and refine agent skill projects -- fragment-composed skills compiled to 7 IDE targets with a companion CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,7 +20,9 @@
20
20
  "skill",
21
21
  "README.md",
22
22
  "install.sh",
23
- "install-local.sh"
23
+ "install-local.sh",
24
+ "install.ps1",
25
+ "install-local.ps1"
24
26
  ],
25
27
  "scripts": {
26
28
  "build": "tsc -p tsconfig.build.json",
@@ -31,8 +33,12 @@
31
33
  "typecheck": "tsc --noEmit",
32
34
  "setup": "bash install-local.sh",
33
35
  "setup:all": "bash install-local.sh --all",
36
+ "setup:windows": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1",
37
+ "setup:windows:all": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1 --all",
34
38
  "install-skills": "bash install-local.sh --skills-only",
39
+ "install-skills:windows": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1 --skills-only",
35
40
  "uninstall-skills": "bash install-local.sh --uninstall",
41
+ "uninstall-skills:windows": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1 --uninstall",
36
42
  "compile": "node skill/build/compile.mjs",
37
43
  "compile:validate": "node skill/build/compile.mjs --validate",
38
44
  "compile:watch": "node skill/build/compile.mjs --watch"