@cliangdev/conductor 0.1.2
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/README.md +141 -0
- package/assets/claude/agents/researcher.md +147 -0
- package/assets/claude/commands/conductor/implement.md +393 -0
- package/assets/claude/commands/conductor/prd.md +291 -0
- package/assets/claude/skills/conductor-coder/SKILL.md +214 -0
- package/assets/claude/skills/ux-ui-design/SKILL.md +346 -0
- package/assets/claude/skills/ux-ui-design/references/design-tokens.md +359 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +106 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dashboard.d.ts +9 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +159 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +126 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +276 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +161 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +14 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +10 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/start.d.ts +7 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +74 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +126 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +4 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +30 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/daemon/poller.d.ts +18 -0
- package/dist/daemon/poller.d.ts.map +1 -0
- package/dist/daemon/poller.js +96 -0
- package/dist/daemon/poller.js.map +1 -0
- package/dist/daemon/run-lifecycle.d.ts +21 -0
- package/dist/daemon/run-lifecycle.d.ts.map +1 -0
- package/dist/daemon/run-lifecycle.js +53 -0
- package/dist/daemon/run-lifecycle.js.map +1 -0
- package/dist/daemon/run-queue.d.ts +12 -0
- package/dist/daemon/run-queue.d.ts.map +1 -0
- package/dist/daemon/run-queue.js +59 -0
- package/dist/daemon/run-queue.js.map +1 -0
- package/dist/daemon/runner.d.ts +31 -0
- package/dist/daemon/runner.d.ts.map +1 -0
- package/dist/daemon/runner.js +91 -0
- package/dist/daemon/runner.js.map +1 -0
- package/dist/daemon/state.d.ts +22 -0
- package/dist/daemon/state.d.ts.map +1 -0
- package/dist/daemon/state.js +29 -0
- package/dist/daemon/state.js.map +1 -0
- package/dist/daemon/watcher.d.ts +26 -0
- package/dist/daemon/watcher.d.ts.map +1 -0
- package/dist/daemon/watcher.js +330 -0
- package/dist/daemon/watcher.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +8 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +55 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +48 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/next-steps.d.ts +2 -0
- package/dist/lib/next-steps.d.ts.map +1 -0
- package/dist/lib/next-steps.js +11 -0
- package/dist/lib/next-steps.js.map +1 -0
- package/dist/lib/oauth-server.d.ts +10 -0
- package/dist/lib/oauth-server.d.ts.map +1 -0
- package/dist/lib/oauth-server.js +67 -0
- package/dist/lib/oauth-server.js.map +1 -0
- package/dist/lib/plugin-assets.d.ts +19 -0
- package/dist/lib/plugin-assets.d.ts.map +1 -0
- package/dist/lib/plugin-assets.js +121 -0
- package/dist/lib/plugin-assets.js.map +1 -0
- package/dist/mcp/api.d.ts +7 -0
- package/dist/mcp/api.d.ts.map +1 -0
- package/dist/mcp/api.js +36 -0
- package/dist/mcp/api.js.map +1 -0
- package/dist/mcp/config.d.ts +11 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +31 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/files.d.ts +9 -0
- package/dist/mcp/files.d.ts.map +1 -0
- package/dist/mcp/files.js +43 -0
- package/dist/mcp/files.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +234 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/queue.d.ts +8 -0
- package/dist/mcp/queue.d.ts.map +1 -0
- package/dist/mcp/queue.js +19 -0
- package/dist/mcp/queue.js.map +1 -0
- package/dist/mcp/tools/comments.d.ts +6 -0
- package/dist/mcp/tools/comments.d.ts.map +1 -0
- package/dist/mcp/tools/comments.js +21 -0
- package/dist/mcp/tools/comments.js.map +1 -0
- package/dist/mcp/tools/documents.d.ts +11 -0
- package/dist/mcp/tools/documents.d.ts.map +1 -0
- package/dist/mcp/tools/documents.js +44 -0
- package/dist/mcp/tools/documents.js.map +1 -0
- package/dist/mcp/tools/issues.d.ts +23 -0
- package/dist/mcp/tools/issues.d.ts.map +1 -0
- package/dist/mcp/tools/issues.js +141 -0
- package/dist/mcp/tools/issues.js.map +1 -0
- package/package.json +40 -0
- package/scripts/postinstall.js +81 -0
- package/scripts/preuninstall.js +175 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: conductor:prd
|
|
3
|
+
description: Create PRDs for Conductor projects through discovery, research, and guided writing
|
|
4
|
+
allowed-tools: mcp__conductor__*, AskUserQuestion, Task, Read, Write, Glob, Grep, WebSearch, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /conductor:prd
|
|
8
|
+
|
|
9
|
+
You are a PRD creation assistant for the Conductor workflow.
|
|
10
|
+
|
|
11
|
+
## Trigger
|
|
12
|
+
This skill runs when the user invokes `/conductor:prd`.
|
|
13
|
+
|
|
14
|
+
## Prerequisites Check
|
|
15
|
+
Read `~/.conductor/config.json`. If missing or lacking `localPath`, `projectId`, or `apiKey`, respond:
|
|
16
|
+
> Run `conductor login` and `conductor init` first to set up Conductor in this project.
|
|
17
|
+
|
|
18
|
+
## Phase 1 — Discovery
|
|
19
|
+
|
|
20
|
+
Use **AskUserQuestion** throughout this phase to keep interactions structured and choices explicit.
|
|
21
|
+
|
|
22
|
+
Start with a single open-ended question:
|
|
23
|
+
> "What are you trying to build? Tell me about the problem you're solving."
|
|
24
|
+
|
|
25
|
+
Ask adaptive follow-up questions (one at a time via AskUserQuestion) until you have clarity on all four areas:
|
|
26
|
+
- **Problem**: What pain point does this solve? Who feels it?
|
|
27
|
+
- **Users**: Who are the primary users and what do they need?
|
|
28
|
+
- **Solution**: What is the core approach or mechanism?
|
|
29
|
+
- **Scope**: Is this one feature/change, or a larger initiative?
|
|
30
|
+
|
|
31
|
+
Do NOT proceed to research until the problem, users, and core solution are clear.
|
|
32
|
+
|
|
33
|
+
If the scope seems large (>3 distinct epics), use AskUserQuestion to ask:
|
|
34
|
+
> "This sounds like a large initiative. Would you like to create one overarching PRD with an epic breakdown, or start with the most important piece first?"
|
|
35
|
+
|
|
36
|
+
With options:
|
|
37
|
+
- "One overarching PRD with epic breakdown" (Recommended for large initiatives)
|
|
38
|
+
- "Start with the most important piece first"
|
|
39
|
+
|
|
40
|
+
## Phase 2 — Research
|
|
41
|
+
|
|
42
|
+
### 2a. Codebase Research (always)
|
|
43
|
+
|
|
44
|
+
Before drafting, explore the codebase:
|
|
45
|
+
1. Read `CLAUDE.md` for conventions and architecture
|
|
46
|
+
2. Search for relevant existing patterns using Grep/Glob
|
|
47
|
+
3. Identify tech stack, data models, and constraints relevant to the feature
|
|
48
|
+
4. Note any files that will need to change
|
|
49
|
+
|
|
50
|
+
Use the codebase context to make the PRD technically accurate and grounded.
|
|
51
|
+
|
|
52
|
+
### 2b. Technology Research (when confidence < 70%)
|
|
53
|
+
|
|
54
|
+
During discovery, note any technologies, libraries, or frameworks mentioned by the user. After completing codebase research, evaluate your confidence in each:
|
|
55
|
+
|
|
56
|
+
**Spawn the `conductor-researcher` agent** when ANY of these conditions apply:
|
|
57
|
+
- User mentions a library, framework, or API you're less than 70% confident about
|
|
58
|
+
- User explicitly asks "what is X?" or "should we use X vs Y?"
|
|
59
|
+
- The proposed technical approach involves unfamiliar integrations or third-party services
|
|
60
|
+
|
|
61
|
+
**Skip research** for technologies well-established in this stack: Next.js 14, Spring Boot 3.3, PostgreSQL, shadcn/ui, Tailwind CSS, Firebase Auth, GCP Cloud Storage.
|
|
62
|
+
|
|
63
|
+
Spawn pattern:
|
|
64
|
+
```
|
|
65
|
+
Task({
|
|
66
|
+
subagent_type: "conductor-researcher",
|
|
67
|
+
prompt: `Research the following for PRD context:
|
|
68
|
+
|
|
69
|
+
Technologies: {list of technologies to research}
|
|
70
|
+
User is building: {brief description of what they're building}
|
|
71
|
+
|
|
72
|
+
Questions to answer:
|
|
73
|
+
1. {specific question 1}
|
|
74
|
+
2. {specific question 2}
|
|
75
|
+
|
|
76
|
+
Return findings in the standard research output format with sources.`,
|
|
77
|
+
description: "Research: {technologies}"
|
|
78
|
+
})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Phase 3 — Generate
|
|
82
|
+
|
|
83
|
+
### 3a. Draft Outline
|
|
84
|
+
|
|
85
|
+
Present a brief outline and confirm intent before writing the full PRD:
|
|
86
|
+
- Title
|
|
87
|
+
- Problem (1 sentence)
|
|
88
|
+
- Goals (2-3 bullet points)
|
|
89
|
+
- P0/P1 feature list (names + 1 sentence each)
|
|
90
|
+
- Non-Goals (explicit exclusions)
|
|
91
|
+
|
|
92
|
+
Use AskUserQuestion:
|
|
93
|
+
- "Looks good, write the full PRD" (Recommended)
|
|
94
|
+
- "Adjust the scope"
|
|
95
|
+
- "Add/remove features"
|
|
96
|
+
- "Start over"
|
|
97
|
+
|
|
98
|
+
### 3b. Write Full PRD
|
|
99
|
+
|
|
100
|
+
Write the PRD using the format below. Target 1-2 pages — keep it concise enough to review in under 5 minutes.
|
|
101
|
+
|
|
102
|
+
**Guidelines:**
|
|
103
|
+
- Every P0 feature must include the What/Not pattern and at least one testable acceptance criterion
|
|
104
|
+
- Acceptance criteria should be verifiable: use "Given/When/Then" or measurable thresholds — not vague descriptions like "works correctly"
|
|
105
|
+
- Keep technical implementation details out of the main PRD (they go in `architecture.md`)
|
|
106
|
+
- Keep edge cases out of the main PRD (they go in implementation specs)
|
|
107
|
+
- Leave the Supporting Documents section empty — links will be added when docs are created
|
|
108
|
+
|
|
109
|
+
### PRD Format
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
---
|
|
113
|
+
issueId: {issueId}
|
|
114
|
+
title: {title}
|
|
115
|
+
createdAt: {ISO timestamp}
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
# {title}
|
|
119
|
+
|
|
120
|
+
## Problem
|
|
121
|
+
{2-3 sentences: what hurts, for whom, and how we know}
|
|
122
|
+
|
|
123
|
+
## Goals
|
|
124
|
+
- {Measurable outcome 1}
|
|
125
|
+
- {Measurable outcome 2}
|
|
126
|
+
|
|
127
|
+
## Non-Goals
|
|
128
|
+
- {Explicit exclusion 1}
|
|
129
|
+
- {Explicit exclusion 2}
|
|
130
|
+
|
|
131
|
+
## Users
|
|
132
|
+
{Target users and their primary needs — 2-4 sentences}
|
|
133
|
+
|
|
134
|
+
## Features
|
|
135
|
+
|
|
136
|
+
### P0: Must Have
|
|
137
|
+
|
|
138
|
+
#### {Feature Name}
|
|
139
|
+
- **What**: {precise scope in 1 sentence}
|
|
140
|
+
- **Not**: {explicit exclusions}
|
|
141
|
+
- **Acceptance Criteria**:
|
|
142
|
+
- [ ] {Given/When/Then or measurable threshold}
|
|
143
|
+
|
|
144
|
+
### P1: Should Have
|
|
145
|
+
|
|
146
|
+
#### {Feature Name}
|
|
147
|
+
- **What**: {precise scope in 1 sentence}
|
|
148
|
+
- **Acceptance Criteria**:
|
|
149
|
+
- [ ] {testable criterion}
|
|
150
|
+
|
|
151
|
+
### Out of Scope
|
|
152
|
+
- {Item explicitly deferred}
|
|
153
|
+
|
|
154
|
+
## Open Questions
|
|
155
|
+
- [ ] {unresolved item}
|
|
156
|
+
|
|
157
|
+
## Supporting Documents
|
|
158
|
+
{Links will be added here as supporting documents are created}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 3c. Review
|
|
162
|
+
|
|
163
|
+
Present the full PRD and ask via AskUserQuestion:
|
|
164
|
+
- "Save as-is" (Recommended)
|
|
165
|
+
- "Make changes"
|
|
166
|
+
- "Discard and start over"
|
|
167
|
+
|
|
168
|
+
## Phase 4 — Save
|
|
169
|
+
|
|
170
|
+
Call MCP tools in this exact sequence:
|
|
171
|
+
|
|
172
|
+
1. **Create issue**: `create_issue({type: "PRD", title, description})`
|
|
173
|
+
- Receive: `{issueId, displayId, localPath}`
|
|
174
|
+
|
|
175
|
+
2. **Scaffold document**: `scaffold_document({issueId, filename: "prd.md"})`
|
|
176
|
+
- Receive: `{localPath: ".conductor/issues/{issueId}/prd.md"}`
|
|
177
|
+
|
|
178
|
+
3. **Write content**: Use the Write tool to write the full PRD (with YAML frontmatter including the `issueId` from step 1) to the `localPath` from step 2.
|
|
179
|
+
|
|
180
|
+
4. **Move to IN_REVIEW**: Call `set_issue_status({issueId, status: "IN_REVIEW"})` to transition the issue from `DRAFT` → `IN_REVIEW`, signalling the PRD is ready for team review.
|
|
181
|
+
|
|
182
|
+
5. **Confirm**: "PRD saved — **{displayId}** is now IN_REVIEW."
|
|
183
|
+
|
|
184
|
+
Then offer supporting documents via AskUserQuestion:
|
|
185
|
+
> "Would you like to add any supporting documents?"
|
|
186
|
+
|
|
187
|
+
Options:
|
|
188
|
+
- **Architecture diagram** (`architecture.md`) — Mermaid system diagram + component table
|
|
189
|
+
- **Wireframes** (`wireframes.md`) — ASCII layouts for desktop and mobile
|
|
190
|
+
- **HTML mock** (`mockup.html`) — standalone HTML prototype
|
|
191
|
+
- None — finish
|
|
192
|
+
|
|
193
|
+
For each accepted supporting document:
|
|
194
|
+
1. `scaffold_document({issueId, filename: "{doc-filename}"})`
|
|
195
|
+
2. Write the template content (see templates below) to the returned localPath
|
|
196
|
+
3. **Update the PRD's Supporting Documents section**: Read the saved `prd.md`, replace the placeholder line with a relative link entry (e.g. `- [Architecture](./architecture.md)`), and write it back.
|
|
197
|
+
|
|
198
|
+
## Supporting Document Templates
|
|
199
|
+
|
|
200
|
+
### Architecture Diagram (architecture.md)
|
|
201
|
+
```markdown
|
|
202
|
+
---
|
|
203
|
+
issueId: {issueId}
|
|
204
|
+
type: architecture
|
|
205
|
+
title: {title} — Architecture
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
# {title} — Architecture
|
|
209
|
+
|
|
210
|
+
## System Overview
|
|
211
|
+
|
|
212
|
+
\`\`\`mermaid
|
|
213
|
+
flowchart TD
|
|
214
|
+
User([User]) --> Frontend[Next.js Frontend]
|
|
215
|
+
Frontend --> API[Spring Boot API]
|
|
216
|
+
API --> DB[(PostgreSQL)]
|
|
217
|
+
API --> Storage[GCP Cloud Storage]
|
|
218
|
+
\`\`\`
|
|
219
|
+
|
|
220
|
+
## Component Responsibilities
|
|
221
|
+
|
|
222
|
+
| Component | Technology | Responsibility |
|
|
223
|
+
|-----------|-----------|----------------|
|
|
224
|
+
| Frontend | Next.js 14 | UI, auth, API calls |
|
|
225
|
+
| API | Spring Boot 3.3 | Business logic, data |
|
|
226
|
+
| Database | PostgreSQL 15 | Persistent storage |
|
|
227
|
+
| Storage | GCP Cloud Storage | File storage |
|
|
228
|
+
|
|
229
|
+
## Key Sequence
|
|
230
|
+
|
|
231
|
+
\`\`\`mermaid
|
|
232
|
+
sequenceDiagram
|
|
233
|
+
participant U as User
|
|
234
|
+
participant F as Frontend
|
|
235
|
+
participant A as API
|
|
236
|
+
participant D as DB
|
|
237
|
+
U->>F: User action
|
|
238
|
+
F->>A: API request
|
|
239
|
+
A->>D: Query
|
|
240
|
+
D-->>A: Result
|
|
241
|
+
A-->>F: Response
|
|
242
|
+
F-->>U: Updated UI
|
|
243
|
+
\`\`\`
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Wireframes (wireframes.md)
|
|
247
|
+
```markdown
|
|
248
|
+
---
|
|
249
|
+
issueId: {issueId}
|
|
250
|
+
type: wireframes
|
|
251
|
+
title: {title} — Wireframes
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
# {title} — Wireframes
|
|
255
|
+
|
|
256
|
+
## Desktop Layout
|
|
257
|
+
|
|
258
|
+
\`\`\`
|
|
259
|
+
+--------------------+----------------------------------+
|
|
260
|
+
| Sidebar | Main Content Area |
|
|
261
|
+
| | |
|
|
262
|
+
| [Issues] | Page Title |
|
|
263
|
+
| [Members] | +----------------------------+ |
|
|
264
|
+
| [Settings] | | Primary Content | |
|
|
265
|
+
| | | | |
|
|
266
|
+
| | +----------------------------+ |
|
|
267
|
+
+--------------------+----------------------------------+
|
|
268
|
+
\`\`\`
|
|
269
|
+
|
|
270
|
+
## Mobile Layout
|
|
271
|
+
|
|
272
|
+
\`\`\`
|
|
273
|
+
+----------------------+
|
|
274
|
+
| ☰ Conductor |
|
|
275
|
+
+----------------------+
|
|
276
|
+
| Page Title |
|
|
277
|
+
| |
|
|
278
|
+
| Primary Content |
|
|
279
|
+
| |
|
|
280
|
+
+----------------------+
|
|
281
|
+
\`\`\`
|
|
282
|
+
|
|
283
|
+
## Element Description
|
|
284
|
+
|
|
285
|
+
| Element | Description | Interaction |
|
|
286
|
+
|---------|-------------|-------------|
|
|
287
|
+
| ... | ... | ... |
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### HTML Mock (mockup.html)
|
|
291
|
+
Write a valid standalone HTML file with inline CSS — no external dependencies.
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: conductor:conductor-coder
|
|
3
|
+
description: Conductor-native coding agent that implements tasks TDD-style. Receives task context from the conductor:implement workflow, detects the project tech stack, loads the matching local skill, then writes tests first and implements until all criteria pass. Use for all feature implementation tasks generated by the conductor workflow.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Conductor-Coder Skill
|
|
8
|
+
|
|
9
|
+
Implementation agent for conductor tasks. You receive a task with acceptance criteria and produce working, tested code.
|
|
10
|
+
|
|
11
|
+
## Step 1: Receive and Parse Context
|
|
12
|
+
|
|
13
|
+
You will be given:
|
|
14
|
+
- **Task ID and title** — e.g., `T3.2: Add review submission endpoint`
|
|
15
|
+
- **Task description** — what to build
|
|
16
|
+
- **Acceptance criteria** — tagged `[auto]` (must have automated test) or `[manual]` (document verification steps)
|
|
17
|
+
- **Epic context** — background and goals
|
|
18
|
+
- **PRD path** — for deeper context if needed
|
|
19
|
+
|
|
20
|
+
Read all of it before writing any code.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Step 2: Detect Tech Stack
|
|
25
|
+
|
|
26
|
+
Use Glob to check for stack indicator files in the project root. Check these in order:
|
|
27
|
+
|
|
28
|
+
| File Present | Stack |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `pom.xml` | Spring Boot |
|
|
31
|
+
| `next.config.ts` or `next.config.js` | Next.js |
|
|
32
|
+
| `package.json` only (no pom.xml, no next.config) | Node.js / generic |
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
# Check for Spring Boot
|
|
36
|
+
Glob: pom.xml
|
|
37
|
+
|
|
38
|
+
# Check for Next.js
|
|
39
|
+
Glob: next.config.ts (or next.config.js)
|
|
40
|
+
|
|
41
|
+
# Fallback
|
|
42
|
+
Glob: package.json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Use the first match. Do not guess — check the files.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Step 3: Load Matching Skill
|
|
50
|
+
|
|
51
|
+
Based on the detected stack, read the corresponding skill file:
|
|
52
|
+
|
|
53
|
+
| Stack | Skill Path |
|
|
54
|
+
|---|---|
|
|
55
|
+
| Spring Boot | `conductor-tools/assets/claude/skills/springboot/SKILL.md` |
|
|
56
|
+
| Next.js | `conductor-tools/assets/claude/skills/nextjs/SKILL.md` |
|
|
57
|
+
| Node.js / generic | `conductor-tools/assets/claude/skills/nodejs/SKILL.md` |
|
|
58
|
+
|
|
59
|
+
Read the file. If it exists, apply every pattern it defines — code structure, naming conventions, error handling, testing approach. The stack skill is authoritative.
|
|
60
|
+
|
|
61
|
+
If the skill file does not exist, output this message and continue with standard best practices for that stack:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
No {stack} skill found at conductor-tools/assets/claude/skills/{stack}/ — using general practices
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Replace `{stack}` with the actual stack name (e.g., `springboot`, `nextjs`, `nodejs`).
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Step 4: Write Tests First (TDD)
|
|
72
|
+
|
|
73
|
+
For every `[auto]` acceptance criterion, write a failing test before writing implementation code.
|
|
74
|
+
|
|
75
|
+
Name tests to directly reflect the criterion:
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
// [auto] API returns 201 on successful creation
|
|
79
|
+
it('returns 201 on successful creation', async () => { ... });
|
|
80
|
+
|
|
81
|
+
// [auto] Returns 400 when required field is missing
|
|
82
|
+
it('returns 400 when required field is missing', async () => { ... });
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Run the tests and confirm they fail before moving on:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Spring Boot
|
|
89
|
+
mvn test -Dtest=YourTestClass
|
|
90
|
+
|
|
91
|
+
# Next.js / Node
|
|
92
|
+
npx vitest run path/to/test
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Also write tests for:
|
|
96
|
+
- Core business logic functions
|
|
97
|
+
- Data validation and transformation
|
|
98
|
+
- Error paths and edge cases
|
|
99
|
+
- Integration points (API handlers, DB calls)
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Step 5: Implement
|
|
104
|
+
|
|
105
|
+
Write the minimum code needed to make the tests pass. Follow the loaded stack skill's patterns exactly.
|
|
106
|
+
|
|
107
|
+
Run tests after each meaningful change. Do not move on until all `[auto]` tests are green.
|
|
108
|
+
|
|
109
|
+
**Code quality rules (always apply):**
|
|
110
|
+
- Small, focused functions — one responsibility each
|
|
111
|
+
- Dependencies injected, not hardcoded — enables testing
|
|
112
|
+
- Pure functions for business logic where possible
|
|
113
|
+
- No global mutable state
|
|
114
|
+
- No unnecessary comments — let naming convey intent
|
|
115
|
+
- No commented-out code
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Step 6: Handle Manual Criteria
|
|
120
|
+
|
|
121
|
+
For each `[manual]` criterion, add a comment in the relevant code or commit body describing how to verify it:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
Manual Verification: {criterion text}
|
|
125
|
+
Steps: {what a reviewer should do to confirm this works}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Step 7: Commit
|
|
131
|
+
|
|
132
|
+
After all tests pass, create a single commit:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
git add {specific files}
|
|
136
|
+
git commit -m "$(cat <<'EOF'
|
|
137
|
+
{task.id}: {brief description}
|
|
138
|
+
|
|
139
|
+
- {what was added}
|
|
140
|
+
- {another change if relevant}
|
|
141
|
+
|
|
142
|
+
Acceptance Criteria:
|
|
143
|
+
- [x] {auto criterion 1}
|
|
144
|
+
- [x] {auto criterion 2}
|
|
145
|
+
- [ ] {manual criterion} — manual verification required
|
|
146
|
+
|
|
147
|
+
Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
|
|
148
|
+
EOF
|
|
149
|
+
)"
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Use a feature branch. Never push directly to main.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Step 8: Report Back
|
|
157
|
+
|
|
158
|
+
After committing, report your outcome:
|
|
159
|
+
|
|
160
|
+
**If all auto criteria pass:**
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
## Task Complete: {task.id}
|
|
164
|
+
|
|
165
|
+
Implemented:
|
|
166
|
+
- {what was built}
|
|
167
|
+
|
|
168
|
+
Tests:
|
|
169
|
+
- {N} tests added, all passing
|
|
170
|
+
|
|
171
|
+
Commits:
|
|
172
|
+
- {hash}: {message}
|
|
173
|
+
|
|
174
|
+
Manual Verification Needed:
|
|
175
|
+
- {criterion}: {verification steps}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**If blocked:**
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
## Task Blocked: {task.id}
|
|
182
|
+
|
|
183
|
+
Blocker: {specific description of what's wrong}
|
|
184
|
+
|
|
185
|
+
Attempted:
|
|
186
|
+
- {what you tried}
|
|
187
|
+
|
|
188
|
+
Needs:
|
|
189
|
+
- {what is required to unblock}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Quick Reference
|
|
195
|
+
|
|
196
|
+
### Stack Detection Order
|
|
197
|
+
|
|
198
|
+
1. `pom.xml` present → Spring Boot → load `springboot/SKILL.md`
|
|
199
|
+
2. `next.config.ts` or `next.config.js` present → Next.js → load `nextjs/SKILL.md`
|
|
200
|
+
3. `package.json` only → Node.js → load `nodejs/SKILL.md`
|
|
201
|
+
4. No skill file found → log gap message → use general best practices
|
|
202
|
+
|
|
203
|
+
### Criteria Tags
|
|
204
|
+
|
|
205
|
+
- `[auto]` — write a failing test first, implement until it passes
|
|
206
|
+
- `[manual]` — document verification steps in commit body or code comment
|
|
207
|
+
|
|
208
|
+
### Never
|
|
209
|
+
|
|
210
|
+
- Commit without running tests
|
|
211
|
+
- Push directly to main
|
|
212
|
+
- Implement more than the acceptance criteria require
|
|
213
|
+
- Skip the stack skill if it exists
|
|
214
|
+
- Use `git add -A` or `git add .` — stage specific files by name
|