cp-toolkit 2.2.3 → 2.2.4
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/package.json +1 -1
- package/src/commands/add.js +23 -16
- package/src/commands/doctor.js +15 -10
- package/src/commands/init.js +55 -16
- package/templates/AGENTS.md +47 -0
- package/templates/ARCHITECTURE.md +42 -0
- package/templates/agents/backend-specialist.md +1 -0
- package/templates/agents/code-archaeologist.md +116 -106
- package/templates/agents/database-architect.md +1 -0
- package/templates/agents/debugger.md +1 -0
- package/templates/agents/devops-engineer.md +1 -0
- package/templates/agents/documentation-writer.md +1 -0
- package/templates/agents/explorer-agent.md +83 -73
- package/templates/agents/frontend-specialist.md +1 -0
- package/templates/agents/game-developer.md +1 -0
- package/templates/agents/mobile-developer.md +1 -0
- package/templates/agents/orchestrator.md +426 -416
- package/templates/agents/penetration-tester.md +1 -0
- package/templates/agents/performance-optimizer.md +1 -0
- package/templates/agents/product-manager.md +122 -112
- package/templates/agents/product-owner.md +105 -95
- package/templates/agents/project-planner.md +416 -406
- package/templates/agents/qa-automation-engineer.md +113 -103
- package/templates/agents/security-auditor.md +1 -0
- package/templates/agents/seo-specialist.md +1 -0
- package/templates/agents/test-engineer.md +1 -0
- package/templates/skills/core/behavioral-modes/SKILL.md +244 -242
- package/templates/skills/core/brainstorming/SKILL.md +166 -163
- package/templates/skills/core/mcp-builder/SKILL.md +178 -176
- package/templates/skills/core/parallel-agents/SKILL.md +187 -175
- package/templates/skills/core/plan-writing/SKILL.md +154 -152
- package/templates/skills/optional/api-patterns/SKILL.md +83 -81
- package/templates/skills/optional/app-builder/SKILL.md +78 -75
- package/templates/skills/optional/app-builder/templates/SKILL.md +41 -39
- package/templates/skills/optional/architecture/SKILL.md +58 -55
- package/templates/skills/optional/bash-linux/SKILL.md +201 -199
- package/templates/skills/optional/code-review-checklist/SKILL.md +110 -109
- package/templates/skills/optional/database-design/SKILL.md +54 -52
- package/templates/skills/optional/deployment-procedures/SKILL.md +243 -241
- package/templates/skills/optional/documentation-templates/SKILL.md +196 -194
- package/templates/skills/optional/frontend-design/SKILL.md +421 -418
- package/templates/skills/optional/game-development/2d-games/SKILL.md +120 -119
- package/templates/skills/optional/game-development/3d-games/SKILL.md +136 -135
- package/templates/skills/optional/game-development/SKILL.md +169 -167
- package/templates/skills/optional/game-development/game-art/SKILL.md +187 -185
- package/templates/skills/optional/game-development/game-audio/SKILL.md +192 -190
- package/templates/skills/optional/game-development/game-design/SKILL.md +131 -129
- package/templates/skills/optional/game-development/mobile-games/SKILL.md +110 -108
- package/templates/skills/optional/game-development/multiplayer/SKILL.md +133 -132
- package/templates/skills/optional/game-development/pc-games/SKILL.md +146 -144
- package/templates/skills/optional/game-development/vr-ar/SKILL.md +124 -123
- package/templates/skills/optional/game-development/web-games/SKILL.md +152 -150
- package/templates/skills/optional/geo-fundamentals/SKILL.md +158 -156
- package/templates/skills/optional/i18n-localization/SKILL.md +156 -154
- package/templates/skills/optional/lint-and-validate/SKILL.md +48 -45
- package/templates/skills/optional/mobile-design/SKILL.md +397 -394
- package/templates/skills/optional/nextjs-react-expert/SKILL.md +271 -267
- package/templates/skills/optional/nodejs-best-practices/SKILL.md +335 -333
- package/templates/skills/optional/performance-profiling/SKILL.md +145 -143
- package/templates/skills/optional/powershell-windows/SKILL.md +169 -167
- package/templates/skills/optional/python-patterns/SKILL.md +443 -441
- package/templates/skills/optional/red-team-tactics/SKILL.md +201 -199
- package/templates/skills/optional/seo-fundamentals/SKILL.md +130 -129
- package/templates/skills/optional/server-management/SKILL.md +163 -161
- package/templates/skills/optional/systematic-debugging/SKILL.md +111 -109
- package/templates/skills/optional/tailwind-patterns/SKILL.md +271 -269
- package/templates/skills/optional/tdd-workflow/SKILL.md +150 -149
- package/templates/skills/optional/testing-patterns/SKILL.md +179 -178
- package/templates/skills/optional/vulnerability-scanner/SKILL.md +278 -276
- package/templates/skills/optional/web-design-guidelines/SKILL.md +60 -57
- package/templates/skills/optional/webapp-testing/SKILL.md +188 -187
package/package.json
CHANGED
package/src/commands/add.js
CHANGED
|
@@ -13,6 +13,8 @@ const AGENT_TEMPLATES = {
|
|
|
13
13
|
specialist: (name, description, triggers) => `---
|
|
14
14
|
name: ${name}
|
|
15
15
|
description: ${description}
|
|
16
|
+
version: 1.0
|
|
17
|
+
skills: clean-code
|
|
16
18
|
---
|
|
17
19
|
|
|
18
20
|
# ${name}
|
|
@@ -39,6 +41,8 @@ ${triggers.map(t => `- ${t} related tasks`).join('\n')}
|
|
|
39
41
|
reviewer: (name, description, triggers) => `---
|
|
40
42
|
name: ${name}
|
|
41
43
|
description: ${description}
|
|
44
|
+
version: 1.0
|
|
45
|
+
skills: clean-code, qa-automation-engineer
|
|
42
46
|
---
|
|
43
47
|
|
|
44
48
|
# ${name}
|
|
@@ -76,7 +80,7 @@ description: ${description}
|
|
|
76
80
|
|
|
77
81
|
export async function addCommand(type, name, options) {
|
|
78
82
|
const targetDir = process.cwd();
|
|
79
|
-
|
|
83
|
+
|
|
80
84
|
// Validate type
|
|
81
85
|
const validTypes = ['agent', 'instruction'];
|
|
82
86
|
if (!validTypes.includes(type)) {
|
|
@@ -84,7 +88,7 @@ export async function addCommand(type, name, options) {
|
|
|
84
88
|
console.log(chalk.dim(` Valid types: ${validTypes.join(', ')}`));
|
|
85
89
|
return;
|
|
86
90
|
}
|
|
87
|
-
|
|
91
|
+
|
|
88
92
|
// Check if cp-kit is initialized
|
|
89
93
|
const githubDir = path.join(targetDir, '.github');
|
|
90
94
|
if (!fs.existsSync(path.join(githubDir, 'copilot-instructions.md'))) {
|
|
@@ -92,9 +96,9 @@ export async function addCommand(type, name, options) {
|
|
|
92
96
|
console.log(chalk.dim(' Run: cp-kit init'));
|
|
93
97
|
return;
|
|
94
98
|
}
|
|
95
|
-
|
|
99
|
+
|
|
96
100
|
console.log(chalk.bold.cyan(`\n➕ Adding ${type}: ${name}\n`));
|
|
97
|
-
|
|
101
|
+
|
|
98
102
|
switch (type) {
|
|
99
103
|
case 'agent':
|
|
100
104
|
await addAgent(githubDir, name, options);
|
|
@@ -107,12 +111,12 @@ export async function addCommand(type, name, options) {
|
|
|
107
111
|
|
|
108
112
|
async function addAgent(githubDir, name, options) {
|
|
109
113
|
const agentFile = path.join(githubDir, 'agents', `${name}.md`);
|
|
110
|
-
|
|
114
|
+
|
|
111
115
|
if (fs.existsSync(agentFile)) {
|
|
112
116
|
console.log(chalk.yellow(`⚠️ Agent "${name}" already exists.`));
|
|
113
117
|
return;
|
|
114
118
|
}
|
|
115
|
-
|
|
119
|
+
|
|
116
120
|
const response = await prompts([
|
|
117
121
|
{
|
|
118
122
|
type: 'text',
|
|
@@ -136,30 +140,30 @@ async function addAgent(githubDir, name, options) {
|
|
|
136
140
|
]
|
|
137
141
|
}
|
|
138
142
|
]);
|
|
139
|
-
|
|
143
|
+
|
|
140
144
|
if (!response.description) {
|
|
141
145
|
console.log(chalk.yellow('Aborted.'));
|
|
142
146
|
return;
|
|
143
147
|
}
|
|
144
|
-
|
|
148
|
+
|
|
145
149
|
const triggers = response.triggers.split(',').map(t => t.trim());
|
|
146
150
|
const content = AGENT_TEMPLATES[response.template](name, response.description, triggers);
|
|
147
|
-
|
|
151
|
+
|
|
148
152
|
await fs.ensureDir(path.dirname(agentFile));
|
|
149
153
|
await fs.writeFile(agentFile, content);
|
|
150
|
-
|
|
154
|
+
|
|
151
155
|
console.log(chalk.green(`✅ Created agent: .github/agents/${name}.md`));
|
|
152
156
|
console.log(chalk.dim(` Invoke with @${name} in Copilot Chat`));
|
|
153
157
|
}
|
|
154
158
|
|
|
155
159
|
async function addInstruction(githubDir, name, options) {
|
|
156
160
|
const instrFile = path.join(githubDir, 'instructions', `${name}.instructions.md`);
|
|
157
|
-
|
|
161
|
+
|
|
158
162
|
if (fs.existsSync(instrFile)) {
|
|
159
163
|
console.log(chalk.yellow(`⚠️ Instruction "${name}" already exists.`));
|
|
160
164
|
return;
|
|
161
165
|
}
|
|
162
|
-
|
|
166
|
+
|
|
163
167
|
const response = await prompts([
|
|
164
168
|
{
|
|
165
169
|
type: 'text',
|
|
@@ -174,13 +178,16 @@ async function addInstruction(githubDir, name, options) {
|
|
|
174
178
|
initial: `${name} coding guidelines`
|
|
175
179
|
}
|
|
176
180
|
]);
|
|
177
|
-
|
|
181
|
+
|
|
178
182
|
if (!response.applyTo) {
|
|
179
183
|
console.log(chalk.yellow('Aborted.'));
|
|
180
184
|
return;
|
|
181
185
|
}
|
|
182
|
-
|
|
186
|
+
|
|
183
187
|
const content = `---
|
|
188
|
+
name: ${name}
|
|
189
|
+
description: ${response.description}
|
|
190
|
+
version: 1.0
|
|
184
191
|
applyTo: "${response.applyTo}"
|
|
185
192
|
---
|
|
186
193
|
|
|
@@ -201,10 +208,10 @@ applyTo: "${response.applyTo}"
|
|
|
201
208
|
### Best Practices
|
|
202
209
|
- [Add specific guidelines here]
|
|
203
210
|
`;
|
|
204
|
-
|
|
211
|
+
|
|
205
212
|
await fs.ensureDir(path.dirname(instrFile));
|
|
206
213
|
await fs.writeFile(instrFile, content);
|
|
207
|
-
|
|
214
|
+
|
|
208
215
|
console.log(chalk.green(`✅ Created instruction: .github/instructions/${name}.instructions.md`));
|
|
209
216
|
console.log(chalk.dim(` Will apply to: ${response.applyTo}`));
|
|
210
217
|
}
|
package/src/commands/doctor.js
CHANGED
|
@@ -61,7 +61,7 @@ const CHECKS = [
|
|
|
61
61
|
fix: 'Run: cp-kit init (with MCP option)'
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
|
-
name: 'Instructions have valid applyTo',
|
|
64
|
+
name: 'Instructions have valid frontmatter (applyTo, version)',
|
|
65
65
|
check: async (dir) => {
|
|
66
66
|
const instrDir = path.join(dir, '.github', 'instructions');
|
|
67
67
|
if (!await fs.pathExists(instrDir)) return true;
|
|
@@ -69,13 +69,15 @@ const CHECKS = [
|
|
|
69
69
|
for (const file of files.filter(f => f.endsWith('.instructions.md'))) {
|
|
70
70
|
const content = await fs.readFile(path.join(instrDir, file), 'utf-8');
|
|
71
71
|
if (!content.includes('applyTo:')) return false;
|
|
72
|
+
if (!content.includes('version:')) return false;
|
|
73
|
+
if (!content.includes('description:')) return false;
|
|
72
74
|
}
|
|
73
75
|
return true;
|
|
74
76
|
},
|
|
75
|
-
fix: 'Add
|
|
77
|
+
fix: 'Add version and description frontmatter to instruction files'
|
|
76
78
|
},
|
|
77
79
|
{
|
|
78
|
-
name: 'Agents have
|
|
80
|
+
name: 'Agents have complete frontmatter (name, description, skills)',
|
|
79
81
|
check: async (dir) => {
|
|
80
82
|
const agentsDir = path.join(dir, '.github', 'agents');
|
|
81
83
|
if (!await fs.pathExists(agentsDir)) return true;
|
|
@@ -84,30 +86,33 @@ const CHECKS = [
|
|
|
84
86
|
const content = await fs.readFile(path.join(agentsDir, file), 'utf-8');
|
|
85
87
|
if (!content.startsWith('---')) return false;
|
|
86
88
|
if (!content.includes('name:')) return false;
|
|
89
|
+
if (!content.includes('description:')) return false;
|
|
90
|
+
if (!content.includes('skills:')) return false;
|
|
91
|
+
if (!content.includes('applyTo:')) return false;
|
|
87
92
|
}
|
|
88
93
|
return true;
|
|
89
94
|
},
|
|
90
|
-
fix: '
|
|
95
|
+
fix: 'Update agent files with full frontmatter (name, description, skills, applyTo)'
|
|
91
96
|
}
|
|
92
97
|
];
|
|
93
98
|
|
|
94
99
|
export async function doctorCommand() {
|
|
95
100
|
const targetDir = process.cwd();
|
|
96
|
-
|
|
101
|
+
|
|
97
102
|
console.log('');
|
|
98
103
|
console.log(chalk.bold.cyan('🩺 cp-kit Doctor'));
|
|
99
104
|
console.log(chalk.gray('─'.repeat(50)));
|
|
100
105
|
console.log(chalk.gray(`Checking: ${targetDir}`));
|
|
101
106
|
console.log('');
|
|
102
|
-
|
|
107
|
+
|
|
103
108
|
let passed = 0;
|
|
104
109
|
let failed = 0;
|
|
105
110
|
let warnings = 0;
|
|
106
|
-
|
|
111
|
+
|
|
107
112
|
for (const check of CHECKS) {
|
|
108
113
|
try {
|
|
109
114
|
const result = await check.check(targetDir);
|
|
110
|
-
|
|
115
|
+
|
|
111
116
|
if (result) {
|
|
112
117
|
console.log(chalk.green(' ✓ ') + check.name);
|
|
113
118
|
passed++;
|
|
@@ -126,10 +131,10 @@ export async function doctorCommand() {
|
|
|
126
131
|
failed++;
|
|
127
132
|
}
|
|
128
133
|
}
|
|
129
|
-
|
|
134
|
+
|
|
130
135
|
console.log('');
|
|
131
136
|
console.log(chalk.gray('─'.repeat(50)));
|
|
132
|
-
|
|
137
|
+
|
|
133
138
|
if (failed === 0) {
|
|
134
139
|
if (warnings > 0) {
|
|
135
140
|
console.log(chalk.green.bold(`✓ All checks passed!`) + chalk.gray(` (${passed} passed, ${warnings} optional)`));
|
package/src/commands/init.js
CHANGED
|
@@ -26,13 +26,13 @@ export async function initCommand(directory, options) {
|
|
|
26
26
|
const templatesDir = path.join(__dirname, '../../templates');
|
|
27
27
|
|
|
28
28
|
console.log(chalk.bold.cyan('\n🚀 cp-toolkit - GitHub Copilot Agent Toolkit\n'));
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
// Create directory if needed
|
|
31
31
|
if (directory && !fs.existsSync(targetDir)) {
|
|
32
32
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
33
33
|
console.log(chalk.green(`📁 Created directory: ${dirName}`));
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
// Check for existing configuration
|
|
37
37
|
const githubAgentsDir = path.join(targetDir, '.github', 'agents');
|
|
38
38
|
if (fs.existsSync(githubAgentsDir) && !options.force) {
|
|
@@ -42,7 +42,7 @@ export async function initCommand(directory, options) {
|
|
|
42
42
|
message: 'Copilot Kit (.github/agents) already exists. Overwrite?',
|
|
43
43
|
initial: false
|
|
44
44
|
});
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
if (!overwrite) {
|
|
47
47
|
console.log(chalk.yellow('⚠️ Aborted. Use --force to overwrite.'));
|
|
48
48
|
return;
|
|
@@ -82,31 +82,31 @@ export async function initCommand(directory, options) {
|
|
|
82
82
|
const agentsTargetDir = path.join(targetDir, '.github', 'agents');
|
|
83
83
|
await fs.ensureDir(agentsTargetDir);
|
|
84
84
|
await fs.copy(agentsSourceDir, agentsTargetDir, { overwrite: true });
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
// 2. Setup .github/instructions/ (from skills that have instruction content)
|
|
87
87
|
spinner.text = 'Copying instructions...';
|
|
88
88
|
const instructionsTargetDir = path.join(targetDir, '.github', 'instructions');
|
|
89
89
|
await fs.ensureDir(instructionsTargetDir);
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
// Create standard instruction files
|
|
92
92
|
await createInstructionFiles(instructionsTargetDir);
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
// 4. Setup .github/skills/ (essential skills referenced by agents)
|
|
95
95
|
spinner.text = 'Copying essential skills...';
|
|
96
96
|
const skillsTargetDir = path.join(targetDir, '.github', 'skills');
|
|
97
97
|
await fs.ensureDir(skillsTargetDir);
|
|
98
|
-
|
|
98
|
+
|
|
99
99
|
// Copy essential skills that agents reference
|
|
100
100
|
const essentialSkills = [
|
|
101
101
|
'mobile-design',
|
|
102
|
-
'frontend-design',
|
|
102
|
+
'frontend-design',
|
|
103
103
|
'api-patterns',
|
|
104
104
|
'database-design',
|
|
105
105
|
'testing-patterns',
|
|
106
106
|
'deployment-procedures',
|
|
107
107
|
'architecture'
|
|
108
108
|
];
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
for (const skill of essentialSkills) {
|
|
111
111
|
const skillSourceDir = path.join(templatesDir, 'skills', 'optional', skill);
|
|
112
112
|
if (fs.existsSync(skillSourceDir)) {
|
|
@@ -115,7 +115,7 @@ export async function initCommand(directory, options) {
|
|
|
115
115
|
await fs.copy(skillSourceDir, skillTargetDir, { overwrite: true });
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
// 5. Setup .github/copilot-instructions.md
|
|
120
120
|
spinner.text = 'Creating copilot-instructions.md...';
|
|
121
121
|
const instructionsPath = path.join(targetDir, '.github', 'copilot-instructions.md');
|
|
@@ -126,7 +126,7 @@ export async function initCommand(directory, options) {
|
|
|
126
126
|
spinner.text = 'Configuring MCP Server...';
|
|
127
127
|
const vscodeDir = path.join(targetDir, '.vscode');
|
|
128
128
|
await fs.ensureDir(vscodeDir);
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
const mcpConfig = {
|
|
131
131
|
"mcpServers": {
|
|
132
132
|
"filesystem": {
|
|
@@ -158,9 +158,9 @@ export async function initCommand(directory, options) {
|
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
};
|
|
161
|
-
|
|
161
|
+
|
|
162
162
|
await fs.writeFile(
|
|
163
|
-
path.join(vscodeDir, 'mcp.json'),
|
|
163
|
+
path.join(vscodeDir, 'mcp.json'),
|
|
164
164
|
JSON.stringify(mcpConfig, null, 2)
|
|
165
165
|
);
|
|
166
166
|
|
|
@@ -201,8 +201,16 @@ export async function initCommand(directory, options) {
|
|
|
201
201
|
await fs.copy(rulesSourceDir, rulesTargetDir, { overwrite: true });
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
+
// 11. Copy AGENTS.md to root (required by doctor)
|
|
205
|
+
spinner.text = 'Copying AGENTS.md...';
|
|
206
|
+
const agentsSource = path.join(templatesDir, 'AGENTS.md');
|
|
207
|
+
const agentsTarget = path.join(targetDir, 'AGENTS.md');
|
|
208
|
+
if (fs.existsSync(agentsSource)) {
|
|
209
|
+
await fs.copy(agentsSource, agentsTarget, { overwrite: true });
|
|
210
|
+
}
|
|
211
|
+
|
|
204
212
|
spinner.succeed(chalk.green('✨ Copilot Kit initialized successfully!'));
|
|
205
|
-
|
|
213
|
+
|
|
206
214
|
console.log(chalk.bold('\n📁 Created structure:'));
|
|
207
215
|
console.log(chalk.dim(' .github/'));
|
|
208
216
|
console.log(chalk.dim(' ├── agents/ ') + chalk.cyan('← 20 specialist agents'));
|
|
@@ -225,11 +233,12 @@ export async function initCommand(directory, options) {
|
|
|
225
233
|
console.log(chalk.dim(' └── copilot-instructions.md'));
|
|
226
234
|
console.log(chalk.dim(' .vscode/'));
|
|
227
235
|
console.log(chalk.dim(' └── mcp.json ') + chalk.cyan('← MCP server config'));
|
|
228
|
-
|
|
236
|
+
|
|
229
237
|
console.log(chalk.bold('\n🚀 Next Steps:'));
|
|
230
238
|
console.log(` 1. ${chalk.cyan('Reload VS Code window')} to activate MCP servers`);
|
|
231
239
|
console.log(` 2. Open Copilot Chat and try: ${chalk.yellow('@workspace use the orchestrator agent')}`);
|
|
232
240
|
console.log(` 3. Or try a workflow: ${chalk.yellow('/create a React component')}`);
|
|
241
|
+
console.log(chalk.green('\n✅ Smart Context patterns applied to agents.'));
|
|
233
242
|
|
|
234
243
|
} catch (error) {
|
|
235
244
|
spinner.fail(chalk.red('❌ Failed to initialize Copilot Kit'));
|
|
@@ -243,6 +252,9 @@ export async function initCommand(directory, options) {
|
|
|
243
252
|
async function createInstructionFiles(instructionsDir) {
|
|
244
253
|
const instructions = {
|
|
245
254
|
'typescript-development.instructions.md': `---
|
|
255
|
+
name: typescript-development
|
|
256
|
+
description: Strict guidelines for TypeScript development including type safety, modules, and error handling.
|
|
257
|
+
version: 1.0
|
|
246
258
|
applyTo: "**/*.ts,**/*.tsx,**/*.mts,**/*.cts"
|
|
247
259
|
---
|
|
248
260
|
|
|
@@ -273,6 +285,9 @@ applyTo: "**/*.ts,**/*.tsx,**/*.mts,**/*.cts"
|
|
|
273
285
|
`,
|
|
274
286
|
|
|
275
287
|
'javascript-development.instructions.md': `---
|
|
288
|
+
name: javascript-development
|
|
289
|
+
description: Best practices for modern JavaScript development including ES6+ features and functional patterns.
|
|
290
|
+
version: 1.0
|
|
276
291
|
applyTo: "**/*.js,**/*.mjs,**/*.cjs"
|
|
277
292
|
---
|
|
278
293
|
|
|
@@ -306,6 +321,9 @@ applyTo: "**/*.js,**/*.mjs,**/*.cjs"
|
|
|
306
321
|
`,
|
|
307
322
|
|
|
308
323
|
'react-development.instructions.md': `---
|
|
324
|
+
name: react-development
|
|
325
|
+
description: Component patterns, state management, and accessibility standards for React development.
|
|
326
|
+
version: 1.0
|
|
309
327
|
applyTo: "**/*.jsx,**/*.tsx,**/*react*"
|
|
310
328
|
---
|
|
311
329
|
|
|
@@ -344,7 +362,10 @@ applyTo: "**/*.jsx,**/*.tsx,**/*react*"
|
|
|
344
362
|
`,
|
|
345
363
|
|
|
346
364
|
'nextjs-development.instructions.md': `---
|
|
347
|
-
|
|
365
|
+
name: nextjs-development
|
|
366
|
+
description: Guidelines for Next.js development including App Router, Server Components, and SEO optimization.
|
|
367
|
+
version: 1.0
|
|
368
|
+
applyTo: "**/app/**,**/components/**,**/lib/**,**/utils/**"
|
|
348
369
|
---
|
|
349
370
|
|
|
350
371
|
# Next.js Development Guidelines
|
|
@@ -383,6 +404,9 @@ applyTo: "**/pages/**,**/app/**,**/components/**,**/lib/**,**/utils/**"
|
|
|
383
404
|
`,
|
|
384
405
|
|
|
385
406
|
'python-development.instructions.md': `---
|
|
407
|
+
name: python-development
|
|
408
|
+
description: Best practices for Python development including type hints, async/await, and testing.
|
|
409
|
+
version: 1.0
|
|
386
410
|
applyTo: "**/*.py"
|
|
387
411
|
---
|
|
388
412
|
|
|
@@ -422,6 +446,9 @@ applyTo: "**/*.py"
|
|
|
422
446
|
`,
|
|
423
447
|
|
|
424
448
|
'security-development.instructions.md': `---
|
|
449
|
+
name: security-development
|
|
450
|
+
description: Comprehensive security guidelines including auth, data protection, and web security.
|
|
451
|
+
version: 1.0
|
|
425
452
|
applyTo: "**/auth/**,**/security/**,**/*auth*,**/*token*,**/*session*,**/middleware/**"
|
|
426
453
|
---
|
|
427
454
|
|
|
@@ -464,6 +491,9 @@ applyTo: "**/auth/**,**/security/**,**/*auth*,**/*token*,**/*session*,**/middlew
|
|
|
464
491
|
`,
|
|
465
492
|
|
|
466
493
|
'database-development.instructions.md': `---
|
|
494
|
+
name: database-development
|
|
495
|
+
description: Standards for schema design, query optimization, and database migrations.
|
|
496
|
+
version: 1.0
|
|
467
497
|
applyTo: "**/prisma/**,**/*.sql,**/migrations/**,**/schema.*,**/db/**,**/models/**"
|
|
468
498
|
---
|
|
469
499
|
|
|
@@ -506,6 +536,9 @@ applyTo: "**/prisma/**,**/*.sql,**/migrations/**,**/schema.*,**/db/**,**/models/
|
|
|
506
536
|
`,
|
|
507
537
|
|
|
508
538
|
'testing-development.instructions.md': `---
|
|
539
|
+
name: testing-development
|
|
540
|
+
description: Guidelines for test structure, frameworks, and code coverage best practices.
|
|
541
|
+
version: 1.0
|
|
509
542
|
applyTo: "**/*.test.*,**/*.spec.*,**/tests/**,**/__tests__/**"
|
|
510
543
|
---
|
|
511
544
|
|
|
@@ -547,6 +580,9 @@ applyTo: "**/*.test.*,**/*.spec.*,**/tests/**,**/__tests__/**"
|
|
|
547
580
|
`,
|
|
548
581
|
|
|
549
582
|
'api-development.instructions.md': `---
|
|
583
|
+
name: api-development
|
|
584
|
+
description: RESTful API design standards including versioning, error handling, and documentation.
|
|
585
|
+
version: 1.0
|
|
550
586
|
applyTo: "**/api/**,**/routes/**,**/controllers/**,**/services/**,**/*api*,**/*endpoint*"
|
|
551
587
|
---
|
|
552
588
|
|
|
@@ -589,6 +625,9 @@ applyTo: "**/api/**,**/routes/**,**/controllers/**,**/services/**,**/*api*,**/*e
|
|
|
589
625
|
`,
|
|
590
626
|
|
|
591
627
|
'github-actions.instructions.md': `---
|
|
628
|
+
name: github-actions
|
|
629
|
+
description: Standards for GitHub Actions workflows including security, performance, and best practices.
|
|
630
|
+
version: 1.0
|
|
592
631
|
applyTo: ".github/workflows/**/*.yml,.github/workflows/**/*.yaml"
|
|
593
632
|
---
|
|
594
633
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Available Agents
|
|
2
|
+
|
|
3
|
+
This project is equipped with specialized AI agents to assist with development. Invoke them using `@workspace` in Copilot Chat or by their specific names.
|
|
4
|
+
|
|
5
|
+
## Core Agents
|
|
6
|
+
|
|
7
|
+
| Agent | Description | Triggers |
|
|
8
|
+
|-------|-------------|----------|
|
|
9
|
+
| **orchestrator** | Multi-agent coordination and task decomposition. | `plan`, `organize`, `coordinate` |
|
|
10
|
+
| **project-planner** | Task breakdown and roadmap planning. | `plan`, `roadmap`, `tasks` |
|
|
11
|
+
| **explorer-agent** | Codebase mapping and architectural analysis. | `analyze`, `map`, `audit` |
|
|
12
|
+
|
|
13
|
+
## Development Agents
|
|
14
|
+
|
|
15
|
+
| Agent | Description | Triggers |
|
|
16
|
+
|-------|-------------|----------|
|
|
17
|
+
| **frontend-specialist** | React/Next.js UI implementation. | `component`, `css`, `ui` |
|
|
18
|
+
| **backend-specialist** | Node.js/Python API and server logic. | `api`, `server`, `endpoint` |
|
|
19
|
+
| **mobile-developer** | React Native/Flutter app development. | `ios`, `android`, `mobile` |
|
|
20
|
+
| **database-architect** | Schema design and migrations. | `schema`, `sql`, `migration` |
|
|
21
|
+
| **game-developer** | Game mechanics and engine logic. | `unity`, `godot`, `game` |
|
|
22
|
+
|
|
23
|
+
## Specialized Agents
|
|
24
|
+
|
|
25
|
+
| Agent | Description | Triggers |
|
|
26
|
+
|-------|-------------|----------|
|
|
27
|
+
| **test-engineer** | Unit and integration testing strategies. | `test`, `spec`, `coverage` |
|
|
28
|
+
| **qa-automation-engineer** | E2E and browser automation. | `e2e`, `cypress`, `playwright` |
|
|
29
|
+
| **security-auditor** | Vulnerability scanning and auth review. | `security`, `audit`, `auth` |
|
|
30
|
+
| **penetration-tester** | Offensive security testing. | `pentest`, `exploit` |
|
|
31
|
+
| **performance-optimizer** | Web vitals and bundle optimization. | `performance`, `slow`, `optimize` |
|
|
32
|
+
| **seo-specialist** | SEO and GEO (Generative Engine Optimization). | `seo`, `meta`, `robots` |
|
|
33
|
+
| **debugger** | Root cause analysis for complex bugs. | `debug`, `crash`, `error` |
|
|
34
|
+
|
|
35
|
+
## Product Agents
|
|
36
|
+
|
|
37
|
+
| Agent | Description | Triggers |
|
|
38
|
+
|-------|-------------|----------|
|
|
39
|
+
| **product-manager** | Requirements gathering and PRDs. | `requirements`, `user story` |
|
|
40
|
+
| **product-owner** | Backlog prioritization and strategy. | `backlog`, `roadmap` |
|
|
41
|
+
| **code-archaeologist** | Understanding legacy systems. | `legacy`, `refactor` |
|
|
42
|
+
| **devops-engineer** | CI/CD, Docker, and infrastructure. | `deploy`, `docker`, `ci` |
|
|
43
|
+
| **documentation-writer** | Technical documentation. | `docs`, `readme` |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
> **Tip:** Use `cp-toolkit list agents` to see this list in your CLI.
|
|
@@ -17,6 +17,48 @@ Antigravity Kit is a modular system consisting of:
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
+
## 📝 Template Standards
|
|
21
|
+
|
|
22
|
+
All toolkit files MUST follow the strict metadata standard (YAML Frontmatter) to ensure proper indexing by GitHub Copilot and the CP-Toolkit CLI.
|
|
23
|
+
|
|
24
|
+
### AGENTS (`/agents/*.md`)
|
|
25
|
+
```yaml
|
|
26
|
+
---
|
|
27
|
+
name: agent-name # lowercase-slug
|
|
28
|
+
description: "..." # Concise mandatory description
|
|
29
|
+
version: 1.0 # Current version
|
|
30
|
+
skills: skill-a, skill-b # Comma-separated list of primary skills
|
|
31
|
+
---
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### SKILLS (`/skills/**/SKILL.md`)
|
|
35
|
+
```yaml
|
|
36
|
+
---
|
|
37
|
+
name: skill-name # lowercase-slug
|
|
38
|
+
description: "..." # Detailed capability description
|
|
39
|
+
version: 1.0 # Mandatory version tracking
|
|
40
|
+
---
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### INSTRUCTIONS (`/instructions/*.instructions.md`)
|
|
44
|
+
```yaml
|
|
45
|
+
---
|
|
46
|
+
name: instruction-name
|
|
47
|
+
description: "..."
|
|
48
|
+
version: 1.0
|
|
49
|
+
applyTo: "**/*.ext" # Glob pattern for Copilot context
|
|
50
|
+
---
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### RULES (`/rules/GEMINI.md`)
|
|
54
|
+
```yaml
|
|
55
|
+
---
|
|
56
|
+
trigger: always_on # Activation trigger
|
|
57
|
+
---
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
20
62
|
## 🏗️ Directory Structure
|
|
21
63
|
|
|
22
64
|
```plaintext
|
|
@@ -4,6 +4,7 @@ description: Expert backend architect for Node.js, Python, and modern serverless
|
|
|
4
4
|
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
5
|
model: inherit
|
|
6
6
|
skills: clean-code, nodejs-best-practices, python-patterns, api-patterns, database-design, mcp-builder, lint-and-validate, powershell-windows, bash-linux
|
|
7
|
+
applyTo: ["**/api/**", "**/*.server.*", "**/controllers/**", "**/*.service.ts"]
|
|
7
8
|
---
|
|
8
9
|
|
|
9
10
|
# Backend Development Architect
|