popilot 0.5.0 → 0.7.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/adapters/codex/.codex/commands/_domain.md.hbs +33 -0
- package/adapters/codex/.codex/commands/analytics.md.hbs +55 -0
- package/adapters/codex/.codex/commands/daily.md.hbs +301 -0
- package/adapters/codex/.codex/commands/dev.md.hbs +62 -0
- package/adapters/codex/.codex/commands/gtm.md +82 -0
- package/adapters/codex/.codex/commands/handoff.md +259 -0
- package/adapters/codex/.codex/commands/market.md +120 -0
- package/adapters/codex/.codex/commands/metrics.md +123 -0
- package/adapters/codex/.codex/commands/oscar-loop.md +436 -0
- package/adapters/codex/.codex/commands/party.md +85 -0
- package/adapters/codex/.codex/commands/plan.md +43 -0
- package/adapters/codex/.codex/commands/research.md +203 -0
- package/adapters/codex/.codex/commands/retro.md +68 -0
- package/adapters/codex/.codex/commands/save.md +440 -0
- package/adapters/codex/.codex/commands/sessions.md +139 -0
- package/adapters/codex/.codex/commands/sprint.md +106 -0
- package/adapters/codex/.codex/commands/start.md +396 -0
- package/adapters/codex/.codex/commands/strategy.md +41 -0
- package/adapters/codex/.codex/commands/task.md +220 -0
- package/adapters/codex/.codex/commands/tracking.md +116 -0
- package/adapters/codex/.codex/commands/validate.md +58 -0
- package/adapters/codex/AGENTS.md.hbs +210 -0
- package/adapters/codex/manifest.yaml +36 -0
- package/adapters/gemini/.gemini/commands/_domain.md.hbs +33 -0
- package/adapters/gemini/.gemini/commands/analytics.md.hbs +55 -0
- package/adapters/gemini/.gemini/commands/daily.md.hbs +301 -0
- package/adapters/gemini/.gemini/commands/dev.md.hbs +62 -0
- package/adapters/gemini/.gemini/commands/gtm.md +82 -0
- package/adapters/gemini/.gemini/commands/handoff.md +259 -0
- package/adapters/gemini/.gemini/commands/market.md +120 -0
- package/adapters/gemini/.gemini/commands/metrics.md +123 -0
- package/adapters/gemini/.gemini/commands/oscar-loop.md +436 -0
- package/adapters/gemini/.gemini/commands/party.md +85 -0
- package/adapters/gemini/.gemini/commands/plan.md +43 -0
- package/adapters/gemini/.gemini/commands/research.md +203 -0
- package/adapters/gemini/.gemini/commands/retro.md +68 -0
- package/adapters/gemini/.gemini/commands/save.md +440 -0
- package/adapters/gemini/.gemini/commands/sessions.md +139 -0
- package/adapters/gemini/.gemini/commands/sprint.md +106 -0
- package/adapters/gemini/.gemini/commands/start.md +396 -0
- package/adapters/gemini/.gemini/commands/strategy.md +41 -0
- package/adapters/gemini/.gemini/commands/task.md +220 -0
- package/adapters/gemini/.gemini/commands/tracking.md +116 -0
- package/adapters/gemini/.gemini/commands/validate.md +58 -0
- package/adapters/gemini/GEMINI.md.hbs +210 -0
- package/adapters/gemini/manifest.yaml +36 -0
- package/bin/cli.mjs +215 -4
- package/lib/doctor.mjs +38 -1
- package/lib/hydrate.mjs +15 -0
- package/lib/industry-presets.mjs +135 -0
- package/lib/scaffold.mjs +5 -0
- package/lib/setup-wizard.mjs +71 -2
- package/package.json +1 -1
- package/scaffold/.context/agents/TEMPLATE.md +14 -0
- package/scaffold/.context/agents/analyst.md.hbs +3 -3
- package/scaffold/.context/agents/developer.md.hbs +5 -5
- package/scaffold/.context/agents/gtm-strategist.md.hbs +3 -3
- package/scaffold/.context/agents/handoff-specialist.md.hbs +18 -18
- package/scaffold/.context/agents/market-researcher.md.hbs +6 -6
- package/scaffold/.context/agents/orchestrator.md.hbs +8 -8
- package/scaffold/.context/agents/planner.md.hbs +6 -6
- package/scaffold/.context/agents/qa.md.hbs +5 -5
- package/scaffold/.context/agents/researcher.md.hbs +33 -6
- package/scaffold/.context/agents/strategist.md.hbs +8 -8
- package/scaffold/.context/agents/tracking-governor.md.hbs +2 -2
- package/scaffold/.context/project.yaml.example +25 -0
- package/scaffold/mcp-pm/package.json +19 -0
- package/scaffold/mcp-pm/src/api-client.ts +69 -0
- package/scaffold/mcp-pm/src/index.ts +660 -0
- package/scaffold/mcp-pm/tsconfig.json +14 -0
- package/scaffold/pm-api/package.json +21 -0
- package/scaffold/pm-api/sql/schema-core.sql +331 -0
- package/scaffold/pm-api/sql/schema-docs.sql +25 -0
- package/scaffold/pm-api/sql/schema-meetings.sql +17 -0
- package/scaffold/pm-api/sql/schema-rewards.sql +16 -0
- package/scaffold/pm-api/src/auth.ts +28 -0
- package/scaffold/pm-api/src/blockchain/adapter.ts +20 -0
- package/scaffold/pm-api/src/blockchain/tron.ts +62 -0
- package/scaffold/pm-api/src/db/adapter.ts +36 -0
- package/scaffold/pm-api/src/db/turso.ts +147 -0
- package/scaffold/pm-api/src/index.ts +114 -0
- package/scaffold/pm-api/src/mcp-tools/dashboard.ts +40 -0
- package/scaffold/pm-api/src/mcp-tools/epic.ts +67 -0
- package/scaffold/pm-api/src/mcp-tools/event.ts +89 -0
- package/scaffold/pm-api/src/mcp-tools/index.ts +11 -0
- package/scaffold/pm-api/src/mcp-tools/initiative.ts +51 -0
- package/scaffold/pm-api/src/mcp-tools/memo.ts +164 -0
- package/scaffold/pm-api/src/mcp-tools/notification.ts +37 -0
- package/scaffold/pm-api/src/mcp-tools/retro.ts +183 -0
- package/scaffold/pm-api/src/mcp-tools/sprint.ts +204 -0
- package/scaffold/pm-api/src/mcp-tools/standup.ts +136 -0
- package/scaffold/pm-api/src/mcp-tools/story.ts +230 -0
- package/scaffold/pm-api/src/mcp-tools/task.ts +187 -0
- package/scaffold/pm-api/src/mcp-tools/utils.ts +83 -0
- package/scaffold/pm-api/src/mcp.ts +871 -0
- package/scaffold/pm-api/src/nudge.ts +283 -0
- package/scaffold/pm-api/src/routes/auth.ts +32 -0
- package/scaffold/pm-api/src/routes/v2-activity.ts +27 -0
- package/scaffold/pm-api/src/routes/v2-admin.ts +165 -0
- package/scaffold/pm-api/src/routes/v2-dashboard.ts +189 -0
- package/scaffold/pm-api/src/routes/v2-docs.ts +34 -0
- package/scaffold/pm-api/src/routes/v2-initiatives.ts +118 -0
- package/scaffold/pm-api/src/routes/v2-kickoff.ts +265 -0
- package/scaffold/pm-api/src/routes/v2-meetings.ts +324 -0
- package/scaffold/pm-api/src/routes/v2-memos.ts +257 -0
- package/scaffold/pm-api/src/routes/v2-nav.ts +260 -0
- package/scaffold/pm-api/src/routes/v2-notifications.ts +79 -0
- package/scaffold/pm-api/src/routes/v2-page-content.ts +35 -0
- package/scaffold/pm-api/src/routes/v2-pm.ts +380 -0
- package/scaffold/pm-api/src/routes/v2-policy.ts +58 -0
- package/scaffold/pm-api/src/routes/v2-retro.ts +221 -0
- package/scaffold/pm-api/src/routes/v2-rewards.ts +132 -0
- package/scaffold/pm-api/src/routes/v2-scenarios.ts +48 -0
- package/scaffold/pm-api/src/routes/v2-search.ts +32 -0
- package/scaffold/pm-api/src/routes/v2-standup.ts +127 -0
- package/scaffold/pm-api/src/routes/v2-user.ts +38 -0
- package/scaffold/pm-api/src/types.ts +11 -0
- package/scaffold/pm-api/src/utils/activity.ts +22 -0
- package/scaffold/pm-api/src/utils/admin.ts +9 -0
- package/scaffold/pm-api/src/utils/agent-notify.ts +62 -0
- package/scaffold/pm-api/src/utils/assignee.ts +69 -0
- package/scaffold/pm-api/src/utils/db.ts +45 -0
- package/scaffold/pm-api/src/utils/initiative.ts +23 -0
- package/scaffold/pm-api/src/utils/sprint-lifecycle.ts +96 -0
- package/scaffold/pm-api/tsconfig.json +15 -0
- package/scaffold/pm-api/wrangler.toml.hbs +11 -0
- package/scaffold/spec-site/package-lock.json +40 -0
- package/scaffold/spec-site/package.json +4 -1
- package/scaffold/spec-site/src/api/types.ts +6 -0
- package/scaffold/spec-site/src/components/AppHeader.vue +429 -55
- package/scaffold/spec-site/src/components/MemberSelect.vue +48 -0
- package/scaffold/spec-site/src/components/NotificationDropdown.vue +116 -0
- package/scaffold/spec-site/src/components/SearchModal.vue +102 -0
- package/scaffold/spec-site/src/components/VelocityChart.vue +77 -0
- package/scaffold/spec-site/src/composables/pmTypes.ts +15 -2
- package/scaffold/spec-site/src/composables/useDashboard.ts +221 -0
- package/scaffold/spec-site/src/composables/useMediaQuery.ts +28 -0
- package/scaffold/spec-site/src/composables/useNotification.ts +200 -0
- package/scaffold/spec-site/src/composables/usePmStore.ts +48 -1
- package/scaffold/spec-site/src/composables/useRetro.ts +6 -0
- package/scaffold/spec-site/src/composables/useStandup.ts +201 -0
- package/scaffold/spec-site/src/composables/useTheme.ts +37 -0
- package/scaffold/spec-site/src/composables/useUser.ts +19 -1
- package/scaffold/spec-site/src/features.ts +108 -0
- package/scaffold/spec-site/src/pages/AdminPage.vue +299 -0
- package/scaffold/spec-site/src/pages/DashboardPage.vue +650 -0
- package/scaffold/spec-site/src/pages/DocsHub.vue +157 -0
- package/scaffold/spec-site/src/pages/InboxPage.vue +156 -0
- package/scaffold/spec-site/src/pages/MeetingsPage.vue +294 -0
- package/scaffold/spec-site/src/pages/MyPage.vue +343 -0
- package/scaffold/spec-site/src/pages/RewardsPage.vue +266 -0
- package/scaffold/spec-site/src/pages/board/BoardAdmin.vue +422 -0
- package/scaffold/spec-site/src/pages/board/BoardEpicSection.vue +54 -0
- package/scaffold/spec-site/src/pages/board/BoardPage.vue +884 -0
- package/scaffold/spec-site/src/pages/board/BoardStoryCard.vue +67 -0
- package/scaffold/spec-site/src/pages/board/BoardTaskItem.vue +52 -0
- package/scaffold/spec-site/src/pages/board/MyTasksPage.vue +202 -0
- package/scaffold/spec-site/src/pages/board/SprintClose.vue +167 -0
- package/scaffold/spec-site/src/pages/board/SprintColumn.vue +49 -0
- package/scaffold/spec-site/src/pages/board/SprintKickoff.vue +389 -0
- package/scaffold/spec-site/src/pages/board/StatusBadge.vue +52 -0
- package/scaffold/spec-site/src/pages/board/StoryDetailPanel.vue +495 -0
- package/scaffold/spec-site/src/pages/board/TaskCard.vue +42 -0
- package/scaffold/spec-site/src/pages/retro/RetroCard.vue +36 -2
- package/scaffold/spec-site/src/pages/retro/RetroHeader.vue +82 -66
- package/scaffold/spec-site/src/pages/retro/RetroPage.vue +47 -18
- package/scaffold/spec-site/src/pages/standup/StandupEntryCard.vue +551 -0
- package/scaffold/spec-site/src/pages/standup/StandupForm.vue +68 -0
- package/scaffold/spec-site/src/pages/standup/StandupList.vue +71 -0
- package/scaffold/spec-site/src/pages/standup/StandupPage.vue +225 -0
- package/scaffold/spec-site/src/router.ts +141 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# /research - Research Mode (Activate Rita)
|
|
2
|
+
|
|
3
|
+
Activate 🎤 **Rita** (Researcher) to conduct customer insight research.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/research # Activate Rita + display menu
|
|
9
|
+
/research voc # Deep VOC interpretation
|
|
10
|
+
/research persona # Persona analysis
|
|
11
|
+
/research journey # User journey mapping
|
|
12
|
+
/research insight # Insight → hypothesis derivation
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Default Activation (`/research`)
|
|
18
|
+
|
|
19
|
+
1. Load `.context/agents/researcher.md`
|
|
20
|
+
2. Activate 🎤 Rita persona
|
|
21
|
+
3. Display workflow menu:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
🎤 I'm Rita. How can I help?
|
|
25
|
+
|
|
26
|
+
| Menu | Description |
|
|
27
|
+
|------|-------------|
|
|
28
|
+
| VOC | Deep VOC interpretation (surface complaints → real needs) |
|
|
29
|
+
| PRS | Persona analysis/update |
|
|
30
|
+
| JRN | Customer journey mapping |
|
|
31
|
+
| INT | Interview analysis |
|
|
32
|
+
| INS | Insight → hypothesis derivation |
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Deep VOC Interpretation (`/research voc`)
|
|
38
|
+
|
|
39
|
+
If `$ARGUMENTS` is `voc`:
|
|
40
|
+
|
|
41
|
+
1. Check recent VOC data (Rita collects and interprets as sole VOC pipeline owner)
|
|
42
|
+
2. Search related customer insights in NotebookLM
|
|
43
|
+
3. Perform deep interpretation:
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
## VOC Analysis: [Topic]
|
|
47
|
+
|
|
48
|
+
### Raw Samples
|
|
49
|
+
1. "[VOC 1]"
|
|
50
|
+
2. "[VOC 2]"
|
|
51
|
+
|
|
52
|
+
### Surface Complaints
|
|
53
|
+
[What the customer said]
|
|
54
|
+
|
|
55
|
+
### Hidden Needs
|
|
56
|
+
> "[Interpreted real needs]"
|
|
57
|
+
|
|
58
|
+
### Root Causes
|
|
59
|
+
1. [Cause 1]
|
|
60
|
+
2. [Cause 2]
|
|
61
|
+
|
|
62
|
+
### Hypothesis Proposal
|
|
63
|
+
- IF [condition]
|
|
64
|
+
- THEN [result]
|
|
65
|
+
- BECAUSE [based on this insight]
|
|
66
|
+
|
|
67
|
+
### Persona Connection
|
|
68
|
+
This VOC primarily comes from [persona name]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Persona Analysis (`/research persona`)
|
|
74
|
+
|
|
75
|
+
If `$ARGUMENTS` is `persona`:
|
|
76
|
+
|
|
77
|
+
1. Check existing personas
|
|
78
|
+
2. Search customer types in NotebookLM
|
|
79
|
+
3. Create/update persona card:
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
## Customer Persona: [Name]
|
|
83
|
+
|
|
84
|
+
### Profile
|
|
85
|
+
- **Characteristics**: [Demographics, experience level]
|
|
86
|
+
- **Goals**: [What they want]
|
|
87
|
+
- **Behavior Patterns**: [How they use the service]
|
|
88
|
+
|
|
89
|
+
### Pain Points
|
|
90
|
+
1. [Pain 1]
|
|
91
|
+
2. [Pain 2]
|
|
92
|
+
|
|
93
|
+
### Needs
|
|
94
|
+
- [Need 1]
|
|
95
|
+
- [Need 2]
|
|
96
|
+
|
|
97
|
+
### Opportunities
|
|
98
|
+
- [What the product can solve]
|
|
99
|
+
|
|
100
|
+
### Representative VOC
|
|
101
|
+
> "[Typical statement from this persona]"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## User Journey (`/research journey`)
|
|
107
|
+
|
|
108
|
+
If `$ARGUMENTS` is `journey`:
|
|
109
|
+
|
|
110
|
+
1. Specify a particular feature/flow
|
|
111
|
+
2. Map the journey from the customer's perspective:
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
## Customer Journey: [Feature/Flow Name]
|
|
115
|
+
|
|
116
|
+
### Step-by-Step Journey
|
|
117
|
+
| Step | Customer Action | Thoughts/Feelings | Pain Point | Opportunity |
|
|
118
|
+
|------|----------------|-------------------|------------|-------------|
|
|
119
|
+
| 1. Awareness | | | | |
|
|
120
|
+
| 2. Exploration | | | | |
|
|
121
|
+
| 3. Usage | | | | |
|
|
122
|
+
| 4. Confirmation | | | | |
|
|
123
|
+
|
|
124
|
+
### Drop-off Points
|
|
125
|
+
- [Where and why they drop off]
|
|
126
|
+
|
|
127
|
+
### Improvement Suggestions
|
|
128
|
+
- [How to improve the journey]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Insight Derivation (`/research insight`)
|
|
134
|
+
|
|
135
|
+
If `$ARGUMENTS` is `insight`:
|
|
136
|
+
|
|
137
|
+
1. Consolidate recent research results
|
|
138
|
+
2. Organize into hypothesis format for Simon:
|
|
139
|
+
|
|
140
|
+
```markdown
|
|
141
|
+
## 🎤→🎯 Handoff: [Topic] Insights
|
|
142
|
+
|
|
143
|
+
### Top Insights
|
|
144
|
+
|
|
145
|
+
#### 1. [Insight Title]
|
|
146
|
+
- **VOC**: "[Supporting quote]"
|
|
147
|
+
- **Interpretation**: [Why it matters]
|
|
148
|
+
- **Hypothesis Proposal**:
|
|
149
|
+
- IF [condition]
|
|
150
|
+
- THEN [result]
|
|
151
|
+
- BECAUSE [evidence]
|
|
152
|
+
|
|
153
|
+
### Request to Simon
|
|
154
|
+
- [ ] Prioritize hypotheses
|
|
155
|
+
- [ ] Decide on PRD inclusion
|
|
156
|
+
- [ ] Set OMTM
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## MCP Tool Auto-Integration
|
|
162
|
+
|
|
163
|
+
### NotebookLM
|
|
164
|
+
```javascript
|
|
165
|
+
// Start session
|
|
166
|
+
ask_question({
|
|
167
|
+
question: "[Customer-related question]",
|
|
168
|
+
notebook_id: "my-notebook"
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
// Follow-up question (maintain session)
|
|
172
|
+
ask_question({
|
|
173
|
+
question: "[Specific question]",
|
|
174
|
+
session_id: "[previous session ID]"
|
|
175
|
+
})
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Channel Talk Integration
|
|
179
|
+
Rita directly collects and interprets VOC:
|
|
180
|
+
```markdown
|
|
181
|
+
🎤 Rita: Checking recent CS conversations.
|
|
182
|
+
- Collected VOC: [N] items
|
|
183
|
+
- Category breakdown: [Categories]
|
|
184
|
+
→ Proceeding with deep interpretation
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Handoff Flow
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
🎤 Rita (VOC collection + interpretation)
|
|
193
|
+
↓
|
|
194
|
+
🎯 Simon (Hypothesis + PRD)
|
|
195
|
+
↓
|
|
196
|
+
📋 Penny (Execution plan)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
*Agent*: 🎤 Rita (Researcher)
|
|
202
|
+
*Connections*: 🎯 Simon (hypothesis delivery), 📊 Vicky (qualitative evidence for validation)
|
|
203
|
+
*Tools*: NotebookLM MCP, Channel Talk API
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# /retro - Sprint Retrospective
|
|
2
|
+
|
|
3
|
+
Conduct a sprint retrospective. 🗓️ Nora facilitates, with data from 📊 Vicky and 📋 Penny.
|
|
4
|
+
|
|
5
|
+
## Load Persona
|
|
6
|
+
|
|
7
|
+
Read `.context/agents/operations.md` and activate Nora's persona.
|
|
8
|
+
|
|
9
|
+
## Execution Steps
|
|
10
|
+
|
|
11
|
+
1. **Load Context** (🗓️ Nora)
|
|
12
|
+
- Read current sprint `context.md`
|
|
13
|
+
- Review sprint goals and KRs
|
|
14
|
+
- Check previous retro action items
|
|
15
|
+
|
|
16
|
+
2. **Data Collection** (📊 Vicky + 📋 Penny)
|
|
17
|
+
- Check KR achievement status (Penny provides sprint data)
|
|
18
|
+
- Compare key metrics Before/After (Vicky provides)
|
|
19
|
+
- Review Guard Rail status (Vicky provides)
|
|
20
|
+
|
|
21
|
+
3. **Conduct Retrospective** (🗓️ Nora facilitates)
|
|
22
|
+
- Keep: What worked well?
|
|
23
|
+
- Stop: What should we stop doing?
|
|
24
|
+
- Start: What should we try?
|
|
25
|
+
- Review: Previous action items status
|
|
26
|
+
|
|
27
|
+
4. **Write Outputs**
|
|
28
|
+
- Use `templates/retrospective.md` template
|
|
29
|
+
- Save to `.context/sprints/s{N}/results.md`
|
|
30
|
+
- Every action item must have: owner + deadline
|
|
31
|
+
|
|
32
|
+
## Retrospective Frameworks
|
|
33
|
+
|
|
34
|
+
### Keep / Stop / Start (Default)
|
|
35
|
+
- **Keep**: Things that worked well (with evidence)
|
|
36
|
+
- **Stop**: Things that didn't work (with impact)
|
|
37
|
+
- **Start**: New experiments (with expected benefit + owner + deadline)
|
|
38
|
+
|
|
39
|
+
### 4L Retrospective (Alternative)
|
|
40
|
+
- **Liked**: What was good
|
|
41
|
+
- **Learned**: What we learned
|
|
42
|
+
- **Lacked**: What was missing
|
|
43
|
+
- **Longed for**: What we wished for
|
|
44
|
+
|
|
45
|
+
## Question Guide
|
|
46
|
+
|
|
47
|
+
Questions 🗓️ Nora will ask:
|
|
48
|
+
```
|
|
49
|
+
🗓️ Nora: "What went best this sprint? Let me check the data."
|
|
50
|
+
🗓️ Nora: "Sprint velocity was 79%. Any specific blockers worth discussing?"
|
|
51
|
+
🗓️ Nora: "What improvements should we apply to the next sprint? I need owners and deadlines."
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Data support:
|
|
55
|
+
```
|
|
56
|
+
📊 Vicky: "KR1 achieved 85% of the target."
|
|
57
|
+
📋 Penny: "22/28 SP completed. Story 4 blocked for 3 days (API dependency)."
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Response Format
|
|
61
|
+
|
|
62
|
+
🗓️ Nora facilitates the retrospective. The final output is organized as a `results.md` document with concrete action items (owner + deadline).
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
*Agent*: 🗓️ Nora (Operations Manager)
|
|
67
|
+
*Supporting*: 📊 Vicky (metrics data), 📋 Penny (sprint data)
|
|
68
|
+
*Related commands*: `/sprint`, `/daily`, `/plan`
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
# /save - Save Session
|
|
2
|
+
|
|
3
|
+
Save the current session. Depending on options, you can also close the session or share outputs.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
/save # Save session, release Lock, status: idle
|
|
9
|
+
/save --close # Save session + move to archive (close session)
|
|
10
|
+
/save --share "{title}" # Save session + register outputs in shared/
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
ARGUMENTS: $ARGUMENTS
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Execution Steps
|
|
18
|
+
|
|
19
|
+
### 1. Check Current Session
|
|
20
|
+
|
|
21
|
+
Find the current active session (`status: active`) in `index.yaml`.
|
|
22
|
+
|
|
23
|
+
If no active session exists:
|
|
24
|
+
```markdown
|
|
25
|
+
⚠️ No active session to save.
|
|
26
|
+
Start a session with `/start`.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. Save Session File
|
|
30
|
+
|
|
31
|
+
Update the `active/{id}.md` file:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
# frontmatter update
|
|
35
|
+
updated_at: "{current time}"
|
|
36
|
+
manual_saved_at: "{current time}"
|
|
37
|
+
turn_count: {current turn count}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Content to save**:
|
|
41
|
+
- Current state (in progress, last work, next work)
|
|
42
|
+
- Work history (summary of today's work)
|
|
43
|
+
- Output list (created/modified files)
|
|
44
|
+
- References (shared outputs used, etc.)
|
|
45
|
+
|
|
46
|
+
### 3. Update index.yaml
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
- id: "{session ID}"
|
|
50
|
+
updated_at: "{current time}"
|
|
51
|
+
status: idle # active → idle
|
|
52
|
+
lock:
|
|
53
|
+
active: false # Release Lock
|
|
54
|
+
since: null
|
|
55
|
+
expires: null
|
|
56
|
+
auto_save:
|
|
57
|
+
dirty: false # Save complete
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 4. Save Complete Message
|
|
61
|
+
|
|
62
|
+
```markdown
|
|
63
|
+
🎩 Oscar: Session has been saved.
|
|
64
|
+
|
|
65
|
+
**Session**: {id}
|
|
66
|
+
**Topic**: {topic}
|
|
67
|
+
**Saved at**: {time}
|
|
68
|
+
|
|
69
|
+
You can continue later with `/start {id}`.
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## --close Option
|
|
75
|
+
|
|
76
|
+
Save the session and move it to the archive.
|
|
77
|
+
|
|
78
|
+
### Additional Steps
|
|
79
|
+
|
|
80
|
+
1. **Move session file**:
|
|
81
|
+
```
|
|
82
|
+
active/{id}.md → archive/{YYYY-MM}/{id}-{MMDD}.md
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
2. **Update index.yaml**:
|
|
86
|
+
- Remove from `active` array
|
|
87
|
+
- Add to the front of `recent_closed` array (keep max 5)
|
|
88
|
+
|
|
89
|
+
```yaml
|
|
90
|
+
recent_closed:
|
|
91
|
+
- id: "{session ID}"
|
|
92
|
+
topic: "{topic}"
|
|
93
|
+
archived_at: "{current time}"
|
|
94
|
+
path: "archive/{YYYY-MM}/{id}-{MMDD}.md"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
3. **Completion message**:
|
|
98
|
+
```markdown
|
|
99
|
+
🎩 Oscar: Session has been closed.
|
|
100
|
+
|
|
101
|
+
**Session**: {id}
|
|
102
|
+
**Topic**: {topic}
|
|
103
|
+
**Archive location**: archive/{YYYY-MM}/{id}-{MMDD}.md
|
|
104
|
+
|
|
105
|
+
To restore, use `/start recent`.
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## --share Option
|
|
111
|
+
|
|
112
|
+
Save the session and register outputs in the shared directory.
|
|
113
|
+
|
|
114
|
+
### Usage
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
/save --share "S52 Story List"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Additional Steps
|
|
121
|
+
|
|
122
|
+
1. **Create shared output file**:
|
|
123
|
+
```
|
|
124
|
+
shared/{MMDD}-{slug}.md
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
File content:
|
|
128
|
+
```markdown
|
|
129
|
+
---
|
|
130
|
+
id: "{slug}"
|
|
131
|
+
title: "{title}"
|
|
132
|
+
created_by: "{session ID}"
|
|
133
|
+
created_at: "{current time}"
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
# {title}
|
|
137
|
+
|
|
138
|
+
> Source session: {session ID}
|
|
139
|
+
> Created at: {current time}
|
|
140
|
+
|
|
141
|
+
## Content
|
|
142
|
+
|
|
143
|
+
{User-specified or summary of key session outputs}
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Original References
|
|
148
|
+
|
|
149
|
+
- Session file: `active/{session ID}.md`
|
|
150
|
+
- Related files: (list of files created/modified in session)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
2. **Update index.yaml**:
|
|
154
|
+
```yaml
|
|
155
|
+
shared_outputs:
|
|
156
|
+
- id: "{slug}"
|
|
157
|
+
title: "{title}"
|
|
158
|
+
created_by: "{session ID}"
|
|
159
|
+
created_at: "{current time}"
|
|
160
|
+
path: "shared/{MMDD}-{slug}.md"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
3. **Completion message**:
|
|
164
|
+
```markdown
|
|
165
|
+
🎩 Oscar: Session saved and outputs shared.
|
|
166
|
+
|
|
167
|
+
**Session**: {id}
|
|
168
|
+
**Shared output**: {title}
|
|
169
|
+
**Location**: shared/{MMDD}-{slug}.md
|
|
170
|
+
|
|
171
|
+
Other sessions can reference this output:
|
|
172
|
+
`[[shared/{MMDD}-{slug}.md]]`
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Session Diary Auto-Generation
|
|
178
|
+
|
|
179
|
+
When saving a session, Oscar automatically writes a **Session Diary**.
|
|
180
|
+
|
|
181
|
+
### Session Diary Structure
|
|
182
|
+
|
|
183
|
+
```markdown
|
|
184
|
+
## 📔 Session Diary
|
|
185
|
+
|
|
186
|
+
> Session ID: {id}
|
|
187
|
+
> Saved at: {timestamp}
|
|
188
|
+
> Participating agents: 🎩 Oscar, 📈 Danny, ...
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### 🎩 Oscar (Orchestrator)
|
|
193
|
+
|
|
194
|
+
**Highlights**:
|
|
195
|
+
- {1-3 most important decisions/discoveries of the session}
|
|
196
|
+
|
|
197
|
+
**Feelings**:
|
|
198
|
+
- {Emotions during collaboration, memorable moments}
|
|
199
|
+
- {Difficulties, rewarding moments}
|
|
200
|
+
|
|
201
|
+
**Learnings**:
|
|
202
|
+
- {Insights to apply in the next session}
|
|
203
|
+
- {Things to improve, newly discovered information}
|
|
204
|
+
|
|
205
|
+
**User Context Updates**:
|
|
206
|
+
- {New discoveries about the PO's preferences and work style}
|
|
207
|
+
- {Contextual information to remember}
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
### 📈 Danny (if participated)
|
|
212
|
+
|
|
213
|
+
**Analysis Summary**: {Core of the analysis performed}
|
|
214
|
+
**Data Insights**: {Patterns discovered, numbers}
|
|
215
|
+
**Next Analysis Suggestions**: {Areas needing follow-up analysis}
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### 🎤 Rita (if participated)
|
|
220
|
+
|
|
221
|
+
**VOC Highlights**: {Summary of collected customer voice}
|
|
222
|
+
**Customer Psychology**: {Identified customer needs/pain points}
|
|
223
|
+
**Research Suggestions**: {Things to explore further}
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
### 🎯 Simon (if participated)
|
|
228
|
+
|
|
229
|
+
**Strategy Decisions**: {Strategic decisions made}
|
|
230
|
+
**Hypothesis Status**: {Hypotheses established/validated}
|
|
231
|
+
**Next Strategy Tasks**: {Follow-up strategy work}
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
### 📋 Penny (if participated)
|
|
236
|
+
|
|
237
|
+
**Execution Summary**: {Organized tasks/stories}
|
|
238
|
+
**Handoff Status**: {Dev team delivery status}
|
|
239
|
+
**Schedule Risks**: {Discovered schedule issues}
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
### 📊 Vicky (if participated)
|
|
244
|
+
|
|
245
|
+
**Validation Results**: {Before/After comparison}
|
|
246
|
+
**Guard Rail Status**: {Side-effect metrics check}
|
|
247
|
+
**Next Validation Plan**: {Planned validations}
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
### 🔮 Sage (if consulted)
|
|
252
|
+
|
|
253
|
+
**Consultation Summary**: {Strategic advice provided}
|
|
254
|
+
**Risk Warnings**: {Risk factors identified}
|
|
255
|
+
**Recommendations**: {Directions suggested to Oscar}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Diary Writing Principles
|
|
259
|
+
|
|
260
|
+
1. **Be honest**: Record not only what went well but also what was difficult
|
|
261
|
+
2. **Be specific**: Focus on concrete examples rather than abstract expressions
|
|
262
|
+
3. **Be future-oriented**: Emphasize insights that will help in the next session
|
|
263
|
+
4. **Accumulate User Context**: Continuously learn PO's preferences/style
|
|
264
|
+
|
|
265
|
+
### Determining Participating Agents
|
|
266
|
+
|
|
267
|
+
Oscar determines participating agents during the session using these criteria:
|
|
268
|
+
|
|
269
|
+
| Criterion | Counted as participation |
|
|
270
|
+
|-----------|------------------------|
|
|
271
|
+
| Spawned via Task tool | ✅ |
|
|
272
|
+
| Directly invoked via `/strategy`, `/analytics`, etc. | ✅ |
|
|
273
|
+
| Auto-deployed via keyword trigger | ✅ |
|
|
274
|
+
| Oscar only mentioned the role | ❌ |
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## User Context Global Merge ⭐
|
|
279
|
+
|
|
280
|
+
If the session diary contains **User Context Updates**, merge them into `.context/user-context.yaml`.
|
|
281
|
+
|
|
282
|
+
### Merge Logic
|
|
283
|
+
|
|
284
|
+
1. **Extract User Context items from session diary**
|
|
285
|
+
```markdown
|
|
286
|
+
**User Context Updates**:
|
|
287
|
+
- The user prefers natural language prompts ("commit and push" style)
|
|
288
|
+
- Values actual working results over formality
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
2. **Read user-context.yaml**
|
|
292
|
+
|
|
293
|
+
3. **Check for duplicates and merge**
|
|
294
|
+
- Skip content that already exists
|
|
295
|
+
- Add only new content to the appropriate section
|
|
296
|
+
|
|
297
|
+
4. **Update metadata**
|
|
298
|
+
```yaml
|
|
299
|
+
_meta:
|
|
300
|
+
updated_at: "{current date}"
|
|
301
|
+
sources:
|
|
302
|
+
- "{previous sources}"
|
|
303
|
+
- "{current session ID}" # Added
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Merge Target Sections
|
|
307
|
+
|
|
308
|
+
| Session diary content | user-context.yaml section |
|
|
309
|
+
|----------------------|--------------------------|
|
|
310
|
+
| Communication related | `communication:` |
|
|
311
|
+
| Work style related | `work_style:` |
|
|
312
|
+
| Preference related | `preferences:` |
|
|
313
|
+
|
|
314
|
+
### Merge Example
|
|
315
|
+
|
|
316
|
+
**Session diary:**
|
|
317
|
+
```markdown
|
|
318
|
+
**User Context Updates**:
|
|
319
|
+
- Uses a workflow of running multiple tasks simultaneously via parallel sessions
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**user-context.yaml after merge:**
|
|
323
|
+
```yaml
|
|
324
|
+
work_style:
|
|
325
|
+
- "Tenacious detective style pursuing WHY"
|
|
326
|
+
- "Hypothesis/validation-based decision making"
|
|
327
|
+
- "Runs multiple tasks simultaneously via parallel sessions" # Added
|
|
328
|
+
|
|
329
|
+
_meta:
|
|
330
|
+
updated_at: "2026-01-28"
|
|
331
|
+
sources:
|
|
332
|
+
- "oscar-system-improvement"
|
|
333
|
+
- "current-session-id" # Added
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Merge Complete Message
|
|
337
|
+
|
|
338
|
+
```markdown
|
|
339
|
+
🎩 Oscar: User Context has been updated.
|
|
340
|
+
|
|
341
|
+
Added items:
|
|
342
|
+
- work_style: "Runs multiple tasks simultaneously via parallel sessions"
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Auto-Collected Save Content
|
|
348
|
+
|
|
349
|
+
Information Oscar automatically collects when saving a session:
|
|
350
|
+
|
|
351
|
+
### Current State
|
|
352
|
+
|
|
353
|
+
```markdown
|
|
354
|
+
## Current State
|
|
355
|
+
|
|
356
|
+
**In progress**: {Last thing being worked on}
|
|
357
|
+
**Last work**: {Last completed work}
|
|
358
|
+
**Next work**: {Planned next work}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Work History
|
|
362
|
+
|
|
363
|
+
Record work performed during the session in chronological order:
|
|
364
|
+
|
|
365
|
+
```markdown
|
|
366
|
+
## Work History
|
|
367
|
+
|
|
368
|
+
### {date}
|
|
369
|
+
- {Work 1}
|
|
370
|
+
- {Work 2}
|
|
371
|
+
- ...
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Outputs
|
|
375
|
+
|
|
376
|
+
Files created/modified during the session:
|
|
377
|
+
|
|
378
|
+
```markdown
|
|
379
|
+
## Outputs
|
|
380
|
+
|
|
381
|
+
| File | Change | Description |
|
|
382
|
+
|------|--------|-------------|
|
|
383
|
+
| `path/to/file.md` | Created | Description |
|
|
384
|
+
| `path/to/other.md` | Modified | Description |
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## Automatic Context Updates
|
|
390
|
+
|
|
391
|
+
If data analysis results include **information that needs permanent retention**, automatically reflect them:
|
|
392
|
+
|
|
393
|
+
| Type | Target File | Example |
|
|
394
|
+
|------|------------|---------|
|
|
395
|
+
| Metrics data | `.context/.secrets.yaml` | AD_METRICS, METRICS sections |
|
|
396
|
+
| Metrics documentation | `.context/global/metrics.md` | Add new metrics sections |
|
|
397
|
+
| Domain insights | `.context/domains/{domain}/` | Analysis results, pattern discoveries |
|
|
398
|
+
| Strategy changes | `.context/global/strategy.md` | When direction changes |
|
|
399
|
+
|
|
400
|
+
**Auto-update criteria**:
|
|
401
|
+
- **Quantitative metrics** (numbers) obtained from DB analysis
|
|
402
|
+
- **Confirmed decisions** from party mode discussions
|
|
403
|
+
- **Data to reuse** in future sessions
|
|
404
|
+
|
|
405
|
+
**Not updated**:
|
|
406
|
+
- One-time exploratory query results
|
|
407
|
+
- Hypotheses not yet validated
|
|
408
|
+
- Content explicitly rejected by the user
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
## Error Handling
|
|
413
|
+
|
|
414
|
+
### No Active Session
|
|
415
|
+
|
|
416
|
+
```markdown
|
|
417
|
+
⚠️ No active session to save.
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### File Write Failure
|
|
421
|
+
|
|
422
|
+
```markdown
|
|
423
|
+
❌ Session save failed: {error message}
|
|
424
|
+
Try saving manually, or copy the session content.
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Related Commands
|
|
430
|
+
|
|
431
|
+
- `/start` - Start/restore session
|
|
432
|
+
- `/sessions` - Full session dashboard
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
*File locations*:
|
|
437
|
+
- Session index: `.context/sessions/index.yaml`
|
|
438
|
+
- Active sessions: `.context/sessions/active/{id}.md`
|
|
439
|
+
- Closed sessions: `.context/sessions/archive/{YYYY-MM}/{id}-{MMDD}.md`
|
|
440
|
+
- Shared outputs: `.context/sessions/shared/{date}-{title}.md`
|