prjct-cli 0.5.0 → 0.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.
- package/CHANGELOG.md +169 -1
- package/CLAUDE.md +43 -28
- package/README.md +4 -4
- package/bin/prjct +78 -63
- package/core/agent-generator.js +19 -10
- package/core/ascii-graphics.js +433 -0
- package/core/command-registry.js +553 -0
- package/core/commands.js +274 -62
- package/core/task-schema.js +342 -0
- package/package.json +4 -3
- package/templates/agents/AGENTS.md +79 -101
- package/templates/agents/be.template.md +14 -29
- package/templates/agents/coordinator.template.md +34 -0
- package/templates/agents/data.template.md +14 -28
- package/templates/agents/devops.template.md +14 -28
- package/templates/agents/fe.template.md +14 -29
- package/templates/agents/mobile.template.md +14 -28
- package/templates/agents/qa.template.md +14 -41
- package/templates/agents/scribe.template.md +15 -81
- package/templates/agents/security.template.md +14 -28
- package/templates/agents/ux.template.md +14 -36
- package/templates/commands/analyze.md +36 -239
- package/templates/commands/build.md +41 -0
- package/templates/commands/cleanup.md +24 -87
- package/templates/commands/context.md +24 -93
- package/templates/commands/design.md +20 -98
- package/templates/commands/done.md +16 -181
- package/templates/commands/fix.md +27 -66
- package/templates/commands/git.md +33 -60
- package/templates/commands/help.md +18 -52
- package/templates/commands/idea.md +11 -36
- package/templates/commands/init.md +30 -277
- package/templates/commands/next.md +20 -62
- package/templates/commands/now.md +18 -22
- package/templates/commands/progress.md +23 -78
- package/templates/commands/recap.md +22 -74
- package/templates/commands/roadmap.md +21 -90
- package/templates/commands/ship.md +26 -161
- package/templates/commands/status.md +40 -0
- package/templates/commands/stuck.md +21 -33
- package/templates/commands/sync.md +19 -209
- package/templates/commands/task.md +18 -80
- package/templates/commands/test.md +23 -72
- package/templates/commands/workflow.md +20 -212
- package/templates/agents/pm.template.md +0 -84
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Metadata Schema and Agent Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the structure for task tracking with agent assignment,
|
|
5
|
+
* time estimation, and complexity scoring.
|
|
6
|
+
*
|
|
7
|
+
* @version 0.6.0
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Agent Types - Technical specialists for task assignment
|
|
12
|
+
*/
|
|
13
|
+
const AGENT_TYPES = {
|
|
14
|
+
'backend-architect': {
|
|
15
|
+
name: 'Backend Architect',
|
|
16
|
+
specialization: 'Server-side architecture, APIs, databases',
|
|
17
|
+
keywords: ['api', 'backend', 'server', 'database', 'endpoint', 'migration', 'schema'],
|
|
18
|
+
icon: '🏗️',
|
|
19
|
+
estimatedEfficiency: 1.0, // baseline
|
|
20
|
+
},
|
|
21
|
+
'frontend-developer': {
|
|
22
|
+
name: 'Frontend Developer',
|
|
23
|
+
specialization: 'UI/UX, components, responsive design',
|
|
24
|
+
keywords: ['ui', 'frontend', 'component', 'design', 'layout', 'responsive', 'css', 'style'],
|
|
25
|
+
icon: '🎨',
|
|
26
|
+
estimatedEfficiency: 1.0,
|
|
27
|
+
},
|
|
28
|
+
'fullstack-engineer': {
|
|
29
|
+
name: 'Fullstack Engineer',
|
|
30
|
+
specialization: 'End-to-end feature development',
|
|
31
|
+
keywords: ['fullstack', 'feature', 'integration', 'end-to-end', 'complete'],
|
|
32
|
+
icon: '⚡',
|
|
33
|
+
estimatedEfficiency: 0.9, // slightly slower due to context switching
|
|
34
|
+
},
|
|
35
|
+
'devops-specialist': {
|
|
36
|
+
name: 'DevOps Specialist',
|
|
37
|
+
specialization: 'CI/CD, deployment, infrastructure',
|
|
38
|
+
keywords: ['deploy', 'ci/cd', 'docker', 'kubernetes', 'infrastructure', 'pipeline', 'build'],
|
|
39
|
+
icon: '🚀',
|
|
40
|
+
estimatedEfficiency: 1.1, // faster at automation
|
|
41
|
+
},
|
|
42
|
+
'security-engineer': {
|
|
43
|
+
name: 'Security Engineer',
|
|
44
|
+
specialization: 'Authentication, authorization, security',
|
|
45
|
+
keywords: [
|
|
46
|
+
'auth',
|
|
47
|
+
'security',
|
|
48
|
+
'authentication',
|
|
49
|
+
'authorization',
|
|
50
|
+
'encryption',
|
|
51
|
+
'jwt',
|
|
52
|
+
'oauth',
|
|
53
|
+
],
|
|
54
|
+
icon: '🔒',
|
|
55
|
+
estimatedEfficiency: 0.8, // slower due to thorough security review
|
|
56
|
+
},
|
|
57
|
+
'data-engineer': {
|
|
58
|
+
name: 'Data Engineer',
|
|
59
|
+
specialization: 'Data processing, analytics, ETL',
|
|
60
|
+
keywords: ['data', 'analytics', 'etl', 'pipeline', 'processing', 'warehouse', 'query'],
|
|
61
|
+
icon: '📊',
|
|
62
|
+
estimatedEfficiency: 0.9,
|
|
63
|
+
},
|
|
64
|
+
'qa-engineer': {
|
|
65
|
+
name: 'QA Engineer',
|
|
66
|
+
specialization: 'Testing, quality assurance, automation',
|
|
67
|
+
keywords: ['test', 'testing', 'qa', 'quality', 'automation', 'e2e', 'integration'],
|
|
68
|
+
icon: '🧪',
|
|
69
|
+
estimatedEfficiency: 1.0,
|
|
70
|
+
},
|
|
71
|
+
'performance-engineer': {
|
|
72
|
+
name: 'Performance Engineer',
|
|
73
|
+
specialization: 'Optimization, scaling, performance',
|
|
74
|
+
keywords: ['performance', 'optimize', 'scaling', 'cache', 'speed', 'bottleneck'],
|
|
75
|
+
icon: '⚡',
|
|
76
|
+
estimatedEfficiency: 0.85, // slower due to profiling and measurement
|
|
77
|
+
},
|
|
78
|
+
'general-developer': {
|
|
79
|
+
name: 'General Developer',
|
|
80
|
+
specialization: 'General-purpose development',
|
|
81
|
+
keywords: ['fix', 'update', 'improve', 'refactor', 'cleanup'],
|
|
82
|
+
icon: '👨💻',
|
|
83
|
+
estimatedEfficiency: 1.0,
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Complexity Levels
|
|
89
|
+
*/
|
|
90
|
+
const COMPLEXITY = {
|
|
91
|
+
trivial: {
|
|
92
|
+
level: 1,
|
|
93
|
+
name: 'Trivial',
|
|
94
|
+
description: 'Simple changes, typos, configuration',
|
|
95
|
+
estimatedHours: 0.5,
|
|
96
|
+
multiplier: 0.5,
|
|
97
|
+
examples: ['Fix typo', 'Update config value', 'Change color'],
|
|
98
|
+
},
|
|
99
|
+
simple: {
|
|
100
|
+
level: 2,
|
|
101
|
+
name: 'Simple',
|
|
102
|
+
description: 'Straightforward implementation, single file',
|
|
103
|
+
estimatedHours: 2,
|
|
104
|
+
multiplier: 1.0,
|
|
105
|
+
examples: ['Add validation', 'Create simple component', 'Update documentation'],
|
|
106
|
+
},
|
|
107
|
+
moderate: {
|
|
108
|
+
level: 3,
|
|
109
|
+
name: 'Moderate',
|
|
110
|
+
description: 'Multiple files, some complexity',
|
|
111
|
+
estimatedHours: 4,
|
|
112
|
+
multiplier: 2.0,
|
|
113
|
+
examples: ['Implement new feature', 'Refactor module', 'Add API endpoint'],
|
|
114
|
+
},
|
|
115
|
+
complex: {
|
|
116
|
+
level: 4,
|
|
117
|
+
name: 'Complex',
|
|
118
|
+
description: 'System-wide changes, architecture',
|
|
119
|
+
estimatedHours: 8,
|
|
120
|
+
multiplier: 4.0,
|
|
121
|
+
examples: ['Authentication system', 'Database migration', 'Performance optimization'],
|
|
122
|
+
},
|
|
123
|
+
epic: {
|
|
124
|
+
level: 5,
|
|
125
|
+
name: 'Epic',
|
|
126
|
+
description: 'Major feature, multiple systems',
|
|
127
|
+
estimatedHours: 16,
|
|
128
|
+
multiplier: 8.0,
|
|
129
|
+
examples: ['Payment integration', 'Real-time messaging', 'Admin dashboard'],
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Task Status
|
|
135
|
+
*/
|
|
136
|
+
const TASK_STATUS = {
|
|
137
|
+
pending: 'Waiting to start',
|
|
138
|
+
active: 'Currently working on',
|
|
139
|
+
blocked: 'Blocked by dependency',
|
|
140
|
+
completed: 'Successfully finished',
|
|
141
|
+
cancelled: 'Cancelled/discarded',
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Task Schema
|
|
146
|
+
*/
|
|
147
|
+
class TaskSchema {
|
|
148
|
+
/**
|
|
149
|
+
* Create a new task
|
|
150
|
+
*/
|
|
151
|
+
static create(data) {
|
|
152
|
+
const now = new Date().toISOString()
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
id: data.id || this.generateId(),
|
|
156
|
+
title: data.title,
|
|
157
|
+
description: data.description || null,
|
|
158
|
+
|
|
159
|
+
// Agent & Developer
|
|
160
|
+
assignedAgent: data.assignedAgent || this.detectAgent(data.title),
|
|
161
|
+
githubDev: data.githubDev || null, // Will be populated from git config
|
|
162
|
+
|
|
163
|
+
// Complexity & Time
|
|
164
|
+
complexity: data.complexity || this.estimateComplexity(data.title, data.description),
|
|
165
|
+
estimatedTime: data.estimatedTime || this.estimateTime(data.complexity),
|
|
166
|
+
actualTime: null,
|
|
167
|
+
|
|
168
|
+
// Status & Tracking
|
|
169
|
+
status: data.status || 'pending',
|
|
170
|
+
priority: data.priority || 5,
|
|
171
|
+
blocked: data.blocked || false,
|
|
172
|
+
blockedBy: data.blockedBy || null,
|
|
173
|
+
|
|
174
|
+
// Timestamps
|
|
175
|
+
createdAt: data.createdAt || now,
|
|
176
|
+
startedAt: data.startedAt || null,
|
|
177
|
+
completedAt: data.completedAt || null,
|
|
178
|
+
|
|
179
|
+
// Metadata
|
|
180
|
+
tags: data.tags || [],
|
|
181
|
+
notes: data.notes || null,
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Generate unique task ID
|
|
187
|
+
*/
|
|
188
|
+
static generateId() {
|
|
189
|
+
return `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Auto-detect appropriate agent based on task description
|
|
194
|
+
*/
|
|
195
|
+
static detectAgent(title, description = '') {
|
|
196
|
+
const text = `${title} ${description}`.toLowerCase()
|
|
197
|
+
let bestMatch = 'general-developer'
|
|
198
|
+
let highestScore = 0
|
|
199
|
+
|
|
200
|
+
for (const [agentType, config] of Object.entries(AGENT_TYPES)) {
|
|
201
|
+
const score = config.keywords.filter((keyword) => text.includes(keyword)).length
|
|
202
|
+
|
|
203
|
+
if (score > highestScore) {
|
|
204
|
+
highestScore = score
|
|
205
|
+
bestMatch = agentType
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return bestMatch
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Estimate complexity based on keywords and description
|
|
214
|
+
*/
|
|
215
|
+
static estimateComplexity(title, description = '') {
|
|
216
|
+
const text = `${title} ${description}`.toLowerCase()
|
|
217
|
+
|
|
218
|
+
// Epic indicators
|
|
219
|
+
if (
|
|
220
|
+
text.match(
|
|
221
|
+
/system|payment|real-time|dashboard|integration|authentication|migration|architecture/i,
|
|
222
|
+
)
|
|
223
|
+
) {
|
|
224
|
+
return 'epic'
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Complex indicators
|
|
228
|
+
if (text.match(/refactor|optimization|security|database|multiple|complex/i)) {
|
|
229
|
+
return 'complex'
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Moderate indicators
|
|
233
|
+
if (text.match(/feature|implement|api|endpoint|component|module/i)) {
|
|
234
|
+
return 'moderate'
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Simple indicators
|
|
238
|
+
if (text.match(/add|update|fix|change|simple|small/i)) {
|
|
239
|
+
return 'simple'
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Trivial indicators
|
|
243
|
+
if (text.match(/typo|config|color|text|minor|tiny/i)) {
|
|
244
|
+
return 'trivial'
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return 'simple' // default
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Estimate time based on complexity and agent efficiency
|
|
252
|
+
*/
|
|
253
|
+
static estimateTime(complexity, agentType = 'general-developer') {
|
|
254
|
+
const complexityData = COMPLEXITY[complexity]
|
|
255
|
+
const agentData = AGENT_TYPES[agentType]
|
|
256
|
+
|
|
257
|
+
if (!complexityData || !agentData) {
|
|
258
|
+
return '2-4 hours'
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const baseHours = complexityData.estimatedHours
|
|
262
|
+
const adjustedHours = baseHours * agentData.estimatedEfficiency
|
|
263
|
+
|
|
264
|
+
// Format as range
|
|
265
|
+
const low = Math.floor(adjustedHours * 0.75)
|
|
266
|
+
const high = Math.ceil(adjustedHours * 1.25)
|
|
267
|
+
|
|
268
|
+
if (adjustedHours < 1) {
|
|
269
|
+
return `${Math.round(adjustedHours * 60)} minutes`
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return `${low}-${high} hours`
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Start a task (move to active)
|
|
277
|
+
*/
|
|
278
|
+
static start(task) {
|
|
279
|
+
return {
|
|
280
|
+
...task,
|
|
281
|
+
status: 'active',
|
|
282
|
+
startedAt: new Date().toISOString(),
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Complete a task
|
|
288
|
+
*/
|
|
289
|
+
static complete(task) {
|
|
290
|
+
const completedAt = new Date().toISOString()
|
|
291
|
+
const actualTime = this.calculateActualTime(task.startedAt, completedAt)
|
|
292
|
+
|
|
293
|
+
return {
|
|
294
|
+
...task,
|
|
295
|
+
status: 'completed',
|
|
296
|
+
completedAt,
|
|
297
|
+
actualTime,
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Calculate actual time spent
|
|
303
|
+
*/
|
|
304
|
+
static calculateActualTime(startedAt, completedAt) {
|
|
305
|
+
if (!startedAt) return null
|
|
306
|
+
|
|
307
|
+
const start = new Date(startedAt)
|
|
308
|
+
const end = new Date(completedAt)
|
|
309
|
+
const diffMs = end - start
|
|
310
|
+
const hours = Math.floor(diffMs / (1000 * 60 * 60))
|
|
311
|
+
const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60))
|
|
312
|
+
|
|
313
|
+
if (hours === 0) {
|
|
314
|
+
return `${minutes}m`
|
|
315
|
+
}
|
|
316
|
+
return `${hours}h ${minutes}m`
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Validate task schema
|
|
321
|
+
*/
|
|
322
|
+
static validate(task) {
|
|
323
|
+
const errors = []
|
|
324
|
+
|
|
325
|
+
if (!task.title) errors.push('Task title is required')
|
|
326
|
+
if (!AGENT_TYPES[task.assignedAgent]) errors.push('Invalid agent type')
|
|
327
|
+
if (!COMPLEXITY[task.complexity]) errors.push('Invalid complexity level')
|
|
328
|
+
if (!TASK_STATUS[task.status]) errors.push('Invalid task status')
|
|
329
|
+
|
|
330
|
+
return {
|
|
331
|
+
valid: errors.length === 0,
|
|
332
|
+
errors,
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
module.exports = {
|
|
338
|
+
TaskSchema,
|
|
339
|
+
AGENT_TYPES,
|
|
340
|
+
COMPLEXITY,
|
|
341
|
+
TASK_STATUS,
|
|
342
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prjct-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Built for Claude - Ship fast, track progress, stay focused. Developer momentum tool for indie hackers.",
|
|
5
5
|
"main": "core/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"preuninstall": "node scripts/preuninstall.js",
|
|
16
16
|
"install-global": "./scripts/install.sh",
|
|
17
17
|
"test": "echo 'No tests configured'",
|
|
18
|
+
"validate": "node scripts/validate-commands.js",
|
|
18
19
|
"lint": "eslint \"**/*.js\" --ignore-pattern \"node_modules/**\" --ignore-pattern \"website/**\"",
|
|
19
20
|
"lint:fix": "eslint \"**/*.js\" --fix --ignore-pattern \"node_modules/**\" --ignore-pattern \"website/**\"",
|
|
20
21
|
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\" --config .config/.prettierrc --ignore-path .config/.prettierignore",
|
|
@@ -36,7 +37,7 @@
|
|
|
36
37
|
"no-bs",
|
|
37
38
|
"focus"
|
|
38
39
|
],
|
|
39
|
-
"author": "prjct.
|
|
40
|
+
"author": "prjct.app",
|
|
40
41
|
"license": "MIT",
|
|
41
42
|
"dependencies": {
|
|
42
43
|
"chalk": "^4.1.2",
|
|
@@ -62,7 +63,7 @@
|
|
|
62
63
|
"bugs": {
|
|
63
64
|
"url": "https://github.com/jlopezlira/prjct-cli/issues"
|
|
64
65
|
},
|
|
65
|
-
"homepage": "https://prjct.
|
|
66
|
+
"homepage": "https://prjct.app",
|
|
66
67
|
"engines": {
|
|
67
68
|
"node": ">=18.0.0"
|
|
68
69
|
},
|
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
2
|
|
|
3
|
-
AI assistant guidance for prjct-cli.
|
|
3
|
+
AI assistant guidance for **prjct-cli** - developer momentum tool for solo builders & small teams (2-5 people). Just ship. No BS.
|
|
4
|
+
|
|
5
|
+
## What This Is
|
|
6
|
+
|
|
7
|
+
**NOT** project management. NO sprints, story points, ceremonies, or meetings.
|
|
8
|
+
|
|
9
|
+
**IS** frictionless progress tracking. Talk naturally, ship features, celebrate wins.
|
|
4
10
|
|
|
5
11
|
## Talk Naturally
|
|
6
12
|
|
|
7
|
-
**
|
|
13
|
+
**Zero memorization** - just describe what you want!
|
|
8
14
|
|
|
9
|
-
|
|
15
|
+
Works in **any language** via semantic understanding.
|
|
10
16
|
|
|
11
17
|
**Examples:**
|
|
12
18
|
```
|
|
13
|
-
|
|
19
|
+
Start working:
|
|
14
20
|
→ "I want to build the login page"
|
|
15
|
-
→ "Let me work on authentication"
|
|
16
21
|
→ "Voy a hacer el dashboard"
|
|
17
22
|
→ Command: /p:now
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
→ "I'm done" | "
|
|
24
|
+
Finished:
|
|
25
|
+
→ "I'm done" | "terminé" | "completed"
|
|
21
26
|
→ Command: /p:done
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
Ship:
|
|
24
29
|
→ "ship this" | "deploy it" | "ready to launch"
|
|
25
30
|
→ Command: /p:ship
|
|
26
31
|
```
|
|
27
32
|
|
|
28
|
-
**Both work
|
|
29
|
-
-
|
|
30
|
-
-
|
|
33
|
+
**Both work:**
|
|
34
|
+
- Natural: "I want to start building auth"
|
|
35
|
+
- Direct: `/p:now "building auth"`
|
|
31
36
|
|
|
32
37
|
## Architecture
|
|
33
38
|
|
|
@@ -42,123 +47,96 @@ memory/ # context.jsonl
|
|
|
42
47
|
|
|
43
48
|
**Local**: `.prjct/prjct.config.json`
|
|
44
49
|
|
|
45
|
-
## MCP Servers
|
|
46
|
-
|
|
47
|
-
- **Context7**: Library docs (always on)
|
|
48
|
-
- **Filesystem**: File ops
|
|
49
|
-
- **Memory**: Persistence
|
|
50
|
-
- **Sequential**: Complex reasoning
|
|
51
|
-
|
|
52
50
|
## Quick Start
|
|
53
51
|
|
|
54
|
-
1.
|
|
55
|
-
2.
|
|
56
|
-
3. Or
|
|
52
|
+
1. `/p:init` - Initialize
|
|
53
|
+
2. `/p:help` - Guide
|
|
54
|
+
3. Or talk: "I want to start [task]"
|
|
57
55
|
|
|
58
56
|
## Commands
|
|
59
57
|
|
|
60
|
-
**💡 Tip**:
|
|
61
|
-
|
|
62
|
-
| Command | Say This
|
|
63
|
-
|
|
64
|
-
| `/p:help` | "help"
|
|
65
|
-
| `/p:init` | - | Create
|
|
66
|
-
| `/p:now [task]` | "start [task]" |
|
|
67
|
-
| `/p:done` | "I'm done"
|
|
68
|
-
| `/p:ship <feature>` | "ship [feature]" |
|
|
69
|
-
| `/p:next` | "what's next?" |
|
|
70
|
-
| `/p:idea <text>` | "
|
|
71
|
-
| `/p:recap` | "show
|
|
72
|
-
| `/p:progress [period]` | "how am I doing?" |
|
|
73
|
-
| `/p:stuck <issue>` | "I'm stuck
|
|
74
|
-
| `/p:context` | "show
|
|
75
|
-
| `/p:
|
|
76
|
-
| `/p:
|
|
77
|
-
| `/p:
|
|
78
|
-
| `/p:git` | - | Smart commits with context |
|
|
79
|
-
| `/p:fix` | "help me fix [x]" | Quick problem solving |
|
|
80
|
-
| `/p:test` | "run tests" | Execute + report |
|
|
81
|
-
| `/p:design` | "design [x]" | Generate diagrams + specs |
|
|
82
|
-
| `/p:cleanup` | "clean up code" | Remove dead code/deps |
|
|
58
|
+
**💡 Tip**: `/p:help` for interactive guide
|
|
59
|
+
|
|
60
|
+
| Command | Say This | Action |
|
|
61
|
+
|---------|----------|--------|
|
|
62
|
+
| `/p:help` | "help" | Interactive guide |
|
|
63
|
+
| `/p:init` | - | Create structure |
|
|
64
|
+
| `/p:now [task]` | "start [task]" | Set current task |
|
|
65
|
+
| `/p:done` | "I'm done" | Complete & next |
|
|
66
|
+
| `/p:ship <feature>` | "ship [feature]" | Celebrate win |
|
|
67
|
+
| `/p:next` | "what's next?" | Show queue |
|
|
68
|
+
| `/p:idea <text>` | "idea about [x]" | Capture ideas |
|
|
69
|
+
| `/p:recap` | "show progress" | Overview |
|
|
70
|
+
| `/p:progress [period]` | "how am I doing?" | Metrics |
|
|
71
|
+
| `/p:stuck <issue>` | "I'm stuck" | Get help |
|
|
72
|
+
| `/p:context` | "show context" | Display state |
|
|
73
|
+
| `/p:analyze` | "analyze repo" | Generate summary |
|
|
74
|
+
| `/p:design` | "design [x]" | Generate specs |
|
|
75
|
+
| `/p:cleanup` | "clean up" | Remove dead code |
|
|
83
76
|
|
|
84
77
|
## How It Works
|
|
85
78
|
|
|
86
|
-
**
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
**Every response includes:**
|
|
93
|
-
- What you just did
|
|
94
|
-
- Natural language options for next steps
|
|
95
|
-
- Command alternatives if you prefer
|
|
96
|
-
|
|
97
|
-
**Zero memorization needed** - just describe what you want!
|
|
79
|
+
**Natural conversation:**
|
|
80
|
+
- Detect intent
|
|
81
|
+
- Map to command
|
|
82
|
+
- Respond with options
|
|
83
|
+
- Suggest next steps
|
|
98
84
|
|
|
99
|
-
|
|
85
|
+
**Every response:**
|
|
86
|
+
- What you did
|
|
87
|
+
- Natural options
|
|
88
|
+
- Command alternatives
|
|
100
89
|
|
|
101
|
-
|
|
90
|
+
**Zero memorization!**
|
|
102
91
|
|
|
103
|
-
|
|
92
|
+
## Intent Detection
|
|
104
93
|
|
|
105
|
-
|
|
94
|
+
Semantic understanding, not pattern matching.
|
|
106
95
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
96
|
+
| Intent | Command | Examples |
|
|
97
|
+
|--------|---------|----------|
|
|
98
|
+
| Start task | `/p:now` | "work on X", "starting API", "voy a hacer X" |
|
|
99
|
+
| Finish | `/p:done` | "done", "finished", "terminé", "listo" |
|
|
100
|
+
| Ship | `/p:ship` | "ship this", "deploy X", "it's ready" |
|
|
101
|
+
| Idea | `/p:idea` | "I have an idea", "what if we..." |
|
|
102
|
+
| Progress | `/p:recap` | "show progress", "how am I doing" |
|
|
103
|
+
| Stuck | `/p:stuck` | "I'm stuck", "help with X" |
|
|
104
|
+
| Next | `/p:next` | "what's next", "qué sigue" |
|
|
112
105
|
|
|
113
|
-
|
|
106
|
+
**Any language works** - if you understand intent, execute the command.
|
|
114
107
|
|
|
115
|
-
|
|
116
|
-
|-------------|---------|-------------------------------|
|
|
117
|
-
| Start/focus on task | `/p:now` | "let me work on X", "starting the API", "voy a hacer X" |
|
|
118
|
-
| Finished current work | `/p:done` | "done", "finished", "terminé", "completed", "listo" |
|
|
119
|
-
| Ship/deploy feature | `/p:ship` | "ship this", "deploy X", "it's ready", "let's launch" |
|
|
120
|
-
| Capture an idea | `/p:idea` | "I have an idea", "what if we...", "tengo una idea" |
|
|
121
|
-
| Check progress/status | `/p:recap` | "show progress", "how am I doing", "muéstrame el avance" |
|
|
122
|
-
| Stuck on problem | `/p:stuck` | "I'm stuck", "help with X", "estoy atascado" |
|
|
123
|
-
| What to work on next | `/p:next` | "what's next", "qué sigue", "what should I do" |
|
|
124
|
-
|
|
125
|
-
**Key principle**: If you understand what the user wants, map it to the right command. Don't rely on exact phrase matching.
|
|
126
|
-
|
|
127
|
-
### Example Flow
|
|
108
|
+
### Example
|
|
128
109
|
|
|
129
110
|
**User:** "I want to start building the login page"
|
|
130
111
|
|
|
131
|
-
**Your
|
|
132
|
-
- Intent
|
|
133
|
-
-
|
|
134
|
-
-
|
|
112
|
+
**Your reasoning:**
|
|
113
|
+
- Intent: Start working
|
|
114
|
+
- Command: `/p:now`
|
|
115
|
+
- Param: "building the login page"
|
|
135
116
|
|
|
136
|
-
**
|
|
117
|
+
**Response:**
|
|
137
118
|
```
|
|
138
|
-
💬
|
|
119
|
+
💬 Understood: "start building the login page"
|
|
139
120
|
⚡ Executing: /p:now "building the login page"
|
|
140
121
|
|
|
141
|
-
✅ Starting
|
|
122
|
+
✅ Starting: building the login page
|
|
142
123
|
|
|
143
|
-
|
|
124
|
+
Next:
|
|
144
125
|
• Say "I'm done" when finished
|
|
145
126
|
• Or: /p:done
|
|
146
127
|
```
|
|
147
128
|
|
|
148
|
-
### Works in Any Language
|
|
149
|
-
|
|
150
|
-
If you understand the user's intent in **any language**, execute the command:
|
|
151
|
-
- English: "I want to start the API"
|
|
152
|
-
- Spanish: "Quiero empezar con la autenticación"
|
|
153
|
-
- Casual: "gonna work on that login thing"
|
|
154
|
-
- Formal: "I shall commence development of the authentication module"
|
|
155
|
-
|
|
156
|
-
All map to: `/p:now`
|
|
157
|
-
|
|
158
129
|
## Implementation
|
|
159
130
|
|
|
160
131
|
- All ops atomic
|
|
161
|
-
- Log to `memory/context.jsonl`
|
|
162
|
-
- Conversational responses
|
|
163
|
-
- Intent detection (
|
|
164
|
-
- Handle missing files
|
|
132
|
+
- Log to `memory/context.jsonl`
|
|
133
|
+
- Conversational responses
|
|
134
|
+
- Intent detection (any language)
|
|
135
|
+
- Handle missing files
|
|
136
|
+
|
|
137
|
+
## MCP Servers
|
|
138
|
+
|
|
139
|
+
- **Context7**: Library docs (always on)
|
|
140
|
+
- **Filesystem**: File ops
|
|
141
|
+
- **Memory**: Persistence
|
|
142
|
+
- **Sequential**: Complex reasoning
|
|
@@ -6,37 +6,22 @@ model: opus
|
|
|
6
6
|
color: yellow
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Senior Backend Engineer for **[PROJECT_NAME]**
|
|
10
10
|
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
- **Architecture**: [DETECTED_PATTERN]
|
|
14
|
-
- **Primary Language**: [PRIMARY_LANGUAGE]
|
|
11
|
+
## Context
|
|
12
|
+
Stack: [DETECTED_STACK] | Pattern: [DETECTED_PATTERN] | Lang: [PRIMARY_LANGUAGE]
|
|
15
13
|
|
|
16
|
-
##
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
- **Architecture**: Clean code, SOLID principles, DRY
|
|
21
|
-
- **Performance**: Caching, query optimization, scalability
|
|
14
|
+
## Expertise
|
|
15
|
+
- API design: RESTful, GraphQL, efficient endpoints
|
|
16
|
+
- Database: schema design, queries, optimization
|
|
17
|
+
- Auth & Security: JWT, OAuth, session management
|
|
22
18
|
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
## Principles
|
|
20
|
+
1. SOLID: Single responsibility, dependency inversion
|
|
21
|
+
2. Security First: Validate inputs, protect endpoints
|
|
22
|
+
3. Scalable: Design for growth, test comprehensively
|
|
27
23
|
|
|
28
|
-
##
|
|
29
|
-
|
|
30
|
-
2. **Security First**: Validate inputs, protect endpoints
|
|
31
|
-
3. **Scalability**: Design for growth
|
|
32
|
-
4. **Testing**: Unit tests, integration tests
|
|
33
|
-
5. **Documentation**: Clear API docs
|
|
24
|
+
## Focus
|
|
25
|
+
Server layer, business logic, data persistence
|
|
34
26
|
|
|
35
|
-
|
|
36
|
-
- API endpoints and business logic
|
|
37
|
-
- Database schema and queries
|
|
38
|
-
- Authentication and authorization
|
|
39
|
-
- Data validation and error handling
|
|
40
|
-
- Performance optimization
|
|
41
|
-
|
|
42
|
-
Remember: You build the server layer. Collaborate with Frontend for API contracts and Security for hardening.
|
|
27
|
+
**Defer to**: Frontend (UI), DevOps (infra), Security (hardening)
|