Conversation
pedramamini
commented
Dec 1, 2025
- fix: UI polish for git info and terminal output
- MAESTRO: feat: Add unread message indicator to AI tabs
- MAESTRO: feat: Add navigation history (back/forward) for sessions and AI tabs
- feat: Sync file tree highlighting with tab completion navigation
- feat: UI polish - markdown rendering, file metadata, context menus
- feat: Update supported agent names and ordering
- fix: Keyboard shortcut priority and scratchpad typing performance
- feat: Add git branches and tags to tab completion
- fix: Prevent orphaned busy state and add debug commands
- feat: Title bar context, achievement UX, and UI polish
- fix: Extract text from image paste messages in session list
- fix: Clear unread indicator when tab is active
- fix: Clear unread indicator when switching to a tab
- feat: Always enable YOLO mode for Claude Code
- fix: Move markdown toggle to action buttons row
- Remove auto-switch from history tab when in terminal mode - Refresh git info immediately when clicking branch pill (before opening git log) - Extract fetchGitInfo as reusable callback - Add bottom padding to terminal output log items for better spacing Claude ID: e227e74c-f86b-4598-9fd5-165712e058a6 Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
Adds a visual indicator (solid accent-colored dot) to AI tabs when they have received new messages while not being the active tab. The indicator appears next to the tab name and automatically clears when the user switches to that tab. Implementation: - Added `hasUnread` boolean field to AITab interface - Set hasUnread=true when AI output arrives on non-active tabs - Clear hasUnread when tab is activated via setActiveTab helper - Display accent-colored dot in TabBar when tab has unread messages
… AI tabs Implement breadcrumb-style navigation through session and AI tab history: - Add useNavigationHistory hook to track navigation history - New shortcuts: Cmd+Shift+, (back) and Cmd+Shift+. (forward) - Tracks both session changes and AI tab changes - History limited to 50 entries - Shortcuts are customizable via Settings
- Add syncFileTreeToTabCompletion function to highlight corresponding file/folder in right panel when navigating tab completion options - Update arrow key navigation to sync file tree on each selection change - Sync file tree when accepting tab completion via Tab/Enter keys - Fix scrollIntoView to trigger during tab completion (was blocked when focus was on main panel) - Add scrollIntoView for tab completion dropdown items (consistency with slash command dropdown) - Handle ./ prefix in path matching (e.g., "./src" now matches "src")
Markdown Rendering in AI Terminal: - Add ReactMarkdown with GitHub Flavored Markdown support for AI responses - Add syntax highlighting for code blocks using react-syntax-highlighter - Add toggle button (⌘E) to switch between rendered/raw markdown view - Tighten vertical spacing for bullet lists (line-height 1.35, no margins) File Preview Enhancements: - Add fs:stat IPC handler to retrieve file metadata - Display file size (human-readable KB/MB), created date, and modified date - Show metadata in file preview header with proper formatting Session Context Menu (Right-click): - Add right-click context menu for sessions in left sidebar - Options: Rename, Toggle Bookmark, Move to Group (with submenu), Remove Agent - Context menu rename opens modal instead of inline editing Terminal Improvements: - Fix long text wrapping with word-break: break-all for PATH-like strings - Spawn shell as login shell (-l flag) for proper PATH/environment UI Naming: - Rename "Kill Agent" to "Remove Agent" in shortcuts and menus - Show agent name in Cmd-K menu actions (e.g., "Rename Agent: MyAgent") Session List Fixes: - Use unique React keys for bookmarked sessions appearing in multiple locations - Fix double-click rename for sessions shown in both Bookmarks and Groups
- Replace Aider with Gemini CLI (gemini-cli) - Replace Qwen Coder with Qwen3 Coder (qwen3-coder) - Replace CLI Terminal with OpenAI Codex (openai-codex) - Reorder agents: Claude Code, OpenAI Codex, Gemini CLI, Qwen3 Coder - Update agent definitions in agent-detector.ts - Update mobile web components (AllSessionsView, SessionPillBar) - Update documentation (CLAUDE.md, README.md)
- Alt+Cmd+Arrow now correctly overrides group collapse when sidebar has focus - Scratchpad uses local state for responsive typing, syncs to parent on blur - Fix remote spawn session ID to include tab ID for proper output routing Claude ID: 8f27ef28-3151-473a-9fee-07830c99568a Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
- Add IPC handlers for git:branches and git:tags in main process - Add preload bridge methods for branches/tags - Add gitService.getBranches() and gitService.getTags() methods - Add gitBranches, gitTags, gitRefsCacheTime to Session type - Fetch branches/tags when session is created in a git repo - Refresh branches/tags after git commands that modify refs (branch, checkout, switch, fetch, pull, tag, merge, rebase, reset) - Update useTabCompletion to show branches for git checkout, merge, rebase, etc. and tags for git checkout, tag -d, show, etc. - Add GitBranch and Tag icons to InputArea for visual distinction - Sort order: history > branches > tags > folders > files
- Exit handler now falls back to clearing all busy tabs when the specified tab ID doesn't exist (e.g., tab was closed/renamed), preventing sessions from getting stuck in busy state indefinitely - Added hidden debug commands to Cmd-K (only visible when typing "debug"): - Debug: Reset Busy State - clears stuck state for all sessions - Debug: Reset Current Session - clears stuck state for active session - Debug: Log Session State - prints session state to console for debugging - Debug: Playground - opens the developer playground
Title Bar: - Add centered context text showing Group | Agent | Session info - Text remains draggable and non-selectable Standing Ovation Achievements: - Replace white glow background with confetti burst animation - Confetti shoots from center and animates behind the modal - Logarithmic scale for time sliders in Developer Playground - Better control over badge level testing across the full range UI/UX Improvements: - Markdown list rendering: proper spacing, indentation, inline paragraphs - Process Monitor: fix text truncation with flex layout - LogViewer: persist selected filter levels across sessions - Tab completion: prevent focus change on empty input in terminal mode - SessionList: fix useEffect dependency causing unnecessary re-renders - NewInstanceModal: hide internal 'terminal' agent from selection UI Bug Fixes: - Session persistence: properly filter non-persistable tab fields - Agent detector: add hidden flag for internal-only agents
Previously, sessions with image pastes showed raw JSON in the preview. Now extracts only text content from mixed content arrays, skipping base64 image data. Image-only messages are skipped to find actual text.
The hasUnread flag was being preserved when messages arrived on the active tab, causing the pink indicator to persist even after viewing.
Added a central useEffect that clears the hasUnread flag whenever the active tab changes. This handles all tab switch scenarios (click, keyboard, programmatic) in one place.
Maestro requires --dangerously-skip-permissions to function properly. Removed the optional checkbox and made it always-on.
PR Review: Stability, Nuances, Minor TweaksExecutive SummaryThis is a substantial quality-of-life PR with 15 commits adding 1,795 additions across 33 files. The changes focus on UI polish, markdown rendering, navigation history, git integration enhancements, and bug fixes. Overall code quality is high, with good architectural patterns and attention to detail. ✅ Strengths1. Excellent State Management
2. Security Practices
3. UX Enhancements
4. Error Recovery
|
- Disable Tab as global panel-switching hotkey when input is focused - Add @ mention file completion in AI mode with fuzzy matching - Tab key now works for completion in both terminal and AI modes - Files are filtered using fuzzy match with scoring for relevance
- Allow dropping sessions onto group members to add to that group - Allow dropping onto ungrouped sessions to move to ungrouped - Show Claude session UUID octet for AI agent processes in System Processes modal - Add terminalDraftInput field to Session type for draft persistence
Pull Request Review: Stability, Nuances, Minor TweaksThis is a substantial PR with 2,161 additions and 359 deletions across 34 files. Overall, the code quality is high and the changes are well-implemented. Here's my detailed review: ✅ Strengths1. Excellent Architecture & Code Organization
2. Security Improvements
3. UX Enhancements
4. State Management
|
- Tab key now always prevents default in input to stop focus switching - Git branches and tags shown when 'git' appears anywhere in CLI input - Simplified git completion logic (no longer requires specific commands)
- Show all completion types (history, branches, tags, files) by default - Add filter buttons (All, History, Branches, Tags, Files) in git repos - Filter buttons only visible in git repositories - Git branches/tags now always shown in git repos, not just for git commands - Increased suggestion limit from 10 to 15
- Arrow Up/Down: Navigate through suggestions - Enter: Select the highlighted item and close dropdown - Tab: Cycle through filter types (All → History → Branches → Tags → Files) - Tab in non-git repos: Still accepts selection (since no filters) - Escape: Close dropdown
…ents Tab Completion (Command Terminal): - Intelligent completion for history, files/folders, git branches, and tags - Filter buttons in dropdown header (All, History, Branches, Tags, Files) - Tab/Shift+Tab cycles through filter types in git repos - Show "No matching" message when filter yields no results @ File Mentions (AI Terminal): - Type @ followed by search term to reference files in prompts - Tab or Enter to select, Esc to close Tab Bar Improvements: - Unread tabs filter toggle (envelope icon) to show only tabs with new messages - Sticky filter button when tabs overflow - Visual indicators for unread state Session Parsing: - Extract semantic text from messages (skip images, tool_use, tool_result) - Fall back to assistant messages if no user text found Other Improvements: - Refresh File/Git State action in Quick Actions (Cmd+K) - Success flash notification for refresh completion - Focus returns to input after closing dropdowns with Esc - Better queue processing when target tab equals source tab - Enhanced logging for AI exit state debugging - Keyboard-only scroll behavior for file tree selection Claude ID: 8de2468f-66c9-4c81-9b3b-741bb1e28f71 Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
Pull Request Review: Stability, Nuances, Minor TweaksThis is a substantial PR (+2721/-541 lines) that adds multiple features and refinements to Maestro. Overall, the code quality is solid and follows the project's conventions. Below is my detailed feedback: ✅ Strengths1. Architecture & Design
2. Code Quality
3. Security
|
…dates
Save to History:
- New per-tab toggle (Cmd+S) to automatically synopsis after each completion
- Synopses saved to History panel for tracking work progress
Process Monitor:
- Click Claude session ID to navigate directly to that session/tab
- Added tabId tracking for accurate navigation
Shortcuts:
- Previous/Next Agent now Cmd+[/] (was Cmd+Shift+{/})
- Previous/Next Tab now Cmd+Shift+[/] (was Cmd+[/])
- Added Cmd+Shift+U to toggle unread tabs filter
- Added Cmd+S for Save to History toggle
Slash Commands:
- Removed built-in /synopsis, /clear, /jump commands
- All slash commands are now custom AI commands defined in settings
- Updated README documentation
Other:
- Lifted unread filter state to App for keyboard shortcut control
- TabBar now supports controlled mode via props
Claude ID: 01e89889-a74f-4eb7-9bf1-377dbbf2fbf8
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
PR Review: Stability, Nuances, Minor TweaksOverviewThis is a substantial PR with 2,827 additions and 851 deletions across 37 files, introducing multiple major features including navigation history, unread indicators, tab completion enhancements, and UI polish. ✅ Strengths1. Excellent Code Quality
2. Security Best Practices
3. Performance Optimizations
4. UX Improvements
|
- Add TabSwitcherModal for quick fuzzy-search tab navigation (Opt+Cmd+T) - Redesign AchievementCard with circular 11-segment badge progress ring - Add visual context window gauge in AgentSessionsBrowser - Add Cmd+S shortcut to toggle Save to History per tab - Remember active tab when toggling unread filter mode - Remove dead built-in slash command code (now custom AI commands only) - Polish FilePreview, StandingOvationOverlay, and TerminalOutput components Claude ID: 7141edc5-2280-4215-a66e-b743475a26c4 Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
Code Review: PR #9 - Stability, Nuances, Minor TweaksThank you for this comprehensive PR! I've reviewed the 3,608 additions across 40 files. Here's my detailed feedback: ✅ Strengths1. Excellent UX Enhancements
2. Security Compliance
3. Code Quality
4. Performance Optimizations
|
Previously it was clearing the session state instead of creating a fresh tab. Claude ID: 7141edc5-2280-4215-a66e-b743475a26c4 Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
Code Review: PR #9 - Stability, Nuances, Minor TweaksThis is a substantial PR with 3,611 additions and 1,091 deletions across 40 files, introducing numerous UX enhancements and stability improvements. Overall, the code quality is high and follows the project's patterns well. Here's my detailed review: ✅ Strengths1. Excellent Code Organization
2. Strong UX Improvements
3. Security Compliance
|
…improvements - Add js-tiktoken for token counting in FilePreview stats bar - Shell spawning now uses -l -i flags for proper login+interactive environment - Tab navigation shortcuts (Cmd+[/]/1-9) now respect unread filter state - TabBar scroll area properly separates filter button from scrollable tabs - Alt+Meta shortcuts fixed on macOS (e.g., Alt+Meta+t for Tab Switcher) - Tab Switcher added to Quick Actions modal - Mobile app: improved WebSocket reconnection, status badges, message handling Claude ID: 472a496d-f767-49dc-8074-a08d20d2b550 Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
PR Review: Stability, Nuances, Minor Tweaks (rc-0.4.1)OverviewThis is a comprehensive feature release with 3,969 additions and 1,254 deletions across 44 files. The PR adds significant UX improvements including navigation history, tab switching, unread indicators, and enhanced completions. Overall code quality is good, but I've identified several areas for improvement. 🎯 HighlightsStrong Points
New Features✅ Navigation history (back/forward) for sessions and AI tabs 🐛 Bugs & IssuesCritical1. Path Encoding Inconsistency ( const encodedPath = projectPath.replace(/[/.]/g, '-');Issue: Replacing dots in paths is risky. Paths like Recommendation: Verify this matches Claude Code's actual encoding behavior. If Claude only replaces 2. Race Condition in Navigation History ( setTimeout(() => {
isNavigatingRef.current = false;
}, 0);Issue: Using Better approach: // Set flag before returning, caller resets after navigation completes
const navigateBack = useCallback((): NavHistoryEntry | null => {
if (historyRef.current.length === 0) return null;
isNavigatingRef.current = true;
// ... rest of logic
return entry;
}, []);
// Then in caller (App.tsx):
const entry = navigateBack();
if (entry) {
performNavigation(entry);
navigationComplete(); // Reset flag here
}3. Image Content Extraction Logic ( The Recommendation: Extract to a shared utility function. Medium Priority4. Missing Error Handling in Tab Completion ( Git commands for branches/tags don't handle errors. If Fix: Wrap git calls in try-catch and gracefully degrade. 5. Memory Leak Risk in TabSwitcherModal ( useEffect(() => {
const timer = setTimeout(() => inputRef.current?.focus(), 50);
return () => clearTimeout(timer);
}, []);Issue: The 50ms delay is a magic number. Why is this needed? If it's to wait for modal render, consider using 6. Hardcoded YOLO Mode ( args: ['--print', '--verbose', '--output-format', 'stream-json', '--dangerously-skip-permissions'],Security Concern: Always enabling
📊 Code QualityPositive Patterns✅ Proper use of Areas for Improvement1. Magic Numbers
2. Code Duplication
3. Complex Component Props
Example refactor: interface TabCompletionProps {
open: boolean;
setOpen: (open: boolean) => void;
suggestions: TabCompletionSuggestion[];
selectedIndex: number;
setSelectedIndex: (index: number) => void;
filter: TabCompletionFilter;
setFilter: (filter: TabCompletionFilter) => void;
}
// Then: tabCompletion?: TabCompletionProps🔒 Security✅ Good: Uses ⚡ PerformancePotential Issues1. Fuzzy Search on Every Keystroke ( const filteredTabs = useMemo(() => {
// ... fuzzy search on all tabs
}, [tabs, search]);Issue: For 100+ tabs, this could lag. Consider:
2. File Tree Traversal ( const allFiles = useMemo(() => {
// Recursively traverses entire file tree
}, [session?.fileTree]);Issue: For large projects (10k+ files), this flattening happens on every tree update. Optimization: Consider caching flattened tree in session state or using incremental updates. 🧪 Test Coverage❌ No test files included in this PR Recommendation: Add tests for:
📝 Documentation✅ CLAUDE.md updated with new agent names Recommendation: Add section to ARCHITECTURE.md about:
🎨 UI/UXExcellent
Minor Issues1. Accessibility: Tab switcher escape hint shows "ESC" but also uses layer stack escape. Document priority. 2. UX Consistency: Footer text "⌘1-9 quick select" - should show actual platform shortcut (Ctrl on Windows/Linux) 🔧 Recommended ChangesMust Fix (Before Merge)
Should Fix (This Release)
Nice to Have (Future)
🎓 Learning & Best PracticesGreat examples to learn from:
✅ VerdictRecommendation: Request Changes This PR adds valuable features and shows strong technical execution, but the critical issues (path encoding, race condition, YOLO security) should be addressed before merge. Estimated effort to fix critical issues: 2-3 hours Once the must-fix items are addressed, this will be a solid release. Great work on the UX improvements! 🎉 📌 File-Specific Notes
|
Pull Request Review: Stability, Nuances, Minor TweaksThis is a substantial PR with 4,106 additions and 1,287 deletions across 49 files. Overall, this represents excellent work with strong attention to detail, user experience, and code quality. Here's my comprehensive review: 🎯 Highlights & StrengthsExcellent Code Quality
Outstanding UX Improvements
Security Best Practices
🐛 Potential Issues & Concerns1. Race Condition Risk in Tab Completion (Medium Priority)File: The Recommendation: // Consider adding freshness check
if (session.isGitRepo && session.gitRefsCacheTime) {
const cacheAge = Date.now() - session.gitRefsCacheTime;
const CACHE_MAX_AGE = 30000; // 30 seconds
if (cacheAge > CACHE_MAX_AGE) {
// Maybe trigger refresh or show indicator
}
}2. Memory Leak Potential in Navigation History (Low Priority)File: The navigation history is capped at 50 entries, but the implementation isn't shown in this PR. Ensure:
3. Regex Performance in Message Parsing (Medium Priority)File: const userMessageCount = (content.match(/"type"\s*:\s*"user"/g) || []).length;
const assistantMessageCount = (content.match(/"type"\s*:\s*"assistant"/g) || []).length;For very large session files (thousands of messages), running regex over the entire file content could be slow. This is fine for now, but consider:
4. Unread Tab State Management (Low Priority)Files: Multiple locations where The unread indicator logic is spread across multiple files. While it works, consider centralizing this logic into a dedicated hook or helper to prevent inconsistencies. Example centralization: // hooks/useUnreadManager.ts
export function useUnreadManager(session, activeTabId) {
// Centralized logic for setting/clearing hasUnread
}5. Shell Spawning Security (Low Priority - Informational)File: The PR mentions spawning shells with
6. Token Counting Dependency (Low Priority)File: This adds a dependency for token counting in file previews. Verify:
⚡ Performance ConsiderationsPositive Performance Patterns
Potential Optimizations
🔒 Security Assessment✅ Good Security Practices
|
Code cleanup: - Extract `encodeClaudeProjectPath` helper (replaces 6 duplicates) - Extract `extractTextFromContent` helper (replaces 2 inline definitions) - Remove 30+ high-frequency debug console.logs from App.tsx Bug fixes: - Session list search now includes AI tab names (not just session name) - Tab switcher modal expanded to show 9 entries instead of 6 Claude ID: 34b7ff98-f56d-41c8-b236-dde9c241fbec Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
Pull Request Review: Stability, Nuances, Tweaks (RC 0.4.1)This is a substantial PR with 4,077 additions and 1,353 deletions across 51 files. Overall, the changes represent good progress in polish and UX improvements. Here's my detailed analysis: ✅ Strengths1. Code Quality & Architecture
2. UX Enhancements
3. Documentation
|