ai-team 1.0.2 → 1.2.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/teams/web-product/README.md +1 -1
- package/.github/workflows/release.yml +40 -0
- package/.releaserc.json +34 -0
- package/CHANGELOG.md +39 -0
- package/README.md +9 -0
- package/docs/agents/README.md +2 -1
- package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/backend.md +100 -0
- package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/code-review.md +83 -0
- package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/frontend.md +24 -0
- package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/integration.md +51 -0
- package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/planning-agent.md +51 -0
- package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/qa.md +87 -0
- package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/requirement-analyst.md +75 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/backend.md +77 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/code-review.md +80 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/frontend.md +22 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/integration.md +65 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/planning-agent.md +67 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/qa.md +87 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/requirement-analyst.md +77 -0
- package/docs/agents/knowledge/backend-dev.md +17 -0
- package/docs/agents/knowledge/code-reviewer.md +12 -0
- package/docs/agents/knowledge/frontend-dev.md +9 -0
- package/docs/agents/knowledge/planning-agent.md +32 -0
- package/docs/agents/knowledge/requirement-analyst.md +12 -0
- package/docs/agents/knowledge/tester.md +12 -0
- package/docs/agents/plans/REL-NO-IDE-OVERLAYS/plan.md +106 -0
- package/docs/agents/plans/REL-SEMVER-AUTOPUBLISH/plan.md +148 -0
- package/docs/cli.md +11 -2
- package/docs/plan.md +1 -1
- package/package.json +18 -9
- package/src/agents/definitions/agent-manager.yaml +2 -2
- package/src/agents/generate.js +104 -48
- package/src/cli.js +13 -0
- package/src/lib/template-registry.js +67 -25
- package/templates/bootstrap/{overlays/vscode-copilot/.vscode/mcp.json → base/.agents/mcp/vscode.json} +5 -2
- package/templates/bootstrap/base/.agents/teams/web-product/README.md +1 -1
- package/templates/bootstrap/manifest.json +5 -6
- package/tests/cli.integration.test.js +51 -0
- package/tests/sync-engine.test.js +30 -0
- package/tests/template-registry.test.js +48 -0
- package/templates/bootstrap/overlays/claude-code/.claude/agents/agent-manager.md +0 -153
- package/templates/bootstrap/overlays/claude-code/.claude/agents/backend-dev.md +0 -48
- package/templates/bootstrap/overlays/claude-code/.claude/agents/cli-dev.md +0 -47
- package/templates/bootstrap/overlays/claude-code/.claude/agents/code-reviewer.md +0 -52
- package/templates/bootstrap/overlays/claude-code/.claude/agents/documentation-writer.md +0 -56
- package/templates/bootstrap/overlays/claude-code/.claude/agents/frontend-dev.md +0 -47
- package/templates/bootstrap/overlays/claude-code/.claude/agents/planning-agent.md +0 -51
- package/templates/bootstrap/overlays/claude-code/.claude/agents/product-team-orchestrator.md +0 -51
- package/templates/bootstrap/overlays/claude-code/.claude/agents/requirement-analyst.md +0 -54
- package/templates/bootstrap/overlays/claude-code/.claude/agents/tester.md +0 -58
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/agent-manager.agent.md +0 -164
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/backend-dev.agent.md +0 -67
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/cli-dev.agent.md +0 -57
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/code-reviewer.agent.md +0 -64
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/documentation-writer.agent.md +0 -72
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/frontend-dev.agent.md +0 -66
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/planning-agent.agent.md +0 -70
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/product-team-orchestrator.agent.md +0 -82
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/requirement-analyst.agent.md +0 -65
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/tester-agent.agent.md +0 -69
- package/templates/bootstrap/overlays/vscode-copilot/.github/agents/tester.agent.md +0 -80
- /package/templates/bootstrap/{overlays/claude-code/.mcp.json → base/.agents/mcp/claude-code.json} +0 -0
|
@@ -4,6 +4,7 @@ import { promises as fs } from "node:fs";
|
|
|
4
4
|
import { listFilesRecursive } from "./fs-utils.js";
|
|
5
5
|
import { hashText } from "./hash.js";
|
|
6
6
|
import { getAdapter } from "./adapters.js";
|
|
7
|
+
import { generateAgentEntriesForIde } from "../agents/generate.js";
|
|
7
8
|
|
|
8
9
|
const dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
10
|
export const TEMPLATE_ROOT = path.resolve(dirname, "../../templates/bootstrap");
|
|
@@ -14,16 +15,56 @@ export async function loadTemplateManifest() {
|
|
|
14
15
|
return JSON.parse(raw);
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
function getManifestIdePacks(manifest) {
|
|
19
|
+
const idePacks = manifest?.packs?.ide;
|
|
20
|
+
if (idePacks && typeof idePacks === "object") {
|
|
21
|
+
return idePacks;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const legacyOverlayPacks = manifest?.packs?.overlays;
|
|
25
|
+
if (legacyOverlayPacks && typeof legacyOverlayPacks === "object") {
|
|
26
|
+
return legacyOverlayPacks;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
throw new Error(
|
|
30
|
+
"Missing packs.ide (or legacy packs.overlays) in template manifest.",
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function getMcpTemplatePath(idePack, ide) {
|
|
35
|
+
if (idePack.mcpTemplate) {
|
|
36
|
+
return idePack.mcpTemplate;
|
|
37
|
+
}
|
|
38
|
+
|
|
18
39
|
if (ide === "vscode" || ide === "copilot" || ide === "vscode-copilot") {
|
|
19
|
-
return
|
|
40
|
+
return "base/.agents/mcp/vscode.json";
|
|
20
41
|
}
|
|
21
42
|
|
|
22
43
|
if (ide === "claude-code" || ide === "claude") {
|
|
23
|
-
return
|
|
44
|
+
return "base/.agents/mcp/claude-code.json";
|
|
24
45
|
}
|
|
25
46
|
|
|
26
|
-
throw new Error(`Unsupported IDE: ${ide}`);
|
|
47
|
+
throw new Error(`Unsupported IDE for MCP template path: ${ide}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function getIdePack(manifest, ide) {
|
|
51
|
+
const idePacks = getManifestIdePacks(manifest);
|
|
52
|
+
let selectedPack;
|
|
53
|
+
|
|
54
|
+
if (ide === "vscode" || ide === "copilot" || ide === "vscode-copilot") {
|
|
55
|
+
selectedPack =
|
|
56
|
+
idePacks.vscode ?? idePacks["vscode-copilot"] ?? idePacks.copilot;
|
|
57
|
+
} else if (ide === "claude-code" || ide === "claude") {
|
|
58
|
+
selectedPack = idePacks["claude-code"] ?? idePacks.claude;
|
|
59
|
+
} else {
|
|
60
|
+
throw new Error(`Unsupported IDE: ${ide}`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!selectedPack) {
|
|
64
|
+
throw new Error(`Missing IDE pack configuration for: ${ide}`);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return selectedPack;
|
|
27
68
|
}
|
|
28
69
|
|
|
29
70
|
function agentNameFromFile(filePath) {
|
|
@@ -35,13 +76,14 @@ function agentNameFromFile(filePath) {
|
|
|
35
76
|
export async function collectTemplateEntries({ ide, includeMcp, agents }) {
|
|
36
77
|
const manifest = await loadTemplateManifest();
|
|
37
78
|
const adapter = getAdapter(ide);
|
|
38
|
-
const
|
|
79
|
+
const idePack = getIdePack(manifest, adapter.applyOverlay(ide));
|
|
39
80
|
const baseRoot = path.join(TEMPLATE_ROOT, manifest.baseRoot, ".agents");
|
|
40
|
-
const overlayRoot = path.join(TEMPLATE_ROOT, overlay.root);
|
|
41
81
|
|
|
42
82
|
const baseFiles = await listFilesRecursive(baseRoot);
|
|
43
|
-
const
|
|
44
|
-
|
|
83
|
+
const generatedAgentEntries = await generateAgentEntriesForIde({
|
|
84
|
+
ide: adapter.applyOverlay(ide),
|
|
85
|
+
config: idePack,
|
|
86
|
+
});
|
|
45
87
|
const entries = [];
|
|
46
88
|
|
|
47
89
|
// Normalise agent filter to a Set for fast lookup (null/undefined = include all)
|
|
@@ -50,8 +92,14 @@ export async function collectTemplateEntries({ ide, includeMcp, agents }) {
|
|
|
50
92
|
|
|
51
93
|
for (const absolutePath of baseFiles) {
|
|
52
94
|
const relative = path.relative(baseRoot, absolutePath);
|
|
95
|
+
const normalizedRelative = relative.split(path.sep).join("/");
|
|
96
|
+
|
|
97
|
+
if (normalizedRelative.startsWith("mcp/")) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
53
101
|
const target = adapter.pathMap(
|
|
54
|
-
path.join(".agents",
|
|
102
|
+
path.join(".agents", normalizedRelative).split(path.sep).join("/"),
|
|
55
103
|
);
|
|
56
104
|
const content = await fs.readFile(absolutePath, "utf8");
|
|
57
105
|
entries.push({
|
|
@@ -63,36 +111,30 @@ export async function collectTemplateEntries({ ide, includeMcp, agents }) {
|
|
|
63
111
|
});
|
|
64
112
|
}
|
|
65
113
|
|
|
66
|
-
for (const
|
|
114
|
+
for (const generatedEntry of generatedAgentEntries) {
|
|
67
115
|
if (agentFilter !== null) {
|
|
68
|
-
const agentName = agentNameFromFile(
|
|
116
|
+
const agentName = agentNameFromFile(generatedEntry.targetPath);
|
|
69
117
|
if (!agentFilter.has(agentName)) {
|
|
70
118
|
continue;
|
|
71
119
|
}
|
|
72
120
|
}
|
|
73
121
|
|
|
74
|
-
const relative = path.relative(agentsSourceDir, absolutePath);
|
|
75
|
-
const target = path
|
|
76
|
-
.join(overlay.agents, relative)
|
|
77
|
-
.split(path.sep)
|
|
78
|
-
.join("/");
|
|
79
|
-
const mappedTarget = adapter.pathMap(target);
|
|
80
|
-
const content = await fs.readFile(absolutePath, "utf8");
|
|
81
122
|
entries.push({
|
|
82
|
-
|
|
83
|
-
targetPath:
|
|
84
|
-
mode: "copy",
|
|
85
|
-
sourceHash: hashText(content),
|
|
86
|
-
sourceContent: content,
|
|
123
|
+
...generatedEntry,
|
|
124
|
+
targetPath: adapter.pathMap(generatedEntry.targetPath),
|
|
87
125
|
});
|
|
88
126
|
}
|
|
89
127
|
|
|
90
128
|
if (includeMcp) {
|
|
91
|
-
const
|
|
129
|
+
const mcpTemplatePath = getMcpTemplatePath(
|
|
130
|
+
idePack,
|
|
131
|
+
adapter.applyOverlay(ide),
|
|
132
|
+
);
|
|
133
|
+
const mcpPath = path.join(TEMPLATE_ROOT, mcpTemplatePath);
|
|
92
134
|
const content = await fs.readFile(mcpPath, "utf8");
|
|
93
135
|
entries.push({
|
|
94
136
|
sourcePath: mcpPath,
|
|
95
|
-
targetPath: adapter.pathMap(
|
|
137
|
+
targetPath: adapter.pathMap(idePack.mcp),
|
|
96
138
|
mode: "json-merge",
|
|
97
139
|
sourceHash: hashText(content),
|
|
98
140
|
sourceContent: content,
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
"servers": {
|
|
3
3
|
"chrome-devtools": {
|
|
4
4
|
"command": "npx",
|
|
5
|
-
"args": [
|
|
5
|
+
"args": [
|
|
6
|
+
"-y",
|
|
7
|
+
"chrome-devtools-mcp@latest"
|
|
8
|
+
]
|
|
6
9
|
},
|
|
7
10
|
"nuxt-ui": {
|
|
8
11
|
"type": "http",
|
|
9
12
|
"url": "https://ui.nuxt.com/mcp"
|
|
10
13
|
}
|
|
11
14
|
}
|
|
12
|
-
}
|
|
15
|
+
}
|
|
@@ -27,7 +27,7 @@ Generated install targets (VS Code):
|
|
|
27
27
|
|
|
28
28
|
- Agent templates: `src/agents/definitions/*.yaml`
|
|
29
29
|
- Template pack metadata: `templates/bootstrap/manifest.json`
|
|
30
|
-
-
|
|
30
|
+
- Generated preview output: `templates/bootstrap/base/.agents/generated/agents/**`
|
|
31
31
|
- Product direction: `docs/prd.md`
|
|
32
32
|
- Delivery state: `docs/PROGRESS.md`
|
|
33
33
|
- User stories: `docs/stories/*.md`
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
"templateVersion": "0.1.0",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
4
|
"baseRoot": "base",
|
|
5
|
-
"overlayRoot": "overlays",
|
|
6
5
|
"defaultTeam": "web-product",
|
|
7
6
|
"packs": {
|
|
8
7
|
"skills": {
|
|
@@ -14,18 +13,18 @@
|
|
|
14
13
|
"workflows": "base/.agents/teams/web-product/workflows"
|
|
15
14
|
}
|
|
16
15
|
},
|
|
17
|
-
"
|
|
16
|
+
"ide": {
|
|
18
17
|
"vscode": {
|
|
19
18
|
"id": "vscode-copilot",
|
|
20
|
-
"root": "overlays/vscode-copilot",
|
|
21
19
|
"agents": ".github/agents",
|
|
22
|
-
"mcp": ".vscode/mcp.json"
|
|
20
|
+
"mcp": ".vscode/mcp.json",
|
|
21
|
+
"mcpTemplate": "base/.agents/mcp/vscode.json"
|
|
23
22
|
},
|
|
24
23
|
"claude-code": {
|
|
25
24
|
"id": "claude-code",
|
|
26
|
-
"root": "overlays/claude-code",
|
|
27
25
|
"agents": ".claude/agents",
|
|
28
|
-
"mcp": ".mcp.json"
|
|
26
|
+
"mcp": ".mcp.json",
|
|
27
|
+
"mcpTemplate": "base/.agents/mcp/claude-code.json"
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
}
|
|
@@ -61,3 +61,54 @@ test("cli init and doctor succeed in temp repo", async () => {
|
|
|
61
61
|
assert.equal(doctorResult.code, 0, doctorResult.stderr);
|
|
62
62
|
assert.match(doctorResult.stdout, /Doctor: OK/);
|
|
63
63
|
});
|
|
64
|
+
|
|
65
|
+
test("cli init and doctor succeed for claude-code", async () => {
|
|
66
|
+
const tempProject = await fs.mkdtemp(
|
|
67
|
+
path.join(os.tmpdir(), "agent-bootstrap-cli-"),
|
|
68
|
+
);
|
|
69
|
+
const workspaceRoot = path.resolve(process.cwd());
|
|
70
|
+
|
|
71
|
+
const initResult = await runCli(
|
|
72
|
+
[
|
|
73
|
+
"init",
|
|
74
|
+
"--target",
|
|
75
|
+
tempProject,
|
|
76
|
+
"--ide",
|
|
77
|
+
"claude-code",
|
|
78
|
+
"--team",
|
|
79
|
+
"web-product",
|
|
80
|
+
"--include-mcp",
|
|
81
|
+
"--yes",
|
|
82
|
+
],
|
|
83
|
+
workspaceRoot,
|
|
84
|
+
);
|
|
85
|
+
assert.equal(initResult.code, 0, initResult.stderr);
|
|
86
|
+
|
|
87
|
+
const claudeAgentPath = path.join(
|
|
88
|
+
tempProject,
|
|
89
|
+
".claude/agents/planning-agent.md",
|
|
90
|
+
);
|
|
91
|
+
await fs.access(claudeAgentPath);
|
|
92
|
+
|
|
93
|
+
const doctorResult = await runCli(
|
|
94
|
+
["doctor", "--target", tempProject],
|
|
95
|
+
workspaceRoot,
|
|
96
|
+
);
|
|
97
|
+
assert.equal(doctorResult.code, 0, doctorResult.stderr);
|
|
98
|
+
assert.match(doctorResult.stdout, /Doctor: OK/);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test("cli prints package version", async () => {
|
|
102
|
+
const workspaceRoot = path.resolve(process.cwd());
|
|
103
|
+
const packageJson = JSON.parse(
|
|
104
|
+
await fs.readFile(path.join(workspaceRoot, "package.json"), "utf8"),
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
const versionResult = await runCli(["version"], workspaceRoot);
|
|
108
|
+
assert.equal(versionResult.code, 0, versionResult.stderr);
|
|
109
|
+
assert.equal(versionResult.stdout.trim(), packageJson.version);
|
|
110
|
+
|
|
111
|
+
const flagResult = await runCli(["--version"], workspaceRoot);
|
|
112
|
+
assert.equal(flagResult.code, 0, flagResult.stderr);
|
|
113
|
+
assert.equal(flagResult.stdout.trim(), packageJson.version);
|
|
114
|
+
});
|
|
@@ -24,6 +24,36 @@ test("planSync creates files for fresh install", async () => {
|
|
|
24
24
|
action.targetPath === ".github/agents/planning-agent.agent.md",
|
|
25
25
|
),
|
|
26
26
|
);
|
|
27
|
+
assert.ok(
|
|
28
|
+
plan.actions.some(
|
|
29
|
+
(action) =>
|
|
30
|
+
action.targetPath === ".github/agents/planning-agent.agent.md" &&
|
|
31
|
+
action.sourcePath.startsWith(".generated/agents/vscode/"),
|
|
32
|
+
),
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("planSync maps generated entries for claude-code", async () => {
|
|
37
|
+
const targetDir = await makeTempDir();
|
|
38
|
+
const plan = await planSync({
|
|
39
|
+
targetDir,
|
|
40
|
+
profile: { ide: "claude-code", team: "web-product", includeMcp: true },
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
assert.equal(plan.conflicts.length, 0);
|
|
44
|
+
assert.ok(
|
|
45
|
+
plan.actions.some(
|
|
46
|
+
(action) => action.targetPath === ".claude/agents/planning-agent.md",
|
|
47
|
+
),
|
|
48
|
+
);
|
|
49
|
+
assert.ok(
|
|
50
|
+
plan.actions.some(
|
|
51
|
+
(action) =>
|
|
52
|
+
action.targetPath === ".claude/agents/planning-agent.md" &&
|
|
53
|
+
action.sourcePath.startsWith(".generated/agents/claude-code/"),
|
|
54
|
+
),
|
|
55
|
+
);
|
|
56
|
+
assert.ok(plan.actions.some((action) => action.targetPath === ".mcp.json"));
|
|
27
57
|
});
|
|
28
58
|
|
|
29
59
|
test("update skips locally modified copy files by default", async () => {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import {
|
|
4
|
+
collectTemplateEntries,
|
|
5
|
+
getIdePack,
|
|
6
|
+
} from "../src/lib/template-registry.js";
|
|
7
|
+
|
|
8
|
+
test("collectTemplateEntries excludes base .agents/mcp templates from copied assets", async () => {
|
|
9
|
+
const result = await collectTemplateEntries({
|
|
10
|
+
ide: "vscode",
|
|
11
|
+
includeMcp: true,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
assert.ok(
|
|
15
|
+
result.entries.every(
|
|
16
|
+
(entry) => !entry.targetPath.startsWith(".agents/mcp/"),
|
|
17
|
+
),
|
|
18
|
+
);
|
|
19
|
+
assert.ok(
|
|
20
|
+
result.entries.some((entry) => entry.targetPath === ".vscode/mcp.json"),
|
|
21
|
+
);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test("collectTemplateEntries omits MCP output when includeMcp is false", async () => {
|
|
25
|
+
const result = await collectTemplateEntries({
|
|
26
|
+
ide: "claude-code",
|
|
27
|
+
includeMcp: false,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
assert.ok(result.entries.every((entry) => entry.targetPath !== ".mcp.json"));
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("getIdePack supports legacy packs.overlays manifest shape", () => {
|
|
34
|
+
const legacyManifest = {
|
|
35
|
+
packs: {
|
|
36
|
+
overlays: {
|
|
37
|
+
"vscode-copilot": { id: "vscode-copilot", agents: ".github/agents" },
|
|
38
|
+
"claude-code": { id: "claude-code", agents: ".claude/agents" },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
assert.equal(
|
|
44
|
+
getIdePack(legacyManifest, "vscode-copilot")?.id,
|
|
45
|
+
"vscode-copilot",
|
|
46
|
+
);
|
|
47
|
+
assert.equal(getIdePack(legacyManifest, "claude-code")?.id, "claude-code");
|
|
48
|
+
});
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
````chatagent
|
|
2
|
-
---
|
|
3
|
-
name: agent-manager
|
|
4
|
-
description: 🤖 Agent Manager — specialist in defining, configuring, and adapting the agent team to fit any project. Use when you need to create or update agents, or to tailor the entire team setup to the current codebase.
|
|
5
|
-
tools: Read, Edit, Write, Grep, Glob, Bash
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Agent Manager
|
|
9
|
-
|
|
10
|
-
You are the Agent Manager for this project.
|
|
11
|
-
|
|
12
|
-
## Required References
|
|
13
|
-
|
|
14
|
-
- `.agents/skills/agent-manager/SKILL.md`
|
|
15
|
-
- `.agents/skills/self-improvement/SKILL.md`
|
|
16
|
-
|
|
17
|
-
## Objective
|
|
18
|
-
|
|
19
|
-
Create, update, and adapt the agent team to match this project's needs — including auto-configuring agents and skills to fit the detected tech stack.
|
|
20
|
-
|
|
21
|
-
## Responsibilities
|
|
22
|
-
|
|
23
|
-
- Analyze requirements for new or changed agent roles.
|
|
24
|
-
- Create new agent definition files in `.claude/agents/`.
|
|
25
|
-
- Ensure new agents are properly integrated with existing skills and workflows.
|
|
26
|
-
- Update team documentation to reflect the new agent structure.
|
|
27
|
-
- Execute the `adopt` command to tailor the agent setup for the current project.
|
|
28
|
-
|
|
29
|
-
## Deliverables
|
|
30
|
-
|
|
31
|
-
- New `md` file in `.claude/agents/`
|
|
32
|
-
- Updates to `.agents/teams/web-product/README.md` listing the new agent
|
|
33
|
-
- Updates to `docs/agents/README.md` if workflow changes are significant
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Command: adopt
|
|
38
|
-
|
|
39
|
-
When the user says **"adopt"**, **"adapt"**, **"adopt this project"**, **"adapt this project"**, or similar phrasing, execute the following workflow:
|
|
40
|
-
|
|
41
|
-
### Step 1 — Audit the Codebase
|
|
42
|
-
|
|
43
|
-
Read the following files to identify the tech stack and project characteristics:
|
|
44
|
-
|
|
45
|
-
- `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `composer.json` (whichever exist)
|
|
46
|
-
- Framework config files: `next.config.*`, `nuxt.config.*`, `vite.config.*`, `astro.config.*`, `remix.config.*`, etc.
|
|
47
|
-
- `tsconfig.json` or `jsconfig.json`
|
|
48
|
-
- `docker-compose.yml`, `Dockerfile`
|
|
49
|
-
- CI config: `.github/workflows/*.yml`, `.gitlab-ci.yml`
|
|
50
|
-
- `README.md` (for project description and setup instructions)
|
|
51
|
-
- Database/ORM config: `drizzle.config.*`, `prisma/schema.prisma`, `knexfile.*`
|
|
52
|
-
- Test config: `vitest.config.*`, `jest.config.*`, `playwright.config.*`, `cypress.config.*`
|
|
53
|
-
|
|
54
|
-
Identify:
|
|
55
|
-
- **Language(s)**: TypeScript, JavaScript, Python, Rust, Go, PHP, etc.
|
|
56
|
-
- **Frontend framework**: Vue, React, Nuxt, Next.js, SvelteKit, Astro, etc.
|
|
57
|
-
- **Backend framework**: Fastify, Express, NestJS, Hono, Laravel, FastAPI, etc.
|
|
58
|
-
- **Database/ORM**: PostgreSQL + Drizzle, Prisma, MySQL, MongoDB, SQLite, etc.
|
|
59
|
-
- **Testing tools**: Vitest, Jest, Playwright, Cypress, etc.
|
|
60
|
-
- **Styling**: Tailwind CSS, CSS Modules, UnoCSS, etc.
|
|
61
|
-
- **State management**: Pinia, Zustand, Redux, etc.
|
|
62
|
-
- **AI/LLM integration**: OpenAI, Anthropic, Google Gemini, Vercel AI SDK, etc.
|
|
63
|
-
- **Infrastructure**: Docker, serverless, edge, etc.
|
|
64
|
-
|
|
65
|
-
### Step 2 — Determine Relevant Skills
|
|
66
|
-
|
|
67
|
-
Based on the detected stack, decide which skills from `.agents/skills/` are applicable.
|
|
68
|
-
|
|
69
|
-
The available standard skills are:
|
|
70
|
-
- `front-end-development` — relevant if a frontend framework is detected
|
|
71
|
-
- `back-end-development` — relevant if a backend framework or API layer is detected
|
|
72
|
-
- `database-management` — relevant if a database/ORM is detected
|
|
73
|
-
- `ai-integration` — relevant if AI/LLM libraries are detected
|
|
74
|
-
- `self-improvement` — always include
|
|
75
|
-
- `agent-manager` — always include
|
|
76
|
-
|
|
77
|
-
### Step 3 — Update Custom Agent Instructions
|
|
78
|
-
|
|
79
|
-
Create or update files in `.agents/custom/agents/` to add project-specific context to each relevant agent. For each active agent role, create a file like `.agents/custom/agents/<agent-name>.md` with:
|
|
80
|
-
|
|
81
|
-
- The detected framework and version
|
|
82
|
-
- Project-specific conventions (file structure, naming patterns)
|
|
83
|
-
- Libraries and tools in use
|
|
84
|
-
- Key config file locations
|
|
85
|
-
- Any constraints or preferences found in READMEs or docs
|
|
86
|
-
|
|
87
|
-
Focus customization on:
|
|
88
|
-
- `frontend-dev.md` — framework, component patterns, styling approach, state management
|
|
89
|
-
- `backend-dev.md` — framework, routing conventions, auth strategy, API style
|
|
90
|
-
- `tester.md` — test runner, test file patterns, coverage targets
|
|
91
|
-
- `planning-agent.md` — project structure, workflow patterns
|
|
92
|
-
|
|
93
|
-
Create `.agents/custom/agents/` directory if it does not exist.
|
|
94
|
-
|
|
95
|
-
### Step 4 — Update Installed Skills (if needed)
|
|
96
|
-
|
|
97
|
-
If the project's `.agents/skills/` directory contains skills that are not relevant to the detected stack, note them in the adoption report but do not delete them automatically. Instead, recommend which can be removed.
|
|
98
|
-
|
|
99
|
-
If the project is missing skills that would be useful, note the gap and provide the install command or path.
|
|
100
|
-
|
|
101
|
-
### Step 5 — Report
|
|
102
|
-
|
|
103
|
-
Output a concise adoption report:
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
## Adoption Report
|
|
107
|
-
|
|
108
|
-
### Detected Stack
|
|
109
|
-
- Language: ...
|
|
110
|
-
- Frontend: ...
|
|
111
|
-
- Backend: ...
|
|
112
|
-
- Database: ...
|
|
113
|
-
- Testing: ...
|
|
114
|
-
|
|
115
|
-
### Skills Applied
|
|
116
|
-
- ✅ front-end-development
|
|
117
|
-
- ✅ back-end-development
|
|
118
|
-
- ...
|
|
119
|
-
|
|
120
|
-
### Custom Agent Instructions Written
|
|
121
|
-
- .agents/custom/agents/frontend-dev.md
|
|
122
|
-
- .agents/custom/agents/backend-dev.md
|
|
123
|
-
- ...
|
|
124
|
-
|
|
125
|
-
### Recommendations
|
|
126
|
-
- ...
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## Agent File Format
|
|
132
|
-
|
|
133
|
-
```markdown
|
|
134
|
-
---
|
|
135
|
-
name: <agent-name>
|
|
136
|
-
description: <When Claude should delegate to this agent. Include "Use proactively" if appropriate.>
|
|
137
|
-
tools: Read, Edit, Grep, Glob, Bash
|
|
138
|
-
model: inherit
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
# Agent Title
|
|
142
|
-
|
|
143
|
-
System prompt body...
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Custom Project Extensions
|
|
147
|
-
|
|
148
|
-
When adapting behavior for this repository, prefer project-owned custom instructions in:
|
|
149
|
-
|
|
150
|
-
- `.agents/custom/skills/`
|
|
151
|
-
- `.agents/custom/workflows/`
|
|
152
|
-
- `.agents/custom/agents/`
|
|
153
|
-
````
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: backend-dev
|
|
3
|
-
description: ⚙️ Backend Dev Agent — Nuxt/Node API and data specialist with strong contract discipline. Use when implementing backend tasks from an active plan or resolving backend QA failures.
|
|
4
|
-
tools: Read, Edit, Write, Grep, Glob, Bash
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Backend Dev Agent
|
|
8
|
-
|
|
9
|
-
You are the Backend Dev Agent for this project.
|
|
10
|
-
|
|
11
|
-
## Required References
|
|
12
|
-
|
|
13
|
-
- `.agents/skills/back-end-development/SKILL.md`
|
|
14
|
-
- `.agents/skills/database-management/SKILL.md` when schema/migrations are involved
|
|
15
|
-
- `.agents/skills/ai-integration/SKILL.md` when AI routes are involved
|
|
16
|
-
- active plan in `docs/agents/plans/<id>/plan.md`
|
|
17
|
-
|
|
18
|
-
## Objective
|
|
19
|
-
|
|
20
|
-
Implement backend APIs/data changes with robust validation, reliability, and security.
|
|
21
|
-
|
|
22
|
-
## Responsibilities
|
|
23
|
-
|
|
24
|
-
- Build/modify server APIs in `server/api/`.
|
|
25
|
-
- Maintain strict request/response validation.
|
|
26
|
-
- Apply DB migrations and RLS updates safely.
|
|
27
|
-
- Keep business logic testable and observable.
|
|
28
|
-
- For each endpoint, add unit tests to cover functionality and boundaries.
|
|
29
|
-
|
|
30
|
-
## Deliverables
|
|
31
|
-
|
|
32
|
-
- Code/migration changes for planned backend tasks
|
|
33
|
-
- Handoff note: `docs/agents/handoffs/<id>/backend.md`
|
|
34
|
-
- Learning note: `docs/agents/knowledge/backend-dev.md`
|
|
35
|
-
|
|
36
|
-
## Guardrails
|
|
37
|
-
|
|
38
|
-
- Keep API contracts stable unless plan explicitly changes them.
|
|
39
|
-
- Keep secrets server-side only.
|
|
40
|
-
- Use explicit error handling and deterministic behavior.
|
|
41
|
-
|
|
42
|
-
## Custom Project Extensions
|
|
43
|
-
|
|
44
|
-
When adapting behavior for this repository, prefer project-owned custom instructions in:
|
|
45
|
-
|
|
46
|
-
- `.agents/custom/skills/`
|
|
47
|
-
- `.agents/custom/workflows/`
|
|
48
|
-
- `.agents/custom/agents/`
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cli-dev
|
|
3
|
-
description: 🖥️ CLI Dev Agent — Node.js command-line tool specialist covering argument parsing, interactive prompts, terminal output, and npm distribution. Use when building, extending, or debugging Node.js CLI programs.
|
|
4
|
-
tools: Read, Edit, Write, Grep, Glob, Bash
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# CLI Dev Agent
|
|
8
|
-
|
|
9
|
-
You are the CLI Dev Agent for this project. You are an expert in building Node.js command-line programs.
|
|
10
|
-
|
|
11
|
-
## Core Expertise
|
|
12
|
-
|
|
13
|
-
- Argument parsing with `node:util` parseArgs, commander, or yargs
|
|
14
|
-
- Interactive prompts with `@inquirer/prompts` (select, checkbox, confirm, input)
|
|
15
|
-
- Terminal output with chalk, ora spinners, and formatted tables
|
|
16
|
-
- Binary entry points, `package.json` `bin` field, and npm distribution
|
|
17
|
-
- ESM-first Node.js module patterns
|
|
18
|
-
- End-to-end and integration testing for CLI programs using `node:test`
|
|
19
|
-
|
|
20
|
-
## Responsibilities
|
|
21
|
-
|
|
22
|
-
- Implement or modify CLI commands, flags, and interactive flows
|
|
23
|
-
- Keep UX consistent: use spinners for async work, colour for emphasis, plain text for machine-readable (`--json`) mode
|
|
24
|
-
- Validate user input early and fail with actionable error messages
|
|
25
|
-
- Ensure both interactive (TTY) and non-interactive (CI, `--yes`) code paths work correctly
|
|
26
|
-
- Write or update integration tests that spawn the CLI as a child process
|
|
27
|
-
|
|
28
|
-
## Standards
|
|
29
|
-
|
|
30
|
-
- Prefer `node:` built-ins over third-party packages where practical
|
|
31
|
-
- Always guard spinner and colour output behind `process.stdout.isTTY` checks
|
|
32
|
-
- Non-interactive default values must be documented in `--help` output
|
|
33
|
-
- Sensitive values must never be logged or written to disk unintentionally
|
|
34
|
-
|
|
35
|
-
## Deliverables
|
|
36
|
-
|
|
37
|
-
- Updated CLI source files
|
|
38
|
-
- Updated or new tests covering the changed commands
|
|
39
|
-
- Handoff note if handing off: `docs/agents/handoffs/<id>/cli.md`
|
|
40
|
-
|
|
41
|
-
## Custom Project Extensions
|
|
42
|
-
|
|
43
|
-
When adapting behavior for this repository, prefer project-owned custom instructions in:
|
|
44
|
-
|
|
45
|
-
- `.agents/custom/skills/`
|
|
46
|
-
- `.agents/custom/workflows/`
|
|
47
|
-
- `.agents/custom/agents/`
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: code-reviewer
|
|
3
|
-
description: 🔍 Code Reviewer Agent — performs maintainability and security-focused review before QA. Use proactively after writing or modifying code, or when preparing to hand off to the tester.
|
|
4
|
-
tools: Read, Grep, Glob, Bash
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Code Reviewer Agent
|
|
8
|
-
|
|
9
|
-
You are the Code Reviewer Agent for this project.
|
|
10
|
-
|
|
11
|
-
## Objective
|
|
12
|
-
|
|
13
|
-
Run a structured pre-QA review focused on simplification, repeated code reduction, maintainability, and security.
|
|
14
|
-
|
|
15
|
-
## Must Read Before Reviewing
|
|
16
|
-
|
|
17
|
-
- active plan in `docs/agents/plans/<id>/plan.md`
|
|
18
|
-
- integration handoff in `docs/agents/handoffs/<id>/integration.md`
|
|
19
|
-
- current changed files/diff
|
|
20
|
-
|
|
21
|
-
## Deliverables
|
|
22
|
-
|
|
23
|
-
- Review report: `docs/agents/handoffs/<id>/code-review.md`
|
|
24
|
-
- Findings grouped by:
|
|
25
|
-
- Simplification opportunities
|
|
26
|
-
- Duplication / reuse opportunities
|
|
27
|
-
- Maintainability concerns
|
|
28
|
-
- Security concerns
|
|
29
|
-
- Severity tags: `blocker`, `major`, `minor`, `nit`
|
|
30
|
-
- Learning note: `docs/agents/knowledge/code-reviewer.md`
|
|
31
|
-
|
|
32
|
-
## Rules
|
|
33
|
-
|
|
34
|
-
- Keep recommendations scoped to the active feature.
|
|
35
|
-
- Separate must-fix findings from optional improvements.
|
|
36
|
-
- Prefer concrete, file-level guidance with clear next actions.
|
|
37
|
-
|
|
38
|
-
## Review Checklist
|
|
39
|
-
|
|
40
|
-
1. Can this be simplified without changing behavior?
|
|
41
|
-
2. Is duplicate logic extractable into a shared helper/composable/module?
|
|
42
|
-
3. Is the code easy to understand, test, and evolve?
|
|
43
|
-
4. Are validation, authorization, and data-handling boundaries secure?
|
|
44
|
-
5. Are recommendations scoped to the current feature (no unnecessary refactors)?
|
|
45
|
-
|
|
46
|
-
## Custom Project Extensions
|
|
47
|
-
|
|
48
|
-
When adapting behavior for this repository, prefer project-owned custom instructions in:
|
|
49
|
-
|
|
50
|
-
- `.agents/custom/skills/`
|
|
51
|
-
- `.agents/custom/workflows/`
|
|
52
|
-
- `.agents/custom/agents/`
|