workspace-architect 1.5.44 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,6 +22,8 @@ No installation required! Use directly with `npx`:
22
22
 
23
23
  ```bash
24
24
  npx workspace-architect list
25
+ # or use the shorter alias
26
+ npx wsa list
25
27
  ```
26
28
 
27
29
  Or install globally if you prefer:
@@ -36,18 +38,24 @@ List all available assets:
36
38
 
37
39
  ```bash
38
40
  npx workspace-architect list
41
+ # or use the shorter alias
42
+ npx wsa list
39
43
  ```
40
44
 
41
45
  Download a collection for web development:
42
46
 
43
47
  ```bash
44
48
  npx workspace-architect download collections:web-frontend-development
49
+ # or
50
+ npx wsa download collections:web-frontend-development
45
51
  ```
46
52
 
47
53
  Download a specific agent:
48
54
 
49
55
  ```bash
50
56
  npx workspace-architect download agents:azure-architect
57
+ # or
58
+ npx wsa download agents:azure-architect
51
59
  ```
52
60
 
53
61
  ## Usage
@@ -59,12 +67,14 @@ View all available assets or filter by type:
59
67
  ```bash
60
68
  # List all assets
61
69
  npx workspace-architect list
70
+ # or
71
+ npx wsa list
62
72
 
63
73
  # List specific types
64
74
  npx workspace-architect list instructions
65
- npx workspace-architect list agents
66
- npx workspace-architect list prompts
67
- npx workspace-architect list collections
75
+ npx wsa list agents
76
+ npx wsa list prompts
77
+ npx wsa list collections
68
78
  ```
69
79
 
70
80
  ### Downloading Assets
@@ -73,19 +83,21 @@ Download assets to your project (default location: `.github/<type>/`):
73
83
 
74
84
  ```bash
75
85
  npx workspace-architect download <type>:<name>
86
+ # or
87
+ npx wsa download <type>:<name>
76
88
  ```
77
89
 
78
90
  **Examples:**
79
91
 
80
92
  ```bash
81
93
  # Download an instruction
82
- npx workspace-architect download instructions:reactjs
94
+ npx wsa download instructions:reactjs
83
95
 
84
96
  # Download an agent
85
- npx workspace-architect download agents:planner
97
+ npx wsa download agents:planner
86
98
 
87
99
  # Download a complete collection
88
- npx workspace-architect download collections:devops-essentials
100
+ npx wsa download collections:devops-essentials
89
101
  ```
90
102
 
91
103
  ### CLI Options
@@ -96,15 +108,38 @@ npx workspace-architect download collections:devops-essentials
96
108
 
97
109
  ## Asset Types
98
110
 
99
- Workspace Architect provides four types of assets:
111
+ Workspace Architect provides five types of assets:
100
112
 
101
113
  | Type | Description | Location |
102
114
  |------|-------------|----------|
103
115
  | **Instructions** | System-level guidelines for Copilot context | `.github/copilot-instructions.md` |
104
116
  | **Prompts** | Reusable templates for specific tasks | `.github/prompts/` |
105
117
  | **Agents** | Specialized personas defining Copilot behavior | `.github/agents/` |
118
+ | **Skills** | Claude Skills with templates, scripts, and resources | `.github/skills/` |
106
119
  | **Collections** | Bundled assets for specific domains or workflows | Multiple locations |
107
120
 
121
+ ### What are Skills?
122
+
123
+ **Skills** are an emerging standard for packaging AI agent capabilities. Compatible with Claude, GitHub Copilot, and other AI platforms, Skills are folder-based assets containing:
124
+
125
+ - **SKILL.md**: Main instructions with metadata
126
+ - **Templates**: Document or code templates
127
+ - **Scripts**: Automation scripts (downloaded but not executed)
128
+ - **Resources**: Reference materials and examples
129
+
130
+ Skills follow the [open Agent Skills specification](https://agentskills.io/) and work across multiple AI platforms.
131
+
132
+ **Example:**
133
+ ```bash
134
+ # Download a Skill
135
+ npx workspace-architect download skills:example-planner
136
+
137
+ # List all Skills
138
+ npx workspace-architect list skills
139
+ ```
140
+
141
+ For more information, see [Skills User Guide](docs/skills-guide.md) and [Skills vs Agents](docs/skills-vs-agents.md).
142
+
108
143
  ## Roadmap
109
144
 
110
145
  See [ROADMAP.md](ROADMAP.md) for our development timeline, upcoming features, and current capabilities.
@@ -182,6 +217,7 @@ npm run start:registry
182
217
  # Terminal 2: Publish and test
183
218
  npm run publish:local
184
219
  npx --registry http://localhost:4873 workspace-architect list
220
+ npx --registry http://localhost:4873 wsa list
185
221
  ```
186
222
 
187
223
  ## Project Structure
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.0.0",
3
- "generatedAt": "2025-12-16T23:07:51.294Z",
2
+ "version": "1.1.0",
3
+ "generatedAt": "2026-01-08T01:36:03.988Z",
4
4
  "assets": {
5
5
  "agents:4.1-Beast": {
6
6
  "path": "assets/agents/4.1-Beast.agent.md",
@@ -770,6 +770,12 @@
770
770
  "title": "a11y",
771
771
  "type": "instructions"
772
772
  },
773
+ "instructions:agents": {
774
+ "path": "assets/instructions/agents.instructions.md",
775
+ "description": "Guidelines for creating custom agent files for GitHub Copilot",
776
+ "title": "agents",
777
+ "type": "instructions"
778
+ },
773
779
  "instructions:ai-prompt-engineering-safety-best-practices": {
774
780
  "path": "assets/instructions/ai-prompt-engineering-safety-best-practices.instructions.md",
775
781
  "description": "Comprehensive best practices for AI prompt engineering, safety frameworks, bias mitigation, and responsible AI usage for Copilot and LLMs.",
@@ -2687,6 +2693,15 @@
2687
2693
  "prompts:suggest-awesome-github-copilot-prompts"
2688
2694
  ]
2689
2695
  },
2696
+ "collections:claude-skills-starter": {
2697
+ "path": "assets/collections/claude-skills-starter.json",
2698
+ "description": "Essential Claude Skills for software development, planning, and automation workflows.",
2699
+ "title": "Claude Skills Starter Pack",
2700
+ "type": "collections",
2701
+ "items": [
2702
+ "skills:example-planner"
2703
+ ]
2704
+ },
2690
2705
  "collections:cpp-development": {
2691
2706
  "path": "assets/collections/cpp-development.json",
2692
2707
  "description": "C++ programming language resources.",
@@ -3891,6 +3906,21 @@
3891
3906
  "instructions:java-mcp-server",
3892
3907
  "instructions:typescript-5-es2022"
3893
3908
  ]
3909
+ },
3910
+ "skills:example-planner": {
3911
+ "path": "assets/skills/example-planner",
3912
+ "description": "Create detailed implementation plans for software features and refactoring tasks. Use this skill when planning new features, architectural changes, or major refactoring efforts.",
3913
+ "title": "example-planner",
3914
+ "type": "skills",
3915
+ "files": [
3916
+ "SKILL.md"
3917
+ ],
3918
+ "metadata": {
3919
+ "version": "1.0.0",
3920
+ "maintainer": "workspace-architect",
3921
+ "category": "planning",
3922
+ "license": "MIT"
3923
+ }
3894
3924
  }
3895
3925
  }
3896
3926
  }
package/bin/cli.js CHANGED
@@ -17,19 +17,19 @@ const MANIFEST_PATH = path.join(ROOT_DIR, 'assets-manifest.json');
17
17
  const IS_LOCAL = await fs.pathExists(ASSETS_DIR);
18
18
 
19
19
  program
20
- .name('github-copilot-packed')
21
- .description('CLI to download GitHub Copilot instructions, prompts, and chat modes')
20
+ .name('workspace-architect')
21
+ .description('CLI to download GitHub Copilot instructions, prompts, and agents (alias: wsa)')
22
22
  .version('1.0.0');
23
23
 
24
24
  program
25
25
  .command('list [type]')
26
- .description('List available assets (instructions, prompts, agents, collections)')
26
+ .description('List available assets (instructions, prompts, agents, skills, collections)')
27
27
  .action(async (type) => {
28
28
  try {
29
29
  if (type) {
30
30
  await listAssets(type);
31
31
  } else {
32
- const types = ['instructions', 'prompts', 'agents', 'collections'];
32
+ const types = ['instructions', 'prompts', 'agents', 'skills', 'collections'];
33
33
  for (const t of types) {
34
34
  await listAssets(t);
35
35
  }
@@ -83,13 +83,22 @@ async function listAssets(type) {
83
83
  console.log(chalk.blue.bold(`\nAvailable ${type}:`));
84
84
  for (const file of files) {
85
85
  const filePath = path.join(dirPath, file);
86
+ const stat = await fs.stat(filePath);
86
87
  let description = '';
87
88
 
88
89
  try {
89
- if (type === 'collections') {
90
+ if (type === 'skills' && stat.isDirectory()) {
91
+ // For Skills, read SKILL.md from directory
92
+ const skillMdPath = path.join(filePath, 'SKILL.md');
93
+ if (await fs.pathExists(skillMdPath)) {
94
+ const content = await fs.readFile(skillMdPath, 'utf8');
95
+ const parsed = matter(content);
96
+ description = parsed.data.description || '';
97
+ }
98
+ } else if (type === 'collections') {
90
99
  const content = await fs.readJson(filePath);
91
100
  description = content.description || '';
92
- } else {
101
+ } else if (!stat.isDirectory()) {
93
102
  const content = await fs.readFile(filePath, 'utf8');
94
103
  const parsed = matter(content);
95
104
  description = parsed.data.description || '';
@@ -98,7 +107,7 @@ async function listAssets(type) {
98
107
  // Ignore errors reading metadata
99
108
  }
100
109
 
101
- const name = path.parse(file).name;
110
+ const name = type === 'skills' && stat.isDirectory() ? file : path.parse(file).name;
102
111
  console.log(` - ${name}${description ? ` - ${description}` : ''}`);
103
112
  }
104
113
  } else {
@@ -118,7 +127,8 @@ async function listAssets(type) {
118
127
 
119
128
  console.log(chalk.blue.bold(`\nAvailable ${type}:`));
120
129
  for (const asset of assets) {
121
- console.log(` - ${asset.id}${asset.description ? ` - ${asset.description}` : ''}`);
130
+ const versionInfo = asset.metadata?.version ? ` (v${asset.metadata.version})` : '';
131
+ console.log(` - ${asset.id}${versionInfo}${asset.description ? ` - ${asset.description}` : ''}`);
122
132
  }
123
133
  }
124
134
  }
@@ -130,7 +140,7 @@ async function downloadAsset(id, options) {
130
140
  throw new Error('Invalid ID format. Use type:name (e.g., instructions:basic-setup)');
131
141
  }
132
142
 
133
- const validTypes = ['instructions', 'prompts', 'agents', 'collections'];
143
+ const validTypes = ['instructions', 'prompts', 'agents', 'skills', 'collections'];
134
144
  if (!validTypes.includes(type)) {
135
145
  throw new Error(`Invalid type: ${type}. Valid types are: ${validTypes.join(', ')}`);
136
146
  }
@@ -173,6 +183,12 @@ async function downloadAsset(id, options) {
173
183
  return;
174
184
  }
175
185
 
186
+ // Handle Skills (multi-file folder-based assets)
187
+ if (type === 'skills') {
188
+ await downloadSkill(name, options);
189
+ return;
190
+ }
191
+
176
192
  // Handle Single Asset
177
193
  let content = '';
178
194
  let fileName = '';
@@ -263,4 +279,117 @@ async function downloadAsset(id, options) {
263
279
  console.log(chalk.green(`Successfully downloaded ${fileName} to ${destDir}`));
264
280
  }
265
281
 
282
+ async function downloadSkill(name, options) {
283
+ const skillName = name;
284
+ let skillFiles = [];
285
+ let skillPath = '';
286
+
287
+ if (IS_LOCAL) {
288
+ // Local mode: copy from assets/skills
289
+ skillPath = path.join(ASSETS_DIR, 'skills', skillName);
290
+
291
+ if (!await fs.pathExists(skillPath)) {
292
+ throw new Error(`Skill not found: skills/${skillName}`);
293
+ }
294
+
295
+ // Get all files in the skill directory
296
+ const getAllFiles = async (dir, baseDir = dir) => {
297
+ const files = [];
298
+ const entries = await fs.readdir(dir, { withFileTypes: true });
299
+
300
+ for (const entry of entries) {
301
+ const fullPath = path.join(dir, entry.name);
302
+ if (entry.isDirectory()) {
303
+ const subFiles = await getAllFiles(fullPath, baseDir);
304
+ files.push(...subFiles);
305
+ } else {
306
+ const relativePath = path.relative(baseDir, fullPath);
307
+ files.push({ relative: relativePath, full: fullPath });
308
+ }
309
+ }
310
+ return files;
311
+ };
312
+
313
+ skillFiles = await getAllFiles(skillPath);
314
+ } else {
315
+ // Production mode: fetch from manifest and download from GitHub
316
+ const manifest = await getManifest();
317
+ const key = `skills:${skillName}`;
318
+ const asset = manifest.assets[key];
319
+
320
+ if (!asset) {
321
+ throw new Error(`Skill not found: ${key}`);
322
+ }
323
+
324
+ skillPath = asset.path;
325
+ skillFiles = asset.files.map(file => ({
326
+ relative: file,
327
+ url: `https://raw.githubusercontent.com/archubbuck/workspace-architect/main/${asset.path}/${file}`
328
+ }));
329
+ }
330
+
331
+ // Determine destination
332
+ let destDir;
333
+ if (options.output) {
334
+ destDir = path.resolve(process.cwd(), options.output);
335
+ } else {
336
+ destDir = path.join(process.cwd(), '.github', 'skills', skillName);
337
+ }
338
+
339
+ if (options.dryRun) {
340
+ console.log(chalk.cyan(`[Dry Run] Would create skill directory at ${destDir}`));
341
+ for (const file of skillFiles) {
342
+ console.log(chalk.cyan(` Would copy: ${file.relative}`));
343
+ }
344
+ return;
345
+ }
346
+
347
+ // Check if skill already exists
348
+ if (await fs.pathExists(destDir) && !options.force) {
349
+ const { overwrite } = await inquirer.prompt([
350
+ {
351
+ type: 'confirm',
352
+ name: 'overwrite',
353
+ message: `Skill ${skillName} already exists in ${destDir}. Overwrite?`,
354
+ default: false
355
+ }
356
+ ]);
357
+
358
+ if (!overwrite) {
359
+ console.log(chalk.yellow('Operation cancelled.'));
360
+ return;
361
+ }
362
+ }
363
+
364
+ console.log(chalk.blue(`Downloading skill: ${skillName}`));
365
+
366
+ // Create skill directory
367
+ await fs.ensureDir(destDir);
368
+
369
+ // Download/copy all files
370
+ for (const file of skillFiles) {
371
+ const destPath = path.join(destDir, file.relative);
372
+ const destFileDir = path.dirname(destPath);
373
+ await fs.ensureDir(destFileDir);
374
+
375
+ if (IS_LOCAL) {
376
+ // Copy from local assets
377
+ await fs.copyFile(file.full, destPath);
378
+ } else {
379
+ // Download from GitHub
380
+ const response = await fetch(file.url);
381
+ if (!response.ok) {
382
+ console.warn(chalk.yellow(`Warning: Failed to download ${file.relative}`));
383
+ continue;
384
+ }
385
+ const content = await response.text();
386
+ await fs.writeFile(destPath, content);
387
+ }
388
+
389
+ console.log(chalk.dim(` Downloaded: ${file.relative}`));
390
+ }
391
+
392
+ console.log(chalk.green(`Successfully downloaded skill ${skillName} to ${destDir} (${skillFiles.length} files)`));
393
+ }
394
+
266
395
  program.parse();
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "workspace-architect",
3
- "version": "1.5.44",
3
+ "version": "1.6.0",
4
4
  "description": "A comprehensive library of specialized AI agents and personas for GitHub Copilot, ranging from architectural planning and specific tech stacks to advanced cognitive reasoning models.",
5
5
  "bin": {
6
- "workspace-architect": "./bin/cli.js"
6
+ "workspace-architect": "./bin/cli.js",
7
+ "wsa": "./bin/cli.js"
7
8
  },
8
9
  "scripts": {
9
10
  "start:registry": "verdaccio --config verdaccio/config.yaml",
@@ -12,6 +13,8 @@
12
13
  "generate-manifest": "node scripts/generate-manifest.js",
13
14
  "prepublishOnly": "npm run generate-manifest",
14
15
  "fetch-upstream": "node scripts/fetch-upstream-assets.js",
16
+ "sync-skills": "node scripts/sync-anthropic-skills.js",
17
+ "validate-skills": "node scripts/validate-skills.js",
15
18
  "release": "release-it",
16
19
  "publish:local": "npm run release && npm publish --registry http://localhost:4873"
17
20
  },