feat(launch): tabs from the first frame, a skeleton while the agent comes back (#106) - #107
Merged
Merged
Conversation
…omes back (#106) The saved strip is drawn at once from tabs.json and settled in place when the restore answers, so the start screen no longer flashes. A resuming tab wears a skeleton of the agent's layout (core, so Prism too); the shell's words are cleared before the agent's first title and the skeleton lifts once it has drawn. Tabs still coming back show a ring. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t
…#106) The owner found the first one too small, and wanted only the lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t
# Conflicts: # package-lock.json # package.json
github-actions Bot
pushed a commit
that referenced
this pull request
Oct 1, 2026
…omes back (#106) (#107) * feat(launch): tabs from the first frame, a skeleton while the agent comes back (#106) The saved strip is drawn at once from tabs.json and settled in place when the restore answers, so the start screen no longer flashes. A resuming tab wears a skeleton of the agent's layout (core, so Prism too); the shell's words are cleared before the agent's first title and the skeleton lifts once it has drawn. Tabs still coming back show a ring. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t * style(launch): the skeleton fills the window with lines, no input box (#106) The owner found the first one too small, and wanted only the lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #106. Spec and plan, approved together ("go ahead"):
docs/superpowers/specs/2026-09-30-launch-skeleton-design.md. The four mockups sit next to it (2026-09-30-launch-mockups.html); the owner picked C, the skeleton.Before: opening the app with three Claude tabs showed the start screen ("no tabs"), then the tabs, then text on each tab, then Claude.
After:
tabs:peekis a synchronous read of tabs.json: no stat, no session scan. It draws the saved strip as placeholders (Tab.pending) at once.tabs:restoreanswers,lib/restorePlansettles each placeholder in place by its saved index (RestoredTab.from).ResumeSkeletondraws Claude's layout as quiet theme-coloured bars: the logo block, a prompt, a reply, the input box, the footer.resumeReveal, pure and tested, decides when. MEASURED 2026-09-30: under pwsh through the bundled ConPTY, the first title is exactlyclaude(3.6 s), then✳ Claude Code(5.4 s), then the alternate screen.claudetitle, so nothing the shell said is seen.Claude.resumingIdsin termBus; placeholders count too.Core 0.20.0, app 0.25.0. Prism gets the skeleton through the automatic bump. Its tab strip can adopt the ring later.
Verified:
resumeRevealandrestorePlan(peek, settle, a closed placeholder, the handed-over folders, all gone). Lint and typecheck pass.launchSkeletonruns three saved claude tabs, a temp HOME with a transcript for each (never the real~/.claude), and a stand-inclaudefirst on PATH. The stand-in prints a line first, titles itselfclaude, prints its banner, then settles like the real one..e2e-shots/launch-skeleton.pngwas checked against the mockup.edgesfailed on its relaunch step in one full run and once on its own, then passed three times in a row, including a clean full run; it failed the same way once before this change.attentionfailed once in the first full run and passed on its own.🤖 Generated with Claude Code
https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t