[CMUX Next] Chief pet: a Chief Pet settings page like ChatGPT's Mini & Pets
Summary
Leo asked for nicer Chief pet settings, like ChatGPT's Mini & Pets page. This adds a Chief Pet category to Settings for the floating pet that landed in #21738. One card draws the page:
- Header: a one-line description, plus Show Pet / Hide Pet, which toggles
home.chiefPetEnabled(ChatGPT's "Show mini"). - Preview: the chosen pet over its rail (compose and the chevron), as it floats on screen. It's dimmed while the pet is hidden.
- Pets: a grid of cards, one per character (the Chief Dock's nine pixel mascots from Codex), each with its art, name and a line about it, plus None. Clicking a character picks it and shows the pet. None hides the pet and keeps the character for next time. The chosen card is outlined and checked.
- Hover preview: hovering or focusing a character shows it in the preview over the rail until the pointer or focus leaves, without writing anything (as ChatGPT's picker does).
How you find the pet:
- The pet is off by default (
home.chiefPetEnableddefaults to false in base; this PR doesn't change that). Leo couldn't find it in the nightly, so it now has its own sidebar entry, Settings > Chief Pet, and Show Pet there turns it on. Picking any character also shows it.
How it fits the Settings page:
- The card draws the category's two rows (
home.chiefPetEnabled,home.chiefPetMascot) instead of their plain toggle and menu. This works the same way the Backdrops card draws its rows. - Like a plain row, the card's buttons are disabled while Settings is disconnected or a key is managed, and it shows the managed reason or a refused write. Picking a character turns the pet on only if saving the character worked.
- Search, the palette's settings rows and
cmux settingsstill reach both keys. The card's header and grid carry their row keys, so search results land on them. - The category id is
chief-pet, in kebab case for routes and gallery variants. Its sidebar symbol is a newpawprinticon.
What's different from ChatGPT's page:
- No shortcut chip: ChatGPT's ⌥Space shows and focuses the pet. A global show-pet key isn't part of this PR, and ⌥Space would conflict with Start Agent's opt-in system-wide key.
- No Create pet.
- No Customize button.
Screenshots
These are the real page, rendered from this branch by the Settings gallery (pages.settings → chief-pet, chief-pet-customized) in headless Chromium at 1000 × 795 pt @2x. That's the same 2000 × 1590 px as Leo's ChatGPT screenshot.
Pet on (Orb Spark):

Pet off (None):

Leo's ChatGPT reference was pasted in chat and isn't saved anywhere I can reach, so it isn't placed beside these.
Testing
chiefPetCard.test.tsx(new) covers (hover preview test added by the adopting lane; CI runs it, not run locally):- None and all nine characters show, with None chosen while the pet is off;
- the plain rows aren't drawn again below the card (checked against
.row[data-row-key], so it fails if the filter breaks); - picking a character shows the pet with it;
- None hides the pet but keeps the character;
- Show Pet / Hide Pet toggle the pet and keep the character;
- hovering a character previews it without picking it.
categories.test.tsnow listschief-petamong the approved categories, since Leo asked for this page.editors.test.tsxchecks that the card draws both rows.- After merging feat-cmux-next:
chiefPetCard,categories,editorsandsearchtests pass, run per file.gallery-coveragenow coversChiefPetCard; its remaining gaps are base components. vp lintandvp fmtare clean on the changed files.gen-strings --checkpasses.- The settings schema export carries the Chief Pet category. The export stamp is stale on feat-cmux-next itself, so it's left for the base autofix to regenerate.
Localization: there are 16 new strings in 20 locales:
- the category title;
- the card's lede, Show/Hide, Pets, None and its help;
- nine character descriptions.
The character names reuse #21738's settings.choice.chiefPetMascot.*.
Changelog
Added: Settings > Chief Pet shows a preview of the floating pet, shows or hides it, and picks its character from a grid of nine
Adopted from the stopped Chief subagent a11 (claimed with pr-owner); base merged and the hover preview and check added.
Agent session: cosmic-gray
🤖 Generated with Claude Code