claude-cli-advanced-starter-pack 1.0.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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/OVERVIEW.md +597 -0
  3. package/README.md +439 -0
  4. package/bin/gtask.js +282 -0
  5. package/bin/postinstall.js +53 -0
  6. package/package.json +69 -0
  7. package/src/agents/phase-dev-templates.js +1011 -0
  8. package/src/agents/templates.js +668 -0
  9. package/src/analysis/checklist-parser.js +414 -0
  10. package/src/analysis/codebase.js +481 -0
  11. package/src/cli/menu.js +958 -0
  12. package/src/commands/claude-audit.js +1482 -0
  13. package/src/commands/claude-settings.js +2243 -0
  14. package/src/commands/create-agent.js +681 -0
  15. package/src/commands/create-command.js +337 -0
  16. package/src/commands/create-hook.js +262 -0
  17. package/src/commands/create-phase-dev/codebase-analyzer.js +813 -0
  18. package/src/commands/create-phase-dev/documentation-generator.js +352 -0
  19. package/src/commands/create-phase-dev/post-completion.js +404 -0
  20. package/src/commands/create-phase-dev/scale-calculator.js +344 -0
  21. package/src/commands/create-phase-dev/wizard.js +492 -0
  22. package/src/commands/create-phase-dev.js +481 -0
  23. package/src/commands/create-skill.js +313 -0
  24. package/src/commands/create.js +446 -0
  25. package/src/commands/decompose.js +392 -0
  26. package/src/commands/detect-tech-stack.js +768 -0
  27. package/src/commands/explore-mcp/claude-md-updater.js +252 -0
  28. package/src/commands/explore-mcp/mcp-installer.js +346 -0
  29. package/src/commands/explore-mcp/mcp-registry.js +438 -0
  30. package/src/commands/explore-mcp.js +638 -0
  31. package/src/commands/gtask-init.js +641 -0
  32. package/src/commands/help.js +128 -0
  33. package/src/commands/init.js +1890 -0
  34. package/src/commands/install.js +250 -0
  35. package/src/commands/list.js +116 -0
  36. package/src/commands/roadmap.js +750 -0
  37. package/src/commands/setup-wizard.js +482 -0
  38. package/src/commands/setup.js +351 -0
  39. package/src/commands/sync.js +534 -0
  40. package/src/commands/test-run.js +456 -0
  41. package/src/commands/test-setup.js +456 -0
  42. package/src/commands/validate.js +67 -0
  43. package/src/config/tech-stack.defaults.json +182 -0
  44. package/src/config/tech-stack.schema.json +502 -0
  45. package/src/github/client.js +359 -0
  46. package/src/index.js +84 -0
  47. package/src/templates/claude-command.js +244 -0
  48. package/src/templates/issue-body.js +284 -0
  49. package/src/testing/config.js +411 -0
  50. package/src/utils/template-engine.js +398 -0
  51. package/src/utils/validate-templates.js +223 -0
  52. package/src/utils.js +396 -0
  53. package/templates/commands/ccasp-setup.template.md +113 -0
  54. package/templates/commands/context-audit.template.md +97 -0
  55. package/templates/commands/create-task-list.template.md +382 -0
  56. package/templates/commands/deploy-full.template.md +261 -0
  57. package/templates/commands/github-task-start.template.md +99 -0
  58. package/templates/commands/github-update.template.md +69 -0
  59. package/templates/commands/happy-start.template.md +117 -0
  60. package/templates/commands/phase-track.template.md +142 -0
  61. package/templates/commands/tunnel-start.template.md +127 -0
  62. package/templates/commands/tunnel-stop.template.md +106 -0
  63. package/templates/hooks/context-guardian.template.js +173 -0
  64. package/templates/hooks/deployment-orchestrator.template.js +219 -0
  65. package/templates/hooks/github-progress-hook.template.js +197 -0
  66. package/templates/hooks/happy-checkpoint-manager.template.js +222 -0
  67. package/templates/hooks/phase-dev-enforcer.template.js +183 -0
@@ -0,0 +1,359 @@
1
+ /**
2
+ * GitHub CLI Wrapper
3
+ *
4
+ * Provides clean interface for gh CLI operations
5
+ */
6
+
7
+ import { execCommand, execAsync } from '../utils.js';
8
+ import chalk from 'chalk';
9
+
10
+ /**
11
+ * Check if gh CLI is authenticated
12
+ */
13
+ export function isAuthenticated() {
14
+ const result = execCommand('gh auth status');
15
+ return result.success;
16
+ }
17
+
18
+ /**
19
+ * Get current authenticated user
20
+ */
21
+ export function getCurrentUser() {
22
+ const result = execCommand('gh api user --jq ".login"');
23
+ if (result.success) {
24
+ return result.output;
25
+ }
26
+ return null;
27
+ }
28
+
29
+ /**
30
+ * List repositories for a user/org
31
+ */
32
+ export function listRepos(owner, options = {}) {
33
+ const { limit = 30, type = 'all' } = options;
34
+ const cmd = owner
35
+ ? `gh repo list ${owner} --limit ${limit} --json name,description,isPrivate`
36
+ : `gh repo list --limit ${limit} --json name,description,isPrivate`;
37
+
38
+ const result = execCommand(cmd);
39
+ if (result.success) {
40
+ try {
41
+ return JSON.parse(result.output);
42
+ } catch {
43
+ return [];
44
+ }
45
+ }
46
+ return [];
47
+ }
48
+
49
+ /**
50
+ * Check if repo exists and is accessible
51
+ */
52
+ export function repoExists(owner, repo) {
53
+ const result = execCommand(`gh repo view ${owner}/${repo} --json name`);
54
+ return result.success;
55
+ }
56
+
57
+ /**
58
+ * Get repository info
59
+ */
60
+ export function getRepoInfo(owner, repo) {
61
+ const result = execCommand(
62
+ `gh repo view ${owner}/${repo} --json name,description,isPrivate,defaultBranchRef`
63
+ );
64
+ if (result.success) {
65
+ try {
66
+ return JSON.parse(result.output);
67
+ } catch {
68
+ return null;
69
+ }
70
+ }
71
+ return null;
72
+ }
73
+
74
+ /**
75
+ * List GitHub Projects for a user/org
76
+ */
77
+ export function listProjects(owner) {
78
+ const result = execCommand(
79
+ `gh project list --owner ${owner} --format json`
80
+ );
81
+ if (result.success) {
82
+ try {
83
+ const data = JSON.parse(result.output);
84
+ return data.projects || [];
85
+ } catch {
86
+ return [];
87
+ }
88
+ }
89
+ return [];
90
+ }
91
+
92
+ /**
93
+ * Get project details
94
+ */
95
+ export function getProject(owner, projectNumber) {
96
+ const result = execCommand(
97
+ `gh project view ${projectNumber} --owner ${owner} --format json`
98
+ );
99
+ if (result.success) {
100
+ try {
101
+ return JSON.parse(result.output);
102
+ } catch {
103
+ return null;
104
+ }
105
+ }
106
+ return null;
107
+ }
108
+
109
+ /**
110
+ * List project fields
111
+ */
112
+ export function listProjectFields(owner, projectNumber) {
113
+ const result = execCommand(
114
+ `gh project field-list ${projectNumber} --owner ${owner} --format json`
115
+ );
116
+ if (result.success) {
117
+ try {
118
+ const data = JSON.parse(result.output);
119
+ return data.fields || [];
120
+ } catch {
121
+ return [];
122
+ }
123
+ }
124
+ return [];
125
+ }
126
+
127
+ /**
128
+ * Get field options for single-select fields via GraphQL
129
+ */
130
+ export function getFieldOptions(projectId, fieldId) {
131
+ const query = `
132
+ query($projectId: ID!) {
133
+ node(id: $projectId) {
134
+ ... on ProjectV2 {
135
+ field(name: "${fieldId}") {
136
+ ... on ProjectV2SingleSelectField {
137
+ name
138
+ options {
139
+ id
140
+ name
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+ `;
148
+
149
+ const result = execCommand(
150
+ `gh api graphql -f query='${query.replace(/\n/g, ' ')}' -F projectId="${projectId}"`
151
+ );
152
+
153
+ if (result.success) {
154
+ try {
155
+ const data = JSON.parse(result.output);
156
+ return data?.data?.node?.field?.options || [];
157
+ } catch {
158
+ return [];
159
+ }
160
+ }
161
+ return [];
162
+ }
163
+
164
+ /**
165
+ * Get all single-select field options for a project
166
+ */
167
+ export function getAllFieldOptions(projectId) {
168
+ const query = `
169
+ query($projectId: ID!) {
170
+ node(id: $projectId) {
171
+ ... on ProjectV2 {
172
+ fields(first: 50) {
173
+ nodes {
174
+ ... on ProjectV2SingleSelectField {
175
+ id
176
+ name
177
+ options {
178
+ id
179
+ name
180
+ }
181
+ }
182
+ ... on ProjectV2Field {
183
+ id
184
+ name
185
+ }
186
+ ... on ProjectV2IterationField {
187
+ id
188
+ name
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ }
195
+ `;
196
+
197
+ const escapedQuery = query.replace(/\n/g, ' ').replace(/"/g, '\\"');
198
+ const result = execCommand(
199
+ `gh api graphql -f query="${escapedQuery}" -F projectId="${projectId}"`
200
+ );
201
+
202
+ if (result.success) {
203
+ try {
204
+ const data = JSON.parse(result.output);
205
+ return data?.data?.node?.fields?.nodes || [];
206
+ } catch {
207
+ return [];
208
+ }
209
+ }
210
+ return [];
211
+ }
212
+
213
+ /**
214
+ * Create a GitHub issue
215
+ */
216
+ export async function createIssue(owner, repo, options) {
217
+ const { title, body, labels = [], assignees = [] } = options;
218
+
219
+ let cmd = `gh issue create --repo ${owner}/${repo}`;
220
+ cmd += ` --title "${title.replace(/"/g, '\\"')}"`;
221
+ cmd += ` --body "${body.replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`;
222
+
223
+ if (labels.length > 0) {
224
+ cmd += ` --label "${labels.join(',')}"`;
225
+ }
226
+
227
+ if (assignees.length > 0) {
228
+ cmd += ` --assignee "${assignees.join(',')}"`;
229
+ }
230
+
231
+ const result = execCommand(cmd);
232
+ if (result.success) {
233
+ // Extract issue URL from output
234
+ const urlMatch = result.output.match(
235
+ /https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+/
236
+ );
237
+ if (urlMatch) {
238
+ const issueNumber = urlMatch[0].split('/').pop();
239
+ return {
240
+ success: true,
241
+ url: urlMatch[0],
242
+ number: parseInt(issueNumber, 10),
243
+ };
244
+ }
245
+ }
246
+
247
+ return {
248
+ success: false,
249
+ error: result.error || result.stderr || 'Failed to create issue',
250
+ };
251
+ }
252
+
253
+ /**
254
+ * Add issue to project board
255
+ */
256
+ export function addIssueToProject(owner, projectNumber, issueUrl) {
257
+ const result = execCommand(
258
+ `gh project item-add ${projectNumber} --owner ${owner} --url "${issueUrl}"`
259
+ );
260
+ return result.success;
261
+ }
262
+
263
+ /**
264
+ * Get project item ID for an issue
265
+ */
266
+ export function getProjectItemId(owner, projectNumber, issueNumber) {
267
+ const result = execCommand(
268
+ `gh project item-list ${projectNumber} --owner ${owner} --format json`
269
+ );
270
+
271
+ if (result.success) {
272
+ try {
273
+ const data = JSON.parse(result.output);
274
+ const item = data.items?.find(
275
+ (i) => i.content?.number === issueNumber
276
+ );
277
+ return item?.id || null;
278
+ } catch {
279
+ return null;
280
+ }
281
+ }
282
+ return null;
283
+ }
284
+
285
+ /**
286
+ * Update project item field
287
+ */
288
+ export function updateProjectItemField(
289
+ projectId,
290
+ itemId,
291
+ fieldId,
292
+ value,
293
+ fieldType = 'text'
294
+ ) {
295
+ let cmd = `gh project item-edit --id "${itemId}" --project-id "${projectId}" --field-id "${fieldId}"`;
296
+
297
+ if (fieldType === 'single-select') {
298
+ cmd += ` --single-select-option-id "${value}"`;
299
+ } else if (fieldType === 'number') {
300
+ cmd += ` --number ${value}`;
301
+ } else {
302
+ cmd += ` --text "${value.replace(/"/g, '\\"')}"`;
303
+ }
304
+
305
+ const result = execCommand(cmd);
306
+ return result.success;
307
+ }
308
+
309
+ /**
310
+ * List issues for a repo
311
+ */
312
+ export function listIssues(owner, repo, options = {}) {
313
+ const { limit = 10, state = 'open', assignee } = options;
314
+
315
+ let cmd = `gh issue list --repo ${owner}/${repo} --limit ${limit} --state ${state} --json number,title,state,labels,createdAt,author`;
316
+
317
+ if (assignee) {
318
+ cmd += ` --assignee ${assignee}`;
319
+ }
320
+
321
+ const result = execCommand(cmd);
322
+ if (result.success) {
323
+ try {
324
+ return JSON.parse(result.output);
325
+ } catch {
326
+ return [];
327
+ }
328
+ }
329
+ return [];
330
+ }
331
+
332
+ /**
333
+ * Get issue details
334
+ */
335
+ export function getIssue(owner, repo, issueNumber) {
336
+ const result = execCommand(
337
+ `gh issue view ${issueNumber} --repo ${owner}/${repo} --json number,title,body,state,labels,assignees,createdAt,author`
338
+ );
339
+
340
+ if (result.success) {
341
+ try {
342
+ return JSON.parse(result.output);
343
+ } catch {
344
+ return null;
345
+ }
346
+ }
347
+ return null;
348
+ }
349
+
350
+ /**
351
+ * Add comment to issue
352
+ */
353
+ export function addIssueComment(owner, repo, issueNumber, body) {
354
+ const escapedBody = body.replace(/"/g, '\\"').replace(/\n/g, '\\n');
355
+ const result = execCommand(
356
+ `gh issue comment ${issueNumber} --repo ${owner}/${repo} --body "${escapedBody}"`
357
+ );
358
+ return result.success;
359
+ }
package/src/index.js ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Claude CLI Advanced Starter Pack - Main Export
3
+ *
4
+ * Platform-agnostic Claude Code enhancement toolkit with:
5
+ * - Tech stack auto-detection
6
+ * - Templated .claude file generation
7
+ * - GitHub Project Board integration
8
+ * - Advanced testing configuration
9
+ */
10
+
11
+ // CLI
12
+ export { showMainMenu, showHeader, showSuccess, showError } from './cli/menu.js';
13
+
14
+ // Commands
15
+ export { runSetup } from './commands/setup.js';
16
+ export { runCreate } from './commands/create.js';
17
+ export { runList } from './commands/list.js';
18
+ export { runInstall } from './commands/install.js';
19
+ export { showHelp } from './commands/help.js';
20
+ export { runClaudeSettings } from './commands/claude-settings.js';
21
+ export { runGtaskInit } from './commands/gtask-init.js';
22
+ export { detectTechStack, runDetection } from './commands/detect-tech-stack.js';
23
+ export {
24
+ runClaudeAudit,
25
+ showClaudeAuditMenu,
26
+ ENHANCEMENT_TEMPLATES,
27
+ runEnhancement,
28
+ } from './commands/claude-audit.js';
29
+ export { runSetupWizard, generateSlashCommand } from './commands/setup-wizard.js';
30
+
31
+ // Template Engine
32
+ export {
33
+ replacePlaceholders,
34
+ processFile,
35
+ processDirectory,
36
+ generateTechStack,
37
+ flattenObject,
38
+ extractPlaceholders,
39
+ validateTechStack,
40
+ } from './utils/template-engine.js';
41
+
42
+ // GitHub client
43
+ export {
44
+ isAuthenticated,
45
+ getCurrentUser,
46
+ listRepos,
47
+ repoExists,
48
+ listProjects,
49
+ getProject,
50
+ listProjectFields,
51
+ createIssue,
52
+ addIssueToProject,
53
+ listIssues,
54
+ } from './github/client.js';
55
+
56
+ // Codebase analysis
57
+ export {
58
+ searchFiles,
59
+ searchContent,
60
+ findDefinitions,
61
+ extractSnippet,
62
+ analyzeForIssue,
63
+ detectProjectType,
64
+ } from './analysis/codebase.js';
65
+
66
+ // Templates
67
+ export {
68
+ generateIssueBody,
69
+ generateSimpleIssueBody,
70
+ suggestAcceptanceCriteria,
71
+ } from './templates/issue-body.js';
72
+
73
+ export {
74
+ generateClaudeCommand,
75
+ generateMinimalClaudeCommand,
76
+ } from './templates/claude-command.js';
77
+
78
+ // Utils
79
+ export {
80
+ getVersion,
81
+ checkPrerequisites,
82
+ loadConfigSync,
83
+ execCommand,
84
+ } from './utils.js';
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Claude Code Command Template Generator
3
+ *
4
+ * Generates a .claude/commands/ file that integrates with GitHub Task Kit
5
+ */
6
+
7
+ /**
8
+ * Generate Claude Code command file content
9
+ */
10
+ export function generateClaudeCommand(config) {
11
+ const { owner, repo, projectNumber, projectId, fieldIds, statusOptions } = config;
12
+
13
+ return `---
14
+ description: Create tracked GitHub issue with comprehensive metadata and codebase analysis
15
+ type: project
16
+ complexity: medium
17
+ model: claude-sonnet-4-5-20250929
18
+ ---
19
+
20
+ # GitHub Create Task
21
+ # QUICK: Create comprehensive GitHub issue with rich documentation
22
+
23
+ Create a fully documented GitHub issue with codebase analysis, references, and testing workflow.
24
+
25
+ ## Overview
26
+
27
+ This command creates a comprehensive, well-documented GitHub issue with:
28
+ - Detailed problem statement and acceptance criteria
29
+ - Automatic codebase analysis with file/line references
30
+ - Reference documentation links
31
+ - Recommended approach with todo checklist
32
+
33
+ **Project**: ${owner}/${repo} (Project #${projectNumber})
34
+
35
+ ---
36
+
37
+ ## Configuration
38
+
39
+ \`\`\`yaml
40
+ # Auto-generated by GitHub Task Kit
41
+ project_board:
42
+ owner: "${owner}"
43
+ repo: "${repo}"
44
+ project_number: ${projectNumber}
45
+ project_id: "${projectId}"
46
+
47
+ field_ids:
48
+ status: "${fieldIds?.status || 'CONFIGURE_ME'}"
49
+ priority: "${fieldIds?.priority || 'CONFIGURE_ME'}"
50
+ qa: "${fieldIds?.qa || ''}"
51
+
52
+ status_options:
53
+ todo: "${statusOptions?.todo || 'CONFIGURE_ME'}"
54
+ in_progress: "${statusOptions?.in_progress || 'CONFIGURE_ME'}"
55
+ done: "${statusOptions?.done || 'CONFIGURE_ME'}"
56
+ \`\`\`
57
+
58
+ ---
59
+
60
+ ## Workflow
61
+
62
+ ### PHASE 1: Gather Information
63
+
64
+ Use AskUserQuestion to collect:
65
+
66
+ 1. **Issue Title** - Clear, concise description
67
+ 2. **Issue Description** - Problem statement, expected vs actual behavior
68
+ 3. **Labels** - Type (bug, feature, refactor), Stack (frontend, backend)
69
+ 4. **Priority** - P0-Critical, P1-High, P2-Medium, P3-Low
70
+
71
+ ### PHASE 2: Codebase Analysis
72
+
73
+ **Deploy Explore Agent** to gather:
74
+
75
+ 1. Find relevant files matching the issue domain
76
+ 2. Locate key functions with line numbers
77
+ 3. Identify patterns to follow
78
+ 4. Gather code snippets
79
+
80
+ ### PHASE 3: Create Issue
81
+
82
+ \`\`\`bash
83
+ # Create the issue
84
+ ISSUE_URL=$(gh issue create --repo ${owner}/${repo} \\
85
+ --title "[TITLE]" \\
86
+ --body "[GENERATED_BODY]" \\
87
+ --label "[LABELS]" \\
88
+ --assignee "${owner}")
89
+
90
+ # Extract issue number
91
+ ISSUE_NUM=$(echo "$ISSUE_URL" | grep -oP '\\d+$')
92
+
93
+ # Add to project board
94
+ gh project item-add ${projectNumber} --owner ${owner} --url "$ISSUE_URL"
95
+
96
+ echo "Created: Issue #$ISSUE_NUM"
97
+ echo "URL: $ISSUE_URL"
98
+ \`\`\`
99
+
100
+ ### PHASE 4: Update Project Board Fields
101
+
102
+ \`\`\`bash
103
+ # Get item ID
104
+ ITEM_ID=$(gh project item-list ${projectNumber} --owner ${owner} --format json | jq -r ".items[] | select(.content.number == $ISSUE_NUM) | .id")
105
+
106
+ # Set Status to Todo
107
+ gh project item-edit --id "$ITEM_ID" \\
108
+ --field-id ${fieldIds?.status || 'STATUS_FIELD_ID'} \\
109
+ --project-id ${projectId} \\
110
+ --single-select-option-id "${statusOptions?.todo || 'TODO_OPTION_ID'}"
111
+
112
+ # Set Priority (if field exists)
113
+ # gh project item-edit --id "$ITEM_ID" \\
114
+ # --field-id ${fieldIds?.priority || 'PRIORITY_FIELD_ID'} \\
115
+ # --project-id ${projectId} \\
116
+ # --single-select-option-id "[PRIORITY_OPTION_ID]"
117
+ \`\`\`
118
+
119
+ ---
120
+
121
+ ## Issue Body Template
122
+
123
+ The generated issue body includes:
124
+
125
+ \`\`\`markdown
126
+ ## Problem Statement
127
+
128
+ [Clear description of the issue]
129
+
130
+ ## Expected vs Actual Behavior
131
+
132
+ **Expected**: [What should happen]
133
+ **Actual**: [What currently happens]
134
+
135
+ ## Acceptance Criteria
136
+
137
+ - [ ] Criterion 1
138
+ - [ ] Criterion 2
139
+
140
+ ---
141
+
142
+ ## Code Analysis
143
+
144
+ ### Relevant Files & Functions
145
+
146
+ | File | Line | Function/Component | Purpose |
147
+ |------|------|-------------------|---------|
148
+ | [file] | [line] | [function] | [purpose] |
149
+
150
+ ### Patterns to Follow
151
+
152
+ - [Pattern from codebase analysis]
153
+
154
+ ---
155
+
156
+ ## Recommended Approach
157
+
158
+ ### Todo List
159
+
160
+ - [ ] **Step 1**: [Task]
161
+ - [ ] **Step 2**: [Task]
162
+
163
+ ---
164
+
165
+ *Created by GitHub Task Kit*
166
+ \`\`\`
167
+
168
+ ---
169
+
170
+ ## Labels Reference
171
+
172
+ **Type**:
173
+ - \`bug\` - Something isn't working
174
+ - \`feature\` - New functionality
175
+ - \`feature-update\` - Enhancement to existing feature
176
+ - \`refactor\` - Code improvement without behavior change
177
+ - \`documentation\` - Documentation only
178
+
179
+ **Stack**:
180
+ - \`frontend\` - UI/client changes
181
+ - \`backend\` - API/server changes
182
+
183
+ **Priority**:
184
+ - \`P0-Critical\` - Production broken
185
+ - \`P1-High\` - Major feature affected
186
+ - \`P2-Medium\` - Minor bug or new feature
187
+ - \`P3-Low\` - Nice to have
188
+
189
+ ---
190
+
191
+ ## Quick Commands
192
+
193
+ \`\`\`bash
194
+ # After creating issue, start working
195
+ git pull origin main
196
+
197
+ # When done
198
+ git add -A
199
+ git commit -m "feat: [description] (#[NUM])"
200
+ git push origin main
201
+ \`\`\`
202
+
203
+ ---
204
+
205
+ ## See Also
206
+
207
+ - \`gh issue list --repo ${owner}/${repo}\` - List issues
208
+ - \`gh project view ${projectNumber} --owner ${owner}\` - View project board
209
+
210
+ ---
211
+
212
+ *Generated by GitHub Task Kit - https://github.com/yourname/github-task-kit*
213
+ `;
214
+ }
215
+
216
+ /**
217
+ * Generate minimal Claude command (just the essentials)
218
+ */
219
+ export function generateMinimalClaudeCommand(config) {
220
+ const { owner, repo, projectNumber } = config;
221
+
222
+ return `---
223
+ description: Create GitHub issue for ${repo}
224
+ type: project
225
+ ---
226
+
227
+ # Create Task
228
+
229
+ Quick issue creation for ${owner}/${repo}.
230
+
231
+ ## Usage
232
+
233
+ 1. Provide title and description
234
+ 2. Select labels and priority
235
+ 3. Issue created and added to project #${projectNumber}
236
+
237
+ ## Command
238
+
239
+ \`\`\`bash
240
+ gh issue create --repo ${owner}/${repo} --title "[TITLE]" --body "[BODY]"
241
+ gh project item-add ${projectNumber} --owner ${owner} --url "[ISSUE_URL]"
242
+ \`\`\`
243
+ `;
244
+ }