Navigation architecture

August 17, 2026 · View on GitHub

Full detail behind the one-paragraph summary in the root AGENTS.md.

ContentView branches on platform.

PlatformShellStructure
macOSConsumerMacShellNavigationSplitView over MacSidebar. Three destinations (Chat, Models, Advanced) plus the conversation list, which is scoped to Chat. Detail is ChatInterfaceView, SimplifiedModelsView, or ConsumerAdvancedHubView.
iOSConsumerCompactShellChatInterfaceView alone, plus sheets.

MacSidebarSelection has four cases: .chat (the transcript, whatever is current), .conversation(String), .models, and .advanced. Splitting .chat from .conversation is what lets ⌘1 land somewhere real before anything is saved. ⌘1/⌘2/⌘3 are published from the shell through focusedSceneValue(\.shellNavigationActions) because the chat cannot navigate away from itself. One @SceneStorage key, mac.sidebar.visibility, persists whether the sidebar is showing; column width is fixed by navigationSplitViewColumnWidth and the selection is re-derived from the current conversation on restore.

On iOS, Settings and the Advanced hub are sheets, both opened from the conversation drawer rather than the toolbar. Models is not the same kind of sheet: the chat presents ModelSelectionSheet (a picker, cross-platform), while the full SimplifiedModelsView management screen is reached through a NavigationLink inside CombinedSettingsView. On macOS SimplifiedModelsView is the .models sidebar destination.

ConsumerAdvancedHubView has five sections and eight rows:

SectionRowsAvailability
ConnectHost this MacmacOS only (#if os(macOS))
Voice UtilitiesTranscribe, Read Aloud, Voice Activityboth
Voice UtilitiesDiarizationiOS only (#if canImport(UIKit))
Vision UtilitiesSegmentationiOS only, and so is the whole section
AgentsTalk, Computer Useboth
ManagementBenchmarksboth

Storage and tool calling live in Settings and Manage Models instead.