popilot 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +372 -0
  2. package/adapters/claude-code/.claude/commands/_domain.md.hbs +32 -0
  3. package/adapters/claude-code/.claude/commands/analytics.md.hbs +55 -0
  4. package/adapters/claude-code/.claude/commands/daily.md.hbs +301 -0
  5. package/adapters/claude-code/.claude/commands/dev.md.hbs +62 -0
  6. package/adapters/claude-code/.claude/commands/handoff.md +258 -0
  7. package/adapters/claude-code/.claude/commands/market.md +120 -0
  8. package/adapters/claude-code/.claude/commands/metrics.md +123 -0
  9. package/adapters/claude-code/.claude/commands/oscar-loop.md +436 -0
  10. package/adapters/claude-code/.claude/commands/party.md +85 -0
  11. package/adapters/claude-code/.claude/commands/plan.md +43 -0
  12. package/adapters/claude-code/.claude/commands/research.md +203 -0
  13. package/adapters/claude-code/.claude/commands/retro.md +68 -0
  14. package/adapters/claude-code/.claude/commands/save.md +440 -0
  15. package/adapters/claude-code/.claude/commands/sessions.md +139 -0
  16. package/adapters/claude-code/.claude/commands/sprint.md +106 -0
  17. package/adapters/claude-code/.claude/commands/start.md +368 -0
  18. package/adapters/claude-code/.claude/commands/strategy.md +41 -0
  19. package/adapters/claude-code/.claude/commands/task.md +220 -0
  20. package/adapters/claude-code/.claude/commands/tracking.md +116 -0
  21. package/adapters/claude-code/.claude/commands/validate.md +58 -0
  22. package/adapters/claude-code/CLAUDE.md.hbs +208 -0
  23. package/adapters/claude-code/manifest.yaml +36 -0
  24. package/bin/cli.mjs +218 -0
  25. package/lib/adapter.mjs +68 -0
  26. package/lib/doctor.mjs +161 -0
  27. package/lib/hydrate.mjs +421 -0
  28. package/lib/prompt.mjs +78 -0
  29. package/lib/scaffold.mjs +155 -0
  30. package/lib/setup-wizard.mjs +331 -0
  31. package/lib/template-engine.mjs +164 -0
  32. package/lib/yaml-lite.mjs +476 -0
  33. package/package.json +30 -0
  34. package/scaffold/.context/.secrets.yaml.example +20 -0
  35. package/scaffold/.context/WORKFLOW.md.hbs +332 -0
  36. package/scaffold/.context/agents/TEMPLATE.md +115 -0
  37. package/scaffold/.context/agents/analyst.md.hbs +362 -0
  38. package/scaffold/.context/agents/developer.md.hbs +390 -0
  39. package/scaffold/.context/agents/handoff-specialist.md.hbs +292 -0
  40. package/scaffold/.context/agents/market-researcher.md.hbs +288 -0
  41. package/scaffold/.context/agents/ollie.md +323 -0
  42. package/scaffold/.context/agents/operations.md.hbs +293 -0
  43. package/scaffold/.context/agents/orchestrator.md.hbs +434 -0
  44. package/scaffold/.context/agents/planner.md.hbs +405 -0
  45. package/scaffold/.context/agents/qa.md.hbs +409 -0
  46. package/scaffold/.context/agents/researcher.md.hbs +330 -0
  47. package/scaffold/.context/agents/sage.md +349 -0
  48. package/scaffold/.context/agents/strategist.md.hbs +339 -0
  49. package/scaffold/.context/agents/tracking-governor.md.hbs +291 -0
  50. package/scaffold/.context/agents/validator.md.hbs +365 -0
  51. package/scaffold/.context/integrations/_registry.yaml +38 -0
  52. package/scaffold/.context/integrations/providers/channel_io.yaml +38 -0
  53. package/scaffold/.context/integrations/providers/corti.yaml +203 -0
  54. package/scaffold/.context/integrations/providers/ga4.yaml +116 -0
  55. package/scaffold/.context/integrations/providers/intercom.yaml +47 -0
  56. package/scaffold/.context/integrations/providers/linear.yaml +46 -0
  57. package/scaffold/.context/integrations/providers/mixpanel.yaml +73 -0
  58. package/scaffold/.context/integrations/providers/notebooklm.yaml +74 -0
  59. package/scaffold/.context/integrations/providers/notion.yaml +129 -0
  60. package/scaffold/.context/integrations/providers/prod_db.yaml +183 -0
  61. package/scaffold/.context/oscar/workflows/multi-agent.md +82 -0
  62. package/scaffold/.context/oscar/workflows/ollie-sage.md +128 -0
  63. package/scaffold/.context/oscar/workflows/session-git.md +71 -0
  64. package/scaffold/.context/oscar/workflows/setup.md +663 -0
  65. package/scaffold/.context/oscar/workflows/tracking.md +118 -0
  66. package/scaffold/.context/project.yaml.example +102 -0
  67. package/scaffold/.context/templates/dev-guide.md +217 -0
  68. package/scaffold/.context/templates/epic-spec.md +225 -0
  69. package/scaffold/.context/templates/guardrail.md +94 -0
  70. package/scaffold/.context/templates/handoff-checklist.md +197 -0
  71. package/scaffold/.context/templates/prd.md +80 -0
  72. package/scaffold/.context/templates/retrospective.md +78 -0
  73. package/scaffold/.context/templates/screen-spec.md +714 -0
  74. package/scaffold/.context/templates/sprint-plan.md +72 -0
  75. package/scaffold/.context/templates/sprint-status.yaml +109 -0
  76. package/scaffold/.context/templates/story-v2.md +228 -0
  77. package/scaffold/.context/templates/validation-report.md +99 -0
  78. package/scaffold/.gitignore.append +7 -0
  79. package/scaffold/spec-site/env.d.ts +7 -0
  80. package/scaffold/spec-site/index.html +14 -0
  81. package/scaffold/spec-site/package.json +20 -0
  82. package/scaffold/spec-site/src/App.vue +27 -0
  83. package/scaffold/spec-site/src/assets/icons/menu/ic_ads.svg +10 -0
  84. package/scaffold/spec-site/src/assets/icons/menu/ic_ads_on.svg +10 -0
  85. package/scaffold/spec-site/src/assets/icons/menu/ic_board.svg +14 -0
  86. package/scaffold/spec-site/src/assets/icons/menu/ic_board_on.svg +14 -0
  87. package/scaffold/spec-site/src/assets/icons/menu/ic_dashboard.svg +21 -0
  88. package/scaffold/spec-site/src/assets/icons/menu/ic_dashboard_on.svg +21 -0
  89. package/scaffold/spec-site/src/assets/icons/menu/ic_pricing.svg +20 -0
  90. package/scaffold/spec-site/src/assets/icons/menu/ic_pricing_on.svg +20 -0
  91. package/scaffold/spec-site/src/assets/icons/menu/ic_store.svg +11 -0
  92. package/scaffold/spec-site/src/assets/icons/menu/ic_store_on.svg +11 -0
  93. package/scaffold/spec-site/src/components/Accordion.vue +108 -0
  94. package/scaffold/spec-site/src/components/AppHeader.vue +304 -0
  95. package/scaffold/spec-site/src/components/Badge.vue +25 -0
  96. package/scaffold/spec-site/src/components/CoachingCard.vue +112 -0
  97. package/scaffold/spec-site/src/components/MemoSidebar.vue +239 -0
  98. package/scaffold/spec-site/src/components/MockupShell.vue +100 -0
  99. package/scaffold/spec-site/src/components/RuleTable.vue +99 -0
  100. package/scaffold/spec-site/src/components/ScenarioSwitcher.vue +103 -0
  101. package/scaffold/spec-site/src/components/SpecNav.vue +26 -0
  102. package/scaffold/spec-site/src/components/SpecSection.vue +59 -0
  103. package/scaffold/spec-site/src/components/SummaryGrid.vue +39 -0
  104. package/scaffold/spec-site/src/components/VersionBadge.vue +38 -0
  105. package/scaffold/spec-site/src/composables/useActiveSection.ts +53 -0
  106. package/scaffold/spec-site/src/composables/useMemo.ts +138 -0
  107. package/scaffold/spec-site/src/composables/useRetro.ts +313 -0
  108. package/scaffold/spec-site/src/composables/useScenario.ts +43 -0
  109. package/scaffold/spec-site/src/composables/useScenarioStore.ts +102 -0
  110. package/scaffold/spec-site/src/composables/useTurso.ts +160 -0
  111. package/scaffold/spec-site/src/composables/useUser.ts +25 -0
  112. package/scaffold/spec-site/src/data/navigation.ts +59 -0
  113. package/scaffold/spec-site/src/data/types.ts +90 -0
  114. package/scaffold/spec-site/src/data/wireframeRegistry.ts +25 -0
  115. package/scaffold/spec-site/src/layouts/SplitPaneLayout.vue +79 -0
  116. package/scaffold/spec-site/src/main.ts +10 -0
  117. package/scaffold/spec-site/src/pages/IndexPage.vue +66 -0
  118. package/scaffold/spec-site/src/pages/PolicyDetail.vue +215 -0
  119. package/scaffold/spec-site/src/pages/PolicyIndex.vue +74 -0
  120. package/scaffold/spec-site/src/pages/retro/RetroActions.vue +191 -0
  121. package/scaffold/spec-site/src/pages/retro/RetroBoard.vue +192 -0
  122. package/scaffold/spec-site/src/pages/retro/RetroCard.vue +131 -0
  123. package/scaffold/spec-site/src/pages/retro/RetroHeader.vue +287 -0
  124. package/scaffold/spec-site/src/pages/retro/RetroPage.vue +178 -0
  125. package/scaffold/spec-site/src/pages/shared/NoContentPlaceholder.vue +34 -0
  126. package/scaffold/spec-site/src/pages/shared/PlaceholderContent.vue +22 -0
  127. package/scaffold/spec-site/src/pages/shared/PlaceholderSpecPanel.vue +16 -0
  128. package/scaffold/spec-site/src/pages/shared/PolicyFallback.vue +145 -0
  129. package/scaffold/spec-site/src/pages/wireframe/WireframeShell.vue +151 -0
  130. package/scaffold/spec-site/src/router.ts +85 -0
  131. package/scaffold/spec-site/src/styles/base.css +21 -0
  132. package/scaffold/spec-site/src/styles/split-pane.css +143 -0
  133. package/scaffold/spec-site/src/styles/variables.css +47 -0
  134. package/scaffold/spec-site/src/utils/markdown.ts +197 -0
  135. package/scaffold/spec-site/tsconfig.json +20 -0
  136. package/scaffold/spec-site/vite.config.ts +18 -0
@@ -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`
@@ -0,0 +1,139 @@
1
+ # /sessions - Session Dashboard
2
+
3
+ View the full session dashboard or perform management tasks.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ /sessions # Full session dashboard
9
+ /sessions clean # Clean up stale locks, delete old archives
10
+ ```
11
+
12
+ ARGUMENTS: $ARGUMENTS
13
+
14
+ ---
15
+
16
+ ## Execution Steps
17
+
18
+ ### /sessions (Dashboard)
19
+
20
+ Read `index.yaml` and display the full session dashboard:
21
+
22
+ ```markdown
23
+ 🎩 Oscar: Here is the session dashboard.
24
+
25
+ ## Active Sessions (2)
26
+ ┌────┬─────────────────┬────────┬───────────┬─────────────────────────────┐
27
+ │ # │ ID │ Status │ Last │ Topic │
28
+ ├────┼─────────────────┼────────┼───────────┼─────────────────────────────┤
29
+ │ 1 │ notion-tasks │ 🟢 idle│ 10m ago │ Sprint 52 Notion Tasks │
30
+ │ 2 │ surface-cvr │ 🔒 in use│ just now │ Surface Layer CVR Optimization│
31
+ └────┴─────────────────┴────────┴───────────┴─────────────────────────────┘
32
+
33
+ ## Recently Closed (3)
34
+ ┌────┬─────────────────┬───────────┬─────────────────────────────┐
35
+ │ # │ ID │ Closed │ Topic │
36
+ ├────┼─────────────────┼───────────┼─────────────────────────────┤
37
+ │ 1 │ ir-prep │ 01/25 │ IR Material Preparation │
38
+ │ 2 │ story-review │ 01/24 │ Story Review │
39
+ │ 3 │ deep-layer │ 01/23 │ Deep Layer Improvement │
40
+ └────┴─────────────────┴───────────┴─────────────────────────────┘
41
+
42
+ ## Shared Outputs (1)
43
+ ┌────┬──────────────────────┬───────────┬─────────────────┐
44
+ │ # │ Title │ Created │ Source Session │
45
+ ├────┼──────────────────────┼───────────┼─────────────────┤
46
+ │ 1 │ S52 Story List │ 01/26 │ notion-tasks │
47
+ └────┴──────────────────────┴───────────┴─────────────────┘
48
+
49
+ ---
50
+
51
+ **Commands**:
52
+ - `/start {id}` - Start/restore session
53
+ - `/start new "{topic}"` - Create new session
54
+ - `/start recent` - Restore closed session
55
+ - `/save` - Save current session
56
+ - `/sessions clean` - Clean up tasks
57
+ ```
58
+
59
+ ---
60
+
61
+ ### /sessions clean
62
+
63
+ Perform management tasks:
64
+
65
+ 1. **Clean up stale Locks**: Release Locks for sessions where `lock.expires < now`
66
+ 2. **Delete old archives**: Delete archive files older than 30 days (optional)
67
+ 3. **Clean up orphan files**: Detect files in `active/` that are not in `index.yaml`
68
+
69
+ ```markdown
70
+ 🎩 Oscar: Performing cleanup tasks.
71
+
72
+ ## Stale Lock Cleanup
73
+ - notion-tasks: Lock released (expired: 2 hours ago)
74
+
75
+ ## Old Archives
76
+ - archive/2025-12/old-session-1225.md (32 days ago)
77
+ → Delete? [y/n]
78
+
79
+ ## Orphan Files
80
+ - active/unknown-session.md (not in index.yaml)
81
+ → Delete? [y/n]
82
+
83
+ ---
84
+
85
+ Cleanup complete.
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Status Display Rules
91
+
92
+ ### Session Status
93
+
94
+ | Status | Icon | Condition |
95
+ |--------|------|-----------|
96
+ | In use | 🔒 | `status: active` AND `lock.active: true` AND `lock.expires >= now` |
97
+ | idle | 🟢 | `status: idle` OR `lock.active: false` |
98
+ | stale | ⚠️ | `lock.active: true` AND `lock.expires < now` |
99
+
100
+ ### Last Activity Time
101
+
102
+ - Less than 1 minute: "just now"
103
+ - Less than 1 hour: "Nm ago"
104
+ - Less than 24 hours: "Nh ago"
105
+ - Otherwise: "MM/DD"
106
+
107
+ ---
108
+
109
+ ## Dashboard Information Sources
110
+
111
+ ### Active Sessions
112
+
113
+ From the `active` array in `index.yaml`:
114
+ - id, topic, status, lock state
115
+ - Calculate last activity time from `auto_save.last_turn`
116
+
117
+ ### Recently Closed
118
+
119
+ From the `recent_closed` array in `index.yaml`:
120
+ - id, topic, archived_at
121
+ - Display up to 5
122
+
123
+ ### Shared Outputs
124
+
125
+ From the `shared_outputs` array in `index.yaml`:
126
+ - title, created_at, created_by
127
+ - Display all
128
+
129
+ ---
130
+
131
+ ## Related Commands
132
+
133
+ - `/start` - Start/restore session
134
+ - `/save` - Save session
135
+
136
+ ---
137
+
138
+ *File location*:
139
+ - Session index: `.context/sessions/index.yaml`
@@ -0,0 +1,106 @@
1
+ # /sprint - Sprint Management
2
+
3
+ Perform sprint-related tasks.
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ /sprint # Display current sprint dashboard
9
+ /sprint new # Create new sprint
10
+ /sprint archive # Archive previous sprint
11
+ /sprint status # Quick status check
12
+ ```
13
+
14
+ ## Determine Current Sprint Number
15
+
16
+ Find the pattern "Current Sprint: **{number}**" in `CLAUDE.md` and extract the number.
17
+
18
+ ## Sprint Dashboard (Default) ⭐ NEW
19
+
20
+ If `$ARGUMENTS` is empty, **auto-generate the dashboard**:
21
+
22
+ 1. Check the current sprint number (N) from `CLAUDE.md`
23
+ 2. Load `.context/sprints/s{N}/context.md`
24
+ 3. Generate the dashboard as 📋 Penny:
25
+
26
+ ```markdown
27
+ ## 📋 Sprint {N} Dashboard
28
+
29
+ ### 🎯 Goal
30
+ [One Question or Sprint Goal]
31
+
32
+ ### 📊 KR Progress
33
+ | KR | Current | Target | Progress | Status |
34
+ |----|---------|--------|----------|--------|
35
+ | KR1 | 15% | 20% | ███████░░░ 75% | 🟢 |
36
+ | KR2 | 18% | 15% | ██████████ 100% | ✅ |
37
+ | KR3 | 50% | 100% | █████░░░░░ 50% | 🟡 |
38
+
39
+ ### 📝 Work Status
40
+ | Task | Owner | Status | Notes |
41
+ |------|-------|--------|-------|
42
+ | [Task 1] | Dev Team | 🔄 In Progress | - |
43
+ | [Task 2] | Marketing | ✅ Done | - |
44
+ | [Task 3] | Dev Team | ⏳ Waiting | Dependency: [Task 1] |
45
+
46
+ ### 🚧 Blockers
47
+ - [ ] [Blocker description]
48
+
49
+ ### 📅 Schedule
50
+ - Sprint period: [Start date] ~ [End date]
51
+ - Current: D-{N} days
52
+ ```
53
+
54
+ 4. If possible, query current metric values from GA4 (📊 Vicky integration)
55
+ 5. Highlight risks/blockers if present
56
+
57
+ ### Status Display Criteria
58
+ - ✅ Goal achieved (≥100%)
59
+ - 🟢 On track (≥70%)
60
+ - 🟡 Needs attention (≥40%)
61
+ - 🔴 At risk (<40%)
62
+
63
+ ## New Sprint Creation (`new`)
64
+
65
+ If `$ARGUMENTS` is `new`:
66
+
67
+ 1. Check current sprint number
68
+ 2. Create new sprint folder (e.g., `s52/`)
69
+ 3. Generate `context.md` template:
70
+ ```markdown
71
+ # Sprint [N] Context
72
+
73
+ > **PRD**: [Notion link]
74
+ > **Period**: [Start date] ~ [End date]
75
+
76
+ ## Goal
77
+ [Sprint goal in one sentence]
78
+
79
+ ## Key Results
80
+ | KR | Metrics | Current | Target | Owner |
81
+ |----|---------|---------|--------|-------|
82
+ | KR1 | | | | |
83
+
84
+ ## Key Tasks
85
+ - [ ]
86
+
87
+ ## Related Documents
88
+ | Document | Link |
89
+ |----------|------|
90
+ ```
91
+
92
+ 4. Check if `results.md` was generated for the previous sprint
93
+
94
+ ## Archive (`archive`)
95
+
96
+ If `$ARGUMENTS` is `archive`:
97
+
98
+ 1. Move the completed sprint folder to `_archive/`
99
+ 2. Check if a results summary exists
100
+ 3. If not, suggest having 📊 Vicky write a results report
101
+
102
+ ## CLAUDE.md Update
103
+
104
+ When creating a new sprint:
105
+ - Update only the "Current Sprint: **{number}**" line in `CLAUDE.md`
106
+ - Example: `## Current Sprint: **51**` → `## Current Sprint: **52**`