Reviews BubbleTea TUI code for proper Elm architecture, model/update/view patterns, and Lipgloss styling. Use when reviewing terminal UI code using charmbracelet/bubbletea.
View on GitHubskills/bubbletea-code-review/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/existential-birds/beagle/blob/main/skills/bubbletea-code-review/SKILL.md -a claude-code --skill bubbletea-code-reviewInstallation paths:
.claude/skills/bubbletea-code-review/# BubbleTea Code Review ## Quick Reference | Issue Type | Reference | |------------|-----------| | Elm architecture, tea.Cmd as data | [references/elm-architecture.md](references/elm-architecture.md) | | Model state, message handling | [references/model-update.md](references/model-update.md) | | View rendering, Lipgloss styling | [references/view-styling.md](references/view-styling.md) | | Component composition, Huh forms | [references/composition.md](references/composition.md) | | Bubbles components (list, table, etc.) | [references/bubbles-components.md](references/bubbles-components.md) | ## CRITICAL: Avoid False Positives **Read [elm-architecture.md](references/elm-architecture.md) first!** The most common review mistake is flagging correct patterns as bugs. ### NOT Issues (Do NOT Flag These) | Pattern | Why It's Correct | |---------|------------------| | `return m, m.loadData()` | `tea.Cmd` is returned immediately; runtime executes async | | Value receiver on `Update()` | Standard BubbleTea pattern; model returned by value | | Nested `m.child, cmd = m.child.Update(msg)` | Normal component composition | | Helper functions returning `tea.Cmd` | Creates command descriptor, no I/O in Update | | `tea.Batch(cmd1, cmd2)` | Commands execute concurrently by runtime | ### ACTUAL Issues (DO Flag These) | Pattern | Why It's Wrong | |---------|----------------| | `os.ReadFile()` in Update | Blocks UI thread | | `http.Get()` in Update | Network I/O blocks | | `time.Sleep()` in Update | Freezes UI | | `<-channel` in Update (blocking) | May block indefinitely | | `huh.Form.Run()` in Update | Blocking call | ## Review Checklist ### Architecture - [ ] **No blocking I/O in Update()** (file, network, sleep) - [ ] Helper functions returning `tea.Cmd` are NOT flagged as blocking - [ ] Commands used for all async operations ### Model & Update - [ ] Model is immutable (Update returns new model, not mutates) - [ ] Init returns proper initial command (or nil) - [ ] Update han