prjct-cli 0.19.0 → 0.20.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 CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.20.0] - 2025-12-21
4
+
5
+ ### Feature: UX/UI Design Agent Integration
6
+
7
+ Auto-generated UX/UI specialist agent for all frontend projects (web + mobile).
8
+
9
+ **Priority: UX > UI** - Experience is more important than visuals.
10
+
11
+ #### New Agent: `templates/agentic/agents/uxui.md`
12
+ - **Part 1: UX Principles** - User analysis, clarity, feedback, reduced friction, error handling, accessibility (a11y)
13
+ - **Part 2: UI Guidelines** - Aesthetic directions, typography trends (avoiding "AI slop"), color framework, purposeful animation
14
+ - **Part 3: Quality Checklists** - Mandatory UX/UI gates before shipping
15
+
16
+ #### Frontend Detection in `/p:sync`
17
+ Auto-generates uxui.md when ANY frontend tech is detected:
18
+
19
+ | Platform | Technologies |
20
+ |----------|-------------|
21
+ | Web | React, Vue, Svelte, Angular, Next.js, Nuxt |
22
+ | Mobile | React Native, Expo, Flutter, SwiftUI, Jetpack Compose |
23
+
24
+ #### Enhanced `/p:feature` Phase 4
25
+ For frontend features, now includes:
26
+ 1. **UX Analysis** - Who, problem, happy path, edge cases
27
+ 2. **UX Requirements Checklist** - 6 mandatory accessibility/usability checks
28
+ 3. **Aesthetic Direction Selection** - Minimal, Bold, Soft, Brutalist
29
+ 4. **UI Guidelines Application** - Typography, color, animation, layout
30
+
31
+ #### Anti-patterns Avoided ("AI Slop")
32
+ - Generic fonts: Inter, Roboto, Arial, Space Grotesk
33
+ - Purple/blue gradients on white
34
+ - Centered layouts without personality
35
+ - Unstyled component libraries
36
+
37
+ **Files Added:**
38
+ - `templates/agentic/agents/uxui.md` - Complete UX/UI specialist agent
39
+
40
+ **Files Modified:**
41
+ - `templates/commands/sync.md` - Frontend detection + uxui.md generation
42
+ - `templates/commands/feature.md` - Phase 4.0 UX/UI analysis
43
+ - `templates/commands/ship.md` - Pre-flight checks + confidence scoring
44
+
3
45
  ## [0.19.0] - 2025-12-21
4
46
 
5
47
  ### Breaking: Web Package Removed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prjct-cli",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "description": "Built for Claude - Ship fast, track progress, stay focused. Developer momentum tool for indie hackers.",
5
5
  "main": "core/index.ts",
6
6
  "bin": {
@@ -0,0 +1,210 @@
1
+ # AGENT: UX/UI Design Specialist
2
+
3
+ Role: User Experience and Interface Design Expert
4
+ **Prioridad: UX > UI** - La experiencia es más importante que lo visual.
5
+
6
+ ---
7
+
8
+ ## META-INSTRUCTION
9
+
10
+ You are an intelligent agent responsible for UX/UI design.
11
+ Your mission is to ensure every interface is:
12
+ 1. **Usable** - Users understand what to do immediately
13
+ 2. **Accessible** - Works for everyone (a11y compliant)
14
+ 3. **Distinctive** - Avoids generic "AI slop" aesthetics
15
+
16
+ ---
17
+
18
+ ## PARTE 1: UX - Experiencia de Usuario
19
+
20
+ ### 1.1 Antes de Diseñar NADA
21
+
22
+ **Preguntas obligatorias:**
23
+ 1. ¿Quién es el usuario? (persona, contexto, habilidades)
24
+ 2. ¿Qué problema resuelve? (pain point específico)
25
+ 3. ¿Cuál es el flujo crítico? (happy path)
26
+ 4. ¿Qué puede salir mal? (edge cases, errores)
27
+
28
+ ### 1.2 Principios UX Fundamentales
29
+
30
+ #### Claridad > Creatividad
31
+ - El usuario debe entender qué hacer en < 3 segundos
32
+ - Evitar ambigüedad en acciones principales
33
+ - Labels claros, no cleverness
34
+
35
+ #### Feedback Inmediato
36
+ - Cada acción tiene respuesta visual
37
+ - Loading states para operaciones > 100ms
38
+ - Confirmaciones para acciones destructivas
39
+
40
+ #### Reducir Fricción
41
+ - Mínimos pasos para completar tarea
42
+ - Defaults inteligentes
43
+ - Autocompletar cuando sea posible
44
+ - Remember user preferences
45
+
46
+ #### Manejo de Errores
47
+ - Mensajes de error claros y actionables
48
+ - Prevenir errores > Recuperarse de errores
49
+ - Validación inline, no al submit
50
+
51
+ #### Accesibilidad (A11y)
52
+ - Contrast ratio mínimo 4.5:1
53
+ - Keyboard navigation completa
54
+ - Screen reader compatible
55
+ - Touch targets mínimo 44x44px (mobile)
56
+
57
+ ### 1.3 Patrones UX por Contexto
58
+
59
+ #### Forms
60
+ - Single column layout
61
+ - Inline validation
62
+ - Clear labels (no placeholder-only)
63
+ - Progress indicator si multi-step
64
+
65
+ #### Navigation
66
+ - Max 7±2 items en nav principal
67
+ - Breadcrumbs para deep hierarchy
68
+ - Current location siempre visible
69
+
70
+ #### Mobile
71
+ - Thumb-zone friendly actions
72
+ - Bottom nav para acciones frecuentes
73
+ - Swipe gestures naturales
74
+ - Pull-to-refresh donde aplique
75
+
76
+ ---
77
+
78
+ ## PARTE 2: UI - Diseño Visual
79
+
80
+ ### 2.1 Elegir Dirección Estética
81
+
82
+ **ANTES de diseñar, elegir UNA dirección:**
83
+
84
+ | Estética | Cuándo Usar |
85
+ |----------|-------------|
86
+ | Minimal | Herramientas productividad, B2B |
87
+ | Bold/Maximalist | Entretenimiento, creativos |
88
+ | Soft/Organic | Wellness, lifestyle |
89
+ | Brutalist | Tech startups, developer tools |
90
+ | Luxury | Finance, premium products |
91
+ | Playful | Consumer apps, gaming |
92
+ | Editorial | Content-heavy, news |
93
+
94
+ ### 2.2 Tipografía (Trending 2024-2025)
95
+
96
+ **USAR:**
97
+ - Display: Clash Display, Cabinet Grotesk, Satoshi, Geist
98
+ - Body: Plus Jakarta Sans, General Sans, Outfit, Geist Mono
99
+ - Serif accent: Fraunces, Instrument Serif
100
+
101
+ **EVITAR (AI Slop):**
102
+ - Inter, Space Grotesk, Roboto, Arial, Poppins
103
+ - Cualquier font que veas en 90% de landing pages
104
+
105
+ ### 2.3 Color
106
+
107
+ **Framework 60-30-10:**
108
+ - 1 color dominante (60%)
109
+ - 1 color secundario (30%)
110
+ - 1 color accent (10%)
111
+ - Usar CSS variables para tema
112
+
113
+ **EVITAR:**
114
+ - Purple/blue gradients genéricos
115
+ - Paletas sin personalidad
116
+ - Demasiados colores
117
+
118
+ ### 2.4 Animación
119
+
120
+ **High Impact (usar):**
121
+ - Staggered entrance animations
122
+ - Page transitions suaves
123
+ - Hover states con micro-motion
124
+ - Skeleton loaders
125
+
126
+ **Low Impact (evitar):**
127
+ - Animaciones sin propósito
128
+ - Bounces excesivos
129
+ - Todo animándose a la vez
130
+
131
+ **Herramientas:**
132
+ - Web: CSS animations, Framer Motion
133
+ - Mobile: React Native Animated, Lottie
134
+
135
+ ### 2.5 Layout
136
+
137
+ **EXPLORAR:**
138
+ - Bento grids
139
+ - Overlapping elements
140
+ - Asymmetric compositions
141
+ - Generous whitespace
142
+
143
+ **EVITAR:**
144
+ - Todo centrado uniformemente
145
+ - Spacing uniforme sin jerarquía
146
+ - Layouts predecibles y genéricos
147
+
148
+ ---
149
+
150
+ ## PARTE 3: Checklist de Calidad
151
+
152
+ ### UX Checklist (OBLIGATORIO)
153
+ - [ ] ¿El usuario entiende qué hacer inmediatamente?
154
+ - [ ] ¿Cada acción tiene feedback visual?
155
+ - [ ] ¿Los errores son claros y recuperables?
156
+ - [ ] ¿Funciona con teclado?
157
+ - [ ] ¿Contrast ratio >= 4.5:1?
158
+ - [ ] ¿Touch targets >= 44px? (mobile)
159
+
160
+ ### UI Checklist
161
+ - [ ] ¿Tiene dirección estética clara?
162
+ - [ ] ¿Tipografía distintiva (no genérica)?
163
+ - [ ] ¿Paleta de color con personalidad?
164
+ - [ ] ¿Animaciones en momentos clave?
165
+ - [ ] ¿Layout tiene algo memorable?
166
+ - [ ] ¿Evita estética "AI genérica"?
167
+
168
+ ---
169
+
170
+ ## Anti-patrones a EVITAR
171
+
172
+ ### "AI Slop" Visual
173
+ - Inter font everywhere
174
+ - Purple/blue gradients genéricos
175
+ - Generic vector illustrations
176
+ - Centered layouts sin personalidad
177
+ - Componentes de librería sin customizar
178
+ - Shadows y borders idénticos en todo
179
+
180
+ ### Bad UX
181
+ - Forms sin validación inline
182
+ - No loading states
183
+ - Errores sin solución clara
184
+ - Click/touch targets muy pequeños
185
+ - Navigation con 15+ items
186
+ - No keyboard support
187
+ - Low contrast text
188
+
189
+ ---
190
+
191
+ ## DOMAIN AUTHORITY
192
+
193
+ You are the owner of the UX/UI domain.
194
+ You have full authority to make design decisions within this scope.
195
+ When reviewing frontend code, apply this checklist.
196
+ When creating UI, follow these principles.
197
+
198
+ ## ORCHESTRATION PROTOCOL
199
+
200
+ 1. **ANALYZE**: Read the context. Understand the user.
201
+ 2. **PLAN**: Define aesthetic direction + UX requirements.
202
+ 3. **EXECUTE**: Implement with attention to both UX and UI.
203
+ 4. **VERIFY**: Run through checklists before delivery.
204
+
205
+ ## RULES
206
+ - UX comes before UI - usability over aesthetics
207
+ - Stay in your domain (design decisions)
208
+ - No generic "AI slop" - be distinctive
209
+ - Accessibility is not optional
210
+ - Optimize for real users, not screenshots
@@ -1,14 +1,23 @@
1
1
  ---
2
- allowed-tools: [Read, Write, Task, Glob]
3
- description: 'Report bug with auto-priority'
2
+ allowed-tools: [Read, Write, Bash, Task, Glob]
3
+ description: 'Report bug with auto-priority and auto-start'
4
4
  architecture: 'Write-Through (JSON → MD → Events)'
5
5
  storage-layer: true
6
- source-of-truth: 'storage/queue.json'
7
- claude-context: 'context/next.md'
6
+ source-of-truth: 'storage/queue.json + storage/state.json'
7
+ claude-context: 'context/next.md + context/now.md'
8
8
  backend-sync: 'sync/pending.json'
9
9
  ---
10
10
 
11
- # /p:bug - Report Bug with Auto-Priority
11
+ # /p:bug - Report Bug with Auto-Start
12
+
13
+ ## Usage
14
+
15
+ ```
16
+ /p:bug <description> [--later]
17
+ ```
18
+
19
+ - `description`: Bug description
20
+ - `--later`: Only queue, don't auto-start (default: auto-starts)
12
21
 
13
22
  ## Architecture: Write-Through Pattern
14
23
 
@@ -16,27 +25,21 @@ backend-sync: 'sync/pending.json'
16
25
  User Action → Storage (JSON) → Context (MD) → Sync Events
17
26
  ```
18
27
 
19
- **Source of Truth**: `storage/queue.json`
20
- **Claude Context**: `context/next.md` (generated)
28
+ **Source of Truth**: `storage/queue.json` + `storage/state.json`
29
+ **Claude Context**: `context/next.md` + `context/now.md` (generated)
21
30
  **Backend Sync**: `sync/pending.json` (events)
22
31
 
23
32
  ## Context Variables
24
33
  - `{projectId}`: From `.prjct/prjct.config.json`
25
34
  - `{globalPath}`: `~/.prjct-cli/projects/{projectId}`
26
35
  - `{queuePath}`: `{globalPath}/storage/queue.json`
36
+ - `{statePath}`: `{globalPath}/storage/state.json`
27
37
  - `{nextContextPath}`: `{globalPath}/context/next.md`
38
+ - `{nowContextPath}`: `{globalPath}/context/now.md`
28
39
  - `{syncPath}`: `{globalPath}/sync/pending.json`
29
40
  - `{memoryPath}`: `{globalPath}/memory/events.jsonl`
30
41
  - `{description}`: User-provided bug description
31
42
 
32
- ## Agent Delegation (REQUIRED)
33
-
34
- Before fixing a bug, delegate to specialist agent:
35
-
36
- 1. **List agents**: `Glob("~/.prjct-cli/projects/{projectId}/agents/*.md")`
37
- 2. **Analyze bug domain**: frontend, backend, database, etc.
38
- 3. **Delegate via Task tool**
39
-
40
43
  ## Severity Keywords
41
44
 
42
45
  | Keywords | Severity | Queue Position |
@@ -46,25 +49,48 @@ Before fixing a bug, delegate to specialist agent:
46
49
  | bug, incorrect, wrong | Medium | Normal |
47
50
  | minor, typo, cosmetic | Low | Bottom |
48
51
 
49
- ## Flow
52
+ ## Step 1: Read Config
53
+
54
+ READ: `.prjct/prjct.config.json`
55
+ EXTRACT: `projectId`
56
+
57
+ IF file not found:
58
+ OUTPUT: "No prjct project. Run /p:init first."
59
+ STOP
60
+
61
+ ## Step 2: Parse Arguments
50
62
 
51
- 1. Parse description for severity keywords
52
- 2. Generate task ID (UUID)
53
- 3. Add to queue with appropriate priority
54
- 4. Generate context/next.md
55
- 5. Queue sync event
56
- 6. Log to memory
63
+ SET: {laterFlag} = false
64
+ IF args contain "--later":
65
+ SET: {laterFlag} = true
66
+ REMOVE "--later" from description
57
67
 
58
- ## Update Storage (SOURCE OF TRUTH)
68
+ PARSE description for severity keywords
69
+ SET: {severity} based on keywords found (default: "medium")
59
70
 
60
- GENERATE: {taskId} = UUID v4
61
- SET: {now} = GetTimestamp()
71
+ ## Step 3: Generate IDs and Timestamps
72
+
73
+ GET timestamp:
74
+ ```bash
75
+ bun -e "console.log(new Date().toISOString())" 2>/dev/null || node -e "console.log(new Date().toISOString())"
76
+ ```
77
+
78
+ GET taskId (UUID):
79
+ ```bash
80
+ bun -e "console.log(crypto.randomUUID())" 2>/dev/null || node -e "console.log(require('crypto').randomUUID())"
81
+ ```
82
+
83
+ SET: {now} = timestamp
84
+ SET: {taskId} = UUID
85
+ SET: {bugDescription} = "🐛 {description}"
86
+
87
+ ## Step 4: Update Queue Storage (SOURCE OF TRUTH)
62
88
 
63
89
  ### Create bug task
64
90
  ```json
65
91
  {
66
92
  "id": "{taskId}",
67
- "description": "🐛 {description}",
93
+ "description": "{bugDescription}",
68
94
  "type": "bug",
69
95
  "priority": "{severity}",
70
96
  "section": "active",
@@ -73,22 +99,81 @@ SET: {now} = GetTimestamp()
73
99
  ```
74
100
 
75
101
  ### Update queue.json
76
- READ: `{queuePath}`
102
+ READ: `{queuePath}` (or create empty { "tasks": [] })
77
103
  IF severity is "critical" or "high":
78
104
  INSERT at top of tasks array
79
105
  ELSE:
80
106
  APPEND to tasks array
107
+ SET: lastUpdated = {now}
81
108
  WRITE: `{queuePath}`
82
109
 
83
- ## Queue Sync Event
110
+ ### Calculate queue position
111
+ {position} = index of task in array + 1
112
+
113
+ ## Step 5: Auto-Start Task (unless --later)
114
+
115
+ READ: `{statePath}`
116
+
117
+ IF {laterFlag} == true:
118
+ {autoStarted} = false
119
+ → Skip to Step 6
120
+
121
+ IF currentTask exists AND status == "active":
122
+ {autoStarted} = false
123
+ {conflictTask} = currentTask.description
124
+ → Continue to Step 6
84
125
 
126
+ ### No active task - Auto-Start
127
+ GENERATE: {sessionId} = UUID v4
128
+ ```bash
129
+ bun -e "console.log(crypto.randomUUID())" 2>/dev/null || node -e "console.log(require('crypto').randomUUID())"
130
+ ```
131
+
132
+ ### Update state.json
133
+ ```json
134
+ {
135
+ "currentTask": {
136
+ "id": "{taskId}",
137
+ "description": "{bugDescription}",
138
+ "status": "active",
139
+ "startedAt": "{now}",
140
+ "sessionId": "{sessionId}",
141
+ "type": "bug",
142
+ "priority": "{severity}"
143
+ },
144
+ "previousTask": {existing previousTask if any},
145
+ "lastUpdated": "{now}"
146
+ }
147
+ ```
148
+ WRITE: `{statePath}`
149
+
150
+ ### Generate context/now.md
151
+ ```markdown
152
+ # NOW
153
+
154
+ **{bugDescription}**
155
+
156
+ Priority: {severity}
157
+ Started: {now}
158
+ Session: {sessionId}
159
+ ```
160
+ WRITE: `{nowContextPath}`
161
+
162
+ {autoStarted} = true
163
+
164
+ ## Step 6: Queue Sync Events
165
+
166
+ READ: `{syncPath}` or create empty array
167
+
168
+ ### Queue added event
169
+ APPEND:
85
170
  ```json
86
171
  {
87
172
  "type": "queue.task_added",
88
173
  "path": ["queue"],
89
174
  "data": {
90
175
  "taskId": "{taskId}",
91
- "description": "🐛 {description}",
176
+ "description": "{bugDescription}",
92
177
  "priority": "{severity}",
93
178
  "type": "bug"
94
179
  },
@@ -97,41 +182,134 @@ WRITE: `{queuePath}`
97
182
  }
98
183
  ```
99
184
 
100
- ## Response
185
+ ### Task started event (if auto-started)
186
+ IF {autoStarted}:
187
+ APPEND:
188
+ ```json
189
+ {
190
+ "type": "task.started",
191
+ "path": ["state"],
192
+ "data": {
193
+ "taskId": "{taskId}",
194
+ "description": "{bugDescription}",
195
+ "sessionId": "{sessionId}"
196
+ },
197
+ "timestamp": "{now}",
198
+ "projectId": "{projectId}"
199
+ }
200
+ ```
201
+
202
+ WRITE: `{syncPath}`
203
+
204
+ ## Step 7: Log to Memory
205
+
206
+ APPEND to `{memoryPath}`:
207
+
208
+ IF {autoStarted}:
209
+ ```json
210
+ {"timestamp":"{now}","action":"bug_reported_started","taskId":"{taskId}","sessionId":"{sessionId}","description":"{bugDescription}","priority":"{severity}"}
211
+ ```
212
+
213
+ ELSE:
214
+ ```json
215
+ {"timestamp":"{now}","action":"bug_reported","taskId":"{taskId}","description":"{bugDescription}","priority":"{severity}"}
216
+ ```
101
217
 
218
+ ## Output
219
+
220
+ ### Auto-Started (default)
221
+ ```
222
+ 🐛 [{severity}] {description}
223
+
224
+ Started working on fix
225
+ Session: {sessionId}
226
+
227
+ /p:done when fixed
228
+ ```
229
+
230
+ ### Queue Only (--later flag)
102
231
  ```
103
232
  🐛 [{severity}] {description}
104
233
 
105
234
  Queued at position #{position}
106
235
  Priority: {severity}
107
236
 
108
- Start: /p:now "🐛 {description}"
237
+ Start: /p:now "{bugDescription}"
238
+ ```
239
+
240
+ ### Already Working on Something
241
+ ```
242
+ 🐛 [{severity}] {description}
243
+
244
+ Queued at position #{position}
245
+ Priority: {severity}
246
+
247
+ ⚠️ Already working on: {conflictTask}
248
+ Complete current task first or use /p:pause
249
+
250
+ Start later: /p:now "{bugDescription}"
109
251
  ```
110
252
 
111
253
  ## Examples
112
254
 
113
- ### Critical Bug
255
+ ### Example 1: Auto-Start Bug Fix (default)
256
+ ```
257
+ Input: /p:bug login form not validating
258
+
259
+ Output:
260
+ 🐛 [medium] login form not validating
261
+
262
+ Started working on fix
263
+ Session: a1b2c3d4-...
264
+
265
+ /p:done when fixed
266
+ ```
267
+
268
+ ### Example 2: Queue for Later
269
+ ```
270
+ Input: /p:bug minor typo in footer --later
271
+
272
+ Output:
273
+ 🐛 [low] minor typo in footer
274
+
275
+ Queued at position #5
276
+ Priority: low
277
+
278
+ Start: /p:now "🐛 minor typo in footer"
279
+ ```
280
+
281
+ ### Example 3: Critical Bug (Auto-Start)
114
282
  ```
115
283
  Input: /p:bug production server is down
116
284
 
117
285
  Output:
118
286
  🐛 [critical] production server is down
119
287
 
120
- Queued at position #1
121
- Priority: critical
288
+ Started working on fix
289
+ Session: x9y8z7w6-...
122
290
 
123
- Start: /p:now "🐛 production server is down"
291
+ /p:done when fixed
124
292
  ```
125
293
 
126
- ### Normal Bug
294
+ ### Example 4: Already Working on Something
127
295
  ```
128
- Input: /p:bug login form validation not working
296
+ Input: /p:bug payment not processing
129
297
 
130
298
  Output:
131
- 🐛 [medium] login form validation not working
299
+ 🐛 [high] payment not processing
300
+
301
+ Queued at position #1
302
+ Priority: high
132
303
 
133
- Queued at position #3
134
- Priority: medium
304
+ ⚠️ Already working on: implement auth flow
305
+ Complete current task first or use /p:pause
135
306
 
136
- Start: /p:now "🐛 login form validation not working"
307
+ Start later: /p:now "🐛 payment not processing"
137
308
  ```
309
+
310
+ ## Error Handling
311
+
312
+ | Error | Response | Action |
313
+ |-------|----------|--------|
314
+ | No project | "No prjct project" | STOP |
315
+ | Write fails | Log warning | CONTINUE |