diff --git a/frontend/src/app/Main.tsx b/frontend/src/app/Main.tsx
index 03000715..bf38ef91 100644
--- a/frontend/src/app/Main.tsx
+++ b/frontend/src/app/Main.tsx
@@ -14,7 +14,7 @@ import {
setUpdateDownloaded,
setUpdateError,
} from '@/shared/state/updateSlice';
-import AppShell from './components/Layout/AppShell';
+import AppShell from './components/AppShell/AppShell';
import Dashboard from './pages/Dashboard/Dashboard';
import DashboardSelection from './pages/DashboardSelection/DashboardSelection';
import Skills from './pages/Skills/Skills';
diff --git a/frontend/src/app/components/Layout/AppShell.tsx b/frontend/src/app/components/AppShell/AppShell.tsx
similarity index 96%
rename from frontend/src/app/components/Layout/AppShell.tsx
rename to frontend/src/app/components/AppShell/AppShell.tsx
index d52c3849..035e3934 100644
--- a/frontend/src/app/components/Layout/AppShell.tsx
+++ b/frontend/src/app/components/AppShell/AppShell.tsx
@@ -6,7 +6,7 @@ import Snackbar from '@mui/material/Snackbar';
import Alert from '@mui/material/Alert';
import RestartAltIcon from '@mui/icons-material/RestartAlt';
import SystemUpdateAltIcon from '@mui/icons-material/SystemUpdateAlt';
-import Settings from '@/app/pages/Settings/Settings';
+import Settings from './components/Settings/Settings';
import { useAppDispatch, useAppSelector } from '@/shared/hooks';
import { LIST_DASHBOARDS } from '@/shared/backend-bridge/apps/dashboards';
import { LIST_APPS } from '@/shared/backend-bridge/apps/app_builder';
@@ -14,9 +14,9 @@ import { useClaudeTokens } from '@/shared/styles/ThemeContext';
import { useUpdateNotification } from './hooks/useUpdateNotification';
import { useSidebarResize } from './hooks/useSidebarResize';
import { useUrlInterception } from './hooks/useUrlInterception';
-import TitleBar from './TitleBar';
-import Sidebar from './Sidebar';
-import UpdateBanner from './UpdateBanner';
+import TitleBar from './components/TitleBar/TitleBar';
+import Sidebar from './components/Sidebar';
+import UpdateBanner from './components/UpdateBanner';
const AppShell: React.FC = () => {
const c = useClaudeTokens();
diff --git a/frontend/src/app/pages/Settings/Settings.tsx b/frontend/src/app/components/AppShell/components/Settings/Settings.tsx
similarity index 96%
rename from frontend/src/app/pages/Settings/Settings.tsx
rename to frontend/src/app/components/AppShell/components/Settings/Settings.tsx
index ca5887ef..8739e5ea 100644
--- a/frontend/src/app/pages/Settings/Settings.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/Settings.tsx
@@ -13,10 +13,10 @@ import Snackbar from '@mui/material/Snackbar';
import Alert from '@mui/material/Alert';
import SaveIcon from '@mui/icons-material/Save';
import CloseIcon from '@mui/icons-material/Close';
-import { CommandsContent } from '@/app/pages/Commands/Commands';
+import { CommandsTab } from './components/CommandsTab/CommandsTab';
import { useSettings } from './hooks/useSettings';
-import GeneralTab from './GeneralTab';
-import ModelsTab from './ModelsTab';
+import GeneralTab from './components/GeneralTab/GeneralTab';
+import ModelsTab from './components/ModelsTab/ModelsTab';
const Settings: React.FC = () => {
const s = useSettings();
@@ -93,7 +93,7 @@ const Settings: React.FC = () => {
) : (
-
+
)}
diff --git a/frontend/src/app/pages/Commands/Commands.tsx b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/CommandsTab.tsx
similarity index 76%
rename from frontend/src/app/pages/Commands/Commands.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/CommandsTab.tsx
index 5cc04f8f..17daaa2f 100644
--- a/frontend/src/app/pages/Commands/Commands.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/CommandsTab.tsx
@@ -2,11 +2,11 @@ import React from 'react';
import Box from '@mui/material/Box';
import { useClaudeTokens } from '@/shared/styles/ThemeContext';
import { useCommands } from './hooks/useCommands';
-import SlashCommandsSection from './SlashCommandsSection';
-import AtCommandsSection from './AtCommandsSection';
-import ShortcutsSection from './ShortcutsSection';
+import SlashCommandsSection from './components/SlashCommandsSection';
+import AtCommandsSection from './components/AtCommandsSection';
+import ShortcutsSection from './components/ShortcutsSection';
-export const CommandsContent: React.FC = () => {
+export const CommandsTab: React.FC = () => {
const c = useClaudeTokens();
const { slashCommands, atCommands, modesMap, navShortcuts, actionShortcuts } = useCommands();
diff --git a/frontend/src/app/pages/Commands/AtCommandsSection.tsx b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/AtCommandsSection.tsx
similarity index 96%
rename from frontend/src/app/pages/Commands/AtCommandsSection.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/AtCommandsSection.tsx
index 708930e7..5e3b813b 100644
--- a/frontend/src/app/pages/Commands/AtCommandsSection.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/AtCommandsSection.tsx
@@ -3,8 +3,8 @@ import Box from '@mui/material/Box';
import Typography from '@mui/material/Typography';
import Chip from '@mui/material/Chip';
import AlternateEmailIcon from '@mui/icons-material/AlternateEmail';
-import { SectionHeader } from './CommandsHelpers';
-import { AtCommand } from './commandsTypes';
+import { SectionHeader } from './shared/CommandsHelpers';
+import { AtCommand } from './shared/commandsTypes';
interface AtCommandsSectionProps {
atCommands: AtCommand[];
diff --git a/frontend/src/app/pages/Commands/ShortcutsSection.tsx b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/ShortcutsSection.tsx
similarity index 95%
rename from frontend/src/app/pages/Commands/ShortcutsSection.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/ShortcutsSection.tsx
index 92311e10..a924a565 100644
--- a/frontend/src/app/pages/Commands/ShortcutsSection.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/ShortcutsSection.tsx
@@ -2,8 +2,8 @@ import React from 'react';
import Box from '@mui/material/Box';
import Typography from '@mui/material/Typography';
import KeyboardIcon from '@mui/icons-material/Keyboard';
-import { KeyBadge, SectionHeader } from './CommandsHelpers';
-import { Shortcut, SHORTCUTS } from './commandsTypes';
+import { KeyBadge, SectionHeader } from './shared/CommandsHelpers';
+import { Shortcut, SHORTCUTS } from './shared/commandsTypes';
interface ShortcutsSectionProps {
navShortcuts: Shortcut[];
diff --git a/frontend/src/app/pages/Commands/SlashCommandsSection.tsx b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/SlashCommandsSection.tsx
similarity index 96%
rename from frontend/src/app/pages/Commands/SlashCommandsSection.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/SlashCommandsSection.tsx
index 724ae618..aa054768 100644
--- a/frontend/src/app/pages/Commands/SlashCommandsSection.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/SlashCommandsSection.tsx
@@ -5,8 +5,8 @@ import Chip from '@mui/material/Chip';
import PsychologyIcon from '@mui/icons-material/Psychology';
import SmartToyOutlinedIcon from '@mui/icons-material/SmartToyOutlined';
import TerminalIcon from '@mui/icons-material/Terminal';
-import { SectionHeader } from './CommandsHelpers';
-import { SlashCommand } from './commandsTypes';
+import { SectionHeader } from './shared/CommandsHelpers';
+import { SlashCommand } from './shared/commandsTypes';
interface SlashCommandsSectionProps {
slashCommands: SlashCommand[];
diff --git a/frontend/src/app/pages/Commands/CommandsHelpers.tsx b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/shared/CommandsHelpers.tsx
similarity index 100%
rename from frontend/src/app/pages/Commands/CommandsHelpers.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/shared/CommandsHelpers.tsx
diff --git a/frontend/src/app/pages/Commands/commandsTypes.ts b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/shared/commandsTypes.ts
similarity index 100%
rename from frontend/src/app/pages/Commands/commandsTypes.ts
rename to frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/components/shared/commandsTypes.ts
diff --git a/frontend/src/app/pages/Commands/hooks/useCommands.tsx b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/hooks/useCommands.tsx
similarity index 98%
rename from frontend/src/app/pages/Commands/hooks/useCommands.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/hooks/useCommands.tsx
index 07e932ac..40a86808 100644
--- a/frontend/src/app/pages/Commands/hooks/useCommands.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/CommandsTab/hooks/useCommands.tsx
@@ -9,7 +9,7 @@ import { getToolGroupIcon } from '@/app/pages/_shared/getToolGroupIcon';
import { LIST_APPS } from '@/shared/backend-bridge/apps/app_builder';
import { LIST_SKILLS } from '@/shared/backend-bridge/apps/skills';
import { LIST_MODES } from '@/shared/state/modesSlice';
-import { SlashCommand, AtCommand, SHORTCUTS } from '../commandsTypes';
+import { SlashCommand, AtCommand, SHORTCUTS } from '../components/shared/commandsTypes';
export function useCommands() {
const dispatch = useAppDispatch();
diff --git a/frontend/src/app/pages/Settings/GeneralTab.tsx b/frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/GeneralTab.tsx
similarity index 97%
rename from frontend/src/app/pages/Settings/GeneralTab.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/GeneralTab.tsx
index 2567bf97..1106ebbc 100644
--- a/frontend/src/app/pages/Settings/GeneralTab.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/GeneralTab.tsx
@@ -12,9 +12,9 @@ import LanguageIcon from '@mui/icons-material/Language';
import RestartAltIcon from '@mui/icons-material/RestartAlt';
import { RESET_SYSTEM_PROMPT } from '@/shared/backend-bridge/apps/settings';
import { DEFAULT_SYSTEM_PROMPT } from '@/shared/state/settingsSlice';
-import InterfaceSection from './InterfaceSection';
-import AboutSection from './AboutSection';
-import type { UseSettingsReturn } from './hooks/useSettings';
+import InterfaceSection from './components/InterfaceSection';
+import AboutSection from './components/AboutSection';
+import type { UseSettingsReturn } from '../../hooks/useSettings';
const GeneralTab: React.FC<{ s: UseSettingsReturn }> = ({ s }) => {
const { form, setForm, c, dispatch, modesList, browseFolder,
diff --git a/frontend/src/app/pages/Settings/AboutSection.tsx b/frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/components/AboutSection.tsx
similarity index 100%
rename from frontend/src/app/pages/Settings/AboutSection.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/components/AboutSection.tsx
diff --git a/frontend/src/app/pages/Settings/InterfaceSection.tsx b/frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/components/InterfaceSection.tsx
similarity index 99%
rename from frontend/src/app/pages/Settings/InterfaceSection.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/components/InterfaceSection.tsx
index 0b4012e4..96fc672c 100644
--- a/frontend/src/app/pages/Settings/InterfaceSection.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/GeneralTab/components/InterfaceSection.tsx
@@ -8,7 +8,7 @@ import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
import LightModeIcon from '@mui/icons-material/LightMode';
import DarkModeIcon from '@mui/icons-material/DarkMode';
import KeyboardIcon from '@mui/icons-material/Keyboard';
-import type { UseSettingsReturn } from './hooks/useSettings';
+import type { UseSettingsReturn } from '../../../hooks/useSettings';
const InterfaceSection: React.FC<{ s: UseSettingsReturn }> = ({ s }) => {
const { form, setForm, c, recordingShortcut, setRecordingShortcut,
diff --git a/frontend/src/app/pages/Settings/ModelsTab.tsx b/frontend/src/app/components/AppShell/components/Settings/components/ModelsTab/ModelsTab.tsx
similarity index 96%
rename from frontend/src/app/pages/Settings/ModelsTab.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/ModelsTab/ModelsTab.tsx
index 65a22190..7ca72fc1 100644
--- a/frontend/src/app/pages/Settings/ModelsTab.tsx
+++ b/frontend/src/app/components/AppShell/components/Settings/components/ModelsTab/ModelsTab.tsx
@@ -7,8 +7,8 @@ import InputAdornment from '@mui/material/InputAdornment';
import VisibilityIcon from '@mui/icons-material/Visibility';
import VisibilityOffIcon from '@mui/icons-material/VisibilityOff';
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
-import SubscriptionCards from './SubscriptionCards';
-import type { UseSettingsReturn } from './hooks/useSettings';
+import SubscriptionCards from './components/SubscriptionCards';
+import type { UseSettingsReturn } from '../../hooks/useSettings';
const ModelsTab: React.FC<{ s: UseSettingsReturn }> = ({ s }) => {
const { c, form, setForm, showApiKey, setShowApiKey, fieldSx, labelSx, descSx } = s;
diff --git a/frontend/src/app/pages/Settings/SubscriptionCard.tsx b/frontend/src/app/components/AppShell/components/Settings/components/ModelsTab/components/SubscriptionCard.tsx
similarity index 100%
rename from frontend/src/app/pages/Settings/SubscriptionCard.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/ModelsTab/components/SubscriptionCard.tsx
diff --git a/frontend/src/app/pages/Settings/SubscriptionCards.tsx b/frontend/src/app/components/AppShell/components/Settings/components/ModelsTab/components/SubscriptionCards.tsx
similarity index 100%
rename from frontend/src/app/pages/Settings/SubscriptionCards.tsx
rename to frontend/src/app/components/AppShell/components/Settings/components/ModelsTab/components/SubscriptionCards.tsx
diff --git a/frontend/src/app/pages/Settings/hooks/useSettings.ts b/frontend/src/app/components/AppShell/components/Settings/hooks/useSettings.ts
similarity index 100%
rename from frontend/src/app/pages/Settings/hooks/useSettings.ts
rename to frontend/src/app/components/AppShell/components/Settings/hooks/useSettings.ts
diff --git a/frontend/src/app/components/Layout/Sidebar.tsx b/frontend/src/app/components/AppShell/components/Sidebar.tsx
similarity index 100%
rename from frontend/src/app/components/Layout/Sidebar.tsx
rename to frontend/src/app/components/AppShell/components/Sidebar.tsx
diff --git a/frontend/src/app/components/DynamicIsland/DynamicIsland.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/DynamicIsland.tsx
similarity index 94%
rename from frontend/src/app/components/DynamicIsland/DynamicIsland.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/DynamicIsland.tsx
index cd3bfa8d..543dae3c 100644
--- a/frontend/src/app/components/DynamicIsland/DynamicIsland.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/DynamicIsland.tsx
@@ -2,10 +2,10 @@ import React, { useMemo, useRef } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import { useClaudeTokens } from '@/shared/styles/ThemeContext';
import { SPRING_LAYOUT, SPRING_BOUNCE } from './islandTypes';
-import { IdlePill } from './IdlePill';
-import { CompactPill } from './CompactPill';
-import { CompactActionablePill } from './CompactActionablePill';
-import { ExpandedCard } from './ExpandedCard';
+import { IdlePill } from './components/IdlePill';
+import { CompactPill } from './components/CompactPill/CompactPill';
+import { CompactActionablePill } from './components/CompactActionablePill';
+import { ExpandedCard } from './components/ExpandedCard/ExpandedCard';
import { useDynamicIslandData } from './hooks/useDynamicIslandData';
import { useDynamicIslandActions } from './hooks/useDynamicIslandActions';
diff --git a/frontend/src/app/components/DynamicIsland/CompactActionablePill.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactActionablePill.tsx
similarity index 95%
rename from frontend/src/app/components/DynamicIsland/CompactActionablePill.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactActionablePill.tsx
index bd660894..dfb333c8 100644
--- a/frontend/src/app/components/DynamicIsland/CompactActionablePill.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactActionablePill.tsx
@@ -10,8 +10,8 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { motion } from 'framer-motion';
import { parseMcpToolName } from '@/app/pages/AgentChat/toolkit/approvalToolkit/utils';
import { useMcpToolMeta } from '@/app/pages/AgentChat/toolkit/approvalToolkit/utils/useMcpToolMeta';
-import { SPRING_BOUNCE } from './islandTypes';
-import type { ClaudeTokens } from './islandTypes';
+import { SPRING_BOUNCE } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
+import type { ClaudeTokens } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
import type { ApprovalRequest } from '@/shared/state/agentsSlice';
import { Terminal, FileText, FilePen, Search, MessageCircleQuestion, Wrench } from 'lucide-react';
diff --git a/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactPill/ActivityIndicator.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactPill/ActivityIndicator.tsx
new file mode 100644
index 00000000..c0b10352
--- /dev/null
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactPill/ActivityIndicator.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import Box from '@mui/material/Box';
+import type { ClaudeTokens } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
+
+export const ActivityIndicator: React.FC<{ c: ClaudeTokens }> = ({ c }) => (
+
+);
diff --git a/frontend/src/app/components/DynamicIsland/CompactPill.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactPill/CompactPill.tsx
similarity index 82%
rename from frontend/src/app/components/DynamicIsland/CompactPill.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactPill/CompactPill.tsx
index 5623c774..4716d272 100644
--- a/frontend/src/app/components/DynamicIsland/CompactPill.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/CompactPill/CompactPill.tsx
@@ -2,9 +2,9 @@ import React from 'react';
import Box from '@mui/material/Box';
import Typography from '@mui/material/Typography';
import { motion } from 'framer-motion';
-import { ActivityIndicator } from './StatusDot';
-import { SPRING_BOUNCE } from './islandTypes';
-import type { ClaudeTokens } from './islandTypes';
+import { ActivityIndicator } from './ActivityIndicator';
+import { SPRING_BOUNCE } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
+import type { ClaudeTokens } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
export const CompactPill: React.FC<{
c: ClaudeTokens;
diff --git a/frontend/src/app/components/DynamicIsland/AgentStatusRow.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/AgentStatusRow.tsx
similarity index 92%
rename from frontend/src/app/components/DynamicIsland/AgentStatusRow.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/AgentStatusRow.tsx
index 510b91fd..206209fd 100644
--- a/frontend/src/app/components/DynamicIsland/AgentStatusRow.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/AgentStatusRow.tsx
@@ -6,8 +6,8 @@ import Tooltip from '@mui/material/Tooltip';
import StopCircleOutlinedIcon from '@mui/icons-material/StopCircleOutlined';
import CloseIcon from '@mui/icons-material/Close';
import { StatusDot } from './StatusDot';
-import { STATUS_CONFIG } from './islandTypes';
-import type { ClaudeTokens, TrackedAgent } from './islandTypes';
+import { STATUS_CONFIG } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
+import type { ClaudeTokens, TrackedAgent } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
export const AgentStatusRow: React.FC<{
agent: TrackedAgent;
diff --git a/frontend/src/app/components/DynamicIsland/CompletedAgentsList.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/CompletedAgentsList.tsx
similarity index 95%
rename from frontend/src/app/components/DynamicIsland/CompletedAgentsList.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/CompletedAgentsList.tsx
index 1ef4ee63..86b8b8da 100644
--- a/frontend/src/app/components/DynamicIsland/CompletedAgentsList.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/CompletedAgentsList.tsx
@@ -6,7 +6,7 @@ import Collapse from '@mui/material/Collapse';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import ExpandLessIcon from '@mui/icons-material/ExpandLess';
import { AgentStatusRow } from './AgentStatusRow';
-import type { ClaudeTokens, TrackedAgent } from './islandTypes';
+import type { ClaudeTokens, TrackedAgent } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
export const CompletedAgentsList: React.FC<{
c: ClaudeTokens;
diff --git a/frontend/src/app/components/DynamicIsland/ExpandedCard.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/ExpandedCard.tsx
similarity index 98%
rename from frontend/src/app/components/DynamicIsland/ExpandedCard.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/ExpandedCard.tsx
index 6fbc4dc6..bd7dcbe0 100644
--- a/frontend/src/app/components/DynamicIsland/ExpandedCard.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/ExpandedCard.tsx
@@ -8,7 +8,7 @@ import { ApprovalRouter } from '@/app/pages/AgentChat/toolkit/approvalToolkit/Ap
import { BatchApprovalWrapper } from '@/app/pages/AgentChat/toolkit/approvalToolkit/BatchApprovalWrapper';
import { AgentStatusRow } from './AgentStatusRow';
import { CompletedAgentsList } from './CompletedAgentsList';
-import type { ClaudeTokens, SessionApprovalGroup, TrackedAgent } from './islandTypes';
+import type { ClaudeTokens, SessionApprovalGroup, TrackedAgent } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
export const ExpandedCard: React.FC<{
c: ClaudeTokens;
diff --git a/frontend/src/app/components/DynamicIsland/StatusDot.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/StatusDot.tsx
similarity index 58%
rename from frontend/src/app/components/DynamicIsland/StatusDot.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/StatusDot.tsx
index f6625bde..77a7d2d8 100644
--- a/frontend/src/app/components/DynamicIsland/StatusDot.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/ExpandedCard/StatusDot.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import Box from '@mui/material/Box';
-import { STATUS_CONFIG } from './islandTypes';
-import type { ClaudeTokens } from './islandTypes';
+import { STATUS_CONFIG } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
+import type { ClaudeTokens } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
export const StatusDot: React.FC<{ status: string; c: ClaudeTokens }> = ({ status, c }) => {
const cfg = STATUS_CONFIG[status];
@@ -26,21 +26,4 @@ export const StatusDot: React.FC<{ status: string; c: ClaudeTokens }> = ({ statu
}}
/>
);
-};
-
-export const ActivityIndicator: React.FC<{ c: ClaudeTokens }> = ({ c }) => (
-
-);
+};
\ No newline at end of file
diff --git a/frontend/src/app/components/DynamicIsland/IdlePill.tsx b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/IdlePill.tsx
similarity index 91%
rename from frontend/src/app/components/DynamicIsland/IdlePill.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/IdlePill.tsx
index b04d25d5..5b5e6917 100644
--- a/frontend/src/app/components/DynamicIsland/IdlePill.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/components/IdlePill.tsx
@@ -4,7 +4,7 @@ import Typography from '@mui/material/Typography';
import Tooltip from '@mui/material/Tooltip';
import SearchIcon from '@mui/icons-material/Search';
import { motion } from 'framer-motion';
-import type { ClaudeTokens } from './islandTypes';
+import type { ClaudeTokens } from '@/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes';
export const IdlePill: React.FC<{ c: ClaudeTokens }> = ({ c }) => (
state.agents.sessions);
diff --git a/frontend/src/app/components/DynamicIsland/islandTypes.ts b/frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes.ts
similarity index 100%
rename from frontend/src/app/components/DynamicIsland/islandTypes.ts
rename to frontend/src/app/components/AppShell/components/TitleBar/DynamicIsland/islandTypes.ts
diff --git a/frontend/src/app/components/Layout/TitleBar.tsx b/frontend/src/app/components/AppShell/components/TitleBar/TitleBar.tsx
similarity index 97%
rename from frontend/src/app/components/Layout/TitleBar.tsx
rename to frontend/src/app/components/AppShell/components/TitleBar/TitleBar.tsx
index edb14bd5..36369525 100644
--- a/frontend/src/app/components/Layout/TitleBar.tsx
+++ b/frontend/src/app/components/AppShell/components/TitleBar/TitleBar.tsx
@@ -7,7 +7,7 @@ import Tooltip from '@mui/material/Tooltip';
import ViewSidebarOutlinedIcon from '@mui/icons-material/ViewSidebarOutlined';
import ArrowBackOutlinedIcon from '@mui/icons-material/ArrowBackOutlined';
import ArrowForwardOutlinedIcon from '@mui/icons-material/ArrowForwardOutlined';
-import DynamicIsland from '@/app/components/DynamicIsland';
+import DynamicIsland from './DynamicIsland/DynamicIsland';
import { useClaudeTokens } from '@/shared/styles/ThemeContext';
interface TitleBarProps {
diff --git a/frontend/src/app/components/Layout/UpdateBanner.tsx b/frontend/src/app/components/AppShell/components/UpdateBanner.tsx
similarity index 100%
rename from frontend/src/app/components/Layout/UpdateBanner.tsx
rename to frontend/src/app/components/AppShell/components/UpdateBanner.tsx
diff --git a/frontend/src/app/components/Layout/hooks/useSidebarResize.ts b/frontend/src/app/components/AppShell/hooks/useSidebarResize.ts
similarity index 100%
rename from frontend/src/app/components/Layout/hooks/useSidebarResize.ts
rename to frontend/src/app/components/AppShell/hooks/useSidebarResize.ts
diff --git a/frontend/src/app/components/Layout/hooks/useUpdateNotification.ts b/frontend/src/app/components/AppShell/hooks/useUpdateNotification.ts
similarity index 100%
rename from frontend/src/app/components/Layout/hooks/useUpdateNotification.ts
rename to frontend/src/app/components/AppShell/hooks/useUpdateNotification.ts
diff --git a/frontend/src/app/components/Layout/hooks/useUrlInterception.ts b/frontend/src/app/components/AppShell/hooks/useUrlInterception.ts
similarity index 100%
rename from frontend/src/app/components/Layout/hooks/useUrlInterception.ts
rename to frontend/src/app/components/AppShell/hooks/useUrlInterception.ts
diff --git a/frontend/src/app/components/DynamicIsland/index.ts b/frontend/src/app/components/DynamicIsland/index.ts
deleted file mode 100644
index be56269a..00000000
--- a/frontend/src/app/components/DynamicIsland/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './DynamicIsland';