cmux NEXT: a first launch opens Home with the Chief, not an empty New Tab workspace

Merged
TE
16d ago
+158-34

Leo, on what keeps him off cmux NEXT: "the awkwardness of workspaces and tabs" and no initial setup. His direction: "maybe it'd be easier to just start off with one [workspace], and whatever subagents come about, that's fine. The Chief as the front door is a pretty nice onboarding, because you just get this implicit thing."

Before this PR, a launch with no workspace of the person's own made an empty workspace on its New Tab page and showed it (FirstWorkspaceLaunch). Home, the Chief's workspace, always exists too, so a new user started with two workspaces and saw the empty one.

Now that launch lands on Home, the workspace with the Chief's conversation docked on the left:

  • No extra workspace is made, so you start with one workspace and the Chief in front.
  • When the Chief hands work to subagents, each opens its own aN · title workspace, grouped by topic in the sidebar (optchat-chief/src/workspaces.rs). That's unchanged, and those workspaces appear beside Home on their own.
  • Once you have a workspace of your own, launches restore as before.
  • Classic Home (labs.classicHome) has no Home workspace, so it keeps the New Tab workspace.
  • A fresh store can answer ensure_home before its snapshot lists that workspace. The launch waits for the listing, at most 3 s (a DemandTimer), so the very first launch does not depend on which came first; past that it makes the New Tab workspace as before.

The rule lives in CmuxNextHomeEngine (FirstWorkspace.landing), so CmuxNextApp does not grow.

With #22374 the empty Chief conversation says what the Chief does and offers Start an agent, Open a terminal and Show Chief Pet, so landing there is the onboarding.

Toggle: Debug Settings > Home > First launch opens Home (home.launchIntoHome, on by default; Release has no Debug Settings, so Release ships it on). Off restores the New Tab workspace. This overrides Lawrence's 2026-10-09 "drop user into main screen asap" default. Home is a full workspace with room on the right, so it's still the main screen. Logged on #13742.

Testing

  • FirstWorkspaceLandingTests (new): lands on the Home workspace by default; doesn't when the switch is off, Home is classic, or Home has no workspace yet; a Home listed after ensure_home still lands; one never listed falls back after the deadline; no wait when ensure_home named nothing or the switch is off.
  • The media-tour label tours base and head with the core tour. Its first shot, Launch, is the before/after of a fresh launch.

Observed / Not run

No local build (policy). The app-host tests that drive launch (FirstLaunchTests, RapidWorkspaceCreateTests, RestoreWindowFieldsDebugTests and others) never start HomeService, so Home is not ensured there and they keep the New Tab workspace; they don't exercise this path either, the unit tests above do. Real-app e2e scripts that launch an empty tag (new-tab-e2e.py, picker-e2e.py, new-workspace-real-typing-e2e.py, bench_tab_switch.py) now start on Home; they act on the focused workspace, so I expect them to keep working, but I have not run them. Turning the switch off in a tag's Debug Settings restores the old start.

This branch includes #22362 and #22374 (merged in, to settle the shared HomeTunables line); once they land, the diff is the front-door commits only.

Changelog

  • Changed: a first launch opens Home with the Chief instead of an empty New Tab workspace.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

A first launch with no workspace of the user's own now lands on Home, the Chief's workspace, instead of making and showing an empty New Tab workspace. Users start with the Chief as the front door; subagent workspaces still open beside Home.

  • Adds Debug Settings > Home > First launch opens Home (home.launchIntoHome, on by default), listed alongside the base's turnProgress tuning; off restores the New Tab workspace, and so does classic Home. The launch waits up to 3 s for the store to list Home so a fresh store's lag doesn't fall back by timing.
  • The classic migration at launch now closes only a non-Home first workspace, since the New Tab workspace it used to close gives way to classic's workspaces while Home stays.
  • The empty Chief conversation gains a front page (on by default) with the Chief's face, what it does, and Start an agent, Open a terminal, Show Chief Pet. The hero face follows the header's (the profile's picture or text, else 🫡).
  • The bundled placeholder cat is gone; the Chief's default face is 🫡. Adds View > Show Chief Pet / Hide Chief Pet (home.toggleChiefPet, merged from the base; agents may turn it on), flipping home.chiefPetEnabled; two quick runs flip the pending value in flight so the pet ends where it began.
  • The landing rule lives in CmuxNextHomeEngine, face and pet state in CmuxNextHome; HomeSettingActions binds the toggles from CmuxNextSettings so CmuxNextApp stays within its size cap.
  • Adds FirstWorkspaceLandingTests, HomeChiefFrontPageTests, and ChiefPetToggleTests.