agents-templated 2.2.7 → 2.2.9

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
@@ -37,6 +37,7 @@ Agents Templated scaffolds your project with:
37
37
  - `.github/skills/bug-triage/`
38
38
  - `.github/skills/error-patterns/`
39
39
  - `.github/skills/app-hardening/`
40
+ - `.github/skills/shadcn-ui/`
40
41
  - Release and audit contracts now require hardening evidence when risk profile requires it
41
42
 
42
43
  ---
@@ -145,7 +146,6 @@ your-project/
145
146
  │ └── README.md # Human-readable setup guide
146
147
 
147
148
  ├── .github/
148
- │ ├── instructions/ # Compatibility pointer directory
149
149
  │ ├── skills/
150
150
  │ │ ├── find-skills/ # Skill discovery helper
151
151
  │ │ ├── feature-delivery/ # Scoped feature delivery workflow
@@ -153,6 +153,7 @@ your-project/
153
153
  │ │ ├── error-patterns/ # Persistent error-debugging memory workflow
154
154
  │ │ ├── app-hardening/ # Hardening and release-evidence workflow
155
155
  │ │ ├── ui-ux-pro-max/ # Advanced UI/UX design implementation skill
156
+ │ │ ├── shadcn-ui/ # shadcn/ui setup and component patterns
156
157
  │ │ ├── README.md # Guide for creating custom skills
157
158
  │ │ └── [your-custom-skills]/ # Your project-specific skills
158
159
  │ └── copilot-instructions.md # Compatibility shim for Copilot
package/bin/cli.js CHANGED
@@ -186,7 +186,6 @@ program
186
186
  // Install AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)
187
187
  if (installAll || choices.includes('github')) {
188
188
  console.log(chalk.yellow('Installing AI agent instructions...'));
189
- await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
190
189
  await writeGeneratedInstructions(targetDir, templateDir, options.force);
191
190
  console.log(chalk.gray(' ✓ Claude (CLAUDE.md — canonical source)'));
192
191
  console.log(chalk.gray(' ✓ GitHub Copilot (.github/copilot-instructions.md pointer)'));
@@ -358,7 +357,6 @@ program
358
357
  // Install AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)
359
358
  if (options.github) {
360
359
  console.log(chalk.yellow('Installing AI agent instructions...'));
361
- await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
362
360
  await writeGeneratedInstructions(targetDir, templateDir, options.force);
363
361
  console.log(chalk.gray(' ✓ Claude (CLAUDE.md — canonical source)'));
364
362
  console.log(chalk.gray(' ✓ GitHub Copilot (.github/copilot-instructions.md pointer)'));
@@ -383,10 +381,10 @@ program
383
381
  console.log(chalk.white(' 1. Review CLAUDE.md (canonical AI policy — edit this directly)'));
384
382
  console.log(chalk.white(' 2. Review agent-docs/ARCHITECTURE.md for project guidelines'));
385
383
  console.log(chalk.white(' 3. AGENTS.MD and .github/copilot-instructions.md are thin pointers to CLAUDE.md'));
386
- console.log(chalk.white(' 4. Customize agents/rules/*.md for your tech stack'));
384
+ console.log(chalk.white(' 4. Customize .claude/rules/*.md for your tech stack'));
387
385
 
388
386
  console.log(chalk.cyan('\n🔒 Security Reminder:\n'));
389
- console.log(chalk.white(' • Review agents/rules/security.md'));
387
+ console.log(chalk.white(' • Review .claude/rules/security.md'));
390
388
  console.log(chalk.white(' • Validate all inputs with schema validation'));
391
389
  console.log(chalk.white(' • Implement rate limiting on public endpoints'));
392
390
  console.log(chalk.white(' • Never expose sensitive data in errors\n'));
@@ -666,6 +664,16 @@ async function cleanupLegacyInstructionFiles(targetDir) {
666
664
  console.log(chalk.green(` ✓ Removed legacy file: ${file}`));
667
665
  }
668
666
  }
667
+
668
+ // Remove deprecated directory if it is now empty.
669
+ const legacyInstructionsDir = path.join(targetDir, '.github', 'instructions');
670
+ if (await fs.pathExists(legacyInstructionsDir)) {
671
+ const entries = await fs.readdir(legacyInstructionsDir);
672
+ if (entries.length === 0) {
673
+ await fs.remove(legacyInstructionsDir);
674
+ console.log(chalk.green(' ✓ Removed legacy directory: .github/instructions/'));
675
+ }
676
+ }
669
677
  }
670
678
 
671
679
  async function updateSelectedComponents(targetDir, templateDir, selectedComponents, overwrite = true) {
@@ -705,7 +713,6 @@ async function updateSelectedComponents(targetDir, templateDir, selectedComponen
705
713
 
706
714
  if (components.includes('github')) {
707
715
  console.log(chalk.yellow('Updating AI agent instructions...'));
708
- await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
709
716
  await writeGeneratedInstructions(targetDir, templateDir, overwrite);
710
717
  await cleanupLegacyInstructionFiles(targetDir);
711
718
  }
@@ -836,7 +843,8 @@ program
836
843
  { targetFile: `${LAYOUT.canonical.skillsDir}/README.md`, templateFile: 'agents/skills/README.md', component: 'skills' },
837
844
  { targetFile: `${LAYOUT.canonical.skillsDir}/find-skills/SKILL.md`, templateFile: 'agents/skills/find-skills/SKILL.md', component: 'skills' },
838
845
  { targetFile: `${LAYOUT.canonical.skillsDir}/error-patterns/SKILL.md`, templateFile: 'agents/skills/error-patterns/SKILL.md', component: 'skills' },
839
- { targetFile: `${LAYOUT.canonical.skillsDir}/ui-ux-pro-max/SKILL.md`, templateFile: 'agents/skills/ui-ux-pro-max/SKILL.md', component: 'skills' }
846
+ { targetFile: `${LAYOUT.canonical.skillsDir}/ui-ux-pro-max/SKILL.md`, templateFile: 'agents/skills/ui-ux-pro-max/SKILL.md', component: 'skills' },
847
+ { targetFile: `${LAYOUT.canonical.skillsDir}/shadcn-ui/SKILL.md`, templateFile: 'agents/skills/shadcn-ui/SKILL.md', component: 'skills' }
840
848
  ];
841
849
 
842
850
  for (const {targetFile, templateFile, component} of checkFiles) {
@@ -991,7 +999,7 @@ program
991
999
  console.log(chalk.blue('\n📚 Quick Tips:\n'));
992
1000
  console.log(chalk.white(' • Run "agents-templated validate" to check setup'));
993
1001
  console.log(chalk.white(' • Run "agents-templated wizard" for guided setup'));
994
- console.log(chalk.white(' • Review agents/rules/security.md for security patterns\n'));
1002
+ console.log(chalk.white(' • Review .claude/rules/security.md for security patterns\n'));
995
1003
 
996
1004
  } catch (error) {
997
1005
  console.error(chalk.red('Error:'), error.message);
@@ -1001,7 +1009,7 @@ program
1001
1009
 
1002
1010
  program
1003
1011
  .command('new-skill <name>')
1004
- .description('Scaffold a new skill in agents/skills/<name>/SKILL.md')
1012
+ .description('Scaffold a new skill in .github/skills/<name>/SKILL.md')
1005
1013
  .action(async (name) => {
1006
1014
  try {
1007
1015
  const targetDir = process.cwd();
@@ -1017,7 +1025,7 @@ program
1017
1025
 
1018
1026
  program
1019
1027
  .command('new-rule <name>')
1020
- .description('Scaffold a new rule in agents/rules/<name>.md')
1028
+ .description('Scaffold a new rule in .claude/rules/<name>.md')
1021
1029
  .action(async (name) => {
1022
1030
  try {
1023
1031
  const targetDir = process.cwd();
package/index.js CHANGED
@@ -71,7 +71,6 @@ async function install(targetDir, options = {}) {
71
71
 
72
72
  // AI Agent instructions (Cursor, Copilot, Claude)
73
73
  if (installAll || options.github) {
74
- await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
75
74
  await writeGeneratedInstructions(targetDir, templateDir, options.force);
76
75
  }
77
76
 
@@ -96,11 +96,11 @@ async function validateInstructionDrift(targetDir) {
96
96
  }
97
97
 
98
98
  async function scaffoldSkill(targetDir, skillName) {
99
- const skillDir = path.join(targetDir, 'agents', 'skills', skillName);
99
+ const skillDir = path.join(targetDir, '.github', 'skills', skillName);
100
100
  const skillFile = path.join(skillDir, 'SKILL.md');
101
101
 
102
102
  if (await fs.pathExists(skillFile)) {
103
- throw new Error(`Skill already exists: agents/skills/${skillName}/SKILL.md`);
103
+ throw new Error(`Skill already exists: .github/skills/${skillName}/SKILL.md`);
104
104
  }
105
105
 
106
106
  const title = skillName.split('-').map(w => w[0].toUpperCase() + w.slice(1)).join(' ');
@@ -132,15 +132,15 @@ async function scaffoldSkill(targetDir, skillName) {
132
132
 
133
133
  await fs.ensureDir(skillDir);
134
134
  await fs.writeFile(skillFile, content, 'utf8');
135
- return `agents/skills/${skillName}/SKILL.md`;
135
+ return `.github/skills/${skillName}/SKILL.md`;
136
136
  }
137
137
 
138
138
  async function scaffoldRule(targetDir, ruleName) {
139
- const rulesDir = path.join(targetDir, 'agents', 'rules');
139
+ const rulesDir = path.join(targetDir, '.claude', 'rules');
140
140
  const ruleFile = path.join(rulesDir, `${ruleName}.md`);
141
141
 
142
142
  if (await fs.pathExists(ruleFile)) {
143
- throw new Error(`Rule already exists: agents/rules/${ruleName}.md`);
143
+ throw new Error(`Rule already exists: .claude/rules/${ruleName}.md`);
144
144
  }
145
145
 
146
146
  const content = [
@@ -168,7 +168,7 @@ async function scaffoldRule(targetDir, ruleName) {
168
168
 
169
169
  await fs.ensureDir(rulesDir);
170
170
  await fs.writeFile(ruleFile, content, 'utf8');
171
- return `agents/rules/${ruleName}.md`;
171
+ return `.claude/rules/${ruleName}.md`;
172
172
  }
173
173
 
174
174
  async function scaffoldSubagent(targetDir, name) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agents-templated",
3
- "version": "2.2.7",
3
+ "version": "2.2.9",
4
4
  "description": "Technology-agnostic development template with multi-AI agent support (Cursor, Copilot, VSCode, Gemini), security-first patterns, and comprehensive testing guidelines",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -32,7 +32,7 @@ Each plan file must contain:
32
32
 
33
33
  ```
34
34
  ---
35
- mode: agent
35
+ agent: agent
36
36
  description: One-line summary of what this plan covers.
37
37
  ---
38
38
 
@@ -124,11 +124,11 @@ your-project/
124
124
  │ └── README.md # Human-readable setup guide
125
125
 
126
126
  ├── .github/
127
- │ ├── instructions/ # Compatibility pointer directory
128
127
  │ ├── skills/
129
128
  │ │ ├── find-skills/ # Skill discovery helper
130
129
  │ │ ├── error-patterns/ # Persistent error-debugging memory workflow
131
130
  │ │ ├── ui-ux-pro-max/ # Advanced UI/UX design implementation skill
131
+ │ │ ├── shadcn-ui/ # shadcn/ui setup and component patterns
132
132
  │ │ ├── README.md # Guide for creating custom skills
133
133
  │ │ └── [your-custom-skills]/ # Your project-specific skills
134
134
  │ └── copilot-instructions.md # Compatibility shim for Copilot
@@ -100,6 +100,7 @@ Consider creating skills for:
100
100
  - `bug-triage`: Use for defects and regressions requiring reproducible evidence, root-cause isolation, and minimal safe patches.
101
101
  - `error-patterns`: Use when errors repeat to apply known fixes from lessons-learned and automatically record new resolutions.
102
102
  - `app-hardening`: Use for high-risk/distributed runtimes to enforce hardening profile, obfuscation decisions, and release evidence.
103
+ - `shadcn-ui`: Use for shadcn/ui installation, component composition, form patterns, and theme customization.
103
104
 
104
105
  ## Using Skills in Your Project
105
106