agents-templated 2.2.13 → 2.2.15

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
@@ -5,7 +5,7 @@
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
  [![GitHub stars](https://img.shields.io/github/stars/rickandrew2/agents-templated?style=social)](https://github.com/rickandrew2/agents-templated)
7
7
 
8
- > **Agents Templated** is a CLI tool and npm package that instantly scaffolds production-ready project structures with enterprise-grade development patterns, security guidelines, and AI assistant configurations. Designed for developers who want to start projects the right way—with proven OWASP security practices, comprehensive testing strategies (80/15/5 coverage targets), and agent-based architecture patterns—without being locked into specific frameworks. It generates unified configuration files that work seamlessly with Cursor, GitHub Copilot, Claude, and Google Gemini, allowing AI assistants to automatically follow best practices from day one. Whether you're building a Next.js app, Django API, Go microservice, or any custom stack, Agents Templated provides the guardrails and patterns you need while giving you complete freedom to choose your technology.
8
+ > **Agents Templated** is a technology-agnostic CLI that scaffolds the AI development operating layer around your app: policy rules, deterministic command contracts, reusable skills, and compatibility files for Cursor, GitHub Copilot, Claude, and generic agent hosts. It does not scaffold your product framework. It scaffolds how your team and agents plan, build, test, review, and release.
9
9
 
10
10
  ---
11
11
 
@@ -16,12 +16,39 @@ Most starter templates only create files. This package creates operating rules f
16
16
  You get:
17
17
 
18
18
  - Multi-agent configuration for Cursor, Copilot, Claude, and generic hosts
19
- - Deterministic command contracts in `agents/commands/`
19
+ - Deterministic command contracts in `.claude/commands/`
20
20
  - Security-first and testing-first rule baselines
21
21
  - Reusable skills and optional subagents
22
22
 
23
23
  Important: this package does not install your framework. It installs the operating layer around your framework.
24
24
 
25
+ ## What Agents Templated Actually Is
26
+
27
+ Agents Templated is a project governance and agent-orchestration scaffold.
28
+
29
+ - It installs a canonical AI policy source (`CLAUDE.md`) and compatibility shims (`AGENTS.MD`, `.github/copilot-instructions.md`, `.cursorrules`).
30
+ - It installs deterministic command contracts in `.claude/commands/` for repeatable specialist workflows.
31
+ - It installs reusable skills in `.github/skills/` and optional subagents in `.claude/agents/`.
32
+ - It installs rule modules in `.claude/rules/` for security, testing, planning, workflows, and guardrails.
33
+ - It includes `validate`, `doctor`, `update`, and `workflow` commands to keep scaffolds healthy over time.
34
+
35
+ ## Orchestration-First Workflow (Current Model)
36
+
37
+ The current model is orchestration-first: give one objective and let the CLI generate a deterministic multi-phase specialist handoff.
38
+
39
+ - Use `agents-templated orchestrate "<objective>"` to run end-to-end routing.
40
+ - Subagent selection is automatic and policy-driven from `CLAUDE.md`.
41
+ - Mode-locked specialists require explicit mode handling (`qa-specialist`, `performance-specialist`).
42
+ - Security escalation is conditionally mandatory based on trigger conditions.
43
+ - Deprecated specialist aliases are redirected to canonical agents with explicit notices.
44
+ - Orchestration stops on blocked/failed phases and returns structured stop conditions.
45
+
46
+ What it is not:
47
+
48
+ - Not a framework generator.
49
+ - Not a dependency installer for your app stack.
50
+ - Not a replacement for your application architecture.
51
+
25
52
  ## 30-Second Start
26
53
 
27
54
  ### 1. Install setup
@@ -35,6 +62,7 @@ npx agents-templated@latest wizard
35
62
  ```bash
36
63
  agents-templated workflow
37
64
  agents-templated problem-map "daily briefing assistant for founders"
65
+ agents-templated orchestrate "build auth API and admin dashboard"
38
66
  ```
39
67
 
40
68
  ### 3. Optional preset bootstrap
@@ -95,6 +123,7 @@ Your AI assistant will auto-load the configurations and follow enterprise patter
95
123
  | **Interactive Wizard** | Guided setup with personalized recommendations |
96
124
  | **AI Agents Supported** | Cursor, GitHub Copilot, Claude, and generic agents via `AGENTS.MD` |
97
125
  | **Deterministic Commands** | Slash-command contracts with strict structured outputs |
126
+ | **Automatic Orchestration** | Objective-to-specialist auto-routing via `orchestrate` with deterministic phase outputs |
98
127
  | **Intent-Routing Ready** | Command schema supports `slash-command-auto` mode for agent-side routing policies |
99
128
  | **Security-First** | OWASP Top 10 protection patterns built-in |
100
129
  | **Hardening Workflow** | Risk-based hardening rules plus verification/release gates |
@@ -161,10 +190,8 @@ your-project/
161
190
  │ │ ├── system-workflow.md
162
191
  │ │ ├── hardening.md
163
192
  │ │ └── lessons-learned.md
164
- └── agents/ # Optional subagents
165
-
166
- ├── agents/ # Deterministic command contracts
167
- │ └── commands/
193
+ ├── agents/ # Optional subagents
194
+ └── commands/ # Deterministic command contracts
168
195
  │ │ ├── SCHEMA.md # Global slash-command response schema
169
196
  │ │ ├── plan.md # /plan contract
170
197
  │ │ ├── fix.md # /fix contract
@@ -224,6 +251,7 @@ agents-templated list
224
251
 
225
252
  # Lifecycle workflow and specialist commands
226
253
  agents-templated workflow
254
+ agents-templated orchestrate "build auth API and dashboard"
227
255
  ```
228
256
 
229
257
  ### Workflow Commands
@@ -244,7 +272,29 @@ These commands provide deterministic specialist guidance aligned to the sprint l
244
272
  | `docs` | Documentation Engineer | Sync docs with shipped behavior |
245
273
  | `learn-loop` | Iteration Lead | Capture lessons and next-cycle actions |
246
274
 
247
- Each command maps to deterministic contract files in `agents/commands/` and uses the schema in `agents/commands/SCHEMA.md`.
275
+ Each command maps to deterministic contract files in `.claude/commands/` and uses the schema in `.claude/commands/SCHEMA.md`.
276
+
277
+ ### Automatic Orchestration Command
278
+
279
+ Use orchestration when you want the system to chain specialists automatically from one objective.
280
+
281
+ ```bash
282
+ # Human-readable orchestration summary
283
+ agents-templated orchestrate "build auth API and dashboard"
284
+
285
+ # Structured output for pipelines and automation
286
+ agents-templated orchestrate "prepare production deployment" --json
287
+
288
+ # Force a specific scenario
289
+ agents-templated orchestrate "ship release candidate" --scenario deployment --json
290
+ ```
291
+
292
+ Orchestration behavior:
293
+
294
+ - Uses deterministic routing and phase sequencing.
295
+ - Enforces mode-lock constraints for `qa-specialist` and `performance-specialist`.
296
+ - Includes deprecation notices when legacy aliases are routed.
297
+ - Emits structured stop conditions if a phase is blocked or fails.
248
298
 
249
299
  ### Deprecated Workflow Aliases
250
300
 
package/bin/cli.js CHANGED
@@ -10,6 +10,7 @@ const {
10
10
  LAYOUT,
11
11
  resolveRulesDir,
12
12
  resolveSkillsDir,
13
+ resolveCommandsDir,
13
14
  resolveSubagentsDir,
14
15
  hasAnyLayout,
15
16
  getLegacyMigrationPlan
@@ -146,7 +147,7 @@ program
146
147
  { name: 'Documentation files (agent-docs/)', value: 'docs' },
147
148
  { name: 'Agent rules (.claude/rules/*.md)', value: 'rules' },
148
149
  { name: 'Skills (.github/skills/*)', value: 'skills' },
149
- { name: 'Command contracts (agents/commands/*.md)', value: 'commands' },
150
+ { name: 'Command contracts (.claude/commands/*.md)', value: 'commands' },
150
151
  { name: 'AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)', value: 'github' },
151
152
  { name: 'Agent subagents (.claude/agents/*.md)', value: 'subagents' }
152
153
  ],
@@ -210,10 +211,10 @@ program
210
211
  // Install deterministic command contracts
211
212
  if (installAll || choices.includes('commands')) {
212
213
  console.log(chalk.yellow('Installing command contracts...'));
213
- await fs.ensureDir(path.join(targetDir, 'agents', 'commands'));
214
+ await fs.ensureDir(path.join(targetDir, LAYOUT.canonical.commandsDir));
214
215
  await copyDirectory(
215
216
  path.join(templateDir, 'agents', 'commands'),
216
- path.join(targetDir, 'agents', 'commands'),
217
+ path.join(targetDir, LAYOUT.canonical.commandsDir),
217
218
  options.force
218
219
  );
219
220
  }
@@ -291,7 +292,7 @@ program
291
292
  { name: 'Documentation (agent-docs/)', value: 'docs' },
292
293
  { name: 'Agent Rules (security, testing, database, etc.)', value: 'rules' },
293
294
  { name: 'Skills (reusable agent capabilities)', value: 'skills' },
294
- { name: 'Command contracts (agents/commands/*.md)', value: 'commands' },
295
+ { name: 'Command contracts (.claude/commands/*.md)', value: 'commands' },
295
296
  { name: 'AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)', value: 'github' },
296
297
  { name: 'Agent subagents (.claude/agents/*.md)', value: 'subagents' }
297
298
  ],
@@ -329,7 +330,7 @@ program
329
330
  { name: 'Documentation (agent-docs/)', value: 'docs', checked: true },
330
331
  { name: 'Agent Rules (security, testing, database, etc.)', value: 'rules', checked: true },
331
332
  { name: 'Skills (reusable agent capabilities)', value: 'skills', checked: true },
332
- { name: 'Command contracts (agents/commands/*.md)', value: 'commands', checked: true },
333
+ { name: 'Command contracts (.claude/commands/*.md)', value: 'commands', checked: true },
333
334
  { name: 'AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)', value: 'github', checked: true },
334
335
  { name: 'Agent subagents (.claude/agents/*.md)', value: 'subagents', checked: true }
335
336
  ],
@@ -395,10 +396,10 @@ program
395
396
  // Install deterministic command contracts
396
397
  if (options.commands) {
397
398
  console.log(chalk.yellow('Installing command contracts...'));
398
- await fs.ensureDir(path.join(targetDir, 'agents', 'commands'));
399
+ await fs.ensureDir(path.join(targetDir, LAYOUT.canonical.commandsDir));
399
400
  await copyDirectory(
400
401
  path.join(templateDir, 'agents', 'commands'),
401
- path.join(targetDir, 'agents', 'commands'),
402
+ path.join(targetDir, LAYOUT.canonical.commandsDir),
402
403
  options.force
403
404
  );
404
405
  }
@@ -452,7 +453,7 @@ program
452
453
  console.log(chalk.yellow('docs') + ' - Documentation files (agent-docs/ directory)');
453
454
  console.log(chalk.yellow('rules') + ' - Agent rules (.claude/rules/*.md)');
454
455
  console.log(chalk.yellow('skills') + ' - Agent skills (.github/skills/*)');
455
- console.log(chalk.yellow('commands') + ' - Deterministic command contracts (agents/commands/*.md)');
456
+ console.log(chalk.yellow('commands') + ' - Deterministic command contracts (.claude/commands/*.md)');
456
457
  console.log(chalk.yellow('github') + ' - AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)');
457
458
  console.log(chalk.yellow('subagents') + ' - Agent subagents (.claude/agents/*.md)');
458
459
  console.log(chalk.yellow('all') + ' - All components');
@@ -547,27 +548,35 @@ program
547
548
  warnings.push(`⚠ ${LAYOUT.canonical.skillsDir} directory missing - run 'agents-templated init --skills'`);
548
549
  }
549
550
 
550
- const commandsDir = path.join(targetDir, 'agents', 'commands');
551
+ const canonicalCommandsDir = path.join(targetDir, LAYOUT.canonical.commandsDir);
552
+ const legacyCommandsDir = path.join(targetDir, LAYOUT.legacy.commandsDirs[0]);
553
+ const commandsDir = path.join(targetDir, resolveCommandsDir(targetDir));
554
+
555
+ if (!(await fs.pathExists(canonicalCommandsDir)) && await fs.pathExists(legacyCommandsDir)) {
556
+ issues.push(`✗ Legacy command contract layout detected at ${LAYOUT.legacy.commandsDirs[0]} - run 'agents-templated update --all' to migrate`);
557
+ }
558
+
551
559
  if (await fs.pathExists(commandsDir)) {
560
+ const relativeCommandsDir = path.relative(targetDir, commandsDir) || LAYOUT.canonical.commandsDir;
552
561
  for (const contractFile of CONTRACT_FILES) {
553
562
  const contractPath = path.join(commandsDir, contractFile);
554
563
  if (await fs.pathExists(contractPath)) {
555
- passed.push(`✓ agents/commands/${contractFile} found`);
564
+ passed.push(`✓ ${relativeCommandsDir}/${contractFile} found`);
556
565
  } else {
557
- warnings.push(`⚠ agents/commands/${contractFile} missing`);
566
+ warnings.push(`⚠ ${relativeCommandsDir}/${contractFile} missing`);
558
567
  }
559
568
  }
560
569
 
561
570
  for (const contractFile of SPECIALIST_CONTRACT_FILES) {
562
571
  const contractPath = path.join(commandsDir, contractFile);
563
572
  if (await fs.pathExists(contractPath)) {
564
- passed.push(`✓ agents/commands/${contractFile} found`);
573
+ passed.push(`✓ ${relativeCommandsDir}/${contractFile} found`);
565
574
  } else {
566
- warnings.push(`⚠ agents/commands/${contractFile} missing`);
575
+ warnings.push(`⚠ ${relativeCommandsDir}/${contractFile} missing`);
567
576
  }
568
577
  }
569
578
  } else {
570
- warnings.push(`⚠ agents/commands directory missing - run 'agents-templated init --commands'`);
579
+ warnings.push(`⚠ ${LAYOUT.canonical.commandsDir} directory missing - run 'agents-templated init --commands'`);
571
580
  }
572
581
 
573
582
  // Check subagents
@@ -791,10 +800,10 @@ async function updateSelectedComponents(targetDir, templateDir, selectedComponen
791
800
 
792
801
  if (components.includes('commands')) {
793
802
  console.log(chalk.yellow('Updating command contracts...'));
794
- await fs.ensureDir(path.join(targetDir, 'agents', 'commands'));
803
+ await fs.ensureDir(path.join(targetDir, LAYOUT.canonical.commandsDir));
795
804
  await copyDirectory(
796
805
  path.join(templateDir, 'agents', 'commands'),
797
- path.join(targetDir, 'agents', 'commands'),
806
+ path.join(targetDir, LAYOUT.canonical.commandsDir),
798
807
  overwrite
799
808
  );
800
809
  }
@@ -935,8 +944,8 @@ program
935
944
  { targetFile: `${LAYOUT.canonical.skillsDir}/error-patterns/SKILL.md`, templateFile: 'agents/skills/error-patterns/SKILL.md', component: 'skills' },
936
945
  { targetFile: `${LAYOUT.canonical.skillsDir}/ui-ux-pro-max/SKILL.md`, templateFile: 'agents/skills/ui-ux-pro-max/SKILL.md', component: 'skills' },
937
946
  { targetFile: `${LAYOUT.canonical.skillsDir}/shadcn-ui/SKILL.md`, templateFile: 'agents/skills/shadcn-ui/SKILL.md', component: 'skills' },
938
- { targetFile: 'agents/commands/SCHEMA.md', templateFile: 'agents/commands/SCHEMA.md', component: 'commands' },
939
- { targetFile: 'agents/commands/README.md', templateFile: 'agents/commands/README.md', component: 'commands' }
947
+ { targetFile: `${LAYOUT.canonical.commandsDir}/SCHEMA.md`, templateFile: 'agents/commands/SCHEMA.md', component: 'commands' },
948
+ { targetFile: `${LAYOUT.canonical.commandsDir}/README.md`, templateFile: 'agents/commands/README.md', component: 'commands' }
940
949
  ];
941
950
 
942
951
  for (const {targetFile, templateFile, component} of checkFiles) {
package/index.js CHANGED
@@ -72,10 +72,10 @@ async function install(targetDir, options = {}) {
72
72
 
73
73
  // Deterministic command contracts
74
74
  if (installAll || options.commands) {
75
- await fs.ensureDir(path.join(targetDir, 'agents', 'commands'));
75
+ await fs.ensureDir(path.join(targetDir, LAYOUT.canonical.commandsDir));
76
76
  await copyDirectory(
77
77
  path.join(templateDir, 'agents', 'commands'),
78
- path.join(targetDir, 'agents', 'commands'),
78
+ path.join(targetDir, LAYOUT.canonical.commandsDir),
79
79
  options.force
80
80
  );
81
81
  }
package/lib/layout.js CHANGED
@@ -6,11 +6,13 @@ const LAYOUT = {
6
6
  docsDir: 'agent-docs',
7
7
  rulesDir: '.claude/rules',
8
8
  skillsDir: '.github/skills',
9
- subagentsDir: '.claude/agents'
9
+ subagentsDir: '.claude/agents',
10
+ commandsDir: '.claude/commands'
10
11
  },
11
12
  legacy: {
12
13
  rulesDirs: ['agents/rules'],
13
- skillsDirs: ['agents/skills']
14
+ skillsDirs: ['agents/skills'],
15
+ commandsDirs: ['agents/commands']
14
16
  },
15
17
  compatible: {
16
18
  rulesDirs: [],
@@ -45,16 +47,26 @@ function resolveSubagentsDir(baseDir) {
45
47
  return firstExistingPath(baseDir, candidates) || LAYOUT.canonical.subagentsDir;
46
48
  }
47
49
 
50
+ function resolveCommandsDir(baseDir) {
51
+ const candidates = [
52
+ LAYOUT.canonical.commandsDir,
53
+ ...LAYOUT.legacy.commandsDirs
54
+ ];
55
+ return firstExistingPath(baseDir, candidates) || LAYOUT.canonical.commandsDir;
56
+ }
57
+
48
58
  async function hasAnyLayout(baseDir) {
49
59
  const checks = [
50
60
  path.join(baseDir, LAYOUT.canonical.rulesDir),
51
61
  path.join(baseDir, LAYOUT.canonical.skillsDir),
52
62
  path.join(baseDir, LAYOUT.canonical.subagentsDir),
63
+ path.join(baseDir, LAYOUT.canonical.commandsDir),
53
64
  path.join(baseDir, 'agents', 'subagents'),
54
65
  ...LAYOUT.compatible.rulesDirs.map((relPath) => path.join(baseDir, relPath)),
55
66
  ...LAYOUT.compatible.skillsDirs.map((relPath) => path.join(baseDir, relPath)),
56
67
  ...LAYOUT.legacy.rulesDirs.map((relPath) => path.join(baseDir, relPath)),
57
- ...LAYOUT.legacy.skillsDirs.map((relPath) => path.join(baseDir, relPath))
68
+ ...LAYOUT.legacy.skillsDirs.map((relPath) => path.join(baseDir, relPath)),
69
+ ...LAYOUT.legacy.commandsDirs.map((relPath) => path.join(baseDir, relPath))
58
70
  ];
59
71
 
60
72
  for (const checkPath of checks) {
@@ -91,6 +103,17 @@ async function getLegacyMigrationPlan(baseDir) {
91
103
  }
92
104
  }
93
105
 
106
+ for (const relPath of LAYOUT.legacy.commandsDirs) {
107
+ const from = path.join(baseDir, relPath);
108
+ if (await fs.pathExists(from)) {
109
+ plan.push({
110
+ type: 'directory',
111
+ source: relPath,
112
+ target: LAYOUT.canonical.commandsDir
113
+ });
114
+ }
115
+ }
116
+
94
117
  return plan;
95
118
  }
96
119
 
@@ -98,6 +121,7 @@ module.exports = {
98
121
  LAYOUT,
99
122
  resolveRulesDir,
100
123
  resolveSkillsDir,
124
+ resolveCommandsDir,
101
125
  resolveSubagentsDir,
102
126
  hasAnyLayout,
103
127
  getLegacyMigrationPlan
package/lib/workflow.js CHANGED
@@ -542,13 +542,13 @@ function formatWorkflowOutput(workflow, objective) {
542
542
  ` Objective: ${goal}`,
543
543
  '',
544
544
  'Execution contract',
545
- ` Template file: agents/commands/${workflow.contract}`,
545
+ ` Template file: .claude/commands/${workflow.contract}`,
546
546
  ' Mode: deterministic structured output only',
547
547
  ' Safety: destructive actions require CONFIRM-DESTRUCTIVE:<target>',
548
548
  '',
549
549
  'Recommended next actions',
550
550
  ' 1. Ensure command contracts are installed: agents-templated init --commands',
551
- ' 2. Open agents/commands/README.md and follow the contract sections',
551
+ ' 2. Open .claude/commands/README.md and follow the contract sections',
552
552
  ' 3. Use agents-templated workflow to see the full sprint sequence',
553
553
  ''
554
554
  ].join('\n');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agents-templated",
3
- "version": "2.2.13",
3
+ "version": "2.2.15",
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": {
@@ -16,7 +16,7 @@ Most starter templates only create files. This package creates operating rules f
16
16
  You get:
17
17
 
18
18
  - Multi-agent configuration for Cursor, Copilot, Claude, and generic hosts
19
- - Deterministic command contracts in `agents/commands/`
19
+ - Deterministic command contracts in `.claude/commands/`
20
20
  - Security-first and testing-first rule baselines
21
21
  - Reusable skills and optional subagents
22
22
 
@@ -163,8 +163,7 @@ your-project/
163
163
  │ │ └── lessons-learned.md
164
164
  │ └── agents/ # Optional subagents
165
165
 
166
- ├── agents/ # Deterministic command contracts
167
- │ └── commands/
166
+ ├── commands/ # Deterministic command contracts
168
167
  │ │ ├── SCHEMA.md # Global slash-command response schema
169
168
  │ │ ├── plan.md # /plan contract
170
169
  │ │ ├── fix.md # /fix contract
@@ -244,7 +243,7 @@ These commands provide deterministic specialist guidance aligned to the sprint l
244
243
  | `docs` | Documentation Engineer | Sync docs with shipped behavior |
245
244
  | `learn-loop` | Iteration Lead | Capture lessons and next-cycle actions |
246
245
 
247
- Each command maps to deterministic contract files in `agents/commands/` and uses the schema in `agents/commands/SCHEMA.md`.
246
+ Each command maps to deterministic contract files in `.claude/commands/` and uses the schema in `.claude/commands/SCHEMA.md`.
248
247
 
249
248
  ### Deprecated Workflow Aliases
250
249
 
@@ -3,7 +3,7 @@
3
3
  This directory is the modular source of truth for slash-command execution contracts.
4
4
 
5
5
  - Global protocol and safety framework: `AGENTS.MD` → `Deterministic Slash Command System Standard`
6
- - Global response schema: `agents/commands/SCHEMA.md`
6
+ - Global response schema: `.claude/commands/SCHEMA.md`
7
7
  - Command contracts:
8
8
  - `plan.md`
9
9
  - `task.md`
@@ -39,10 +39,11 @@ Execution requirements:
39
39
 
40
40
  ## Publish Inclusion
41
41
 
42
- The npm package includes command contracts from both:
42
+ The npm package scaffolds command contracts into `.claude/commands/`.
43
43
 
44
- - `agents/commands/` (root mirror)
45
- - `templates/agents/commands/` (scaffold source)
44
+ Template source path in this repository:
45
+
46
+ - `templates/agents/commands/`
46
47
 
47
48
  ## Workflow Command Mapping
48
49