diff --git a/apps/desktop/src/app/chat/sidebar/profile-switcher.tsx b/apps/desktop/src/app/chat/sidebar/profile-switcher.tsx
index bd685ac15..f5ccd632c 100644
--- a/apps/desktop/src/app/chat/sidebar/profile-switcher.tsx
+++ b/apps/desktop/src/app/chat/sidebar/profile-switcher.tsx
@@ -73,8 +73,9 @@ const stepThroughCells: Modifier = ({ containerNodeRect, draggingNodeRect, trans
// Arc-Spaces-style profile rail at the sidebar foot: a default↔all toggle pinned
// left, the colored named profiles scrolling between, and Manage pinned right.
-// The active profile pops in its own color — the "where am I" cue. Only mounted
-// when >1 profile exists, so single-profile users never see it.
+// The active profile pops in its own color — the "where am I" cue. Single-
+// profile users see only the "+" (create their first profile); everything else
+// appears once a second profile exists.
export function ProfileRail() {
const profiles = useStore($profiles)
const scope = useStore($profileScope)
@@ -116,6 +117,7 @@ export function ProfileRail() {
const onDefault = !isAll && activeKey === 'default'
const named = sortByProfileOrder(profiles.filter(profile => !profile.is_default), order)
+ const multiProfile = profiles.length > 1
// distance constraint: a small drag reorders, a tap still selects the profile.
const sensors = useSensors(
@@ -166,48 +168,52 @@ export function ProfileRail() {
return (
{/* One button toggles default ↔ all: home face when scoped to a profile,
- layers face when showing everything. Pinned left like Manage is right. */}
- {defaultProfile ? (
- // On default → toggle to all. Anywhere else (all view or a named
- // profile) → return to default. So leaving a profile never lands on all.
- (onDefault ? setShowAllProfiles(true) : selectProfile(defaultProfile.name))}
- />
- ) : (
- setShowAllProfiles(true)} />
- )}
+ layers face when showing everything. Pinned left like Manage is right.
+ Hidden until a second profile exists. */}
+ {multiProfile &&
+ (defaultProfile ? (
+ // On default → toggle to all. Anywhere else (all view or a named
+ // profile) → return to default. So leaving a profile never lands on all.
+ (onDefault ? setShowAllProfiles(true) : selectProfile(defaultProfile.name))}
+ />
+ ) : (
+ setShowAllProfiles(true)} />
+ ))}
-
- profile.name)} strategy={horizontalListSortingStrategy}>
- {/* relative → the strip is the dragged square's offsetParent, so the
- clamp modifier bounds drags to the occupied cells (not the +). */}
-
-
-
+ {multiProfile && (
+
+ profile.name)} strategy={horizontalListSortingStrategy}>
+ {/* relative → the strip is the dragged square's offsetParent, so the
+ clamp modifier bounds drags to the occupied cells (not the +). */}
+