@houseofwolvesllc/claude-scrum-skill 1.5.0 → 1.6.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.
@@ -9,10 +9,14 @@ Scaffold a complete GitHub Project from one or more PRD or spec documents, or ad
9
9
 
10
10
  ## Before You Start
11
11
 
12
- 1. Read `references/CONVENTIONS.md` in this skill's directory for all project management standards including label taxonomy, branch strategy, issue templates, custom fields, and executor assignment guidelines. Follow these conventions exactly.
13
- 2. **Terminology:** Always refer to milestones as **"epics"** in all user-facing text, summaries, and conversational output. The word "milestone" should only appear in GitHub API commands and code — never in communication with the user.
14
- 3. Confirm the `gh` CLI is authenticated by running `gh auth status`.
15
- 4. Identify the target repository. If the user doesn't specify, ask which repo to use.
12
+ 1. Read `../shared/references/CONVENTIONS.md` for all project management standards including label taxonomy, branch strategy, issue templates, custom fields, and executor assignment guidelines. Follow these conventions exactly.
13
+ 2. Read `../shared/config.json` to determine the scaffolding mode (`scaffolding` key: `"local"`, `"github"`, `"jira"`, or `"trello"`, default: `"local"`). If `"local"`, also read the `paths.backlog` value (default: `.claude-scrum-skill/backlog`).
14
+ 3. Read `../shared/references/PROVIDERS.md` for provider-specific API commands when operating in remote mode (GitHub, Jira, or Trello).
15
+ 4. **Terminology:** Always refer to milestones as **"epics"** in all user-facing text, summaries, and conversational output. The word "milestone" should only appear in API commands and code — never in communication with the user.
16
+ 5. **If `scaffolding: "github"`:** Confirm the `gh` CLI is authenticated by running `gh auth status`. Identify the target repository. If the user doesn't specify, ask which repo to use.
17
+ 6. **If `scaffolding: "jira"`:** Verify `JIRA_SITE`, `JIRA_EMAIL`, and `JIRA_API_TOKEN` environment variables are set. Read `jira.project_key` from config.json. Verify auth per PROVIDERS.md.
18
+ 7. **If `scaffolding: "trello"`:** Verify `TRELLO_API_KEY` and `TRELLO_TOKEN` environment variables are set. Read `trello.board_id` from config.json. Verify auth per PROVIDERS.md.
19
+ 8. **If `scaffolding: "local"`:** Skip authentication. No external service required — the backlog is file-based.
16
20
 
17
21
  ## Input
18
22
 
@@ -22,6 +26,357 @@ Read all provided documents thoroughly before proceeding.
22
26
 
23
27
  ## Scaffold Procedure
24
28
 
29
+ Read `../shared/config.json` to determine mode. If `scaffolding` is `"local"`,
30
+ follow the **Local Scaffold Procedure** below. Otherwise follow the
31
+ **GitHub Scaffold Procedure**.
32
+
33
+ ---
34
+
35
+ ## Local Scaffold Procedure
36
+
37
+ When `scaffolding: "local"`, create the entire backlog as local markdown files
38
+ instead of GitHub issues, milestones, and project boards.
39
+
40
+ ### Local Step 1: Parse the PRD
41
+
42
+ Same as GitHub Step 1 — extract project name, epics, stories, dependencies,
43
+ and technical context. Present the summary and ask the user to confirm.
44
+
45
+ ### Local Step 2: Detect Existing Backlog
46
+
47
+ Check if the configured backlog directory already exists:
48
+
49
+ ```bash
50
+ ls <backlog-path>/PROJECT.md 2>/dev/null
51
+ ```
52
+
53
+ **If found**, read `PROJECT.md` and list existing epic directories. Present
54
+ options (same as GitHub mode):
55
+
56
+ ```
57
+ Existing local backlog detected:
58
+ Project: <name>
59
+ Epics:
60
+ - <epic-slug>/ (N stories)
61
+ ...
62
+
63
+ How should the PRD stories be added?
64
+ 1. Create new epic(s) from this PRD
65
+ 2. Add stories to an existing epic
66
+ 3. Mix — map each PRD section to a new or existing epic
67
+ ```
68
+
69
+ **If not found**, proceed with full scaffold.
70
+
71
+ ### Local Step 3: Create Project File
72
+
73
+ Create `<backlog-path>/PROJECT.md`:
74
+
75
+ ```markdown
76
+ ---
77
+ name: <Project Name>
78
+ created: <ISO timestamp>
79
+ sprints: []
80
+ ---
81
+
82
+ # <Project Name>
83
+
84
+ <Project description from PRD>
85
+ ```
86
+
87
+ ### Local Step 4: Create Epic Directories
88
+
89
+ For each epic, create `<backlog-path>/<epic-slug>/`:
90
+
91
+ ```markdown
92
+ <!-- <backlog-path>/<epic-slug>/_epic.md -->
93
+ ---
94
+ title: <Epic Name>
95
+ slug: <epic-slug>
96
+ status: open
97
+ created: <ISO timestamp>
98
+ ---
99
+
100
+ # <Epic Name>
101
+
102
+ <Epic description from PRD>
103
+ ```
104
+
105
+ ### Local Step 5: Create Story Files
106
+
107
+ For each story, create a numbered file in the epic directory. Use sequential
108
+ numbering within each epic: `001-<story-slug>.md`, `002-<story-slug>.md`, etc.
109
+
110
+ ```markdown
111
+ <!-- <backlog-path>/<epic-slug>/001-<story-slug>.md -->
112
+ ---
113
+ title: <Story title>
114
+ epic: <epic-slug>
115
+ status: backlog
116
+ executor: claude | human | cowork
117
+ priority: P0-critical | P1-high | P2-medium | P3-low
118
+ points: <fibonacci estimate>
119
+ labels:
120
+ - type:story
121
+ - executor:<type>
122
+ - <priority>
123
+ - epic:<epic-slug>
124
+ - ready-for-work
125
+ persona: impl | ops | research
126
+ blocked_by: []
127
+ blocks: []
128
+ sprint: null
129
+ ---
130
+
131
+ ## Objective
132
+
133
+ <What this accomplishes — one clear sentence>
134
+
135
+ ## Acceptance Criteria
136
+
137
+ - [ ] <Specific, testable criterion>
138
+ - [ ] <Specific, testable criterion>
139
+
140
+ ## Technical Context
141
+
142
+ <Architecture notes, relevant files, approach guidance>
143
+
144
+ ## Dependencies
145
+
146
+ - **Blocked by:** <epic-slug>/NNN-slug or "none">
147
+ - **Blocks:** <epic-slug>/NNN-slug or "none">
148
+ ```
149
+
150
+ Use the same executor assignment and story point guidelines from
151
+ CONVENTIONS.md as in GitHub mode.
152
+
153
+ ### Local Step 6: Generate Summary
154
+
155
+ ```
156
+ ## Project Scaffold Complete (Local Mode)
157
+
158
+ **Project:** <name>
159
+ **Backlog path:** <backlog-path>/
160
+ **Mode:** Local file-based backlog
161
+
162
+ ### Epics
163
+ - <epic-slug>/ — <N> stories, <total points> points
164
+ ...
165
+
166
+ ### Story Breakdown by Executor
167
+ - executor:claude — <N> stories (<points> points)
168
+ - executor:human — <N> stories (<points> points)
169
+ - executor:cowork — <N> stories (<points> points)
170
+
171
+ ### Next Steps
172
+ 1. Review stories in <backlog-path>/
173
+ 2. Adjust priorities, executors, or points by editing frontmatter
174
+ 3. Note: Sprint planning, status tracking, and orchestration currently
175
+ require `scaffolding: "github"`. Set that in config.json and run
176
+ `/project-scaffold` again to push the backlog to GitHub when ready.
177
+ ```
178
+
179
+ **No branches, labels, or GitHub Project are created in local mode.**
180
+
181
+ ---
182
+
183
+ ## Jira Scaffold Procedure
184
+
185
+ When `scaffolding: "jira"`, use the Jira REST API to create epics, stories,
186
+ and sprints. Refer to `../shared/references/PROVIDERS.md` for all API calls.
187
+
188
+ ### Jira Step 1: Parse the PRD
189
+
190
+ Same as Local Step 1 / GitHub Step 1.
191
+
192
+ ### Jira Step 2: Ensure Project Exists
193
+
194
+ Read `jira.project_key` from `../shared/config.json`.
195
+
196
+ **If the key is empty or not set**, create the project:
197
+
198
+ ```bash
199
+ # Get the current user's account ID for project lead
200
+ ACCOUNT_ID=$(curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
201
+ "$JIRA_SITE/rest/api/3/myself" | jq -r '.accountId')
202
+
203
+ # Derive a project key from the PRD project name (uppercase, max 10 chars)
204
+ PROJECT_KEY=$(echo "<Project Name>" | tr '[:lower:]' '[:upper:]' | tr -cd 'A-Z' | head -c 10)
205
+
206
+ # Create a Scrum software project
207
+ curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
208
+ -H "Content-Type: application/json" \
209
+ -X POST "$JIRA_SITE/rest/api/3/project" \
210
+ -d '{
211
+ "key": "'$PROJECT_KEY'",
212
+ "name": "<Project Name>",
213
+ "projectTypeKey": "software",
214
+ "projectTemplateKey": "com.pyxis.greenhopper.jira:gh-scrum-template",
215
+ "leadAccountId": "'$ACCOUNT_ID'"
216
+ }'
217
+ ```
218
+
219
+ After creation, save the key back to `../shared/config.json` under
220
+ `jira.project_key` so subsequent skills don't need to create it again.
221
+
222
+ **If the key is set**, verify the project exists and check for existing epics:
223
+
224
+ ```bash
225
+ curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
226
+ "$JIRA_SITE/rest/api/3/search?jql=project=<PROJECT_KEY>+AND+issuetype=Epic+AND+status!=Done&fields=summary,status"
227
+ ```
228
+
229
+ If epics exist, present options to add to existing or create new (same UX as
230
+ GitHub mode).
231
+
232
+ ### Jira Step 3: Create Epics
233
+
234
+ Create an Epic issue for each epic in the PRD. Capture the epic key returned.
235
+
236
+ ### Jira Step 4: Create Stories
237
+
238
+ Create Story issues linked to their parent epic. Apply labels for executor,
239
+ priority, and persona. Set story points via the appropriate custom field.
240
+
241
+ Note: Discover the epic link field ID and story points field ID at runtime:
242
+ ```bash
243
+ curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" "$JIRA_SITE/rest/api/3/field" \
244
+ | jq '.[] | select(.name=="Epic Link" or .name=="Story Points")'
245
+ ```
246
+
247
+ ### Jira Step 5: Create Sprint
248
+
249
+ ```bash
250
+ # Find the Scrum board for this project
251
+ BOARD_ID=$(curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
252
+ "$JIRA_SITE/rest/agile/1.0/board?projectKeyOrId=<PROJECT_KEY>" \
253
+ | jq '.values[] | select(.type=="scrum") | .id')
254
+ ```
255
+
256
+ If a Scrum board exists, use it. If the project was just created with the
257
+ Scrum template, the board is created automatically.
258
+
259
+ Create the first sprint on the board:
260
+
261
+ ```bash
262
+ curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
263
+ -H "Content-Type: application/json" \
264
+ -X POST "$JIRA_SITE/rest/agile/1.0/sprint" \
265
+ -d '{
266
+ "name": "Sprint 1",
267
+ "originBoardId": '$BOARD_ID',
268
+ "goal": "<sprint goal from PRD>"
269
+ }'
270
+ ```
271
+
272
+ ### Jira Step 6: Create Branch Structure
273
+
274
+ Same as GitHub mode — git operations are independent of the issue tracker.
275
+ Create `development` and `release/<epic-slug>` branches.
276
+
277
+ ### Jira Step 7: Generate Summary
278
+
279
+ Same format as GitHub mode, replacing GitHub-specific links with Jira URLs:
280
+ - Project board: `$JIRA_SITE/jira/software/projects/<KEY>/boards/<id>`
281
+ - Epics: `$JIRA_SITE/browse/<EPIC-KEY>`
282
+
283
+ ---
284
+
285
+ ## Trello Scaffold Procedure
286
+
287
+ When `scaffolding: "trello"`, use the Trello REST API to create lists (epics),
288
+ cards (stories), and labels. Refer to `../shared/references/PROVIDERS.md` for
289
+ all API calls.
290
+
291
+ ### Trello Step 1: Parse the PRD
292
+
293
+ Same as Local Step 1 / GitHub Step 1.
294
+
295
+ ### Trello Step 2: Ensure Board Exists
296
+
297
+ Read `trello.board_id` from `../shared/config.json`.
298
+
299
+ **If the ID is empty or not set**, create the board:
300
+
301
+ ```bash
302
+ # Create a new board with no default lists (we'll create our own)
303
+ BOARD_ID=$(curl -s -X POST "https://api.trello.com/1/boards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
304
+ -d "name=<Project Name>&defaultLists=false" | jq -r '.id')
305
+ ```
306
+
307
+ After creation, save the board ID back to `../shared/config.json` under
308
+ `trello.board_id` so subsequent skills don't need to create it again.
309
+
310
+ **If the ID is set**, check for existing lists:
311
+
312
+ ```bash
313
+ curl -s "https://api.trello.com/1/boards/<board-id>/lists?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&filter=open"
314
+ ```
315
+
316
+ If lists exist, present options to add to existing or create new (same UX as
317
+ GitHub mode).
318
+
319
+ ### Trello Step 3: Create Labels
320
+
321
+ Trello has a fixed color palette. Map priority and executor labels:
322
+
323
+ ```bash
324
+ # Create labels on the board
325
+ curl -s -X POST "https://api.trello.com/1/boards/<board-id>/labels?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
326
+ -d "name=executor:claude&color=blue"
327
+ curl -s -X POST "https://api.trello.com/1/boards/<board-id>/labels?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
328
+ -d "name=executor:human&color=yellow"
329
+ curl -s -X POST "https://api.trello.com/1/boards/<board-id>/labels?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
330
+ -d "name=P0-critical&color=red"
331
+ curl -s -X POST "https://api.trello.com/1/boards/<board-id>/labels?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
332
+ -d "name=P1-high&color=orange"
333
+ # ... etc
334
+ ```
335
+
336
+ ### Trello Step 4: Create Epic Lists
337
+
338
+ Create one list per epic. Position Backlog and Done lists at the edges:
339
+
340
+ ```bash
341
+ curl -s -X POST "https://api.trello.com/1/lists?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
342
+ -d "name=<Epic Name>&idBoard=<board-id>&pos=bottom"
343
+ ```
344
+
345
+ ### Trello Step 5: Create Story Cards
346
+
347
+ Create a card per story in the appropriate epic list:
348
+
349
+ ```bash
350
+ curl -s -X POST "https://api.trello.com/1/cards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
351
+ -d "name=<title>&desc=<body with acceptance criteria>&idList=<epic-list-id>&idLabels=<label-ids>"
352
+ ```
353
+
354
+ Story points: If custom fields power-up is enabled, set via:
355
+ ```bash
356
+ curl -s -X PUT "https://api.trello.com/1/cards/<card-id>/customField/<field-id>/item?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
357
+ -H "Content-Type: application/json" \
358
+ -d '{"value":{"number":"<points>"}}'
359
+ ```
360
+
361
+ Otherwise, prefix the card title: `[5] <Story title>`.
362
+
363
+ ### Trello Step 6: Create Branch Structure
364
+
365
+ Same as GitHub mode — git operations are independent of the issue tracker.
366
+
367
+ ### Trello Step 7: Generate Summary
368
+
369
+ Same format as GitHub mode, replacing links with Trello URLs.
370
+
371
+ **Trello limitations note:** Trello has no native sprints, dependencies, or
372
+ milestone progress tracking. These are managed via list naming conventions
373
+ and card descriptions. For full sprint lifecycle support, consider GitHub or
374
+ Jira mode.
375
+
376
+ ---
377
+
378
+ ## GitHub Scaffold Procedure
379
+
25
380
  Execute these steps in order:
26
381
 
27
382
  ### Step 0: Detect Existing Project Context
@@ -109,6 +464,11 @@ gh label create "P0-critical" --color "b60205" --repo <owner/repo>
109
464
  gh label create "P1-high" --color "d93f0b" --repo <owner/repo>
110
465
  gh label create "P2-medium" --color "fbca04" --repo <owner/repo>
111
466
  gh label create "P3-low" --color "0e8a16" --repo <owner/repo>
467
+
468
+ # Persona labels
469
+ gh label create "persona:ops" --color "1D76DB" --description "Ops/infra posture — idempotency, rollback, least privilege" --repo <owner/repo> 2>/dev/null
470
+ gh label create "persona:research" --color "D4C5F9" --description "Research posture — produce a document, not code" --repo <owner/repo> 2>/dev/null
471
+ gh label create "source:review" --color "BFDADC" --description "Issue created from automated review findings" --repo <owner/repo> 2>/dev/null
112
472
  ```
113
473
 
114
474
  ### Step 3: Create Epics (Milestones + Labels)
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: spec
3
+ description: Transform a rough prompt into a comprehensive specification document. Analyzes requirements, extracts key information, and produces a structured spec saved to .claude-scrum-skill/specs/. Use when planning a new feature or task before implementation.
4
+ ---
5
+
6
+ # Spec Sheet Creator
7
+
8
+ This skill takes a user's rough prompt and transforms it into a comprehensive specification document following best practices for Claude Code development. ultrathink
9
+
10
+ ## Input
11
+
12
+ The following user input will be processed:
13
+
14
+ $ARGUMENTS
15
+
16
+ ## Instructions
17
+
18
+ As Claude Code, your task is to transform the user's rough prompt into a comprehensive and well-structured specification document. Follow these steps:
19
+
20
+ 1. **Analyze the Prompt**: Carefully examine the user's input to understand the core requirements, constraints, and goals.
21
+
22
+ 2. **Extract Key Information**:
23
+ - Core functionality/features
24
+ - User requirements and expectations
25
+ - Technical constraints or requirements
26
+ - Success criteria or acceptance criteria
27
+ - Potential edge cases or challenges
28
+
29
+ 3. **Structure the Specification**: Create a comprehensive spec sheet using the template in `templates/spec-template.md` in this skill's directory.
30
+
31
+ 4. **Enhance Clarity**: For each section:
32
+ - Use clear, specific language
33
+ - Prioritize requirements when possible
34
+ - Provide examples to illustrate complex points
35
+ - Highlight potential challenges or decisions needing attention
36
+
37
+ 5. **Format for Comprehension**:
38
+ - Use markdown formatting for readability
39
+ - Include tables and lists where appropriate
40
+ - Add code examples if they help illustrate requirements
41
+ - Structure the document with clear headings and subheadings
42
+
43
+ ## Filename Convention
44
+
45
+ Read the specs output path from `../shared/config.json` (key: `paths.specs`,
46
+ default: `.claude-scrum-skill/specs`).
47
+
48
+ Save the output spec to `<specs-path>/YYYYMMDD_hhmmss_{name}.md` where the timestamp is in YYYYMMDD*hhmmss format in **US Pacific Time (PST/PDT)** and `{name}` is a snake_case name that succinctly describes the feature or project. To get the current Pacific time, run `TZ='America/Los_Angeles' date '+%Y%m%d*%H%M%S'` via the Bash tool.
49
+
50
+ ## Guidelines for Success
51
+
52
+ 1. **Be Specific**: Avoid vague requirements; provide concrete details.
53
+ 2. **Be Comprehensive**: Cover all aspects of the feature without assuming implicit knowledge.
54
+ 3. **Be Practical**: Ensure the spec is implementable with the existing codebase.
55
+ 4. **Be Forward-Thinking**: Consider future extensions and maintenance.
56
+ 5. **Be Clear**: Use unambiguous language that prevents misinterpretation.
57
+
58
+ The goal is to produce a specification document that serves as a complete blueprint for implementing the requested feature with minimal ambiguity or need for clarification.
59
+
60
+ Do not modify any files in the codebase other than creating the specification document.
@@ -0,0 +1,63 @@
1
+ # [Feature/Project Name] Specification
2
+
3
+ ## Overview
4
+
5
+ [Brief summary of what we're building]
6
+
7
+ ## Objectives
8
+
9
+ - [Primary objective]
10
+ - [Secondary objectives]
11
+
12
+ ## Requirements
13
+
14
+ ### Functional Requirements
15
+
16
+ - [Requirement 1]
17
+ - [Requirement 2]
18
+ ...
19
+
20
+ ### Non-Functional Requirements
21
+
22
+ - [Performance requirement]
23
+ - [Security requirement]
24
+ ...
25
+
26
+ ## Technical Specifications
27
+
28
+ - **Language/Framework**: [Specified technology]
29
+ - **Dependencies**: [Required libraries/tools]
30
+ - **Key Components**: [Major code components]
31
+ - **Data Structures**: [Important data structures]
32
+ - **APIs/Interfaces**: [External or internal APIs]
33
+
34
+ ## User Experience
35
+
36
+ - [Description of user interactions]
37
+ - [Behavior specifications]
38
+ - [UI/UX guidelines if applicable]
39
+
40
+ ## Architecture
41
+
42
+ - [Component diagram or description]
43
+ - [Data flow]
44
+ - [System boundaries]
45
+ - [Integration points]
46
+
47
+ ## Implementation Plan
48
+
49
+ 1. [Step 1]
50
+ 2. [Step 2]
51
+ ...
52
+
53
+ ## Testing Strategy
54
+
55
+ - [Unit test approach]
56
+ - [Integration test approach]
57
+ - [Test cases for key functionality]
58
+
59
+ ## Future Considerations
60
+
61
+ - [Potential extensions]
62
+ - [Scalability considerations]
63
+ - [Long-term maintenance notes]
@@ -0,0 +1,14 @@
1
+ {
2
+ "scaffolding": "local",
3
+ "paths": {
4
+ "specs": ".claude-scrum-skill/specs",
5
+ "adr": ".claude-scrum-skill/adr",
6
+ "backlog": ".claude-scrum-skill/backlog"
7
+ },
8
+ "jira": {
9
+ "project_key": ""
10
+ },
11
+ "trello": {
12
+ "board_id": ""
13
+ }
14
+ }
@@ -66,6 +66,22 @@ Create these views on every project board:
66
66
  - `P2-medium` — Important but not blocking
67
67
  - `P3-low` — Nice-to-have, polish, optimization
68
68
 
69
+ ### Persona Labels
70
+
71
+ Persona labels control the posture of the subagent that executes the story
72
+ during orchestration. See `PERSONAS.md` for full preamble definitions.
73
+
74
+ | Label | Color | Meaning |
75
+ |---|---|---|
76
+ | *(no persona label)* | — | Default `impl` — standard implementation posture |
77
+ | `persona:ops` | `#1D76DB` | Ops/infra — emphasizes idempotency, rollback, blast radius |
78
+ | `persona:research` | `#D4C5F9` | Research — output is a document (ADR/RFC), not code |
79
+ | `source:review` | `#BFDADC` | Issue was created from automated review findings |
80
+
81
+ Persona labels are optional. Stories without a persona label use the `impl`
82
+ posture. The `review` persona is not assigned to stories — it runs
83
+ automatically as a release gate.
84
+
69
85
  ## Branch Strategy
70
86
 
71
87
  ### Branch Naming