@jstn-sdk/ma 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +20 -0
- package/.codex/agents/Architect.toml +4 -0
- package/.codex/agents/Auditor.toml +4 -0
- package/.codex/agents/Builder.toml +4 -0
- package/.codex/agents/Flow.toml +4 -0
- package/.codex/agents/Sage.toml +4 -0
- package/.codex/agents/Vibe.toml +4 -0
- package/.codex/hooks.json +15 -0
- package/.codex/prompts/enforcement.md +59 -0
- package/.codex/prompts/onboarding.md +41 -0
- package/.codex/prompts/release-rules.md +28 -0
- package/.codex/prompts/skill-contract.md +41 -0
- package/LICENSE +21 -0
- package/README.md +532 -0
- package/bin/ma.js +300 -0
- package/bin/meta-architect.js +3 -0
- package/docs/README.md +24 -0
- package/docs/assets/meta-architect-logo.png +0 -0
- package/docs/assets/meta-architect-logo.svg +8 -0
- package/docs/getting-started.md +451 -0
- package/docs/mcp-setup.md +5 -0
- package/docs/onboarding.md +65 -0
- package/docs/qa/release-readiness-0.1.0.md +62 -0
- package/docs/release-spec.md +86 -0
- package/docs/skills-publishing.md +231 -0
- package/docs/skills.md +91 -0
- package/index.js +28 -0
- package/mcp/collections.json +21 -0
- package/mcp/fallback.json +7 -0
- package/mcp/servers.json +55 -0
- package/package.json +84 -0
- package/plugins/meta-architect/.app.json +8 -0
- package/plugins/meta-architect/.codex-plugin/plugin.json +23 -0
- package/plugins/meta-architect/.mcp.json +12 -0
- package/plugins/meta-architect/README.md +121 -0
- package/plugins/meta-architect/skills/arch/SKILL.md +27 -0
- package/plugins/meta-architect/skills/arch/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/build/SKILL.md +24 -0
- package/plugins/meta-architect/skills/build/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/flow/SKILL.md +24 -0
- package/plugins/meta-architect/skills/flow/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/meta-architect/SKILL.md +30 -0
- package/plugins/meta-architect/skills/meta-architect/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/meta-architect/references/core-release-rules.md +13 -0
- package/plugins/meta-architect/skills/sage/SKILL.md +24 -0
- package/plugins/meta-architect/skills/sage/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/vet/SKILL.md +25 -0
- package/plugins/meta-architect/skills/vet/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/vibe/SKILL.md +24 -0
- package/plugins/meta-architect/skills/vibe/agents/openai.yaml +4 -0
- package/scripts/doctor.js +37 -0
- package/scripts/plugin-sync.js +92 -0
- package/scripts/postinstall.js +19 -0
- package/scripts/release-metadata.js +94 -0
- package/scripts/release-verify.js +153 -0
- package/scripts/setup-npmrc.js +39 -0
- package/scripts/skills-install.js +29 -0
- package/scripts/skills-manifest.js +61 -0
- package/scripts/skills-pack.js +54 -0
- package/scripts/skills-validate.js +118 -0
- package/skills/arch/SKILL.md +27 -0
- package/skills/arch/agents/openai.yaml +4 -0
- package/skills/build/SKILL.md +24 -0
- package/skills/build/agents/openai.yaml +4 -0
- package/skills/flow/SKILL.md +24 -0
- package/skills/flow/agents/openai.yaml +4 -0
- package/skills/index.json +40 -0
- package/skills/meta-architect/SKILL.md +30 -0
- package/skills/meta-architect/agents/openai.yaml +4 -0
- package/skills/meta-architect/references/core-release-rules.md +13 -0
- package/skills/sage/SKILL.md +24 -0
- package/skills/sage/agents/openai.yaml +4 -0
- package/skills/vet/SKILL.md +25 -0
- package/skills/vet/agents/openai.yaml +4 -0
- package/skills/vibe/SKILL.md +24 -0
- package/skills/vibe/agents/openai.yaml +4 -0
- package/sprint/00-idea.md +27 -0
- package/sprint/01-architecture.md +26 -0
- package/sprint/02-oss-evidence.md +26 -0
- package/sprint/03-logic.md +25 -0
- package/sprint/04-security.md +25 -0
- package/sprint/05-dx-ux.md +24 -0
- package/sprint/06-build-plan.md +26 -0
- package/sprint/07-release.md +26 -0
- package/src/build-gate.js +52 -0
- package/src/decision-log.js +40 -0
- package/src/fs-utils.js +25 -0
- package/src/launcher.js +55 -0
- package/src/mcp-config.js +30 -0
- package/src/mcp-live-client.js +186 -0
- package/src/paths.js +26 -0
- package/src/policy.js +23 -0
- package/src/release-state.js +59 -0
- package/src/runtime-artifacts.js +363 -0
- package/src/skill-installer.js +49 -0
- package/src/skills.js +507 -0
- package/src/state-sync.js +15 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { installSkills } from "../src/skill-installer.js";
|
|
5
|
+
|
|
6
|
+
function parseArgs(argv) {
|
|
7
|
+
const args = { path: null };
|
|
8
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
9
|
+
const token = argv[index];
|
|
10
|
+
if (token === "--path") {
|
|
11
|
+
args.path = argv[index + 1];
|
|
12
|
+
index += 1;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return args;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function main() {
|
|
19
|
+
const args = parseArgs(process.argv.slice(2));
|
|
20
|
+
const { installed } = await installSkills({ targetRoot: args.path ?? undefined });
|
|
21
|
+
for (const skill of installed) {
|
|
22
|
+
console.log(`installed ${skill.name} -> ${skill.dest}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
main().catch((error) => {
|
|
27
|
+
console.error(error.message);
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import process from "node:process";
|
|
6
|
+
|
|
7
|
+
const repoRoot = process.cwd();
|
|
8
|
+
const skillsRoot = path.join(repoRoot, "skills");
|
|
9
|
+
const manifestPath = path.join(skillsRoot, "index.json");
|
|
10
|
+
|
|
11
|
+
function parseFrontmatterNameAndDescription(content) {
|
|
12
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
13
|
+
if (!match) {
|
|
14
|
+
throw new Error("Missing SKILL.md frontmatter");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const lines = match[1].split("\n");
|
|
18
|
+
let name = "";
|
|
19
|
+
let description = "";
|
|
20
|
+
for (const line of lines) {
|
|
21
|
+
if (line.startsWith("name:")) {
|
|
22
|
+
name = line.slice("name:".length).trim();
|
|
23
|
+
}
|
|
24
|
+
if (line.startsWith("description:")) {
|
|
25
|
+
description = line.slice("description:".length).trim().replace(/^"|"$/g, "");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return { name, description };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async function main() {
|
|
32
|
+
const entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
33
|
+
const skills = [];
|
|
34
|
+
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
if (!entry.isDirectory()) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const skillPath = path.join(skillsRoot, entry.name, "SKILL.md");
|
|
41
|
+
const content = await fs.readFile(skillPath, "utf8");
|
|
42
|
+
const meta = parseFrontmatterNameAndDescription(content);
|
|
43
|
+
skills.push({
|
|
44
|
+
name: meta.name,
|
|
45
|
+
path: `skills/${entry.name}`,
|
|
46
|
+
description: meta.description,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
skills.sort((left, right) => left.name.localeCompare(right.name));
|
|
51
|
+
await fs.writeFile(
|
|
52
|
+
manifestPath,
|
|
53
|
+
`${JSON.stringify({ schemaVersion: "0.1.0", skills }, null, 2)}\n`,
|
|
54
|
+
);
|
|
55
|
+
console.log(manifestPath);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
main().catch((error) => {
|
|
59
|
+
console.error(error.message);
|
|
60
|
+
process.exitCode = 1;
|
|
61
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import fs from "node:fs/promises";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import process from "node:process";
|
|
8
|
+
|
|
9
|
+
const repoRoot = process.cwd();
|
|
10
|
+
const distRoot = path.join(repoRoot, "dist");
|
|
11
|
+
const bundlePath = path.join(distRoot, "meta-architect-skills.tgz");
|
|
12
|
+
const skillsRoot = path.join(repoRoot, "skills");
|
|
13
|
+
|
|
14
|
+
async function copyDir(src, dest) {
|
|
15
|
+
await fs.mkdir(dest, { recursive: true });
|
|
16
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
const srcPath = path.join(src, entry.name);
|
|
19
|
+
const destPath = path.join(dest, entry.name);
|
|
20
|
+
if (entry.isDirectory()) {
|
|
21
|
+
await copyDir(srcPath, destPath);
|
|
22
|
+
} else {
|
|
23
|
+
await fs.copyFile(srcPath, destPath);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function main() {
|
|
29
|
+
await fs.mkdir(distRoot, { recursive: true });
|
|
30
|
+
await fs.rm(bundlePath, { force: true });
|
|
31
|
+
const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "meta-architect-skills-"));
|
|
32
|
+
const frozenSkillsRoot = path.join(tempRoot, "skills");
|
|
33
|
+
await copyDir(skillsRoot, frozenSkillsRoot);
|
|
34
|
+
|
|
35
|
+
const result = spawnSync("tar", ["-czf", bundlePath, "skills"], {
|
|
36
|
+
cwd: tempRoot,
|
|
37
|
+
encoding: "utf8",
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
process.stdout.write(result.stdout);
|
|
41
|
+
process.stderr.write(result.stderr);
|
|
42
|
+
if (result.status !== 0) {
|
|
43
|
+
process.exit(result.status ?? 1);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await fs.rm(tempRoot, { recursive: true, force: true });
|
|
47
|
+
|
|
48
|
+
console.log(bundlePath);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
main().catch((error) => {
|
|
52
|
+
console.error(error.message);
|
|
53
|
+
process.exitCode = 1;
|
|
54
|
+
});
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import process from "node:process";
|
|
6
|
+
|
|
7
|
+
const repoRoot = process.cwd();
|
|
8
|
+
const skillsRoot = path.join(repoRoot, "skills");
|
|
9
|
+
|
|
10
|
+
function fail(message) {
|
|
11
|
+
console.error(message);
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function extractFrontmatter(content) {
|
|
16
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n?/);
|
|
17
|
+
if (!match) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const yaml = match[1];
|
|
22
|
+
const result = {};
|
|
23
|
+
|
|
24
|
+
for (const rawLine of yaml.split("\n")) {
|
|
25
|
+
const line = rawLine.trim();
|
|
26
|
+
if (!line || line.startsWith("#")) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const separator = line.indexOf(":");
|
|
31
|
+
if (separator === -1) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const key = line.slice(0, separator).trim();
|
|
36
|
+
let value = line.slice(separator + 1).trim();
|
|
37
|
+
|
|
38
|
+
if (
|
|
39
|
+
(value.startsWith('"') && value.endsWith('"')) ||
|
|
40
|
+
(value.startsWith("'") && value.endsWith("'"))
|
|
41
|
+
) {
|
|
42
|
+
value = value.slice(1, -1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
result[key] = value;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function validateSkillDir(skillDir) {
|
|
52
|
+
const skillName = path.basename(skillDir);
|
|
53
|
+
const skillPath = path.join(skillDir, "SKILL.md");
|
|
54
|
+
const agentPath = path.join(skillDir, "agents", "openai.yaml");
|
|
55
|
+
|
|
56
|
+
const skillContent = await fs.readFile(skillPath, "utf8").catch(() => null);
|
|
57
|
+
if (!skillContent) {
|
|
58
|
+
throw new Error(`${skillName}: missing SKILL.md`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const frontmatter = extractFrontmatter(skillContent);
|
|
62
|
+
if (!frontmatter) {
|
|
63
|
+
throw new Error(`${skillName}: SKILL.md missing frontmatter`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!frontmatter.name) {
|
|
67
|
+
throw new Error(`${skillName}: frontmatter missing name`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (frontmatter.name !== skillName) {
|
|
71
|
+
throw new Error(`${skillName}: frontmatter name must match directory name`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (!/^[a-z0-9-]+$/.test(frontmatter.name)) {
|
|
75
|
+
throw new Error(`${skillName}: frontmatter name must be lowercase kebab-case`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (!frontmatter.description || frontmatter.description.length < 10) {
|
|
79
|
+
throw new Error(`${skillName}: frontmatter description is missing or too short`);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const agentContent = await fs.readFile(agentPath, "utf8").catch(() => null);
|
|
83
|
+
if (!agentContent) {
|
|
84
|
+
throw new Error(`${skillName}: missing agents/openai.yaml`);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const requiredAgentKeys = [
|
|
88
|
+
"interface:",
|
|
89
|
+
"display_name:",
|
|
90
|
+
"short_description:",
|
|
91
|
+
"default_prompt:",
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
for (const key of requiredAgentKeys) {
|
|
95
|
+
if (!agentContent.includes(key)) {
|
|
96
|
+
throw new Error(`${skillName}: agents/openai.yaml missing ${key}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
console.log(`${skillName}: valid`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
async function main() {
|
|
104
|
+
const entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
105
|
+
const directories = entries.filter((entry) => entry.isDirectory());
|
|
106
|
+
|
|
107
|
+
if (directories.length === 0) {
|
|
108
|
+
throw new Error("No skill directories found in skills/");
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
for (const entry of directories) {
|
|
112
|
+
await validateSkillDir(path.join(skillsRoot, entry.name));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
main().catch((error) => {
|
|
117
|
+
fail(error.message);
|
|
118
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arch
|
|
3
|
+
description: "Use when the user wants architecture-first product and system design with explicit stack rationale, boundaries, tradeoffs, data model choices, and phased delivery planning."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Arch
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex to turn a product idea into a concrete architecture brief.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- problem framing
|
|
14
|
+
- user and workload assumptions
|
|
15
|
+
- system architecture and subsystem boundaries
|
|
16
|
+
- stack recommendation with tradeoffs
|
|
17
|
+
- data model and storage choices
|
|
18
|
+
- auth, security, and operational concerns
|
|
19
|
+
- phased delivery plan
|
|
20
|
+
- top risks and open questions
|
|
21
|
+
- exact next trigger, usually `$sage`
|
|
22
|
+
|
|
23
|
+
## Rules
|
|
24
|
+
|
|
25
|
+
- Ask only for constraints that materially change the architecture.
|
|
26
|
+
- Keep the design biased toward the simplest system that can satisfy the stated requirements.
|
|
27
|
+
- Be explicit about tradeoffs, failure modes, and what should stay out of the first version.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build
|
|
3
|
+
description: "Use when the user wants to decide whether implementation is ready, what remains blocked, and what the exact next build step should be."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Build
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex to convert the earlier review lanes into an implementation-ready decision.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- current readiness verdict
|
|
14
|
+
- blockers that still prevent implementation
|
|
15
|
+
- the narrowest viable build slice
|
|
16
|
+
- branch or worktree suggestions when relevant
|
|
17
|
+
- test and verification expectations
|
|
18
|
+
- the exact next implementation step
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- Do not claim readiness if architecture, evidence, logic, security, or DX/UX gaps remain unresolved.
|
|
23
|
+
- Keep the recommended build slice small, testable, and reversible.
|
|
24
|
+
- If the user wants code immediately and the path is clear, end with a concrete implementation plan rather than more review prose.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flow
|
|
3
|
+
description: "Use when the user wants logic validation: states, transitions, invariants, edge cases, dead ends, and blockers before implementation."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Flow
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex to pressure-test how the system behaves, not just how it is structured.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- key actors and system states
|
|
14
|
+
- main flows and failure flows
|
|
15
|
+
- invariants and state transitions
|
|
16
|
+
- race conditions, dead ends, and consistency risks
|
|
17
|
+
- missing requirements or ambiguous behavior
|
|
18
|
+
- exact next trigger, usually `$vet`
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- Focus on behavior, not UI polish or low-level code details.
|
|
23
|
+
- Surface ambiguity aggressively when it affects correctness.
|
|
24
|
+
- Prefer simple state models over sprawling branching logic.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "0.1.0",
|
|
3
|
+
"skills": [
|
|
4
|
+
{
|
|
5
|
+
"name": "arch",
|
|
6
|
+
"path": "skills/arch",
|
|
7
|
+
"description": "Use when the user wants architecture-first product and system design with explicit stack rationale, boundaries, tradeoffs, data model choices, and phased delivery planning."
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"name": "build",
|
|
11
|
+
"path": "skills/build",
|
|
12
|
+
"description": "Use when the user wants to decide whether implementation is ready, what remains blocked, and what the exact next build step should be."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"name": "flow",
|
|
16
|
+
"path": "skills/flow",
|
|
17
|
+
"description": "Use when the user wants logic validation: states, transitions, invariants, edge cases, dead ends, and blockers before implementation."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "meta-architect",
|
|
21
|
+
"path": "skills/meta-architect",
|
|
22
|
+
"description": "Use when the user wants the full Meta-Architect workflow inside Codex: architecture-first planning, evidence-backed OSS selection, logic review, security review, DX/UX review, and build readiness without leaving the Codex session."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "sage",
|
|
26
|
+
"path": "skills/sage",
|
|
27
|
+
"description": "Use when the user wants evidence-backed technology choices, OSS evaluation, and source-grounded validation of the stack proposed in `$arch`."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "vet",
|
|
31
|
+
"path": "skills/vet",
|
|
32
|
+
"description": "Use when the user wants a security and trust-boundary review of the current design before implementation or release."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "vibe",
|
|
36
|
+
"path": "skills/vibe",
|
|
37
|
+
"description": "Use when the user wants a DX and UX review of the planned workflow before implementation proceeds."
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: meta-architect
|
|
3
|
+
description: "Use when the user wants the full Meta-Architect workflow inside Codex: architecture-first planning, evidence-backed OSS selection, logic review, security review, DX/UX review, and build readiness without leaving the Codex session."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Meta-Architect
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Run the full Meta-Architect workflow inside Codex. Use this skill when the user wants the gated design-and-review sequence rather than a single specialist lane.
|
|
11
|
+
|
|
12
|
+
## Workflow
|
|
13
|
+
|
|
14
|
+
1. Start with `$arch` and turn the user's goal into a concrete architecture brief.
|
|
15
|
+
2. Continue with `$sage` to validate core stack choices against official docs or approved repo-backed sources.
|
|
16
|
+
3. Run `$flow` to map states, transitions, invariants, and blockers.
|
|
17
|
+
4. Run `$vet` to review trust boundaries, auth, data handling, and abuse paths.
|
|
18
|
+
5. Run `$vibe` to review developer and user experience quality.
|
|
19
|
+
6. Finish with `$build` to decide whether implementation is ready, what remains blocked, and what the exact next execution step should be.
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- Stay inside Codex unless the user explicitly asks for repo-local helper commands.
|
|
24
|
+
- Keep the workflow architecture-first. Do not jump into code before the architecture and review lanes are grounded.
|
|
25
|
+
- Prefer official docs, upstream repos, and repo-configured GitMCP sources when validating tooling choices.
|
|
26
|
+
- End each lane with a clear result shape: decision, evidence, blockers, and exact next trigger.
|
|
27
|
+
|
|
28
|
+
## References
|
|
29
|
+
|
|
30
|
+
- For release gates and branch policy, read `references/core-release-rules.md`.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Meta-Architect"
|
|
3
|
+
short_description: "Core orchestration and gated build workflows"
|
|
4
|
+
default_prompt: "Use $meta-architect to run the full Meta-Architect workflow inside Codex, then route through $arch, $sage, $flow, $vet, $vibe, and $build as needed."
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Core Release Rules
|
|
2
|
+
|
|
3
|
+
- Required status fields live in `.ma/decisions.json` and `.ma/release.json`.
|
|
4
|
+
- `$build` is blocked unless:
|
|
5
|
+
- `idea_status = CLEAR`
|
|
6
|
+
- `architecture_status = APPROVED`
|
|
7
|
+
- `evidence_status = VERIFIED`
|
|
8
|
+
- `logic_status = GREEN`
|
|
9
|
+
- `security_status = GREEN`
|
|
10
|
+
- `experience_status = GREEN` or `WAIVED`
|
|
11
|
+
- Feature work merges into `development`, never directly into `prod`.
|
|
12
|
+
- Release promotion is allowed only from `development` or approved `release/*`.
|
|
13
|
+
- Use the helper CLI only when repo-local state automation is explicitly needed; otherwise stay inside Codex and carry the gate decisions in the session.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sage
|
|
3
|
+
description: "Use when the user wants evidence-backed technology choices, OSS evaluation, and source-grounded validation of the stack proposed in `$arch`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sage
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex to verify or challenge stack choices with real sources.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- candidate tools, libraries, or services
|
|
14
|
+
- why each option fits or fails the architecture
|
|
15
|
+
- source-backed evidence from official docs, upstream repos, or approved GitMCP sources
|
|
16
|
+
- recommendation with tradeoffs
|
|
17
|
+
- unresolved gaps or missing evidence
|
|
18
|
+
- exact next trigger, usually `$flow`
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- Do not invent package capabilities or maturity claims.
|
|
23
|
+
- Prefer primary sources over summaries when validating technical details.
|
|
24
|
+
- If the evidence is weak or contradictory, say so clearly and keep the recommendation conditional.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vet
|
|
3
|
+
description: "Use when the user wants a security and trust-boundary review of the current design before implementation or release."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Vet
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex to review security posture before the build lane.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- trust boundaries
|
|
14
|
+
- authn/authz expectations
|
|
15
|
+
- sensitive data paths
|
|
16
|
+
- abuse cases and likely failure modes
|
|
17
|
+
- concrete mitigations
|
|
18
|
+
- release blockers vs acceptable risks
|
|
19
|
+
- exact next trigger, usually `$vibe`
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- Prioritize material risks over exhaustive but low-value checklists.
|
|
24
|
+
- Call out missing assumptions that affect security posture.
|
|
25
|
+
- Distinguish between must-fix blockers and documented accepted risk.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibe
|
|
3
|
+
description: "Use when the user wants a DX and UX review of the planned workflow before implementation proceeds."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Vibe
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex to review whether the system will feel coherent for both operators and end users.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- developer workflow risks
|
|
14
|
+
- user workflow risks
|
|
15
|
+
- complexity hotspots
|
|
16
|
+
- onboarding or operability friction
|
|
17
|
+
- simplifications that improve clarity
|
|
18
|
+
- exact next trigger, usually `$build`
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- Focus on concrete friction, not aesthetics-only feedback.
|
|
23
|
+
- Prefer fewer surfaces, fewer steps, and clearer operator outcomes.
|
|
24
|
+
- Preserve the architecture and security constraints established earlier in the flow.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Sprint 0: Idea
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Capture a project idea, clarify scope and constraints, and move the repository from an undefined request to a gate-ready project brief.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- raw product or system idea
|
|
10
|
+
- high-level constraints
|
|
11
|
+
- target users or operators if known
|
|
12
|
+
|
|
13
|
+
## Expected outputs
|
|
14
|
+
|
|
15
|
+
- idea decision entry in `.ma/decisions.json`
|
|
16
|
+
- `idea_status = CLEAR` when the brief is good enough to proceed
|
|
17
|
+
|
|
18
|
+
## Exit criteria
|
|
19
|
+
|
|
20
|
+
- the project idea is explicit enough for `$arch`
|
|
21
|
+
- major ambiguity that would break architecture work is removed
|
|
22
|
+
|
|
23
|
+
## Failure conditions
|
|
24
|
+
|
|
25
|
+
- empty or vague idea
|
|
26
|
+
- contradictory scope
|
|
27
|
+
- missing baseline constraints
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Sprint 1: Architecture
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Produce a structured first-pass architecture blueprint, stack rationale, and downstream review handoff.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- `idea_status = CLEAR`
|
|
10
|
+
- project brief from Sprint 0
|
|
11
|
+
|
|
12
|
+
## Expected outputs
|
|
13
|
+
|
|
14
|
+
- architecture decision in `.ma/decisions.json`
|
|
15
|
+
- `architecture_status = APPROVED`
|
|
16
|
+
|
|
17
|
+
## Exit criteria
|
|
18
|
+
|
|
19
|
+
- major components are described
|
|
20
|
+
- stack choices are justified
|
|
21
|
+
- evidence requirements for `$sage` are explicit
|
|
22
|
+
|
|
23
|
+
## Failure conditions
|
|
24
|
+
|
|
25
|
+
- missing idea brief
|
|
26
|
+
- architecture output lacks structure or downstream handoff
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Sprint 2: OSS Evidence
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Bind major architecture choices to approved GitMCP-backed evidence.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- `architecture_status = APPROVED`
|
|
10
|
+
- configured MCP/GitMCP endpoints
|
|
11
|
+
|
|
12
|
+
## Expected outputs
|
|
13
|
+
|
|
14
|
+
- `.ma/evidence/sources.json`
|
|
15
|
+
- `evidence_status = VERIFIED | PARTIAL | MISSING`
|
|
16
|
+
|
|
17
|
+
## Exit criteria
|
|
18
|
+
|
|
19
|
+
- at least one real approved source is probed successfully for `VERIFIED`
|
|
20
|
+
- all blockers are explicit if evidence is partial or missing
|
|
21
|
+
|
|
22
|
+
## Failure conditions
|
|
23
|
+
|
|
24
|
+
- invalid endpoint configuration
|
|
25
|
+
- live MCP failure
|
|
26
|
+
- no approved source available
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Sprint 3: Logic
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Record a structured first-pass logic/state review and block progress if prerequisites are not ready.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- architecture approved
|
|
10
|
+
- evidence at least partial
|
|
11
|
+
|
|
12
|
+
## Expected outputs
|
|
13
|
+
|
|
14
|
+
- logic review entry in `.ma/decisions.json`
|
|
15
|
+
- `logic_status = GREEN | RED`
|
|
16
|
+
|
|
17
|
+
## Exit criteria
|
|
18
|
+
|
|
19
|
+
- the kernel’s baseline state review is recorded
|
|
20
|
+
- blockers are explicit when the lane cannot turn green
|
|
21
|
+
|
|
22
|
+
## Failure conditions
|
|
23
|
+
|
|
24
|
+
- architecture or evidence not ready
|
|
25
|
+
- hidden blockers
|