feat: Interactive TUI for choo run + Web UI implementation - #18
Conversation
Add a live, interactive terminal UI using bubbletea that shows
in-progress units with real-time updates during orchestration.
Features:
- Default on when stdout is a TTY; falls back to summary-only for pipes/CI
- Opt-out via --no-tui flag
- Shows active units with progress bars and task counts
- Displays current task title and phase (invoking Claude, running validation)
- Keyboard: q or Ctrl+C to quit (triggers graceful shutdown)
- Supports resume scenarios with correct completed task counts
New files:
- internal/cli/tui/{model,update,view,styles,bridge}.go
Modified:
- internal/cli/run.go: TUI integration and --no-tui flag
- internal/orchestrator/orchestrator.go: SuppressOutput config
- internal/worker/{worker,loop}.go: Output suppression, task info in events
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move tests that require real git operations to *_integration_test.go files. This allows faster unit test runs while preserving comprehensive coverage. Changes: - Add fake_runner_test.go for test doubles - Move git integration tests to separate files - Add proposal doc for test speed improvements - Add prompt command to CLI Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
choo/internal/orchestrator/orchestrator.go
Lines 247 to 250 in 9ab7ae9
The orch.started event is emitted with only unit_count and parallelism, but the web store’s HandleEvent initializes unit state exclusively from the Graph in the orch.started payload. With no graph sent here, the web store’s unit map stays empty and all later unit.* events are ignored, so the web dashboard never shows any units or progress during choo run. Consider adding the graph (from the scheduler/graph builder) to this payload or updating the store to initialize units lazily on the first unit event.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- Remove unconditional debug logging in loop.go and backpressure.go - Fix retry reason to differentiate between claude_invocation_failed, no_task_completed, and backpressure_failed - Fix runner reset in pool_test.go to restore previous runner instead of nil - Add nolint annotations for unused functions in WIP code - Fix unhandled error in generateID() and server error handling - Fix SSE handler tests to avoid synchronous pipe deadlock Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The orch_ prefixed frontmatter fields are runtime-only, so choo status should infer unit status from task status: - All tasks complete → unit complete - Any task in_progress or some complete → unit in_progress - Otherwise → unit pending Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The web store's HandleEvent initializes unit state from the graph in the orch.started payload. Previously, the event was emitted before the scheduler was built, so no graph was included. This caused the web dashboard to never show units or progress during `choo run`. Now we build the schedule first, then emit the event with the graph. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Summary
Interactive TUI: Add a live terminal UI using bubbletea that shows in-progress units with real-time updates during orchestration
--no-tuiflagWeb UI Implementation: Complete implementation of web monitoring feature (7 tasks)
choo web)Test Refactoring: Separate integration tests from unit tests for faster test runs
Test plan
go build ./...passeschoo run --unit web --no-prcompletes successfully with TUIchoo web --helpshows proper usage🤖 Generated with Claude Code