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.
Files changed (63) hide show
  1. package/.agents/teams/web-product/README.md +1 -1
  2. package/.github/workflows/release.yml +40 -0
  3. package/.releaserc.json +34 -0
  4. package/CHANGELOG.md +39 -0
  5. package/README.md +9 -0
  6. package/docs/agents/README.md +2 -1
  7. package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/backend.md +100 -0
  8. package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/code-review.md +83 -0
  9. package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/frontend.md +24 -0
  10. package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/integration.md +51 -0
  11. package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/planning-agent.md +51 -0
  12. package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/qa.md +87 -0
  13. package/docs/agents/handoffs/REL-NO-IDE-OVERLAYS/requirement-analyst.md +75 -0
  14. package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/backend.md +77 -0
  15. package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/code-review.md +80 -0
  16. package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/frontend.md +22 -0
  17. package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/integration.md +65 -0
  18. package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/planning-agent.md +67 -0
  19. package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/qa.md +87 -0
  20. package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/requirement-analyst.md +77 -0
  21. package/docs/agents/knowledge/backend-dev.md +17 -0
  22. package/docs/agents/knowledge/code-reviewer.md +12 -0
  23. package/docs/agents/knowledge/frontend-dev.md +9 -0
  24. package/docs/agents/knowledge/planning-agent.md +32 -0
  25. package/docs/agents/knowledge/requirement-analyst.md +12 -0
  26. package/docs/agents/knowledge/tester.md +12 -0
  27. package/docs/agents/plans/REL-NO-IDE-OVERLAYS/plan.md +106 -0
  28. package/docs/agents/plans/REL-SEMVER-AUTOPUBLISH/plan.md +148 -0
  29. package/docs/cli.md +11 -2
  30. package/docs/plan.md +1 -1
  31. package/package.json +18 -9
  32. package/src/agents/definitions/agent-manager.yaml +2 -2
  33. package/src/agents/generate.js +104 -48
  34. package/src/cli.js +13 -0
  35. package/src/lib/template-registry.js +67 -25
  36. package/templates/bootstrap/{overlays/vscode-copilot/.vscode/mcp.json → base/.agents/mcp/vscode.json} +5 -2
  37. package/templates/bootstrap/base/.agents/teams/web-product/README.md +1 -1
  38. package/templates/bootstrap/manifest.json +5 -6
  39. package/tests/cli.integration.test.js +51 -0
  40. package/tests/sync-engine.test.js +30 -0
  41. package/tests/template-registry.test.js +48 -0
  42. package/templates/bootstrap/overlays/claude-code/.claude/agents/agent-manager.md +0 -153
  43. package/templates/bootstrap/overlays/claude-code/.claude/agents/backend-dev.md +0 -48
  44. package/templates/bootstrap/overlays/claude-code/.claude/agents/cli-dev.md +0 -47
  45. package/templates/bootstrap/overlays/claude-code/.claude/agents/code-reviewer.md +0 -52
  46. package/templates/bootstrap/overlays/claude-code/.claude/agents/documentation-writer.md +0 -56
  47. package/templates/bootstrap/overlays/claude-code/.claude/agents/frontend-dev.md +0 -47
  48. package/templates/bootstrap/overlays/claude-code/.claude/agents/planning-agent.md +0 -51
  49. package/templates/bootstrap/overlays/claude-code/.claude/agents/product-team-orchestrator.md +0 -51
  50. package/templates/bootstrap/overlays/claude-code/.claude/agents/requirement-analyst.md +0 -54
  51. package/templates/bootstrap/overlays/claude-code/.claude/agents/tester.md +0 -58
  52. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/agent-manager.agent.md +0 -164
  53. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/backend-dev.agent.md +0 -67
  54. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/cli-dev.agent.md +0 -57
  55. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/code-reviewer.agent.md +0 -64
  56. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/documentation-writer.agent.md +0 -72
  57. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/frontend-dev.agent.md +0 -66
  58. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/planning-agent.agent.md +0 -70
  59. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/product-team-orchestrator.agent.md +0 -82
  60. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/requirement-analyst.agent.md +0 -65
  61. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/tester-agent.agent.md +0 -69
  62. package/templates/bootstrap/overlays/vscode-copilot/.github/agents/tester.agent.md +0 -80
  63. /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
- export function getAdapterOverlay(manifest, ide) {
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 manifest.packs.overlays.vscode;
40
+ return "base/.agents/mcp/vscode.json";
20
41
  }
21
42
 
22
43
  if (ide === "claude-code" || ide === "claude") {
23
- return manifest.packs.overlays["claude-code"];
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 overlay = getAdapterOverlay(manifest, adapter.applyOverlay(ide));
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 agentsSourceDir = path.join(overlayRoot, overlay.agents);
44
- const overlayFiles = await listFilesRecursive(agentsSourceDir);
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", relative).split(path.sep).join("/"),
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 absolutePath of overlayFiles) {
114
+ for (const generatedEntry of generatedAgentEntries) {
67
115
  if (agentFilter !== null) {
68
- const agentName = agentNameFromFile(absolutePath);
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
- sourcePath: absolutePath,
83
- targetPath: mappedTarget,
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 mcpPath = path.join(overlayRoot, overlay.mcp);
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(overlay.mcp),
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": ["-y", "chrome-devtools-mcp@latest"]
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
- - Bootstrap overlays: `templates/bootstrap/overlays/**`
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
- "overlays": {
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/`