* auto-claude: subtask-1-1 - Add queue capacity check to handleStatusChange When a task status is changed to 'in_progress' via handleStatusChange (e.g., from column header buttons or context menus), enforce the maxParallelTasks limit by redirecting to 'queue' if capacity is full. Also auto-process the queue when a task leaves in_progress. This mirrors the existing logic in handleDragEnd. Co-Authored-By: Claude Opus 4.6 <[email protected]> * auto-claude: subtask-1-2 - Add queue capacity check before startTask() in TaskCard, TaskDetailModal, WorkspaceMessages Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: extract shared queue capacity logic and fix stuck task restart regression - Extract `startTaskOrQueue()`, `isQueueAtCapacity()`, and `DEFAULT_MAX_PARALLEL_TASKS` into task-store.ts to eliminate identical queue capacity logic duplicated across 4 files (DRY violation) - Fix stuck task restart regression: exclude the current task from the in_progress count so restarting a stuck task doesn't incorrectly queue it - Fix inconsistent default: use ?? 3 everywhere (was ?? 1 in 3 new files vs ?? 3 in KanbanBoard, causing different behavior per UI element) - Fix unawaited persistTaskStatus in TaskCard (was fire-and-forget in a sync handler) and TaskDetailModal (missing await in async handler) - Add explanatory comment in KanbanBoard handleStatusChange about why isAutoPromotionInProgress guard is not needed (only user interactions) Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: remove duplicate processQueue() call in handleDragEnd handleStatusChange already calls processQueue() when a task leaves in_progress, so the second call in handleDragEnd was redundant. Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: log queue failures, remove dead bypass code, fix comment - startTaskOrQueue now logs an error when persistTaskStatus fails instead of silently discarding the result - Remove dead isAutoPromotionInProgress bypass from drag handler since handleStatusChange enforces capacity independently (the bypass was negated by the second check) - Fix inaccurate comment: handleStatusChange is called from both the dropdown menu and the drag handler, not just the dropdown Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: return queue failure result from startTaskOrQueue and remove duplicate processQueue startTaskOrQueue now returns a result object so callers can surface errors to the user (toast in TaskDetailModal, console.error in WorkspaceMessages). Removed explicit processQueue() from handleStatusChange since the useEffect task status change listener already handles queue auto-promotion. Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: correct i18n key path and surface startTaskOrQueue failures to users Fix wrong i18n key path (tasks:errors → tasks:wizard.errors) so the toast shows the translated message instead of a raw key. Add toast feedback in TaskCard on start failure. Add inline error display in WorkspaceMessages when Proceed to Coding fails. Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: show user feedback when task is queued instead of started All three startTaskOrQueue callers (TaskCard, TaskDetailModal, WorkspaceMessages) now notify the user when a task is redirected to the queue due to the parallel task limit. Uses existing i18n keys (tasks:queue.movedToQueue). Also clarifies startTaskOrQueue JSDoc regarding fire-and-forget semantics of the 'started' action. Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix: use i18n and neutral styling for queued notice in WorkspaceMessages Replace hardcoded English string with t('tasks:queue.movedToQueue') and use a separate notice state with text-muted-foreground styling instead of reusing the destructive error state. Also add missing status.queue key to French translations. Co-Authored-By: Claude Opus 4.6 <[email protected]> --------- Co-authored-by: Claude Opus 4.6 <[email protected]>
Auto Claude UI - Frontend
A modern Electron + React desktop application for the Auto Claude autonomous coding framework.
Prerequisites
Node.js v24.12.0 LTS (Required)
This project requires Node.js v24.12.0 LTS (Latest LTS version as of December 2024).
Download: https://nodejs.org/en/download/
Or install via command line:
Windows:
winget install OpenJS.NodeJS.LTS
macOS:
brew install node@24
Linux (Ubuntu/Debian):
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt install -y nodejs
Linux (Fedora):
sudo dnf install nodejs npm
IMPORTANT: When installing Node.js on Windows, make sure to check:
- "Add to PATH"
- "npm package manager"
Verify installation:
node --version # Should output: v24.12.0
npm --version # Should output: 11.x.x or higher
Note: npm is included with Node.js. If
npmis not found after installing Node.js, you need to reinstall Node.js properly.
Quick Start
# Navigate to frontend directory
cd apps/frontend
# Install dependencies (includes native module rebuild)
npm install
# Start development server
npm run dev
Security
This project maintains 0 vulnerabilities. Run npm audit to verify.
npm audit
# Expected output: found 0 vulnerabilities
Architecture
This project follows a feature-based architecture for better maintainability and scalability.
src/
├── main/ # Electron main process
│ ├── agent/ # Agent management
│ ├── changelog/ # Changelog generation
│ ├── claude-profile/ # Claude profile management
│ ├── insights/ # Code analysis
│ ├── ipc-handlers/ # IPC communication handlers
│ ├── terminal/ # PTY and terminal management
│ └── updater/ # App update service
│
├── preload/ # Electron preload scripts
│ └── api/ # IPC API modules
│
├── renderer/ # React frontend
│ ├── features/ # Feature modules (self-contained)
│ │ ├── tasks/ # Task management, kanban, creation
│ │ ├── terminals/ # Terminal emulation
│ │ ├── projects/ # Project management, file explorer
│ │ ├── settings/ # App and project settings
│ │ ├── roadmap/ # Roadmap generation
│ │ ├── ideation/ # AI-powered brainstorming
│ │ ├── insights/ # Code analysis
│ │ ├── changelog/ # Release management
│ │ ├── github/ # GitHub integration
│ │ ├── agents/ # Claude profile management
│ │ ├── worktrees/ # Git worktree management
│ │ └── onboarding/ # First-time setup wizard
│ │
│ ├── shared/ # Shared resources
│ │ ├── components/ # Reusable UI components
│ │ ├── hooks/ # Shared React hooks
│ │ └── lib/ # Utilities and helpers
│ │
│ └── hooks/ # App-level hooks
│
└── shared/ # Shared between main/renderer
├── types/ # TypeScript type definitions
├── constants/ # Application constants
└── utils/ # Shared utilities
Scripts
| Command | Description |
|---|---|
npm run dev |
Start development server with hot reload |
npm run build |
Build for production |
npm run package |
Build and package for current platform |
npm run package:win |
Package for Windows |
npm run package:mac |
Package for macOS |
npm run package:linux |
Package for Linux |
npm test |
Run unit tests |
npm run test:watch |
Run tests in watch mode |
npm run test:coverage |
Run tests with coverage |
npm run lint |
Check for lint errors |
npm run lint:fix |
Auto-fix lint errors |
npm run typecheck |
Type check TypeScript |
npm audit |
Check for security vulnerabilities |
Development Guidelines
Code Organization Principles
- Feature-based Architecture: Group related code by feature, not by type
- Single Responsibility: Each component/hook/store does one thing well
- DRY (Don't Repeat Yourself): Extract reusable logic into shared modules
- KISS (Keep It Simple): Prefer simple solutions over complex ones
- SOLID Principles: Apply object-oriented design principles
Naming Conventions
| Type | Convention | Example |
|---|---|---|
| Components | PascalCase | TaskCard.tsx |
| Hooks | camelCase with use prefix |
useTaskStore.ts |
| Stores | kebab-case with -store suffix |
task-store.ts |
| Types | PascalCase | Task, TaskStatus |
| Constants | SCREAMING_SNAKE_CASE | MAX_RETRIES |
TypeScript Guidelines
- No implicit
any: Always type your variables and parameters - Use
typefor simple objects: Prefertypeoverinterface - Export types separately: Use
export typefor type-only exports
Security Guidelines
- Never expose secrets: API keys, tokens should stay in main process
- Validate IPC data: Always validate data coming through IPC
- Use contextBridge: Never expose Node.js APIs directly to renderer
Troubleshooting
npm not found
If npm command is not recognized after installing Node.js:
- Windows: Reinstall Node.js from https://nodejs.org and ensure you check "Add to PATH"
- macOS/Linux: Add to your shell profile:
export PATH="/usr/local/bin:$PATH" - Restart your terminal
Native module errors
If you get errors about native modules (node-pty, etc.):
npm run rebuild
Windows build tools required
If electron-rebuild fails on Windows, install Visual Studio Build Tools:
- Download from https://visualstudio.microsoft.com/visual-cpp-build-tools/
- Select "Desktop development with C++" workload
- Restart terminal and run
npm installagain
Git Hooks
This project uses Husky for Git hooks that run automatically:
Pre-commit Hook
Runs before each commit:
- lint-staged: Lints staged
.ts/.tsxfiles - typecheck: TypeScript type checking
- lint: ESLint checks
- npm audit: Security vulnerability check (high severity)
Commit Message Format
We use Conventional Commits. Your commit messages must follow this format:
type(scope): description
Valid types:
| Type | Description |
|---|---|
feat |
A new feature |
fix |
A bug fix |
docs |
Documentation changes |
style |
Code style (formatting, semicolons, etc.) |
refactor |
Code refactoring (no feature/fix) |
perf |
Performance improvements |
test |
Adding or updating tests |
build |
Build system or dependencies |
ci |
CI/CD configuration |
chore |
Maintenance tasks |
revert |
Reverting a previous commit |
Examples:
git commit -m "feat(tasks): add drag and drop support"
git commit -m "fix(terminal): resolve scroll position issue"
git commit -m "docs: update README with setup instructions"
git commit -m "chore: update dependencies"
Package Manager
This project uses npm (not pnpm or yarn). The lock files for other package managers are ignored.
License
AGPL-3.0