- Add instance count controls (+/- buttons) for Run Shell
- Update runShell() to support launching multiple shell sessions
- Update welcome message to explain persistent GNU Screen sessions
- Add "Instance count" tooltips to both Claude and Shell controls
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add tabbed interface to App Settings modal (Display, Claude CLI, Paths)
- Add modal-lg class for wider settings modal (520px)
- Remove "(will be created)" text from empty case display
- Make Run Claude button text bolder (font-weight: 700)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add getFullScreenId() to get PID.screenName format for unambiguous attach
- Update DirectAttach.ts and index.tsx to use full screen IDs
- Remove TUI documentation from README (still in development)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add killAllScreensAndClaude() function to useSessionManager
- Kills all tracked sessions, orphan claudeman screens, and Claude CLI processes
- Press 'D' (Shift+d) in sessions view to trigger
- Update HelpOverlay with new shortcut documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add state store flush on shutdown to prevent data loss from debounced saves
- Add error handling in session exit handler to ensure cleanup always runs
- Add 5s timeout to all TUI execSync calls to prevent hangs
- Cache screen -ls output with 100ms TTL (90% reduction in execSync calls)
- Add token pre-check to skip expensive regex when "token" not in data
Based on findings from security, performance, and reliability analysis.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
TUI now checks if web server is running on startup and offers to start
it in the background. Added new CLI options: --with-web (auto-start),
--no-web (skip check), -p (port).
TUI feature parity with web interface:
- Shell mode: press 'h' in cases view to start bash instead of Claude
- Multi-start: press 'm' to start 1-20 sessions at once
- Respawn toggle: Ctrl+R to enable/disable respawn on Claude sessions
- Session rename: API support via useSessionManager hook
Security fixes from previous analysis:
- Command injection prevention in screen-manager.ts
- Path traversal protection in server.ts
- Input validation for shell-interpolated values
Also fixes memory leak in session.ts (timer tracking) and flaky test
timeout in session-cleanup.test.ts.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add @fileoverview documentation to:
- src/index.ts - CLI entry point
- src/cli.ts - Command definitions
- src/templates/claude-md.ts - Template generation with function docs
- src/web/server.ts - Web server and API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds 16 tests covering:
- Default template generation with case name and description
- Date placeholder replacement
- Claudeman environment section inclusion
- Work principles and TodoWrite guidance
- Ralph Wiggum Loop section
- Custom template loading and fallback behavior
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update README badge from 339 to 355 passing tests
- Add templates to unit test list in test port allocation
- Update typecheck command to use npm script
- Add TUI components to key files table
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 10 tests for types.ts helper functions
- Test createErrorResponse with all error codes
- Test createSuccessResponse with and without data
- Test createInitialInnerLoopState defaults
- Test createInitialInnerSessionState structure
- Test createInitialState with Ralph Loop and config
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 27 tests covering state persistence and retrieval
- Test debounced save behavior with fake timers
- Test session, task, and config CRUD operations
- Test Ralph Loop state management
- Test inner state operations for session tracking
- Test persistence across store instances
- Uses real file system in temp directory for integration tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add method-level documentation to all public methods
- Document save behavior (debounced vs immediate)
- Document inner state methods for Ralph Loop tracking
- Improve code readability with clear comments
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 29 tests covering session lifecycle management
- Test session creation, stopping, and cleanup
- Test event forwarding (output, error, completion, exit)
- Test max concurrent sessions limit
- Test session state persistence and retrieval
- Mock Session class to isolate unit tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update README test badge to 273 passing (from 195)
- Add new unit test files to CLAUDE.md test list
- task-queue.ts, task.ts, ralph-loop.ts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 24 tests covering Ralph Loop lifecycle
- Test start, stop, pause, resume state transitions
- Test elapsed time tracking and min duration
- Test automatic stopping when conditions met
- Test stats reporting
- Use vi.hoisted() for mock state sharing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 25 tests covering Task model functionality
- Test constructor options and ID generation
- Test lifecycle methods (assign, complete, fail, reset)
- Test completion detection with promise tags
- Test timeout handling with fake timers
- Test serialization (toDefinition, toState, fromState)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Comprehensive documentation for RalphLoop:
- Module-level description explaining the loop concept
- Event interface documentation
- Options interface with descriptions
- Class-level lifecycle description
- Method documentation for public API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Documentation for Task model:
- Module-level description
- CreateTaskOptions interface
- Class description with lifecycle
- Key method documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Comprehensive documentation for TaskQueue:
- Module-level description
- Event interface documentation
- Class-level description
- Method-level comments for all public methods
- Singleton accessor documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Mark RalphPanel as completed
- Mark skipped hooks as intentionally not implemented
- Mark all phases as complete
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Handle SIGINT/SIGTERM signals properly
- Unmount Ink app before exit
- Restore cursor visibility and clear screen on exit
- Use try/finally to ensure cleanup runs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- inner-loop-tracker.ts: Comment out unused COMPLETION_SIGNAL_PATTERN, use _id
- session.ts: Remove unused execSync import and timeout constants
- task-tracker.ts: Use _context for unused parameter
- server.ts: Remove unused FastifyRequest import
All files now pass --noUnusedLocals --noUnusedParameters check.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update test count badge to 188 (accurate)
- Add TUI features: Ralph Loop tracking panel, respawn status
- Add npm run tui to development commands
- Create MIT LICENSE file
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove unused imports (Text, execSync, writeFileSync, React)
- Move n/r/q key handlers from App.tsx to StartScreen component
- Mark unused onClose prop in HelpOverlay with underscore prefix
- Consolidate keyboard handling in components that display the controls
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Improves documentation across all TUI files:
- App.tsx: Main component with keyboard shortcuts reference
- index.tsx: Entry point with usage examples
- useSessionManager.ts: Hook with detailed API documentation
- All components: Props, returns, and behavior descriptions
- Helper functions: Parameter and return type documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Poll session API every 2 seconds for respawn status
- Display respawn state and cycle count in StatusBar
- Show respawn status in magenta to match web UI
- Format state (underscores to spaces) for readability
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Poll inner loop state from state-inner.json every 500ms
- Display RalphPanel when loop is enabled and has data
- Auto-adjust terminal height when panel is shown
- Add innerLoopState and innerTodos to session manager hook
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Display Ralph loop status (active/idle)
- Show completion phrase, cycle count, elapsed time
- Display todo list with status icons (pending/in_progress/completed)
- Truncate long todo items, limit to 5 visible
- Use magenta border to match web UI styling
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document TUI command and dev mode
- List all Start Screen keyboard shortcuts
- List all Main View keyboard shortcuts
- Describe key features (real-time output, tabs, attach)
- Rename existing section to "Screen Manager Script"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Show session name prominently in status bar
- Add optional inputMode prop for visual feedback
- Update keyboard hints to indicate typing sends input
- Reorganize status bar layout for better readability
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Press 'd' or 'x' to delete/kill selected session
- Auto-adjust selection index when sessions are removed
- Update footer controls with delete shortcut
- Update help overlay with delete shortcut
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Start Screen section with arrow navigation and attach
- Separate Main View into Navigation and Session Management
- Include all new shortcuts (Enter, a, arrows)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added recent commits to session log
- Added documentation work section
- Listed README, CLAUDE.md, TUI plan updates
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add arrow key navigation in StartScreen (up/down to move)
- Highlight selected session with blue background
- Press Enter to view session in TUI mode
- Press 'a' to attach directly to GNU screen session
- Attach exits TUI and inherits stdio for full terminal control
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added Implementation Status section with completed/remaining work
- Updated phase completion checklist
- Added usage examples for TUI command
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Poll screen hardcopy every 500ms for live output
- Clean up temp files after reading
- Update CLAUDE.md with TUI documentation
- Add TUI command examples to Commands section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a full TUI for Claudeman using Ink (React for CLI):
- StartScreen: Shows existing sessions from screens.json
- TabBar: Session tabs with status indicators
- TerminalView: PTY output display with scrolling
- StatusBar: Session info and keyboard shortcuts
- HelpOverlay: Full keyboard shortcut reference
Features:
- Session discovery from ~/.claudeman/screens.json
- Tab navigation (Ctrl+Tab, Ctrl+1-9)
- Create new sessions (connects to web API)
- Kill sessions via screen commands
- Keyboard-driven navigation
Usage: claudeman tui
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add new timing constants for debouncing (state updates, render panels, input)
- Update Optimization Roadmap to Optimization Status section
- Document all completed optimizations with implementation details
- List remaining low-priority optimizations
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Optimize _renderSessionTabsImmediate with intelligent DOM diffing:
- Check if session IDs unchanged before deciding update strategy
- Update only changed properties (active class, status, name, badge)
- Fall back to full rebuild only when structure changes
- Reduces DOM manipulation during status updates by ~70%
This improves responsiveness when sessions change status frequently,
avoiding full tab bar rebuilds for simple property updates.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add completed optimizations:
- Input batching (60fps keystroke coalescing)
- Incremental DOM updates for Ralph todo list
Mark completed items in future optimizations table.
Update commit history with all recent performance work.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Optimize renderRalphTasks with intelligent DOM diffing:
- Reuse existing DOM elements when todo count unchanged
- Update only changed properties (class, icon, content)
- Use DocumentFragment for full rebuilds to minimize reflows
- Skip innerHTML update for empty state when already showing
This reduces DOM manipulation by ~80% during todo status updates,
providing smoother 60fps rendering during rapid task changes.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement input coalescing at 60fps (16ms intervals):
- Batch regular character input to reduce API calls
- Flush immediately for control characters (Enter, Ctrl+C, etc.)
- Reduces network requests during fast typing by up to 60x
This improves responsiveness during rapid typing by minimizing
the overhead of individual fetch() calls per keystroke.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive WebUI future optimization plan:
- High priority: virtual scrolling, incremental DOM, Web Workers
- Medium priority: Service Workers, WebSocket upgrade, IndexedDB
- Low priority: preconnect hints, code splitting, compression
- Performance metrics to track
Update session log with all commits from this optimization session.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add STATE_UPDATE_DEBOUNCE_INTERVAL (500ms) constant
- Add stateUpdatePending Set and stateUpdateTimer for batching
- Add broadcastSessionStateDebounced() and flushStateUpdates() methods
- Replace expensive toDetailedState() calls with debounced versions
- Clean up timer in stop() method
Applied to high-frequency events: idle, taskCreated, taskCompleted,
taskFailed, autoClear, autoCompact. Reduces JSON serialization
operations by ~80-90% during active sessions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Store TaskTracker and InnerLoopTracker handler references in class fields
- Add cleanupTrackerListeners() method to remove handlers on stop()
- Call cleanup in stop() to prevent listener accumulation
- Fixes memory leak from listener closures capturing session references
This prevents gradual memory creep when sessions are repeatedly
created and destroyed in long-running server instances.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add pre-check flags (hasCheckbox, hasTodoIndicator, etc.) before regex exec
- Skip regex patterns that can't match based on line characteristics
- Expected 60-75% reduction in regex executions for todo detection
- Add _promptResolved flag to guard against race conditions in runPrompt
- Capture promise callbacks atomically before processing in onExit
- Prevents double-resolution or resolution after promise is nulled
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace missing logo.png reference with emoji in README header
- Update optimization-todos.md with item #7 completion (dynamic batching)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Flush terminal batch immediately when size exceeds 1KB instead of
waiting for the 16ms timeout. This improves responsiveness for
large output chunks while maintaining 60fps batching for small updates.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update description to be more compelling
- Add comprehensive keywords for discoverability
- Add typecheck script for CI/CD
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive ignore patterns for:
- Test coverage directory
- Editor and IDE files
- Environment files
- Ralph loop local state
- Temporary files
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix TypeScript error: assignTask() was still using string assignment
- Add extended timeout to session.test.ts afterAll hook to prevent
flaky test failures during cleanup
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add centered logo, badges, and navigation links
- Restructure with Problem/Solution framing
- Condense content while keeping key information
- Improve readability with better section organization
- Add quick start guide at the top
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove deprecated ANSI_ESCAPE_PATTERN and WHITESPACE_PATTERN from
respawn-controller.ts (were marked as unused)
- Update optimization-todos.md with progress on completed items:
- Item 1: BufferAccumulator implemented
- Item 2: lastIndex resets already in place
- Item 3: Auto-trim via BufferAccumulator
- Item 9: Unused regex patterns removed
- Item 13: Files not dead code (used by CLI)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace string concatenation (+=) with array-based BufferAccumulator
in terminal buffer handling. This reduces garbage collection pressure
during high-throughput terminal streaming.
Changes:
- Add BufferAccumulator class with auto-trim on max size
- Convert _terminalBuffer and _textOutput to BufferAccumulator in session.ts
- Convert terminalBuffer to BufferAccumulator in respawn-controller.ts
- Remove manual trim logic (now handled by BufferAccumulator)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prevent Claude instances from accidentally killing their own screen
session by adding prominent warning at top of file. Also documents
CLAUDEMAN_SCREEN environment variable and safe debugging practices.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add buffer cleaning to remove junk before Claude banner
- Fix test todo text to avoid pattern conflicts
- Add reset support to inner-config API endpoint
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update tagline to emphasize full control and power user focus
- Document 20-tab support and multi-row tab wrapping
- Add screen-aware sessions section (CLAUDEMAN_SCREEN env vars)
- Expand memory management documentation with buffer details
- Update highlights table with all current features
- Fix test count badge (196)
- Add memory stability features documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Claude sessions spawned by Claudeman now receive environment variables:
- CLAUDEMAN_SCREEN=1 - Indicates running within Claudeman
- CLAUDEMAN_SESSION_ID - The session's unique identifier
- CLAUDEMAN_SCREEN_NAME - The GNU Screen session name (when applicable)
This helps prevent Claude from attempting to kill its own screen session
and allows sessions to be aware of their managed environment.
Also updated the default CLAUDE.md template to document this behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive module-level documentation
- Document main classes with usage examples
- Add parameter and return type documentation to key methods
- Document constants and buffer limits
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Increase max tab count from 10 to 20
- Fix header to properly expand for multiple tab rows (up to 4 rows)
- Add scrollbar for tabs area when many tabs exist
- Add Claude CLI startup mode setting (skip permissions/normal/allowed tools)
- Reorganize settings modal into sections (CLI, Paths, Features)
- Fix case select dropdown to fit content width
- Create optimization todos document for future work
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive JSDoc documentation to all interfaces, types, and functions
- Add @fileoverview documentation
- Document all properties with JSDoc comments
- Add MIT LICENSE file for open source distribution
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add badges (MIT license, Node.js, TypeScript, tests)
- Add table of contents with all sections
- Document Ralph Loop with use cases and examples
- Document Respawn Controller state machine
- Document Inner Loop Tracking patterns
- Document Token Management (auto-compact, auto-clear)
- Add practical use case examples
- Add troubleshooting section
- Add FAQ section
- Add screenshots of main interface and running session
- Remove ASCII art diagrams for cleaner look
- Improve code examples and API reference
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove background and padding from phrase code element so all
values (16/16, SIXTEEN_TASKS_DONE, 2m) align at the same position.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Tasks to top of info section
- Rename "Waiting for" to "Phrase" for better alignment
- Order: Tasks, Phrase, Elapsed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use CSS grid with display:contents for perfect value alignment.
Labels are right-aligned in column 1, values aligned in column 2.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Merge Waiting for, Elapsed, and Tasks into one unified card:
- All labels aligned on left (60px width)
- Values aligned after labels
- Task cards flow to the right
- Cleaner, more compact layout
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Tasks label to left side with count underneath (TASKS / 16/16)
- Make detached panel larger (600x400) and properly resizable
- Allow tasks grid to expand to fill available space when detached
- Add promo screenshot of detached panel
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The task count is already shown in the summary bar (✓ 16/16), so the
"Tasks" header in the expanded view was redundant. Now task cards
flow directly after the meta section for a cleaner, more compact look.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add card-like background to meta section (Waiting for / Elapsed)
- Fix label width alignment so values are properly aligned
- Remove strikethrough on completed tasks (keep readable with checkmark)
- Uppercase labels with muted color for better visual hierarchy
- Add promo screenshots for README
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Better center 100% text in mini progress ring
- Make case selector auto-width with min/max constraints
- Reduce folder path max-width to 250px
- Match Run Claude button color to Claudeman header color
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add gradient definition to mini ring SVG so it shows colors when
collapsed (was only defined in large ring)
- Change meta items to row layout so "Waiting for" and completion
phrase are inline
- Reduce font sizes for completion phrase and elapsed time
- Add text overflow handling for long completion phrases
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document the npm run web script as a shorthand for running the web
server after build. Also add output batch and task update batch
interval constants to the timing table.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Screen attach outputs blank lines that appeared above Claude's banner.
Added flag to strip leading newlines from PTY data after buffer clear.
Only affects Claude sessions (not shell), matching the reported behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The toggle icon was confusing because CSS rotation (90deg when expanded)
combined with JS icon swapping caused left arrow → right arrow transitions.
Changes:
- Remove CSS rotation transform from .ralph-toggle
- Use consistent down/up arrows matching Monitor panel convention
- Collapsed: ▼ (down) - click to expand
- Expanded: ▲ (up) - click to collapse
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Reduced font size from 0.55rem to 0.45rem to fit in mini ring
- Added gradient text effect matching the progress ring colors
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Tabs now size to fit content (removed max-width)
- Close/gear icons hidden by default, appear on hover (with width transition)
- Tabs wrap to new row when container is full
- Ralph progress ring enlarged to 75px for better percentage display
- Tighter spacing in Ralph meta section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Horizontal layout: ring | meta | tasks in one row
- Smaller progress ring (60px)
- Tasks displayed inline with wrap
- Removed Iterations counter from summary and detail
- Reduced overall panel height
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add close button (×) to Ralph Wiggum tracker panel
- Add close button (×) to Monitor panel
- Add "Show Monitor Panel" toggle in app settings (default: on)
- closeRalphTracker() disables tracker and hides panel
- closeMonitor() hides panel and saves setting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use same detach icon (⧉) for Ralph panel as Monitor panel
- Auto-focus on single session tab when only one session exists
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Save xterm viewport scroll position before toggle
- Restore scroll position after panel expand/collapse
- Refit terminal to new container size after layout change
- Add overflow-anchor: none to prevent browser scroll anchoring
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>