prjct-cli 0.8.8 → 0.9.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.
- package/CHANGELOG.md +140 -0
- package/core/agentic/agent-router.js +482 -0
- package/core/agentic/command-executor.js +70 -15
- package/core/agentic/context-filter.js +545 -0
- package/core/agentic/prompt-builder.js +48 -38
- package/core/command-registry.js +104 -164
- package/core/domain/agent-generator.js +55 -44
- package/core/domain/architecture-generator.js +561 -0
- package/core/domain/task-stack.js +496 -0
- package/package.json +1 -1
- package/templates/commands/analyze.md +10 -53
- package/templates/commands/bug.md +11 -70
- package/templates/commands/build.md +7 -37
- package/templates/commands/cleanup.md +9 -32
- package/templates/commands/dash.md +241 -0
- package/templates/commands/design.md +5 -28
- package/templates/commands/done.md +6 -20
- package/templates/commands/feature.md +11 -83
- package/templates/commands/help.md +9 -38
- package/templates/commands/idea.md +7 -28
- package/templates/commands/init.md +10 -89
- package/templates/commands/next.md +6 -26
- package/templates/commands/now.md +6 -26
- package/templates/commands/pause.md +18 -0
- package/templates/commands/progress.md +5 -50
- package/templates/commands/recap.md +5 -54
- package/templates/commands/resume.md +97 -0
- package/templates/commands/ship.md +13 -68
- package/templates/commands/status.md +7 -32
- package/templates/commands/sync.md +7 -24
- package/templates/commands/work.md +44 -0
- package/templates/commands/workflow.md +3 -25
- package/templates/planning-methodology.md +195 -0
|
@@ -1,102 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
allowed-tools: [Read, Write, Bash]
|
|
3
|
-
description: 'Initialize prjct
|
|
3
|
+
description: 'Initialize prjct'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /p:init
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Flow
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/p:init "[idea]" # New blank project (architect mode)
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Flow: Existing Project
|
|
16
|
-
|
|
17
|
-
1. Generate: project ID from path hash
|
|
18
|
-
2. Create: `~/.prjct-cli/projects/{id}/` structure (including `agents/`)
|
|
19
|
-
3. Write: `.prjct/prjct.config.json`
|
|
20
|
-
4. Run: `/p:analyze` to understand stack
|
|
21
|
-
5. Generate: agents based on stack
|
|
22
|
-
6. Log: `memory/context.jsonl`
|
|
23
|
-
|
|
24
|
-
## Flow: Blank Project (Architect Mode)
|
|
25
|
-
|
|
26
|
-
1. Generate: project ID
|
|
27
|
-
2. Activate: ARCHITECT role
|
|
28
|
-
3. Analyze: idea/requirements
|
|
29
|
-
4. Recommend: tech stack options (Next.js, React, Vue, etc.)
|
|
30
|
-
5. User confirms: choice
|
|
31
|
-
6. Create: directory structure + base files
|
|
32
|
-
7. Generate: initial roadmap
|
|
33
|
-
8. Generate: agents
|
|
34
|
-
9. Ask: "Ready to start with the first feature?"
|
|
35
|
-
|
|
36
|
-
## Directory Structure
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
~/.prjct-cli/projects/{id}/
|
|
40
|
-
├── core/ # now.md, next.md, context.md
|
|
41
|
-
├── progress/ # shipped.md, metrics.md
|
|
42
|
-
├── planning/ # ideas.md, roadmap.md
|
|
43
|
-
├── analysis/ # repo-summary.md
|
|
44
|
-
├── agents/ # AI agent definitions
|
|
45
|
-
└── memory/ # context.jsonl
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Config Format
|
|
49
|
-
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"version": "0.6.0",
|
|
53
|
-
"projectId": "{id}",
|
|
54
|
-
"dataPath": "~/.prjct-cli/projects/{id}",
|
|
55
|
-
"author": {
|
|
56
|
-
"name": "{from git}",
|
|
57
|
-
"email": "{from git}",
|
|
58
|
-
"github": "{from remote}"
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
10
|
+
**Existing**: ID → dirs → config → analyze → agents
|
|
11
|
+
**Blank + idea**: ARCHITECT → analyze → recommend stack → create → roadmap
|
|
62
12
|
|
|
63
|
-
##
|
|
13
|
+
## Structure
|
|
14
|
+
`~/.prjct-cli/projects/{id}/`: core, progress, planning, analysis, agents, memory
|
|
64
15
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
📁 Data: ~/.prjct-cli/projects/{id}
|
|
69
|
-
📝 Config: .prjct/prjct.config.json
|
|
70
|
-
📊 Analysis: {stack_summary}
|
|
71
|
-
🤖 Agents: {N} agents generated
|
|
72
|
-
|
|
73
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
74
|
-
🎯 WHAT DO YOU WANT TO DO FIRST?
|
|
75
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
76
|
-
|
|
77
|
-
5 clear paths:
|
|
78
|
-
1. 🚀 Add feature → /p:feature "{desc}"
|
|
79
|
-
2. 🐛 Fix bug → /p:bug "{desc}"
|
|
80
|
-
3. 🔍 Analyze deeper → /p:analyze
|
|
81
|
-
4. 📊 See status → /p:status or /p:recap
|
|
82
|
-
5. 💡 Not sure? → /p:suggest or /p:help
|
|
83
|
-
|
|
84
|
-
💬 OR JUST TELL ME: "I want to add authentication" / "What should I do?"
|
|
85
|
-
|
|
86
|
-
Let's ship something! 🚀
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Response: Blank Project
|
|
90
|
-
|
|
91
|
-
After ARCHITECT MODE activates and user confirms stack:
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
✅ Structure created!
|
|
16
|
+
## Config
|
|
17
|
+
`.prjct/prjct.config.json`: version, projectId, dataPath, author
|
|
95
18
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
📋 Initial roadmap: {N} features
|
|
99
|
-
🤖 Agents: {N} specialists generated
|
|
19
|
+
## Response
|
|
20
|
+
`✅ Init | {stack} | {N} agents | Next: /p:feature or /p:help`
|
|
100
21
|
|
|
101
22
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
102
23
|
🎯 WHAT'S NEXT?
|
|
@@ -1,34 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
allowed-tools: [Read]
|
|
3
|
-
description: 'Show priority queue
|
|
3
|
+
description: 'Show priority queue'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /p:next
|
|
7
7
|
|
|
8
8
|
## Flow
|
|
9
|
+
1. Check `core/now.md` → warn if active
|
|
10
|
+
2. Read `core/next.md` → top 5 non-blocked
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## Response (active task)
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
⚠️ Active: {current_task}
|
|
18
|
-
Started: {time_ago}
|
|
19
|
-
|
|
20
|
-
Complete first: /p:done
|
|
21
|
-
|
|
22
|
-
📋 Queue preview:
|
|
23
|
-
{top_5_numbered}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Response (no active)
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
📋 Priority Queue
|
|
30
|
-
|
|
31
|
-
{numbered_tasks_1_to_5}
|
|
32
|
-
|
|
33
|
-
/p:build {1-5} | /p:build "{task}"
|
|
34
|
-
```
|
|
12
|
+
## Response
|
|
13
|
+
**Active**: `⚠️ Active: {task} | Complete: /p:done`
|
|
14
|
+
**Queue**: Show 1-5 → `/p:work {N}`
|
|
@@ -1,34 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
allowed-tools: [Read, Write, GetTimestamp
|
|
3
|
-
description: '
|
|
4
|
-
timestamp-rule: '
|
|
2
|
+
allowed-tools: [Read, Write, GetTimestamp]
|
|
3
|
+
description: 'Current task'
|
|
4
|
+
timestamp-rule: 'GetTimestamp() for timestamps'
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# /p:now
|
|
8
8
|
|
|
9
|
-
## Usage
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
/p:now # Show
|
|
13
|
-
/p:now [task] # Set
|
|
14
|
-
```
|
|
15
|
-
|
|
16
9
|
## Flow
|
|
17
|
-
|
|
18
|
-
**
|
|
19
|
-
|
|
20
|
-
**Set**:
|
|
21
|
-
|
|
22
|
-
1. Write: `core/now.md` with task + timestamp (use GetTimestamp() tool)
|
|
23
|
-
2. Update: `core/context.md`, `progress/metrics.md`
|
|
24
|
-
3. Log: `memory/context.jsonl` (use GetTimestamp() tool)
|
|
10
|
+
**Show**: Read `core/now.md`
|
|
11
|
+
**Set**: Write now.md + {GetTimestamp()} → Log
|
|
25
12
|
|
|
26
13
|
## Response
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
🎯 {task}
|
|
30
|
-
Started: {time}
|
|
31
|
-
|
|
32
|
-
Done? → /p:done
|
|
33
|
-
Stuck? → /p:stuck
|
|
34
|
-
```
|
|
14
|
+
`🎯 {task} | Started: {time} | Done: /p:done`
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: [Read, Write, GetTimestamp]
|
|
3
|
+
description: 'Pause task'
|
|
4
|
+
timestamp-rule: 'GetTimestamp() for paused'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /p:pause
|
|
8
|
+
|
|
9
|
+
## Check
|
|
10
|
+
Requires active in `core/stack.jsonl`
|
|
11
|
+
|
|
12
|
+
## Flow
|
|
13
|
+
1. Find active → Set status='paused', paused={GetTimestamp()}
|
|
14
|
+
2. Update stack.jsonl + now.md
|
|
15
|
+
3. Log: `{"ts":"{GetTimestamp()}","type":"task_pause","task":"{t}"}`
|
|
16
|
+
|
|
17
|
+
## Response
|
|
18
|
+
`⏸️ {task} | Active: {duration} | Resume: /p:resume`
|
|
@@ -1,59 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
allowed-tools: [Read]
|
|
3
|
-
description: 'Progress metrics
|
|
3
|
+
description: 'Progress metrics'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /p:progress
|
|
7
7
|
|
|
8
|
-
## Usage
|
|
9
|
-
|
|
10
|
-
```
|
|
11
|
-
/p:progress [day|week|month] # Default: week
|
|
12
|
-
```
|
|
13
|
-
|
|
14
8
|
## Flow
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
3. **Read sessions**: Query `progress/sessions/{YYYY-MM}/` for date range
|
|
19
|
-
4. **Aggregate**: Ships, tasks, duration from sessions
|
|
20
|
-
5. **Calculate**: Velocity, trends, quality metrics
|
|
21
|
-
6. Display: detailed metrics
|
|
22
|
-
|
|
23
|
-
## Session Queries by Period
|
|
24
|
-
|
|
25
|
-
```javascript
|
|
26
|
-
// Day: Today's sessions
|
|
27
|
-
const today = await readSessionFile('progress/sessions', today)
|
|
28
|
-
const shipped = today.filter(s => s.type === 'feature_ship')
|
|
29
|
-
|
|
30
|
-
// Week: Last 7 days
|
|
31
|
-
const weekSessions = await readSessions('progress/sessions', -7, 'now')
|
|
32
|
-
const velocity = weekSessions.filter(s => s.type === 'feature_ship').length / 7
|
|
33
|
-
|
|
34
|
-
// Month: Last 30 days
|
|
35
|
-
const monthSessions = await readSessions('progress/sessions', -30, 'now')
|
|
36
|
-
const totalTime = monthSessions
|
|
37
|
-
.filter(s => s.type === 'feature_ship')
|
|
38
|
-
.reduce((sum, s) => sum + parseTime(s.duration), 0)
|
|
39
|
-
```
|
|
9
|
+
1. Parse period (day/week/month, default: week)
|
|
10
|
+
2. Read sessions → filter by date range
|
|
11
|
+
3. Aggregate: ships, velocity, trends
|
|
40
12
|
|
|
41
13
|
## Response
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
📈 PROGRESS - This {period}
|
|
45
|
-
━━━━━━━━━━━━━━━━━━━━━
|
|
46
|
-
|
|
47
|
-
🚀 SHIPPED: {N} features
|
|
48
|
-
⚡ VELOCITY: {X.X} features/day
|
|
49
|
-
📊 TREND: {↗ +X%}
|
|
50
|
-
|
|
51
|
-
Recent ships:
|
|
52
|
-
• ✅ {feature} ({time_ago})
|
|
53
|
-
• ✅ {feature} ({time_ago})
|
|
54
|
-
|
|
55
|
-
🏆 Best day: {day} ({N} features)
|
|
56
|
-
🔥 Streak: {N} days
|
|
57
|
-
|
|
58
|
-
/p:ship | /p:status
|
|
59
|
-
```
|
|
14
|
+
`📈 {period} | 🚀 {N} shipped | ⚡ {velocity}/day | Trend: {↗%}`
|
|
@@ -1,63 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
allowed-tools: [Read]
|
|
3
|
-
description: 'Project
|
|
3
|
+
description: 'Project overview'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /p:recap
|
|
7
7
|
|
|
8
|
-
## Usage
|
|
9
|
-
|
|
10
|
-
```
|
|
11
|
-
/p:recap # Full overview
|
|
12
|
-
/p:context # Alias for recap
|
|
13
|
-
```
|
|
14
|
-
|
|
15
8
|
## Flow
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
3. **Aggregate**: Metrics from sessions (features added, tasks done, ships)
|
|
20
|
-
4. **Display**: Comprehensive context and status
|
|
21
|
-
|
|
22
|
-
## Session Queries
|
|
23
|
-
|
|
24
|
-
```javascript
|
|
25
|
-
// Aggregate last 7 days activity
|
|
26
|
-
const recentSessions = await readSessions('*/sessions', -7, 'now')
|
|
27
|
-
const shipped = recentSessions.filter(s => s.type === 'feature_ship').length
|
|
28
|
-
const tasksComplete = recentSessions.filter(s => s.type === 'task_complete').length
|
|
29
|
-
const velocity = shipped / 7 // features per day
|
|
30
|
-
```
|
|
9
|
+
1. Read: core/, progress/, planning/ (30 days)
|
|
10
|
+
2. Read: sessions (7 days) → aggregate metrics
|
|
11
|
+
3. Show: project, focus, progress, activity
|
|
31
12
|
|
|
32
13
|
## Response
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
📊 PROJECT OVERVIEW
|
|
36
|
-
━━━━━━━━━━━━━━━━━━
|
|
37
|
-
|
|
38
|
-
📦 PROJECT
|
|
39
|
-
Type: {type}
|
|
40
|
-
Stack: {stack}
|
|
41
|
-
|
|
42
|
-
🎯 CURRENT FOCUS
|
|
43
|
-
Task: {task}
|
|
44
|
-
Started: {time_ago} ({duration})
|
|
45
|
-
|
|
46
|
-
📈 PROGRESS
|
|
47
|
-
Shipped: {X} this week
|
|
48
|
-
Velocity: {X.X} features/day
|
|
49
|
-
|
|
50
|
-
💡 PLANNING
|
|
51
|
-
Queue: {N} tasks
|
|
52
|
-
Ideas: {M} captured
|
|
53
|
-
Roadmap: {X}% complete
|
|
54
|
-
|
|
55
|
-
🔄 RECENT ACTIVITY
|
|
56
|
-
• {event}: {desc} ({time_ago})
|
|
57
|
-
• {event}: {desc} ({time_ago})
|
|
58
|
-
• {event}: {desc} ({time_ago})
|
|
59
|
-
|
|
60
|
-
{motivational_message}
|
|
61
|
-
|
|
62
|
-
/p:now | /p:status | /p:next
|
|
63
|
-
```
|
|
14
|
+
`📊 {project} | 🎯 {task} | 📈 {shipped}/week | Queue: {N}`
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: [Read, Write, GetTimestamp]
|
|
3
|
+
description: 'Resume paused task'
|
|
4
|
+
timestamp-rule: 'GetTimestamp() for resumed'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /p:resume
|
|
8
|
+
|
|
9
|
+
## Check
|
|
10
|
+
- Requires paused tasks
|
|
11
|
+
- Blocks if active exists
|
|
12
|
+
|
|
13
|
+
## Flow
|
|
14
|
+
1. Select: last/ID/# → Set status='active', resumed={GetTimestamp()}
|
|
15
|
+
2. Update stack.jsonl + now.md → Log resume
|
|
16
|
+
|
|
17
|
+
## Response
|
|
18
|
+
`▶️ {task} | Paused: {duration} | {agent} | Done: /p:done`
|
|
19
|
+
|
|
20
|
+
## Examples
|
|
21
|
+
|
|
22
|
+
### Resume last paused
|
|
23
|
+
```
|
|
24
|
+
/p:resume
|
|
25
|
+
→ Resumes most recently paused task
|
|
26
|
+
→ Picks up exactly where you left off
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Resume specific task
|
|
30
|
+
```
|
|
31
|
+
/p:resume task-1234567890
|
|
32
|
+
→ Resumes task by ID
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Resume by number
|
|
36
|
+
```
|
|
37
|
+
/p:resume 2
|
|
38
|
+
→ Resumes 2nd task from paused list
|
|
39
|
+
→ Useful when shown list by /p:stack
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Stack Display Format
|
|
43
|
+
|
|
44
|
+
When multiple paused tasks exist:
|
|
45
|
+
```
|
|
46
|
+
⏸️ Paused tasks (3):
|
|
47
|
+
|
|
48
|
+
1. Fix login validation bug
|
|
49
|
+
Paused 10m ago | Active time: 45m
|
|
50
|
+
|
|
51
|
+
2. Implement dark mode toggle
|
|
52
|
+
Paused 2h ago | Active time: 1h 20m
|
|
53
|
+
|
|
54
|
+
3. Update documentation
|
|
55
|
+
Paused yesterday | Active time: 30m
|
|
56
|
+
|
|
57
|
+
Resume: /p:resume {1-3}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Natural Language Support
|
|
61
|
+
|
|
62
|
+
Detect intent for resume:
|
|
63
|
+
- "p. resume" → Resume last paused
|
|
64
|
+
- "p. continue" → Resume last paused
|
|
65
|
+
- "p. back to {task}" → Resume matching task
|
|
66
|
+
- "p. resume 2" → Resume task #2
|
|
67
|
+
|
|
68
|
+
## Error Handling
|
|
69
|
+
|
|
70
|
+
### No paused tasks
|
|
71
|
+
```
|
|
72
|
+
❌ No paused tasks to resume
|
|
73
|
+
|
|
74
|
+
See what's in queue:
|
|
75
|
+
→ /p:next
|
|
76
|
+
|
|
77
|
+
Start new task:
|
|
78
|
+
→ /p:work "{task}"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Active task exists
|
|
82
|
+
```
|
|
83
|
+
❌ Already working on: {current_task}
|
|
84
|
+
|
|
85
|
+
Options:
|
|
86
|
+
→ /p:done (complete current)
|
|
87
|
+
→ /p:pause (pause current)
|
|
88
|
+
→ /p:switch {task_id} (atomic switch)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Invalid task ID
|
|
92
|
+
```
|
|
93
|
+
❌ Task {id} not found or not paused
|
|
94
|
+
|
|
95
|
+
See paused tasks:
|
|
96
|
+
→ /p:stack
|
|
97
|
+
```
|
|
@@ -1,82 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
allowed-tools: [Read, Write, Bash, GetTimestamp, GetDate]
|
|
3
|
-
description: 'Ship feature
|
|
4
|
-
timestamp-rule: '
|
|
3
|
+
description: 'Ship feature workflow'
|
|
4
|
+
timestamp-rule: 'GetTimestamp() and GetDate() for timestamps'
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# /p:ship
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Workflow (non-blocking)
|
|
10
|
+
1. Lint → Tests → Docs update
|
|
11
|
+
2. Version bump → CHANGELOG
|
|
12
|
+
3. Commit + push (prjct footer)
|
|
13
|
+
4. Log: `progress/sessions/{YY-MM}/{DD}.jsonl`
|
|
14
|
+
5. Update: `progress/shipped.md` (30 days)
|
|
15
|
+
6. Recommend: compact
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
/p:ship "<feature>" # Named feature
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Complete Workflow (Automated)
|
|
17
|
-
|
|
18
|
-
1. ✅ **Lint checks** → Run linters (non-blocking if fail)
|
|
19
|
-
2. ✅ **Run tests** → Execute test suite (non-blocking if fail)
|
|
20
|
-
3. ✅ **Update docs** → README, API docs, component docs if needed
|
|
21
|
-
4. ✅ **Update version** → Bump version (patch/minor based on changes)
|
|
22
|
-
5. ✅ **Update CHANGELOG** → Add entry with metadata
|
|
23
|
-
6. ✅ **Git commit** → With prjct footer format
|
|
24
|
-
7. ✅ **Git push** → Push to remote
|
|
25
|
-
8. ✅ **Log to session** → Append to `progress/sessions/{YYYY-MM}/{YYYY-MM-DD}.jsonl`
|
|
26
|
-
9. ✅ **Update index** → Prepend to `progress/shipped.md` (last 30 days only)
|
|
27
|
-
10. ✅ **Update roadmap** → Mark as complete in `planning/roadmap.md`
|
|
28
|
-
11. ✅ **Recommend compact** → Suggest conversation compacting
|
|
29
|
-
|
|
30
|
-
## Session Log Format
|
|
31
|
-
|
|
32
|
-
Append to `progress/sessions/{YYYY-MM}/{YYYY-MM-DD}.jsonl`:
|
|
17
|
+
## Data
|
|
18
|
+
Session: `{"ts":"{GetTimestamp()}","type":"feature_ship","name":"{f}","agent":"{a}","version":"{v}"}`
|
|
33
19
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```jsonl
|
|
37
|
-
{"ts":"{GetTimestamp()}","type":"feature_ship","name":"{feature}","tasks_done":{N},"duration":"{Xh}","agent":"{agent}","version":"{X.Y.Z}"}
|
|
20
|
+
Commit footer:
|
|
38
21
|
```
|
|
39
|
-
|
|
40
|
-
## Commit Message Format
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
feat: {feature_name}
|
|
44
|
-
|
|
45
|
-
Agent: {agent}
|
|
46
|
-
Dev: @{github_dev}
|
|
47
|
-
Complexity: {complexity}
|
|
48
|
-
Time: {actual_time}
|
|
49
|
-
|
|
50
22
|
🤖 Generated with [p/](https://www.prjct.app/)
|
|
51
23
|
Designed for [Claude](https://www.anthropic.com/claude)
|
|
52
24
|
```
|
|
53
25
|
|
|
54
|
-
**CRITICAL**: This footer format MUST be used in ALL commits made by prjct.
|
|
55
|
-
|
|
56
26
|
## Response
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
🚀 {feature} shipped!
|
|
60
|
-
|
|
61
|
-
Workflow completed:
|
|
62
|
-
✅ Lint checks: {pass/fail_continued}
|
|
63
|
-
✅ Tests: {pass/fail_continued}
|
|
64
|
-
✅ Docs: updated
|
|
65
|
-
✅ Version: {old} → {new}
|
|
66
|
-
✅ CHANGELOG: updated
|
|
67
|
-
✅ Git: committed + pushed
|
|
68
|
-
|
|
69
|
-
{agent_icon} {agent} • {actual_time}
|
|
70
|
-
|
|
71
|
-
💡 Recommendation: Compact conversation now
|
|
72
|
-
(Keeps context clean for next feature)
|
|
73
|
-
|
|
74
|
-
/p:feature | /p:done
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## Important Notes
|
|
78
|
-
|
|
79
|
-
- **Tests/Lint failures DO NOT block shipping** → User sees results and decides
|
|
80
|
-
- **ALWAYS** updates version and CHANGELOG
|
|
81
|
-
- **ALWAYS** commits and pushes if workflow completes
|
|
82
|
-
- Archive `shipped.md` entries > 30 days to `progress/archive/shipped-{YYYY-MM}.md`
|
|
27
|
+
`🚀 {feature} | {agent} | {time} | v{version} | Next: compact`
|
|
@@ -1,42 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
allowed-tools: [Read]
|
|
3
|
-
description: 'KPI dashboard
|
|
3
|
+
description: 'KPI dashboard'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /p:status
|
|
7
7
|
|
|
8
8
|
## Flow
|
|
9
|
+
Read metrics → Calculate KPIs → ASCII dashboard
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
2. Calculate: metrics (sprint %, tasks complete, days since ship, etc.)
|
|
12
|
-
3. Render: `ASCIIGraphics.createDashboard(data)`
|
|
13
|
-
|
|
14
|
-
## Data Structure
|
|
15
|
-
|
|
16
|
-
```js
|
|
17
|
-
{
|
|
18
|
-
sprintProgress: (complete / total) * 100,
|
|
19
|
-
tasksComplete: count,
|
|
20
|
-
tasksTotal: count,
|
|
21
|
-
ideasCount: count,
|
|
22
|
-
daysSinceShip: days,
|
|
23
|
-
currentTask: string,
|
|
24
|
-
taskTime: 'Xh Ym ago'
|
|
25
|
-
}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Output (Catppuccin Mocha)
|
|
29
|
-
|
|
11
|
+
## Display
|
|
30
12
|
```
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
│ Days Since Ship 3 │
|
|
36
|
-
├─ Current Focus ─────────────────┤
|
|
37
|
-
│ → {current_task} │
|
|
38
|
-
│ Started: {time_ago} │
|
|
39
|
-
└─────────────────────────────────┘
|
|
13
|
+
Sprint: [████░] {%}
|
|
14
|
+
Tasks: {done}/{total}
|
|
15
|
+
Ship: {days} ago
|
|
16
|
+
Focus: {task}
|
|
40
17
|
```
|
|
41
|
-
|
|
42
|
-
**Colors**: Mauve borders, Teal progress, Sapphire highlights, Green/Yellow/Red for status
|
|
@@ -1,34 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
allowed-tools: [Read, Write, Bash, TodoWrite]
|
|
3
|
-
description: 'Sync
|
|
3
|
+
description: 'Sync state + generate agents'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /p:sync
|
|
7
7
|
|
|
8
8
|
## Flow
|
|
9
|
+
1. Execute `/p:analyze`
|
|
10
|
+
2. Read `analysis/repo-summary.md`
|
|
11
|
+
3. Generate agents per technology → `agents/`
|
|
12
|
+
4. Log to memory
|
|
9
13
|
|
|
10
|
-
|
|
11
|
-
2. **Read**: `analysis/repo-summary.md`
|
|
12
|
-
3. **Generate**: Dynamic agents for each technology
|
|
13
|
-
4. Log: changes to `memory/context.jsonl`
|
|
14
|
-
|
|
15
|
-
## Agent Generation
|
|
16
|
-
|
|
17
|
-
**See `templates/agents/AGENTS.md` for complete reference** with examples and guidelines.
|
|
18
|
-
|
|
19
|
-
Use `generator.generateDynamicAgent(name, config)` for each specialist.
|
|
14
|
+
Use: `generateDynamicAgent(name, config)`
|
|
20
15
|
|
|
21
16
|
## Response
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
🔄 Sync complete!
|
|
25
|
-
|
|
26
|
-
🤖 Agents Generated:
|
|
27
|
-
• {agent_name_1} - {role}
|
|
28
|
-
• {agent_name_2} - {role}
|
|
29
|
-
|
|
30
|
-
📋 Based on: analysis/repo-summary.md
|
|
31
|
-
💡 See templates/agents/AGENTS.md for generation reference
|
|
32
|
-
|
|
33
|
-
/p:context
|
|
34
|
-
```
|
|
17
|
+
`🔄 Synced | Generated: {agents} | Next: /p:context`
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: [Read, Write, GetTimestamp]
|
|
3
|
+
description: 'Show current task or start new one'
|
|
4
|
+
timestamp-rule: 'GetTimestamp() for all timestamps'
|
|
5
|
+
required-agent: auto-detect
|
|
6
|
+
enforce-agent: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /p:work
|
|
10
|
+
|
|
11
|
+
## Flow
|
|
12
|
+
|
|
13
|
+
**No params**: Show active task from `core/stack.jsonl`
|
|
14
|
+
**With task**: Start new (pause current if exists)
|
|
15
|
+
**With number**: Start task #N from `core/next.md`
|
|
16
|
+
|
|
17
|
+
### Starting Task
|
|
18
|
+
1. Check active → Pause if exists
|
|
19
|
+
2. Parse input → String or number
|
|
20
|
+
3. **ASSIGN AGENT** → Detect expertise, filter context (70-90% reduction)
|
|
21
|
+
4. Create entry → status='active', agent, filtered_context
|
|
22
|
+
5. Update → `core/stack.jsonl` + `core/now.md`
|
|
23
|
+
6. Log → Agent usage to memory
|
|
24
|
+
|
|
25
|
+
## Responses
|
|
26
|
+
|
|
27
|
+
**Active**: `🎯 {task} | {agent} | {duration}`
|
|
28
|
+
**Empty**: `💤 No active task | {paused_count} paused`
|
|
29
|
+
**Started**: `🚀 {task} | Agent: {agent}`
|
|
30
|
+
**Switched**: `⏸️ Paused {old} → Started {new}`
|
|
31
|
+
|
|
32
|
+
## Agent Detection
|
|
33
|
+
Keywords → Agent:
|
|
34
|
+
- UI/frontend/React → `fe`
|
|
35
|
+
- API/backend/database → `be`
|
|
36
|
+
- design/UX → `ux`
|
|
37
|
+
- test/QA/bug → `qa`
|
|
38
|
+
- docs/README → `docs`
|
|
39
|
+
- else → `general`
|
|
40
|
+
|
|
41
|
+
## Errors
|
|
42
|
+
**Active exists**: Show options (pause/done/switch)
|
|
43
|
+
**Invalid #**: Task not in queue
|
|
44
|
+
**Migration**: Replaces /p:now and /p:build
|