@hustle-together/api-dev-tools 3.10.1 → 3.12.1

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 (178) hide show
  1. package/.claude/agents/code-reviewer.md +170 -0
  2. package/.claude/agents/docs-generator.md +80 -0
  3. package/.claude/agents/implementation-reviewer.md +119 -0
  4. package/.claude/agents/parallel-researcher.md +52 -0
  5. package/.claude/agents/research-validator.md +116 -0
  6. package/.claude/agents/schema-generator.md +70 -0
  7. package/.claude/agents/test-writer.md +104 -0
  8. package/.claude/api-dev-state.json +331 -0
  9. package/.claude/commands/README.md +196 -0
  10. package/.claude/commands/add-command.md +212 -0
  11. package/.claude/commands/api-create.md +510 -0
  12. package/.claude/commands/api-env.md +51 -0
  13. package/.claude/commands/api-interview.md +344 -0
  14. package/.claude/commands/api-research.md +357 -0
  15. package/.claude/commands/api-status.md +279 -0
  16. package/.claude/commands/api-verify.md +232 -0
  17. package/.claude/commands/beepboop.md +96 -0
  18. package/.claude/commands/busycommit.md +111 -0
  19. package/.claude/commands/commit.md +82 -0
  20. package/.claude/commands/cycle.md +137 -0
  21. package/.claude/commands/gap.md +85 -0
  22. package/.claude/commands/green.md +137 -0
  23. package/.claude/commands/issue.md +187 -0
  24. package/.claude/commands/ntfy-setup.md +91 -0
  25. package/.claude/commands/ntfy-test.md +74 -0
  26. package/.claude/commands/plan.md +167 -0
  27. package/.claude/commands/pr.md +121 -0
  28. package/.claude/commands/publish.md +40 -0
  29. package/.claude/commands/red.md +137 -0
  30. package/.claude/commands/refactor.md +137 -0
  31. package/.claude/commands/spike.md +137 -0
  32. package/.claude/commands/summarize.md +93 -0
  33. package/.claude/commands/tdd.md +139 -0
  34. package/.claude/commands/worktree-add.md +307 -0
  35. package/.claude/commands/worktree-cleanup.md +275 -0
  36. package/.claude/hooks/api-workflow-check.py +227 -0
  37. package/.claude/hooks/enforce-deep-research.py +185 -0
  38. package/.claude/hooks/enforce-disambiguation.py +155 -0
  39. package/.claude/hooks/enforce-documentation.py +192 -0
  40. package/.claude/hooks/enforce-environment.py +253 -0
  41. package/.claude/hooks/enforce-external-research.py +328 -0
  42. package/.claude/hooks/enforce-interview.py +421 -0
  43. package/.claude/hooks/enforce-refactor.py +189 -0
  44. package/.claude/hooks/enforce-research.py +159 -0
  45. package/.claude/hooks/enforce-schema.py +186 -0
  46. package/.claude/hooks/enforce-scope.py +160 -0
  47. package/.claude/hooks/enforce-tdd-red.py +250 -0
  48. package/.claude/hooks/enforce-verify.py +186 -0
  49. package/.claude/hooks/periodic-reground.py +154 -0
  50. package/.claude/hooks/session-startup.py +151 -0
  51. package/.claude/hooks/track-tool-use.py +626 -0
  52. package/.claude/hooks/verify-after-green.py +282 -0
  53. package/.claude/hooks/verify-implementation.py +225 -0
  54. package/.claude/research/index.json +6 -0
  55. package/.claude/settings.json +144 -0
  56. package/.claude/settings.local.json +12 -0
  57. package/.claude-plugin/marketplace.json +103 -0
  58. package/.skills/README.md +293 -0
  59. package/.skills/_shared/convert-commands.py +192 -0
  60. package/.skills/_shared/hooks/api-workflow-check.py +227 -0
  61. package/.skills/_shared/hooks/enforce-deep-research.py +185 -0
  62. package/.skills/_shared/hooks/enforce-disambiguation.py +155 -0
  63. package/.skills/_shared/hooks/enforce-documentation.py +192 -0
  64. package/.skills/_shared/hooks/enforce-environment.py +253 -0
  65. package/.skills/_shared/hooks/enforce-external-research.py +328 -0
  66. package/.skills/_shared/hooks/enforce-interview.py +421 -0
  67. package/.skills/_shared/hooks/enforce-refactor.py +189 -0
  68. package/.skills/_shared/hooks/enforce-research.py +159 -0
  69. package/.skills/_shared/hooks/enforce-schema.py +186 -0
  70. package/.skills/_shared/hooks/enforce-scope.py +160 -0
  71. package/.skills/_shared/hooks/enforce-tdd-red.py +250 -0
  72. package/.skills/_shared/hooks/enforce-verify.py +186 -0
  73. package/.skills/_shared/hooks/periodic-reground.py +154 -0
  74. package/.skills/_shared/hooks/session-startup.py +151 -0
  75. package/.skills/_shared/hooks/track-tool-use.py +626 -0
  76. package/.skills/_shared/hooks/verify-after-green.py +282 -0
  77. package/.skills/_shared/hooks/verify-implementation.py +225 -0
  78. package/.skills/_shared/install.sh +114 -0
  79. package/.skills/_shared/settings.json +93 -0
  80. package/.skills/add-command/SKILL.md +227 -0
  81. package/.skills/api-create/SKILL.md +623 -0
  82. package/.skills/api-env/SKILL.md +64 -0
  83. package/.skills/api-interview/SKILL.md +357 -0
  84. package/.skills/api-research/SKILL.md +370 -0
  85. package/.skills/api-status/SKILL.md +292 -0
  86. package/.skills/api-verify/SKILL.md +245 -0
  87. package/.skills/beepboop/SKILL.md +111 -0
  88. package/.skills/busycommit/SKILL.md +126 -0
  89. package/.skills/commit/SKILL.md +97 -0
  90. package/.skills/cycle/SKILL.md +152 -0
  91. package/.skills/gap/SKILL.md +100 -0
  92. package/.skills/green/SKILL.md +152 -0
  93. package/.skills/issue/SKILL.md +202 -0
  94. package/.skills/plan/SKILL.md +182 -0
  95. package/.skills/pr/SKILL.md +136 -0
  96. package/.skills/publish/SKILL.md +160 -0
  97. package/.skills/red/SKILL.md +152 -0
  98. package/.skills/refactor/SKILL.md +152 -0
  99. package/.skills/spike/SKILL.md +152 -0
  100. package/.skills/summarize/SKILL.md +108 -0
  101. package/.skills/tdd/SKILL.md +154 -0
  102. package/.skills/update-todos/SKILL.md +250 -0
  103. package/.skills/worktree-add/SKILL.md +322 -0
  104. package/.skills/worktree-cleanup/SKILL.md +290 -0
  105. package/CHANGELOG.md +115 -0
  106. package/README.md +161 -7101
  107. package/bin/cli.js +448 -805
  108. package/commands/README.md +66 -31
  109. package/commands/add-command.md +8 -5
  110. package/commands/beepboop.md +4 -5
  111. package/commands/busycommit.md +2 -3
  112. package/commands/commit.md +2 -3
  113. package/commands/cycle.md +2 -7
  114. package/commands/gap.md +2 -3
  115. package/commands/green.md +2 -7
  116. package/commands/hustle-api-continue.md +8 -5
  117. package/commands/hustle-api-create.md +70 -29
  118. package/commands/hustle-api-env.md +1 -0
  119. package/commands/hustle-api-interview.md +32 -19
  120. package/commands/hustle-api-research.md +47 -21
  121. package/commands/hustle-api-sessions.md +8 -7
  122. package/commands/hustle-api-status.md +21 -1
  123. package/commands/hustle-api-verify.md +14 -13
  124. package/commands/hustle-combine.md +488 -241
  125. package/commands/hustle-ui-create-page.md +113 -50
  126. package/commands/hustle-ui-create.md +179 -26
  127. package/commands/issue.md +3 -8
  128. package/commands/plan.md +2 -3
  129. package/commands/pr.md +2 -3
  130. package/commands/red.md +2 -7
  131. package/commands/refactor.md +2 -7
  132. package/commands/spike.md +2 -7
  133. package/commands/summarize.md +2 -3
  134. package/commands/tdd.md +2 -7
  135. package/commands/worktree-add.md +208 -216
  136. package/commands/worktree-cleanup.md +172 -178
  137. package/hooks/api-workflow-check.py +5 -3
  138. package/hooks/enforce-component-type-confirm.py +97 -0
  139. package/hooks/lib/__init__.py +1 -0
  140. package/hooks/lib/greptile.py +355 -0
  141. package/hooks/lib/ntfy.py +209 -0
  142. package/hooks/notify-input-needed.py +73 -0
  143. package/hooks/notify-phase-complete.py +90 -0
  144. package/hooks/run-code-review.py +246 -0
  145. package/hooks/track-token-usage.py +121 -0
  146. package/package.json +33 -12
  147. package/scripts/collect-test-results.ts +102 -77
  148. package/scripts/extract-parameters.ts +112 -70
  149. package/scripts/generate-test-manifest.ts +118 -77
  150. package/templates/.env.example +57 -0
  151. package/templates/BRAND_GUIDE.md +92 -52
  152. package/templates/CLAUDE-SECTION.md +40 -37
  153. package/templates/SPEC.json +186 -38
  154. package/templates/api-dev-state.json +33 -4
  155. package/templates/api-showcase/_components/APICard.tsx +22 -18
  156. package/templates/api-showcase/_components/APIModal.tsx +110 -64
  157. package/templates/api-showcase/_components/APIShowcase.tsx +53 -35
  158. package/templates/api-showcase/_components/APITester.tsx +128 -67
  159. package/templates/api-showcase/page.tsx +4 -4
  160. package/templates/api-test/page.tsx +51 -30
  161. package/templates/api-test/test-structure/route.ts +43 -34
  162. package/templates/component/Component.stories.tsx +41 -39
  163. package/templates/component/Component.test.tsx +96 -78
  164. package/templates/component/Component.tsx +63 -52
  165. package/templates/component/Component.types.ts +10 -6
  166. package/templates/component/Component.visual.spec.ts +170 -0
  167. package/templates/component/index.ts +2 -2
  168. package/templates/dev-tools/_components/DevToolsLanding.tsx +8 -8
  169. package/templates/dev-tools/page.tsx +4 -3
  170. package/templates/mcp-servers.json +30 -2
  171. package/templates/page/page.e2e.test.ts +56 -48
  172. package/templates/page/page.tsx +3 -3
  173. package/templates/shared/HeroHeader.tsx +16 -15
  174. package/templates/shared/index.ts +1 -1
  175. package/templates/ui-showcase/_components/PreviewCard.tsx +20 -20
  176. package/templates/ui-showcase/_components/PreviewModal.tsx +149 -108
  177. package/templates/ui-showcase/_components/UIShowcase.tsx +43 -35
  178. package/templates/ui-showcase/page.tsx +4 -4
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: api-env
3
+ description: Check required API keys and environment variables. Supports server env vars, NEXT_PUBLIC_ vars, and custom headers. Use before starting implementation. Keywords: environment, api-keys, configuration, setup, validation
4
+ license: MIT
5
+ compatibility: Requires Claude Code with MCP servers (Context7, GitHub), Python 3.9+ for hooks, pnpm 10.11.0+
6
+ metadata:
7
+ version: "3.0.0"
8
+ category: "development"
9
+ tags: ['environment', 'api-keys', 'configuration', 'setup']
10
+ author: "Hustle Together"
11
+ allowed-tools: WebSearch WebFetch mcp__context7 mcp__github AskUserQuestion Read Write Edit Bash TodoWrite
12
+ ---
13
+
14
+ # API Environment - Check API Keys & Configuration
15
+
16
+ **Usage:** `/api-env [endpoint-name]`
17
+
18
+ **Purpose:** Quick check for required API keys and environment setup before implementation.
19
+
20
+ ## What This Checks
21
+
22
+ 1. **Reads endpoint documentation** to identify required services
23
+ 2. **Checks .env.local** for API keys
24
+ 3. **Verifies .env.example** has templates
25
+ 4. **Reports missing keys** with setup instructions
26
+
27
+ ## Output
28
+
29
+ ```
30
+ 🔑 Environment Check: [endpoint-name]
31
+
32
+ Required API Keys:
33
+ ✅ OPENAI_API_KEY (found)
34
+ ❌ FIRECRAWL_API_KEY (missing)
35
+
36
+ Action Required:
37
+ 1. Get key from https://firecrawl.dev
38
+ 2. Add to .env.local: FIRECRAWL_API_KEY=fc-...
39
+ 3. Add to .env.example template
40
+
41
+ Status: BLOCKED - Cannot proceed without FIRECRAWL_API_KEY
42
+ ```
43
+
44
+ ## Usage in Workflow
45
+
46
+ ```bash
47
+ # Before starting implementation
48
+ /api-interview generate-css
49
+ /api-research firecrawl
50
+ /api-env generate-css ← Check keys
51
+ /red ← Start TDD if ready
52
+ ```
53
+
54
+ <claude-commands-template>
55
+ ## API Key Support
56
+
57
+ The project supports three methods:
58
+
59
+ 1. Server env: `OPENAI_API_KEY=sk-...`
60
+ 2. Client env: `NEXT_PUBLIC_OPENAI_API_KEY=sk-...`
61
+ 3. Custom headers: `X-OpenAI-Key: sk-...`
62
+
63
+ Check src/lib/api-keys.ts for implementation.
64
+ </claude-commands-template>
@@ -0,0 +1,357 @@
1
+ ---
2
+ name: api-interview
3
+ description: Structured interview for API requirements gathering. Questions generated FROM research findings, not templates. Use when you need to understand API parameter preferences, error handling, formats, and user decisions. Keywords: interview, requirements, api, questions, research, decisions
4
+ license: MIT
5
+ compatibility: Requires Claude Code with MCP servers (Context7, GitHub), Python 3.9+ for hooks, pnpm 10.11.0+
6
+ metadata:
7
+ version: "3.0.0"
8
+ category: "development"
9
+ tags: ['api', 'interview', 'requirements', 'research']
10
+ author: "Hustle Together"
11
+ allowed-tools: WebSearch WebFetch mcp__context7 mcp__github AskUserQuestion Read Write Edit Bash TodoWrite
12
+ ---
13
+
14
+ # API Interview - Research-Driven Dynamic Discovery v3.0
15
+
16
+ **Usage:** `/api-interview [endpoint-name]`
17
+
18
+ **Purpose:** Conduct structured interview where questions are GENERATED FROM research findings, not generic templates. Every question is specific to the discovered API capabilities.
19
+
20
+ ## Key Principle: Questions FROM Research
21
+
22
+ **OLD WAY (Generic Templates):**
23
+
24
+ ```
25
+ "Which AI provider should this endpoint support?"
26
+ - OpenAI
27
+ - Anthropic
28
+ - Google
29
+ ```
30
+
31
+ **NEW WAY (From Research):**
32
+
33
+ ```
34
+ Based on research, Brandfetch API has 7 parameters:
35
+
36
+ 1. DOMAIN (required) - string
37
+ → No question needed (always required)
38
+
39
+ 2. FORMAT: ["json", "svg", "png", "raw"]
40
+ Q: Which formats do you need?
41
+ [x] json [x] svg [x] png [ ] raw
42
+
43
+ 3. QUALITY: 1-100 (continuous range)
44
+ Q: How should we TEST this continuous parameter?
45
+ [ ] All values (100 tests)
46
+ [x] Boundary (1, 50, 100)
47
+ [ ] Sample (1, 25, 50, 75, 100)
48
+ [ ] Custom: ____
49
+ ```
50
+
51
+ ## Interview Flow
52
+
53
+ ### PREREQUISITE - Research Must Be Complete (Phase 3)
54
+
55
+ **Interview is BLOCKED until research is done.**
56
+
57
+ The interview READS from the research findings:
58
+
59
+ ```
60
+ State file shows:
61
+ research_initial.status = "complete"
62
+ research_initial.sources = [...]
63
+
64
+ Discovered parameters:
65
+ - 5 required parameters
66
+ - 12 optional parameters
67
+ - 3 enum types
68
+ - 2 continuous ranges
69
+ ```
70
+
71
+ ### Parameter-Based Questions
72
+
73
+ For each discovered parameter, generate an appropriate question:
74
+
75
+ #### Required Parameters (Confirmation Only)
76
+
77
+ ```
78
+ ┌────────────────────────────────────────────────────────────┐
79
+ │ REQUIRED PARAMETERS │
80
+ │ │
81
+ │ These parameters are required by the API: │
82
+ │ │
83
+ │ 1. domain (string) - The domain to fetch brand data for │
84
+ │ 2. apiKey (string) - Your Brandfetch API key │
85
+ │ │
86
+ │ Confirm these are understood? [Y/n] │
87
+ └────────────────────────────────────────────────────────────┘
88
+ ```
89
+
90
+ #### Enum Parameters (Multi-Select)
91
+
92
+ ```
93
+ ┌────────────────────────────────────────────────────────────┐
94
+ │ FORMAT PARAMETER │
95
+ │ │
96
+ │ Research found these format options: │
97
+ │ │
98
+ │ [x] json - Structured JSON response │
99
+ │ [x] svg - Vector logo format │
100
+ │ [x] png - Raster logo format │
101
+ │ [ ] raw - Raw API response (advanced) │
102
+ │ │
103
+ │ Which formats should we support? │
104
+ └────────────────────────────────────────────────────────────┘
105
+ ```
106
+
107
+ #### Continuous Parameters (Test Strategy)
108
+
109
+ ```
110
+ ┌────────────────────────────────────────────────────────────┐
111
+ │ QUALITY PARAMETER │
112
+ │ │
113
+ │ Research found: quality is a continuous range 1-100 │
114
+ │ │
115
+ │ How should we TEST this parameter? │
116
+ │ │
117
+ │ [ ] All values (100 tests - comprehensive but slow) │
118
+ │ [x] Boundary (1, 50, 100 - 3 tests) │
119
+ │ [ ] Sample (1, 25, 50, 75, 100 - 5 tests) │
120
+ │ [ ] Custom values: ____ │
121
+ │ │
122
+ │ Your testing strategy affects test count. │
123
+ └────────────────────────────────────────────────────────────┘
124
+ ```
125
+
126
+ #### Boolean Parameters (Enable/Disable)
127
+
128
+ ```
129
+ ┌────────────────────────────────────────────────────────────┐
130
+ │ INCLUDE_COLORS PARAMETER │
131
+ │ │
132
+ │ Research found: includeColors (boolean, default: true) │
133
+ │ │
134
+ │ Should we expose this parameter? │
135
+ │ │
136
+ │ [x] Yes - Let users toggle it │
137
+ │ [ ] No - Use default (true) always │
138
+ │ [ ] Hardcode to: ____ │
139
+ └────────────────────────────────────────────────────────────┘
140
+ ```
141
+
142
+ ### Feature Questions
143
+
144
+ Based on discovered features, ask about priorities:
145
+
146
+ ```
147
+ ┌────────────────────────────────────────────────────────────┐
148
+ │ DISCOVERED FEATURES │
149
+ │ │
150
+ │ Research found these features. Mark priorities: │
151
+ │ │
152
+ │ [x] Basic brand fetch - Get logo, colors, fonts │
153
+ │ [x] Multiple formats - Support json, svg, png │
154
+ │ [ ] Webhook callbacks - Async notification (skip for now) │
155
+ │ [ ] Batch processing - Multiple domains at once │
156
+ │ [x] Error handling - Graceful degradation │
157
+ │ │
158
+ │ Confirm feature scope? │
159
+ └────────────────────────────────────────────────────────────┘
160
+ ```
161
+
162
+ ### Error Handling Questions
163
+
164
+ ```
165
+ ┌────────────────────────────────────────────────────────────┐
166
+ │ ERROR HANDLING │
167
+ │ │
168
+ │ Research found these error cases in the API: │
169
+ │ │
170
+ │ - 400: Invalid domain format │
171
+ │ - 401: Invalid API key │
172
+ │ - 404: Brand not found │
173
+ │ - 429: Rate limit exceeded │
174
+ │ - 500: Server error │
175
+ │ │
176
+ │ How should we handle rate limits (429)? │
177
+ │ │
178
+ │ [x] Retry with exponential backoff │
179
+ │ [ ] Return error immediately │
180
+ │ [ ] Queue and retry later │
181
+ │ [ ] Custom: ____ │
182
+ └────────────────────────────────────────────────────────────┘
183
+ ```
184
+
185
+ ### Deep Research Proposal (Phase 5)
186
+
187
+ After interview, propose additional research:
188
+
189
+ ```
190
+ ┌────────────────────────────────────────────────────────────┐
191
+ │ PROPOSED DEEP RESEARCH │
192
+ │ │
193
+ │ Based on your selections, I recommend researching: │
194
+ │ │
195
+ │ [x] Rate limiting behavior │
196
+ │ Reason: You selected "retry with backoff" │
197
+ │ │
198
+ │ [x] SVG optimization │
199
+ │ Reason: You selected SVG format │
200
+ │ │
201
+ │ [ ] Webhook format │
202
+ │ Reason: You skipped webhook feature │
203
+ │ │
204
+ │ Approve these searches? [Y] │
205
+ │ Add more: ____ │
206
+ │ Skip and proceed: [n] │
207
+ └────────────────────────────────────────────────────────────┘
208
+ ```
209
+
210
+ ## Question Types Summary
211
+
212
+ | Discovered Type | Question Type | Example |
213
+ | ---------------- | ----------------- | ------------------------------- |
214
+ | Required param | Confirmation | "Confirm these are understood?" |
215
+ | Enum param | Multi-select | "Which formats to support?" |
216
+ | Continuous range | Test strategy | "How to test 1-100 range?" |
217
+ | Boolean param | Enable/disable | "Expose this parameter?" |
218
+ | Optional feature | Priority | "Include this feature?" |
219
+ | Error case | Handling strategy | "How to handle rate limits?" |
220
+
221
+ ## State Tracking
222
+
223
+ All decisions are saved to `.claude/api-dev-state.json`:
224
+
225
+ ```json
226
+ {
227
+ "phases": {
228
+ "interview": {
229
+ "status": "complete",
230
+ "questions": [
231
+ {
232
+ "parameter": "format",
233
+ "type": "enum",
234
+ "options": ["json", "svg", "png", "raw"],
235
+ "selected": ["json", "svg", "png"],
236
+ "timestamp": "..."
237
+ },
238
+ {
239
+ "parameter": "quality",
240
+ "type": "continuous",
241
+ "range": [1, 100],
242
+ "test_strategy": "boundary",
243
+ "test_values": [1, 50, 100],
244
+ "timestamp": "..."
245
+ }
246
+ ],
247
+ "decisions": {
248
+ "format": ["json", "svg", "png"],
249
+ "quality_testing": "boundary",
250
+ "quality_values": [1, 50, 100],
251
+ "rate_limit_handling": "exponential_backoff"
252
+ }
253
+ }
254
+ }
255
+ }
256
+ ```
257
+
258
+ ## Output
259
+
260
+ Creates: `.claude/research/[api-name]/interview.md`
261
+
262
+ ````markdown
263
+ # Interview: [API Name]
264
+
265
+ **Date:** [current-date]
266
+ **Research Sources:** [list from research phase]
267
+ **Status:** Interview Complete
268
+
269
+ ## Discovered Parameters
270
+
271
+ | Parameter | Type | Required | Decision |
272
+ | --------- | ------ | -------- | ---------------------------- |
273
+ | domain | string | Yes | Always required |
274
+ | format | enum | No | json, svg, png |
275
+ | quality | 1-100 | No | Boundary testing: 1, 50, 100 |
276
+
277
+ ## Feature Scope
278
+
279
+ | Feature | Included | Reason |
280
+ | ---------------- | -------- | ------------------ |
281
+ | Basic fetch | Yes | Core functionality |
282
+ | Multiple formats | Yes | User selected |
283
+ | Webhooks | No | Deferred to v2 |
284
+
285
+ ## Test Strategy
286
+
287
+ - Enum parameters: Test all selected values
288
+ - Continuous parameters: Boundary testing (3 values)
289
+ - Error cases: 400, 401, 404, 429, 500
290
+
291
+ ## Decisions Summary
292
+
293
+ ```json
294
+ {
295
+ "format": ["json", "svg", "png"],
296
+ "quality_testing": "boundary",
297
+ "rate_limit_handling": "exponential_backoff"
298
+ }
299
+ ```
300
+ ````
301
+
302
+ ## Deep Research Approved
303
+
304
+ - Rate limiting behavior (for retry logic)
305
+ - SVG optimization (for SVG format)
306
+
307
+ ## Open Questions
308
+
309
+ [Any remaining ambiguities]
310
+
311
+ ```
312
+
313
+ ## Integration with Hooks
314
+
315
+ The `enforce-interview.py` hook injects these decisions when Claude tries to write implementation:
316
+
317
+ ```
318
+
319
+ INTERVIEW CONTEXT REMINDER
320
+
321
+ When implementing, remember user decisions:
322
+
323
+ - format: ["json", "svg", "png"] (raw excluded)
324
+ - quality: boundary testing (1, 50, 100)
325
+ - rate limits: exponential backoff
326
+
327
+ Source: .claude/api-dev-state.json
328
+
329
+ ```
330
+
331
+ <claude-commands-template>
332
+ ## Interview Guidelines v3.0
333
+
334
+ 1. **Questions FROM Research** - Never use generic templates
335
+ 2. **Parameter-Specific** - Each discovered param gets appropriate question
336
+ 3. **Test Strategy for Continuous** - Ask how to test ranges
337
+ 4. **Track Decisions** - Save everything to state file
338
+ 5. **Propose Deep Research** - Based on selections
339
+ 6. **No Skipped Parameters** - Every discovered param must have a decision
340
+
341
+ ## Question Generation Rules
342
+
343
+ | If research finds... | Then ask... |
344
+ |---------------------|-------------|
345
+ | Enum with 3+ options | Multi-select: which to support |
346
+ | Continuous range | Test strategy: all/boundary/sample |
347
+ | Boolean param | Enable/disable/hardcode |
348
+ | Optional feature | Include/exclude/defer |
349
+ | Error case | Handling strategy |
350
+
351
+ ## After Interview
352
+
353
+ - Decisions saved to state file
354
+ - Decisions injected during implementation via hook
355
+ - Consistency between interview answers and code enforced
356
+ </claude-commands-template>
357
+ ```