Summary
Replace the global maxSessionAgeMs with per-session TTL chosen by the user at creation time.
Design
- Presets: 1h, 2h (default), 4h, 8h, 24h
- Custom: any duration via text input
- Session reaper respects per-session
expiresAt instead of global max
- Expired sessions are archived (transcript + metadata preserved), not deleted
- TTL countdown shown in session header bar
API Changes
POST /v1/sessions gains ttlMs field (optional, default 7200000)
- Session reaper checks
expiresAt = createdAt + ttlMs per session
UI
TTLPicker component in CreateSessionModal
- Preset buttons + custom input field
- TTL countdown in session header
Depends On
- Session persistence issue (needs
expiresAt field in stored sessions)
Spec
See docs/superpowers/specs/2026-03-28-dashboard-ux-p1-design.md — Section 2: User-controlled TTL
Summary
Replace the global
maxSessionAgeMswith per-session TTL chosen by the user at creation time.Design
expiresAtinstead of global maxAPI Changes
POST /v1/sessionsgainsttlMsfield (optional, default 7200000)expiresAt = createdAt + ttlMsper sessionUI
TTLPickercomponent in CreateSessionModalDepends On
expiresAtfield in stored sessions)Spec
See
docs/superpowers/specs/2026-03-28-dashboard-ux-p1-design.md— Section 2: User-controlled TTL