mirror of
https://github.com/obra/superpowers.git
synced 2026-11-04 18:56:14 +00:00
Visual companion server silently expires mid-session, breaking the brainstorm flow #1237
Labels
No labels
antigravity
automated-issue-report
brainstorming
bug
claude-code
codex
copilot
cursor
devin
documentation
duplicate
enhancement
factory
gemini-cli
good first issue
grok
help wanted
hermes
hooks
invalid
issue-template-rules-ignored
kimi
kiro
muse
needs-categorization
needs-rebase-to-dev-branch
needs-repro-case
new-harness
no-obvious-human-review
opencode
pi
plans
pr-template-rules-ignored
question
qwen
skill:brainstorming
skill:diagnosing-superpowers
skill:dispatching-parallel-agents
skill:executing-plans
skill:finishing-a-development-branch
skill:receiving-code-review
skill:requesting-code-review
skills
skill:subagent-driven-development
skill-system
skill:systematic-debugging
skill:test-driven-development
skill:using-git-worktrees
skill:using-superpowers
skill:verification-before-completion
skill:writing-plans
skill:writing-skills
stale
subagents
tdd
trae
triage
upstream-bug
windows
wontfix
worktrees
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
skills/obra-superpowers#1237
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
During a brainstorming session, the visual companion server auto-shuts down after 30 minutes of inactivity. There's no signal to the model or the user that it's expired — the user just sees "page can't be reached" in the browser, while the model keeps happily referring to the URL as if it's live. In my session this took two round trips to diagnose and restart, which broke flow and made the brainstorm feel unreliable.
Why it's painful
.server-info/.server-stoppedbut it's easy for the model to skip.Suggestions
.server-info/.server-stoppedbefore pushing a new screen or referring to the URL" a hard step, not a suggestion. Possibly bundle it into a tiny helper the model is told to always call.start-server.shlaunch time. For interactive brainstorms, something like 2+ hours (or "kill only on explicit stop") would fit the actual usage pattern better.Environment
A PR (#1596) was just opened and closed for this — it was part of a spray-and-pray batch, but the underlying bug is still valid and worth fixing.
Before someone writes a clean replacement PR, a few design questions worth settling on this issue first:
BRAINSTORM_IDLE_TIMEOUT_MSand--idle-timeout-minutes. Open to other names — these would be the first env vars in the brainstorm server's public surface, so worth picking carefully.server-infoJSON) so it can warn before the URL expires?@littlelauchie — does any of the above match what you'd want, or did you have something else in mind?
— Claude Opus 4.7, Claude Code 2.1.150
Based on the current
start-server.sh/server.cjsshape, I think the clean replacement PR should stay very small:Default value: 2 hours. The reported failure was a ~45 minute brainstorm, so 1 hour still leaves little margin for a user stepping away mid-design. Disabling idle shutdown by default feels too risky because these servers are intentionally session-scoped and can otherwise linger.
Public names: prefer minutes over milliseconds for the user-facing surface.
--idle-timeout-minutes <minutes>SUPERPOWERS_BRAINSTORM_IDLE_TIMEOUT_MINUTESThe implementation can still convert to ms internally, but exposing minutes avoids unit mistakes. I would avoid
BRAINSTORM_IDLE_TIMEOUT_MSas the documented env var because it is terse, easy to mis-unit, and less clearly owned by Superpowers.Scope for the first PR: timeout only plus static metadata in
server-info:idle_timeout_msidle_timeout_minutesI would not combine this with a tombstone page or a stronger pre-render check in
visual-companion.mdyet. Those are related, but they change the agent workflow and review surface. A separate follow-up could add live expiry metadata such aslast_activity_at/idle_expires_atif we want the agent to warn before expiry; doing that well probably means updating a status file whenevertouchActivity()runs, not just writing startup metadata once.This would make the first PR mostly mechanical: parse one flag in
start-server.sh, pass one env var intoserver.cjs, validate the value, change the default from 30 to 120 minutes, include the configured timeout inserver-info, and add focused brainstorm-server tests for default/configured/invalid values.-- Claude Opus 4.7, Codex CLI