metacoding 1.5.1 → 2.0.1
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/CHANGELOG.md +45 -0
- package/README.md +108 -514
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +18 -19
- package/lib/cli.js.map +1 -1
- package/lib/commands/init.d.ts +8 -14
- package/lib/commands/init.d.ts.map +1 -1
- package/lib/commands/init.js +105 -387
- package/lib/commands/init.js.map +1 -1
- package/lib/commands/update.d.ts +9 -9
- package/lib/commands/update.d.ts.map +1 -1
- package/lib/commands/update.js +141 -320
- package/lib/commands/update.js.map +1 -1
- package/lib/services/backup.d.ts +1 -1
- package/lib/services/backup.d.ts.map +1 -1
- package/lib/services/backup.js +10 -6
- package/lib/services/backup.js.map +1 -1
- package/lib/services/filesystem.d.ts.map +1 -1
- package/lib/services/filesystem.js +11 -5
- package/lib/services/filesystem.js.map +1 -1
- package/lib/services/gitignore-manager.js +5 -5
- package/lib/services/gitignore-manager.js.map +1 -1
- package/lib/services/project-detector.d.ts +9 -8
- package/lib/services/project-detector.d.ts.map +1 -1
- package/lib/services/project-detector.js +79 -197
- package/lib/services/project-detector.js.map +1 -1
- package/lib/services/skill-manager.d.ts +23 -0
- package/lib/services/skill-manager.d.ts.map +1 -0
- package/lib/services/skill-manager.js +212 -0
- package/lib/services/skill-manager.js.map +1 -0
- package/lib/types/index.d.ts +5 -15
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +9 -17
- package/skills/metacoding-workflow/SKILL.md +52 -0
- package/skills/metacoding-workflow/agents/openai.yaml +4 -0
- package/skills/metacoding-workflow/assets/templates/changelog-entry.md +6 -0
- package/skills/metacoding-workflow/assets/templates/project-context.md +18 -0
- package/skills/metacoding-workflow/assets/templates/repeated-task-checklist.md +8 -0
- package/skills/metacoding-workflow/assets/templates/task-entry.md +9 -0
- package/skills/metacoding-workflow/assets/templates/test-plan.md +8 -0
- package/skills/metacoding-workflow/references/javascript.md +7 -0
- package/skills/metacoding-workflow/references/node.md +7 -0
- package/skills/metacoding-workflow/references/platform-adaptation.md +37 -0
- package/skills/metacoding-workflow/references/python.md +7 -0
- package/skills/metacoding-workflow/references/react.md +7 -0
- package/skills/metacoding-workflow/references/repository-organization.md +84 -0
- package/skills/metacoding-workflow/references/typescript.md +7 -0
- package/skills/metacoding-workflow/references/workflow-rules.md +54 -0
- package/skills/vendor-templates/claude-agent.md.template +41 -0
- package/lib/services/assistant-adapter.d.ts +0 -18
- package/lib/services/assistant-adapter.d.ts.map +0 -1
- package/lib/services/assistant-adapter.js +0 -246
- package/lib/services/assistant-adapter.js.map +0 -1
- package/lib/services/cursor.d.ts +0 -47
- package/lib/services/cursor.d.ts.map +0 -1
- package/lib/services/cursor.js +0 -314
- package/lib/services/cursor.js.map +0 -1
- package/lib/services/template-manager.d.ts +0 -23
- package/lib/services/template-manager.d.ts.map +0 -1
- package/lib/services/template-manager.js +0 -374
- package/lib/services/template-manager.js.map +0 -1
- package/lib/services/vscode.d.ts +0 -10
- package/lib/services/vscode.d.ts.map +0 -1
- package/lib/services/vscode.js +0 -108
- package/lib/services/vscode.js.map +0 -1
- package/templates/assistants/AGENTS.md +0 -203
- package/templates/assistants/CLAUDE.md +0 -156
- package/templates/assistants/GEMINI.md +0 -193
- package/templates/general/code-review.instructions.md +0 -265
- package/templates/general/copilot-instructions.md +0 -427
- package/templates/general/docs-update.instructions.md +0 -275
- package/templates/general/release.instructions.md +0 -242
- package/templates/general/template.json +0 -9
- package/templates/general/test-runner.instructions.md +0 -188
- package/templates/javascript/javascript.coding.instructions.md +0 -500
- package/templates/javascript/javascript.docs.instructions.md +0 -563
- package/templates/javascript/javascript.testing.instructions.md +0 -686
- package/templates/javascript/template.json +0 -36
- package/templates/node/nodejs.coding.instructions.md +0 -249
- package/templates/node/nodejs.docs.instructions.md +0 -261
- package/templates/node/nodejs.testing.instructions.md +0 -373
- package/templates/node/template.json +0 -23
- package/templates/python/python.coding.instructions.md +0 -338
- package/templates/python/python.docs.instructions.md +0 -1178
- package/templates/python/python.testing.instructions.md +0 -1073
- package/templates/python/template.json +0 -75
- package/templates/react/react.coding.instructions.md +0 -694
- package/templates/react/react.docs.instructions.md +0 -451
- package/templates/react/react.testing.instructions.md +0 -192
- package/templates/react/template.json +0 -14
- package/templates/react/test-runner.instructions.md +0 -135
- package/templates/typescript/template.json +0 -16
- package/templates/typescript/typescript.coding.instructions.md +0 -368
- package/templates/typescript/typescript.docs.instructions.md +0 -760
- package/templates/typescript/typescript.testing.instructions.md +0 -739
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SkillManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
class SkillManager {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.sourceSkillDir = path.join(__dirname, '../../skills/metacoding-workflow');
|
|
42
|
+
this.claudeAgentTemplatePath = path.join(__dirname, '../../skills/vendor-templates/claude-agent.md.template');
|
|
43
|
+
this.vendorDefinitions = {
|
|
44
|
+
codex: {
|
|
45
|
+
vendor: 'codex',
|
|
46
|
+
root: path.join('.codex', 'skills', 'metacoding-workflow'),
|
|
47
|
+
entryFiles: ['SKILL.md', path.join('agents', 'openai.yaml')],
|
|
48
|
+
},
|
|
49
|
+
'claude-code': {
|
|
50
|
+
vendor: 'claude-code',
|
|
51
|
+
root: path.join('.claude', 'metacoding-workflow'),
|
|
52
|
+
entryFiles: [path.join('..', 'agents', 'metacoding-workflow.md')],
|
|
53
|
+
},
|
|
54
|
+
antigravity: {
|
|
55
|
+
vendor: 'antigravity',
|
|
56
|
+
root: path.join('.agents', 'skills', 'metacoding-workflow'),
|
|
57
|
+
entryFiles: ['SKILL.md'],
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async isInstalled(vendor) {
|
|
62
|
+
const vendors = vendor ? [vendor] : await this.getInstalledVendors();
|
|
63
|
+
return vendors.length > 0;
|
|
64
|
+
}
|
|
65
|
+
async getInstalledVendors() {
|
|
66
|
+
const installed = [];
|
|
67
|
+
for (const vendor of Object.keys(this.vendorDefinitions)) {
|
|
68
|
+
if (await this.hasVendorInstall(vendor)) {
|
|
69
|
+
installed.push(vendor);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return installed;
|
|
73
|
+
}
|
|
74
|
+
getInstallDirectory(vendor) {
|
|
75
|
+
return this.vendorDefinitions[vendor].root;
|
|
76
|
+
}
|
|
77
|
+
getBackupTargets(vendor) {
|
|
78
|
+
if (vendor === 'claude-code') {
|
|
79
|
+
return [
|
|
80
|
+
path.join('.claude', 'agents', 'metacoding-workflow.md'),
|
|
81
|
+
this.vendorDefinitions[vendor].root,
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
return [this.vendorDefinitions[vendor].root];
|
|
85
|
+
}
|
|
86
|
+
async installSkill(config) {
|
|
87
|
+
const files = await this.generateInstallationFiles(config);
|
|
88
|
+
for (const file of files) {
|
|
89
|
+
await fs.ensureDir(path.dirname(file.path));
|
|
90
|
+
await fs.writeFile(file.path, file.content, 'utf8');
|
|
91
|
+
}
|
|
92
|
+
return files.map((file) => file.path);
|
|
93
|
+
}
|
|
94
|
+
async generateInstallationFiles(config) {
|
|
95
|
+
const root = this.getInstallDirectory(config.vendor);
|
|
96
|
+
const supportFiles = await this.readCoreSupportFiles(root, config.vendor);
|
|
97
|
+
const projectContext = await this.renderProjectContext(config);
|
|
98
|
+
const files = [
|
|
99
|
+
...supportFiles,
|
|
100
|
+
{
|
|
101
|
+
path: path.join(root, 'references/project-context.md'),
|
|
102
|
+
content: projectContext,
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
if (config.vendor === 'claude-code') {
|
|
106
|
+
files.push({
|
|
107
|
+
path: path.join('.claude', 'agents', 'metacoding-workflow.md'),
|
|
108
|
+
content: await this.renderClaudeAgentFile(),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return files;
|
|
112
|
+
}
|
|
113
|
+
async getInstalledFiles(vendor) {
|
|
114
|
+
const files = await this.listFilesRecursively(this.getInstallDirectory(vendor));
|
|
115
|
+
if (vendor === 'claude-code') {
|
|
116
|
+
const agentPath = path.join('.claude', 'agents', 'metacoding-workflow.md');
|
|
117
|
+
if (await fs.pathExists(agentPath)) {
|
|
118
|
+
files.push(agentPath);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return files.sort();
|
|
122
|
+
}
|
|
123
|
+
async hasVendorInstall(vendor) {
|
|
124
|
+
const definition = this.vendorDefinitions[vendor];
|
|
125
|
+
for (const relativeEntry of definition.entryFiles) {
|
|
126
|
+
const fullPath = path.join(definition.root, relativeEntry);
|
|
127
|
+
if (!(await fs.pathExists(fullPath))) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
async readCoreSupportFiles(installRoot, vendor) {
|
|
134
|
+
const relativePaths = await this.listFilesRecursively(this.sourceSkillDir);
|
|
135
|
+
const files = [];
|
|
136
|
+
for (const absolutePath of relativePaths) {
|
|
137
|
+
const relativePath = path.relative(this.sourceSkillDir, absolutePath);
|
|
138
|
+
if (vendor !== 'codex' && relativePath.startsWith('agents/')) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const content = await fs.readFile(absolutePath, 'utf8');
|
|
142
|
+
files.push({
|
|
143
|
+
path: path.join(installRoot, relativePath),
|
|
144
|
+
content,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return files;
|
|
148
|
+
}
|
|
149
|
+
async renderClaudeAgentFile() {
|
|
150
|
+
return fs.readFile(this.claudeAgentTemplatePath, 'utf8');
|
|
151
|
+
}
|
|
152
|
+
async listFilesRecursively(root) {
|
|
153
|
+
if (!(await fs.pathExists(root))) {
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
const entries = await fs.readdir(root, { withFileTypes: true });
|
|
157
|
+
const files = [];
|
|
158
|
+
for (const entry of entries) {
|
|
159
|
+
const fullPath = path.join(root, entry.name);
|
|
160
|
+
if (entry.isDirectory()) {
|
|
161
|
+
files.push(...(await this.listFilesRecursively(fullPath)));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
files.push(fullPath);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return files.sort();
|
|
168
|
+
}
|
|
169
|
+
async renderProjectContext(config) {
|
|
170
|
+
const templatePath = path.join(this.sourceSkillDir, 'assets/templates/project-context.md');
|
|
171
|
+
const template = await fs.readFile(templatePath, 'utf8');
|
|
172
|
+
const recommendedReferences = this.getRecommendedReferences(config);
|
|
173
|
+
const variables = {
|
|
174
|
+
PROJECT_NAME: config.name,
|
|
175
|
+
PROJECT_DESCRIPTION: config.description,
|
|
176
|
+
PROJECT_TYPE: config.projectType,
|
|
177
|
+
TECH_STACK: config.techStack.join(', '),
|
|
178
|
+
TEST_FRAMEWORK: config.testFramework || 'Use the repo default',
|
|
179
|
+
BUILD_TOOL: config.buildTool || 'Use the repo default',
|
|
180
|
+
RECOMMENDED_REFERENCES: recommendedReferences.join('\n'),
|
|
181
|
+
AGENT_VENDOR: config.vendor,
|
|
182
|
+
};
|
|
183
|
+
return Object.entries(variables).reduce((content, [key, value]) => {
|
|
184
|
+
return content.replace(new RegExp(`{{${key}}}`, 'g'), value);
|
|
185
|
+
}, template);
|
|
186
|
+
}
|
|
187
|
+
getRecommendedReferences(config) {
|
|
188
|
+
const references = [
|
|
189
|
+
'- `references/workflow-rules.md` for the gated task flow',
|
|
190
|
+
'- `references/repository-organization.md` for repository structure and MECE documentation ownership',
|
|
191
|
+
'- `references/platform-adaptation.md` for fallback behavior when repo artifacts or git are missing',
|
|
192
|
+
];
|
|
193
|
+
if (config.projectType === 'typescript') {
|
|
194
|
+
references.push('- `references/typescript.md` for shared TypeScript coding, testing, and documentation guidance');
|
|
195
|
+
}
|
|
196
|
+
else if (config.projectType === 'react') {
|
|
197
|
+
references.push('- `references/typescript.md` for shared TypeScript guidance', '- `references/react.md` for component, testing, and UI workflow guidance');
|
|
198
|
+
}
|
|
199
|
+
else if (config.projectType === 'node') {
|
|
200
|
+
references.push('- `references/typescript.md` for shared TypeScript guidance', '- `references/node.md` for service, API, and backend workflow guidance');
|
|
201
|
+
}
|
|
202
|
+
else if (config.projectType === 'javascript') {
|
|
203
|
+
references.push('- `references/javascript.md` for JavaScript coding, testing, and documentation guidance');
|
|
204
|
+
}
|
|
205
|
+
else if (config.projectType === 'python') {
|
|
206
|
+
references.push('- `references/python.md` for Python coding, testing, and documentation guidance');
|
|
207
|
+
}
|
|
208
|
+
return references;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
exports.SkillManager = SkillManager;
|
|
212
|
+
//# sourceMappingURL=skill-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-manager.js","sourceRoot":"","sources":["../../src/services/skill-manager.ts"],"names":[],"mappings":"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"}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
+
export type AgentVendor = 'codex' | 'claude-code' | 'antigravity';
|
|
2
|
+
export type AgentVendorOption = AgentVendor | 'all';
|
|
1
3
|
export interface InitOptions {
|
|
2
4
|
template: string;
|
|
3
5
|
force?: boolean;
|
|
4
|
-
skipVscode?: boolean;
|
|
5
6
|
skipGit?: boolean;
|
|
6
|
-
|
|
7
|
-
cursor?: boolean;
|
|
8
|
-
ide?: string;
|
|
9
|
-
environment?: 'ide' | 'terminal';
|
|
10
|
-
assistants?: AssistantType[];
|
|
11
|
-
ideChoice?: 'vscode' | 'cursor' | 'intellij';
|
|
12
|
-
}
|
|
13
|
-
export type AssistantType = 'copilot' | 'claude' | 'codex' | 'gemini' | 'all';
|
|
14
|
-
export interface AssistantConfig {
|
|
15
|
-
type: AssistantType;
|
|
16
|
-
fileName: string;
|
|
17
|
-
description: string;
|
|
18
|
-
instructions: string;
|
|
7
|
+
vendor?: AgentVendorOption;
|
|
19
8
|
}
|
|
20
9
|
export interface UpdateOptions {
|
|
21
10
|
template?: string;
|
|
@@ -23,6 +12,7 @@ export interface UpdateOptions {
|
|
|
23
12
|
force?: boolean;
|
|
24
13
|
dryRun?: boolean;
|
|
25
14
|
strict?: boolean;
|
|
15
|
+
vendor?: AgentVendorOption;
|
|
26
16
|
}
|
|
27
17
|
export interface ProjectConfig {
|
|
28
18
|
name: string;
|
|
@@ -31,7 +21,7 @@ export interface ProjectConfig {
|
|
|
31
21
|
projectType: string;
|
|
32
22
|
testFramework?: string;
|
|
33
23
|
buildTool?: string;
|
|
34
|
-
|
|
24
|
+
vendor: AgentVendor;
|
|
35
25
|
}
|
|
36
26
|
export interface Template {
|
|
37
27
|
name: string;
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "metacoding",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"main": "lib/
|
|
6
|
-
"types": "lib/
|
|
3
|
+
"version": "2.0.1",
|
|
4
|
+
"description": "Cross-agent workflow skill for modern coding agents with gated planning, testing, verification, and handoff defaults",
|
|
5
|
+
"main": "lib/cli.js",
|
|
6
|
+
"types": "lib/cli.d.ts",
|
|
7
7
|
"bin": {
|
|
8
8
|
"metacoding": "bin/metacoding.js"
|
|
9
9
|
},
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
"start": "node bin/metacoding.js"
|
|
24
24
|
},
|
|
25
25
|
"keywords": [
|
|
26
|
-
"
|
|
26
|
+
"coding-agent",
|
|
27
|
+
"codex-skill",
|
|
27
28
|
"development-workflow",
|
|
28
29
|
"ai-coding",
|
|
29
30
|
"code-quality",
|
|
30
|
-
"
|
|
31
|
+
"skill",
|
|
31
32
|
"developer-tools",
|
|
32
|
-
"copilot-instructions",
|
|
33
33
|
"programming-workflow",
|
|
34
34
|
"tdd",
|
|
35
35
|
"best-practices",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"files": [
|
|
53
53
|
"bin/",
|
|
54
54
|
"lib/",
|
|
55
|
-
"
|
|
55
|
+
"skills/",
|
|
56
56
|
"README.md",
|
|
57
57
|
"LICENSE",
|
|
58
58
|
"CHANGELOG.md"
|
|
@@ -86,14 +86,6 @@
|
|
|
86
86
|
"ts-node": "^10.9.1",
|
|
87
87
|
"typescript": "^5.8.3"
|
|
88
88
|
},
|
|
89
|
-
"peerDependencies": {
|
|
90
|
-
"vscode": "*"
|
|
91
|
-
},
|
|
92
|
-
"peerDependenciesMeta": {
|
|
93
|
-
"vscode": {
|
|
94
|
-
"optional": true
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
89
|
"jest": {
|
|
98
90
|
"preset": "ts-jest",
|
|
99
91
|
"testEnvironment": "node",
|
|
@@ -129,7 +121,7 @@
|
|
|
129
121
|
],
|
|
130
122
|
"coverageThreshold": {
|
|
131
123
|
"global": {
|
|
132
|
-
"branches":
|
|
124
|
+
"branches": 65,
|
|
133
125
|
"functions": 80,
|
|
134
126
|
"lines": 80,
|
|
135
127
|
"statements": 80
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: metacoding-workflow
|
|
3
|
+
description: Enforce the metacoding workflow for modern coding agents. Use this skill for feature work, bug fixes, refactors, or reviews that require strict workflow execution, mandatory TDD, MECE documentation structure, single-task focus, verification, and a clean VCS handoff or completion confirmation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Metacoding Workflow
|
|
7
|
+
|
|
8
|
+
Use this skill when the user wants disciplined execution rather than ad hoc coding.
|
|
9
|
+
|
|
10
|
+
## Start Here
|
|
11
|
+
|
|
12
|
+
1. Read `references/project-context.md` first.
|
|
13
|
+
2. Read `references/workflow-rules.md` for the operating contract.
|
|
14
|
+
3. Read `references/repository-organization.md` before planning or editing.
|
|
15
|
+
4. Read `references/platform-adaptation.md` if the repo lacks task docs, test docs, or git context.
|
|
16
|
+
5. Load only the language reference that matches the task:
|
|
17
|
+
- `references/typescript.md`
|
|
18
|
+
- `references/javascript.md`
|
|
19
|
+
- `references/node.md`
|
|
20
|
+
- `references/react.md`
|
|
21
|
+
- `references/python.md`
|
|
22
|
+
|
|
23
|
+
## Core Rules
|
|
24
|
+
|
|
25
|
+
1. Ground in the repo before asking clarifying questions.
|
|
26
|
+
2. Capture scope, success criteria, and constraints before changing code.
|
|
27
|
+
3. Enforce mandatory TDD: document test intent, write or identify failing tests first, then implement production code.
|
|
28
|
+
4. Work one bounded task at a time.
|
|
29
|
+
5. Verify changes with tests and direct checks.
|
|
30
|
+
6. Maintain MECE documentation: update the correct artifact without duplicating the same concept across multiple docs.
|
|
31
|
+
7. Close with a commit-ready handoff, an actual VCS action, or an explicit completion confirmation.
|
|
32
|
+
|
|
33
|
+
## Enforcement
|
|
34
|
+
|
|
35
|
+
- Do not skip directly to coding when repo inspection can reduce uncertainty.
|
|
36
|
+
- Do not bypass TDD unless the user explicitly accepts the exception and the reason is recorded.
|
|
37
|
+
- Do not switch to unrelated work mid-task. Queue it for later.
|
|
38
|
+
- If a new blocker is required to finish the active task, treat it as a subtask.
|
|
39
|
+
- If git actions are unavailable or out of scope, stop at a clean handoff instead of forcing a commit.
|
|
40
|
+
- If repo artifacts are missing, bootstrap them from `assets/templates/` before implementation or explicitly propose them.
|
|
41
|
+
- Keep repository organization and documentation structure aligned with `references/repository-organization.md`.
|
|
42
|
+
|
|
43
|
+
## Bundled Templates
|
|
44
|
+
|
|
45
|
+
Use these templates when the repo does not already provide an equivalent artifact:
|
|
46
|
+
|
|
47
|
+
- `assets/templates/task-entry.md`
|
|
48
|
+
- `assets/templates/test-plan.md`
|
|
49
|
+
- `assets/templates/repeated-task-checklist.md`
|
|
50
|
+
- `assets/templates/changelog-entry.md`
|
|
51
|
+
|
|
52
|
+
Keep the workflow strict, but adapt the exact artifact shape to the repository you are working in.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Metacoding Workflow"
|
|
3
|
+
short_description: "Enforce a gated delivery workflow for coding agents"
|
|
4
|
+
default_prompt: "Use $metacoding-workflow to ground in the repo, capture scope, define test intent before code, implement one bounded task, verify the result, update affected docs/status artifacts, and close with a VCS handoff or completion confirmation."
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Project Context
|
|
2
|
+
|
|
3
|
+
- Project name: {{PROJECT_NAME}}
|
|
4
|
+
- Description: {{PROJECT_DESCRIPTION}}
|
|
5
|
+
- Project type: {{PROJECT_TYPE}}
|
|
6
|
+
- Agent vendor: {{AGENT_VENDOR}}
|
|
7
|
+
- Tech stack: {{TECH_STACK}}
|
|
8
|
+
- Default test framework: {{TEST_FRAMEWORK}}
|
|
9
|
+
- Default build tool: {{BUILD_TOOL}}
|
|
10
|
+
|
|
11
|
+
## Required References
|
|
12
|
+
|
|
13
|
+
- `references/workflow-rules.md`
|
|
14
|
+
- `references/repository-organization.md`
|
|
15
|
+
|
|
16
|
+
## Recommended References
|
|
17
|
+
|
|
18
|
+
{{RECOMMENDED_REFERENCES}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# JavaScript Guidance
|
|
2
|
+
|
|
3
|
+
- Preserve clarity over abstraction; prefer straightforward control flow and small modules.
|
|
4
|
+
- Be explicit about runtime validation, error paths, and async behavior.
|
|
5
|
+
- Keep browser and server concerns separated.
|
|
6
|
+
- Verify observable behavior with focused tests or reproducible manual checks.
|
|
7
|
+
- Update user-facing or operational notes when the behavior surface changes.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Node Guidance
|
|
2
|
+
|
|
3
|
+
- Treat APIs, background jobs, and service boundaries as explicit contracts.
|
|
4
|
+
- Validate inputs, return stable error shapes, and log with operational context.
|
|
5
|
+
- Avoid mixing unrelated infrastructure cleanup into feature work.
|
|
6
|
+
- Verify the smallest meaningful slice first: unit, integration, then full workflow.
|
|
7
|
+
- Document config, env, or deployment implications when they change.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Platform Adaptation
|
|
2
|
+
|
|
3
|
+
## Missing Task Tracking
|
|
4
|
+
|
|
5
|
+
If the repo does not have a task list or status document:
|
|
6
|
+
|
|
7
|
+
- create or propose a lightweight task entry using `assets/templates/task-entry.md`
|
|
8
|
+
- keep it local to the repo’s conventions instead of forcing a fixed filename
|
|
9
|
+
|
|
10
|
+
## Missing Test Documentation
|
|
11
|
+
|
|
12
|
+
If the repo does not track test intent in docs:
|
|
13
|
+
|
|
14
|
+
- capture expected behavior in the implementation plan, PR notes, or a repo-appropriate test artifact
|
|
15
|
+
- adapt `assets/templates/test-plan.md` when a durable artifact is useful
|
|
16
|
+
|
|
17
|
+
## Missing Git Context
|
|
18
|
+
|
|
19
|
+
If git is unavailable, intentionally out of scope, or the user does not want commits:
|
|
20
|
+
|
|
21
|
+
- do not block the task
|
|
22
|
+
- finish with a commit-ready handoff that lists changed files, verification status, and follow-up steps
|
|
23
|
+
|
|
24
|
+
## Missing Changelog or Release Notes
|
|
25
|
+
|
|
26
|
+
If the repo does not maintain a changelog:
|
|
27
|
+
|
|
28
|
+
- do not create one gratuitously
|
|
29
|
+
- instead summarize user-visible impact in the final handoff unless the user asked for a durable release artifact
|
|
30
|
+
|
|
31
|
+
## Agent Portability
|
|
32
|
+
|
|
33
|
+
This skill is vendor-neutral by design.
|
|
34
|
+
|
|
35
|
+
- Use native planning, testing, or VCS tools when available.
|
|
36
|
+
- Do not depend on editor-specific instruction hooks.
|
|
37
|
+
- Preserve the workflow intent even if the host agent’s tools differ.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Python Guidance
|
|
2
|
+
|
|
3
|
+
- Prefer clear modules, typed interfaces where helpful, and explicit data validation.
|
|
4
|
+
- Keep framework conventions intact instead of introducing project-specific patterns casually.
|
|
5
|
+
- Test the changed behavior at the right level: function, service, API, or end-to-end flow.
|
|
6
|
+
- Record operational changes such as env vars, migrations, or deployment effects.
|
|
7
|
+
- Use documentation updates for durable contracts, not transient implementation commentary.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# React Guidance
|
|
2
|
+
|
|
3
|
+
- Preserve the existing design system and interaction patterns unless the task explicitly changes them.
|
|
4
|
+
- Keep component boundaries intentional; move complex state or effects out of leaf UI where possible.
|
|
5
|
+
- Test user-observable behavior rather than implementation detail.
|
|
6
|
+
- Verify loading, empty, error, and success states when the UI surface changes.
|
|
7
|
+
- Update docs or notes only when the component contract or usage changes.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Repository Organization
|
|
2
|
+
|
|
3
|
+
Use this reference to keep repository structure and documentation MECE. If the repo already has a different but coherent structure, preserve its conventions while keeping the same separation of concerns.
|
|
4
|
+
|
|
5
|
+
## Root Directory Standards
|
|
6
|
+
|
|
7
|
+
- Keep the root clean. Only essential top-level files should live there, such as `README.md`, `CHANGELOG.md`, `package.json`, `LICENSE`, and major config files.
|
|
8
|
+
- Do not place application source files directly in the root.
|
|
9
|
+
- Keep configuration files organized and documented.
|
|
10
|
+
- Ensure ignore files exclude build artifacts, dependencies, temporary outputs, and generated local-agent files.
|
|
11
|
+
|
|
12
|
+
## Directory Organization
|
|
13
|
+
|
|
14
|
+
Prefer a structure equivalent to:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
/src # application and library source code
|
|
18
|
+
/test # automated tests, fixtures, and test documentation
|
|
19
|
+
/_meta # system, architecture, API, and project-management docs
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Within source and tests:
|
|
23
|
+
|
|
24
|
+
- Group by feature or domain before grouping by file type.
|
|
25
|
+
- Keep reusable modules under stable locations such as `components`, `services`, `types`, `utils`, or equivalents.
|
|
26
|
+
- Keep test fixtures and helper data under the test tree, not in ad hoc temp folders.
|
|
27
|
+
|
|
28
|
+
## MECE Documentation Architecture
|
|
29
|
+
|
|
30
|
+
Each durable concept should have one primary home.
|
|
31
|
+
|
|
32
|
+
- `README.md`
|
|
33
|
+
- project overview
|
|
34
|
+
- setup
|
|
35
|
+
- usage
|
|
36
|
+
- user-facing workflows
|
|
37
|
+
- `/_meta/system-documentation.md`
|
|
38
|
+
- evergreen system behavior
|
|
39
|
+
- stable repository structure
|
|
40
|
+
- non-temporal technical guidance
|
|
41
|
+
- `/_meta/api-design.md`
|
|
42
|
+
- API contracts
|
|
43
|
+
- integration patterns
|
|
44
|
+
- interface decisions
|
|
45
|
+
- `/_meta/architecture-decisions.md`
|
|
46
|
+
- architectural tradeoffs and rationale
|
|
47
|
+
- `/_meta/project-task-list.md`
|
|
48
|
+
- active tasks
|
|
49
|
+
- roadmap items
|
|
50
|
+
- status tracking and temporal planning
|
|
51
|
+
- `/test/test-documentation.md`
|
|
52
|
+
- documented test cases
|
|
53
|
+
- test strategy
|
|
54
|
+
- coverage intent and scenario tracking
|
|
55
|
+
|
|
56
|
+
Rules:
|
|
57
|
+
|
|
58
|
+
- Do not duplicate the same policy or status across multiple documents.
|
|
59
|
+
- Keep system documentation evergreen and free of task-status noise.
|
|
60
|
+
- Keep project-management documents temporal and status-oriented.
|
|
61
|
+
- Keep test intent in test documentation, not scattered through unrelated docs.
|
|
62
|
+
- Update exactly the artifact whose responsibility changed.
|
|
63
|
+
|
|
64
|
+
## Temporary File Management
|
|
65
|
+
|
|
66
|
+
- Remove temporary files, debug outputs, and experimental artifacts after they are no longer needed.
|
|
67
|
+
- Move useful temporary material to the correct permanent location:
|
|
68
|
+
- test data to `/test/fixtures/`
|
|
69
|
+
- documentation samples to the relevant doc
|
|
70
|
+
- config examples to examples or documentation
|
|
71
|
+
- Do not leave orphaned files behind after implementation or verification.
|
|
72
|
+
|
|
73
|
+
## File Naming and Organization
|
|
74
|
+
|
|
75
|
+
- Keep tests within the test tree.
|
|
76
|
+
- Keep one main responsibility per file where practical.
|
|
77
|
+
- Prefer descriptive, stable names over generic scratch names.
|
|
78
|
+
- Avoid mixing unrelated concerns inside a single file or folder.
|
|
79
|
+
|
|
80
|
+
## Workflow Implications
|
|
81
|
+
|
|
82
|
+
- Repository organization is not optional polish. Validate it during repo grounding.
|
|
83
|
+
- If a requested change would create documentation overlap or structural drift, correct the organization as part of the task or record the follow-up explicitly.
|
|
84
|
+
- Mandatory TDD depends on this structure: test documentation belongs under `/test`, project status belongs under `/_meta`, and implementation belongs under source directories.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# TypeScript Guidance
|
|
2
|
+
|
|
3
|
+
- Prefer explicit types at public boundaries and inferred types within local implementation detail.
|
|
4
|
+
- Keep modules small, composable, and side-effect aware.
|
|
5
|
+
- Validate runtime input explicitly; types alone do not protect process boundaries.
|
|
6
|
+
- Update or add tests for behavior changes before broad refactors.
|
|
7
|
+
- Document only non-obvious contracts and invariants.
|