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.
- package/README.md +372 -0
- package/adapters/claude-code/.claude/commands/_domain.md.hbs +32 -0
- package/adapters/claude-code/.claude/commands/analytics.md.hbs +55 -0
- package/adapters/claude-code/.claude/commands/daily.md.hbs +301 -0
- package/adapters/claude-code/.claude/commands/dev.md.hbs +62 -0
- package/adapters/claude-code/.claude/commands/handoff.md +258 -0
- package/adapters/claude-code/.claude/commands/market.md +120 -0
- package/adapters/claude-code/.claude/commands/metrics.md +123 -0
- package/adapters/claude-code/.claude/commands/oscar-loop.md +436 -0
- package/adapters/claude-code/.claude/commands/party.md +85 -0
- package/adapters/claude-code/.claude/commands/plan.md +43 -0
- package/adapters/claude-code/.claude/commands/research.md +203 -0
- package/adapters/claude-code/.claude/commands/retro.md +68 -0
- package/adapters/claude-code/.claude/commands/save.md +440 -0
- package/adapters/claude-code/.claude/commands/sessions.md +139 -0
- package/adapters/claude-code/.claude/commands/sprint.md +106 -0
- package/adapters/claude-code/.claude/commands/start.md +368 -0
- package/adapters/claude-code/.claude/commands/strategy.md +41 -0
- package/adapters/claude-code/.claude/commands/task.md +220 -0
- package/adapters/claude-code/.claude/commands/tracking.md +116 -0
- package/adapters/claude-code/.claude/commands/validate.md +58 -0
- package/adapters/claude-code/CLAUDE.md.hbs +208 -0
- package/adapters/claude-code/manifest.yaml +36 -0
- package/bin/cli.mjs +218 -0
- package/lib/adapter.mjs +68 -0
- package/lib/doctor.mjs +161 -0
- package/lib/hydrate.mjs +421 -0
- package/lib/prompt.mjs +78 -0
- package/lib/scaffold.mjs +155 -0
- package/lib/setup-wizard.mjs +331 -0
- package/lib/template-engine.mjs +164 -0
- package/lib/yaml-lite.mjs +476 -0
- package/package.json +30 -0
- package/scaffold/.context/.secrets.yaml.example +20 -0
- package/scaffold/.context/WORKFLOW.md.hbs +332 -0
- package/scaffold/.context/agents/TEMPLATE.md +115 -0
- package/scaffold/.context/agents/analyst.md.hbs +362 -0
- package/scaffold/.context/agents/developer.md.hbs +390 -0
- package/scaffold/.context/agents/handoff-specialist.md.hbs +292 -0
- package/scaffold/.context/agents/market-researcher.md.hbs +288 -0
- package/scaffold/.context/agents/ollie.md +323 -0
- package/scaffold/.context/agents/operations.md.hbs +293 -0
- package/scaffold/.context/agents/orchestrator.md.hbs +434 -0
- package/scaffold/.context/agents/planner.md.hbs +405 -0
- package/scaffold/.context/agents/qa.md.hbs +409 -0
- package/scaffold/.context/agents/researcher.md.hbs +330 -0
- package/scaffold/.context/agents/sage.md +349 -0
- package/scaffold/.context/agents/strategist.md.hbs +339 -0
- package/scaffold/.context/agents/tracking-governor.md.hbs +291 -0
- package/scaffold/.context/agents/validator.md.hbs +365 -0
- package/scaffold/.context/integrations/_registry.yaml +38 -0
- package/scaffold/.context/integrations/providers/channel_io.yaml +38 -0
- package/scaffold/.context/integrations/providers/corti.yaml +203 -0
- package/scaffold/.context/integrations/providers/ga4.yaml +116 -0
- package/scaffold/.context/integrations/providers/intercom.yaml +47 -0
- package/scaffold/.context/integrations/providers/linear.yaml +46 -0
- package/scaffold/.context/integrations/providers/mixpanel.yaml +73 -0
- package/scaffold/.context/integrations/providers/notebooklm.yaml +74 -0
- package/scaffold/.context/integrations/providers/notion.yaml +129 -0
- package/scaffold/.context/integrations/providers/prod_db.yaml +183 -0
- package/scaffold/.context/oscar/workflows/multi-agent.md +82 -0
- package/scaffold/.context/oscar/workflows/ollie-sage.md +128 -0
- package/scaffold/.context/oscar/workflows/session-git.md +71 -0
- package/scaffold/.context/oscar/workflows/setup.md +663 -0
- package/scaffold/.context/oscar/workflows/tracking.md +118 -0
- package/scaffold/.context/project.yaml.example +102 -0
- package/scaffold/.context/templates/dev-guide.md +217 -0
- package/scaffold/.context/templates/epic-spec.md +225 -0
- package/scaffold/.context/templates/guardrail.md +94 -0
- package/scaffold/.context/templates/handoff-checklist.md +197 -0
- package/scaffold/.context/templates/prd.md +80 -0
- package/scaffold/.context/templates/retrospective.md +78 -0
- package/scaffold/.context/templates/screen-spec.md +714 -0
- package/scaffold/.context/templates/sprint-plan.md +72 -0
- package/scaffold/.context/templates/sprint-status.yaml +109 -0
- package/scaffold/.context/templates/story-v2.md +228 -0
- package/scaffold/.context/templates/validation-report.md +99 -0
- package/scaffold/.gitignore.append +7 -0
- package/scaffold/spec-site/env.d.ts +7 -0
- package/scaffold/spec-site/index.html +14 -0
- package/scaffold/spec-site/package.json +20 -0
- package/scaffold/spec-site/src/App.vue +27 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_ads.svg +10 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_ads_on.svg +10 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_board.svg +14 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_board_on.svg +14 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_dashboard.svg +21 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_dashboard_on.svg +21 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_pricing.svg +20 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_pricing_on.svg +20 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_store.svg +11 -0
- package/scaffold/spec-site/src/assets/icons/menu/ic_store_on.svg +11 -0
- package/scaffold/spec-site/src/components/Accordion.vue +108 -0
- package/scaffold/spec-site/src/components/AppHeader.vue +304 -0
- package/scaffold/spec-site/src/components/Badge.vue +25 -0
- package/scaffold/spec-site/src/components/CoachingCard.vue +112 -0
- package/scaffold/spec-site/src/components/MemoSidebar.vue +239 -0
- package/scaffold/spec-site/src/components/MockupShell.vue +100 -0
- package/scaffold/spec-site/src/components/RuleTable.vue +99 -0
- package/scaffold/spec-site/src/components/ScenarioSwitcher.vue +103 -0
- package/scaffold/spec-site/src/components/SpecNav.vue +26 -0
- package/scaffold/spec-site/src/components/SpecSection.vue +59 -0
- package/scaffold/spec-site/src/components/SummaryGrid.vue +39 -0
- package/scaffold/spec-site/src/components/VersionBadge.vue +38 -0
- package/scaffold/spec-site/src/composables/useActiveSection.ts +53 -0
- package/scaffold/spec-site/src/composables/useMemo.ts +138 -0
- package/scaffold/spec-site/src/composables/useRetro.ts +313 -0
- package/scaffold/spec-site/src/composables/useScenario.ts +43 -0
- package/scaffold/spec-site/src/composables/useScenarioStore.ts +102 -0
- package/scaffold/spec-site/src/composables/useTurso.ts +160 -0
- package/scaffold/spec-site/src/composables/useUser.ts +25 -0
- package/scaffold/spec-site/src/data/navigation.ts +59 -0
- package/scaffold/spec-site/src/data/types.ts +90 -0
- package/scaffold/spec-site/src/data/wireframeRegistry.ts +25 -0
- package/scaffold/spec-site/src/layouts/SplitPaneLayout.vue +79 -0
- package/scaffold/spec-site/src/main.ts +10 -0
- package/scaffold/spec-site/src/pages/IndexPage.vue +66 -0
- package/scaffold/spec-site/src/pages/PolicyDetail.vue +215 -0
- package/scaffold/spec-site/src/pages/PolicyIndex.vue +74 -0
- package/scaffold/spec-site/src/pages/retro/RetroActions.vue +191 -0
- package/scaffold/spec-site/src/pages/retro/RetroBoard.vue +192 -0
- package/scaffold/spec-site/src/pages/retro/RetroCard.vue +131 -0
- package/scaffold/spec-site/src/pages/retro/RetroHeader.vue +287 -0
- package/scaffold/spec-site/src/pages/retro/RetroPage.vue +178 -0
- package/scaffold/spec-site/src/pages/shared/NoContentPlaceholder.vue +34 -0
- package/scaffold/spec-site/src/pages/shared/PlaceholderContent.vue +22 -0
- package/scaffold/spec-site/src/pages/shared/PlaceholderSpecPanel.vue +16 -0
- package/scaffold/spec-site/src/pages/shared/PolicyFallback.vue +145 -0
- package/scaffold/spec-site/src/pages/wireframe/WireframeShell.vue +151 -0
- package/scaffold/spec-site/src/router.ts +85 -0
- package/scaffold/spec-site/src/styles/base.css +21 -0
- package/scaffold/spec-site/src/styles/split-pane.css +143 -0
- package/scaffold/spec-site/src/styles/variables.css +47 -0
- package/scaffold/spec-site/src/utils/markdown.ts +197 -0
- package/scaffold/spec-site/tsconfig.json +20 -0
- 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**`
|