feat: add Claude workspace management#4
Open
benmarte wants to merge 22 commits intocordwainersmith:masterfrom
Open
feat: add Claude workspace management#4benmarte wants to merge 22 commits intocordwainersmith:masterfrom
benmarte wants to merge 22 commits intocordwainersmith:masterfrom
Conversation
Renamed existing ClaudeProfile in ConfigModels to ClaudeAccountProfile to avoid collision, then introduced the new ClaudeProfile struct (Codable, Identifiable, Equatable) as a named pointer to a Claude config directory for the profiles feature. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ProfileManager Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…on profile switch - SessionStore.init now requires ProfileManager; claudeDir derived from activeProfile.path - Added reloadForProfile(_:) to swap watcher/services and re-scan on profile change - Temporary ClaudoscopeApp.swift fix to pass ProfileManager at init (Task 4 will wire this properly) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace unsafe MainActor.assumeIsolated with @mainactor init(), inject ProfileManager into MenuBarExtra and full-window environments. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ofile switch Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… change Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…le row - Only close profile picker when profileManager.activate() returns true - Disable the already-active profile row to prevent unnecessary session reloads - Replace Image(systemName: "") placeholder with Color.clear in a Group for proper layout Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…chain - Replace hardcoded ~/.claude/settings.json banner with dynamic path from store.claudeDir - Reset selectedSession, isLoading, lintResultsValid, plans, and timelineEntries at the start of reloadForProfile to prevent stale state on profile switch - Remove redundant .receive(on: DispatchQueue.main) from activeProfileChanged subscription since the Task @mainactor already ensures main-actor execution - ProfileManager.save() structure verified correct — no fix needed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ces settings panel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add workspace switcher row at top of sidebar (all screens) with "Workspace: [name]" label + native menu dropdown - Add WorkspaceLoadingOverlay to full window when store.isLoading, showing "Loading workspace" + workspace name with material blur - Pass workspace name to LoadingLogoView in popover for contextual loading message on workspace switch Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ager - Rename model file ClaudeProfile.swift → Workspace.swift - Rename service file ProfileManager.swift → WorkspaceManager.swift - Rename all type references: ClaudeProfile→Workspace, ProfileManager→WorkspaceManager - Rename properties: activeProfile→activeWorkspace, profiles→workspaces - Rename publisher: activeProfileChanged→activeWorkspaceChanged - Rename method: reloadForProfile→reloadForWorkspace - Update all local variable names (loop vars, params) throughout views and store - Aligns naming with feature/llm-agnostic branch for easier future merge Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Workspacemodel andWorkspaceManagerservice that persists named workspaces (name +~/.claude-style directory path) toUserDefaultsSessionStorehot-swaps all services when the active workspace changes — no restart requiredWorkspace: [name]label and native dropdownLoading [workspace name]…) in the menu bar popover during workspace switchScreenshots
Settings → Workspaces
Workspace Switcher — App Sidebar
Workspace Switcher — Menu Bar Toolbar Widget
Workspace Example 1
Workspace Example 2
Test Plan
~/.claude-*directory🤖 Generated with Claude Code