diff --git a/frontend/src/app/components/Onboarding/OnboardingDockedTab.tsx b/frontend/src/app/components/Onboarding/OnboardingDockedTab.tsx
deleted file mode 100644
index 9c39e8ec..00000000
--- a/frontend/src/app/components/Onboarding/OnboardingDockedTab.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-// Docked onboarding home: a small, quiet handle on the right edge that reopens the tour.
-
-import React, { useState } from 'react';
-import { motion, AnimatePresence } from './_motionWin';
-import { Box, IconButton, Typography, CircularProgress } from '@mui/material';
-import CloseIcon from '@mui/icons-material/Close';
-import { useClaudeTokens } from '@/shared/styles/ThemeContext';
-import { useOnboardingProgress } from './hooks/useOnboardingProgress';
-import { STEPS } from './steps';
-import { report } from './telemetry';
-
-const OnboardingDockedTab: React.FC = () => {
- const c = useClaudeTokens();
- const progress = useOnboardingProgress();
- const [hovered, setHovered] = useState(false);
-
- const total = STEPS.length;
- const done = progress.completedSteps.length;
- // Hide while the cursor is driving a step, same as the panel does.
- const show =
- progress.initialized &&
- progress.panelMode === 'docked' &&
- !progress.running &&
- done < total;
- const pct = total > 0 ? (done / total) * 100 : 0;
-
- const reopen = () => {
- report('panel_reopened', { from: 'docked_tab' });
- progress.setPanelMode('expanded');
- };
-
- return (
-
-
- {show && (
-
- setHovered(true)}
- onMouseLeave={() => setHovered(false)}
- onClick={reopen}
- onKeyDown={(e) => {
- if (e.key === 'Enter' || e.key === ' ') {
- e.preventDefault();
- reopen();
- }
- }}
- sx={{
- display: 'flex',
- alignItems: 'center',
- gap: hovered ? 0.7 : 0,
- cursor: 'pointer',
- bgcolor: c.bg.surface,
- border: `1px solid ${c.border.subtle}`,
- borderRight: 'none',
- borderTopLeftRadius: 9,
- borderBottomLeftRadius: 9,
- pl: hovered ? 1 : 0.5,
- pr: 0.5,
- py: 0.5,
- boxShadow: hovered ? c.shadow.md : '-1px 0 5px rgba(0,0,0,0.07)',
- transition:
- 'gap 0.18s ease, padding 0.18s ease, box-shadow 0.18s ease, background 0.15s',
- '&:hover': { bgcolor: c.bg.elevated ?? c.bg.surface },
- }}
- >
-
- {
- e.stopPropagation();
- report('panel_dismissed', { from: 'docked_tab' });
- progress.setPanelMode('hidden');
- }}
- sx={{
- p: 0.1,
- color: c.text.tertiary,
- '&:hover': { color: c.text.primary },
- }}
- >
-
-
-
-
-
- Finish setup
-
-
-
-
-
-
-
-
- )}
-
-
- );
-};
-
-export default OnboardingDockedTab;
diff --git a/frontend/src/app/components/Onboarding/OnboardingRoot.tsx b/frontend/src/app/components/Onboarding/OnboardingRoot.tsx
index ac309590..a6d25091 100644
--- a/frontend/src/app/components/Onboarding/OnboardingRoot.tsx
+++ b/frontend/src/app/components/Onboarding/OnboardingRoot.tsx
@@ -17,7 +17,6 @@ import AgenticCursor, { type AgenticCursorHandle } from './ac/AgenticCursor';
import { onboardingDirector } from './OnboardingDirector';
import { STEPS } from './steps';
import OnboardingPanel from './OnboardingPanel';
-import OnboardingDockedTab from './OnboardingDockedTab';
import { onboardingBus } from './eventBus';
import { report } from './telemetry';
@@ -216,7 +215,6 @@ const OnboardingRoot: React.FC = () => {
<>
-
>
);
};
diff --git a/frontend/src/shared/state/onboardingProgressSlice.ts b/frontend/src/shared/state/onboardingProgressSlice.ts
index 7631f42f..6530b496 100644
--- a/frontend/src/shared/state/onboardingProgressSlice.ts
+++ b/frontend/src/shared/state/onboardingProgressSlice.ts
@@ -5,7 +5,7 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
const STORAGE_KEY = 'openswarm.onboarding.v2';
const SCHEMA_VERSION = 2 as const;
-export type PanelMode = 'pill' | 'expanded' | 'roadmap' | 'docked' | 'hidden';
+export type PanelMode = 'pill' | 'expanded' | 'roadmap' | 'hidden';
export interface PerStepState {
lastViewedAt: number;
@@ -43,7 +43,8 @@ export function loadFromStorage(): OnboardingProgressState | null {
startedAt: typeof parsed.startedAt === 'number' ? parsed.startedAt : Date.now(),
completedSteps: Array.isArray(parsed.completedSteps) ? parsed.completedSteps : [],
currentStepId: typeof parsed.currentStepId === 'string' ? parsed.currentStepId : null,
- panelMode: parsed.panelMode ?? 'expanded',
+ // Old skips parked the tour in the now-removed 'docked' tab; resolve them to hidden.
+ panelMode: (parsed.panelMode as string) === 'docked' ? 'hidden' : (parsed.panelMode ?? 'expanded'),
dismissedAt: typeof parsed.dismissedAt === 'number' ? parsed.dismissedAt : null,
perStepState: (parsed.perStepState as Record) ?? {},
running: false,