Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.monolex.ai/llms.txt

Use this file to discover all available pages before exploring further.

AI CLI Framework Pairing

AI CLI applications inherit their cursor control patterns from TUI frameworks.

Pattern Inheritance Model

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  HOW AI CLIs GET THEIR RENDERING PATTERN                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    AI CLI applications do not implement cursor control directly.       β”‚
β”‚    They inherit escape sequence emission from their TUI framework.     β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    TUI Framework                AI CLI Application            β”‚   β”‚
β”‚    β”‚    ──────────────               ──────────────────            β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚   β”‚
β”‚    β”‚    β”‚                 β”‚          β”‚                    β”‚        β”‚   β”‚
β”‚    β”‚    β”‚ Cursor Control  │───────-->β”‚ Inherits pattern   β”‚        β”‚   β”‚
β”‚    β”‚    β”‚ Implementation  β”‚          β”‚ automatically      β”‚        β”‚   β”‚
β”‚    β”‚    β”‚                 β”‚          β”‚                    β”‚        β”‚   β”‚
β”‚    β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    Framework handles:           CLI focuses on:               β”‚   β”‚
β”‚    β”‚    - Cursor hide/show           - LLM API calls               β”‚   β”‚
β”‚    β”‚    - Screen clearing            - User interaction            β”‚   β”‚
β”‚    β”‚    - Text rendering             - Business logic              β”‚   β”‚
β”‚    β”‚    - Color output               - Response streaming          β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    Result: AI CLI gets cursor pattern "for free" via framework.        β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Ecosystem Mapping

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  LANGUAGE ECOSYSTEM PAIRINGS                                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    TypeScript Ecosystem                                                β”‚
β”‚    ════════════════════                                                β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                  β”‚
β”‚    β”‚      Ink       β”‚                                                  β”‚
β”‚    β”‚ (React for CLI)β”‚                                                  β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                  β”‚
β”‚            β”‚                                                           β”‚
β”‚            β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€> Claude Code (Anthropic)                         β”‚
β”‚            β”‚                                                           β”‚
β”‚            └─────────> Gemini CLI (Google, Ink fork)                   β”‚
β”‚                                                                        β”‚
β”‚    Python Ecosystem                                                    β”‚
β”‚    ════════════════                                                    β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                  β”‚
β”‚    β”‚      Rich      β”‚                                                  β”‚
β”‚    β”‚ (Console lib)  β”‚                                                  β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                  β”‚
β”‚            β”‚                                                           β”‚
β”‚            β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€> Aider (paul-gauthier)                           β”‚
β”‚            β”‚                                                           β”‚
β”‚            └─────────> Open Interpreter (+ yaspin)                     β”‚
β”‚                                                                        β”‚
β”‚    Rust Ecosystem                                                      β”‚
β”‚    ══════════════                                                      β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” <── Low-level backend                            β”‚
β”‚    β”‚   Crossterm    β”‚                                                  β”‚
β”‚    β”‚ (Terminal API) β”‚                                                  β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                  β”‚
β”‚            β”‚                                                           β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β” <── High-level TUI                               β”‚
β”‚    β”‚    Ratatui     β”‚                                                  β”‚
β”‚    β”‚ (TUI widgets)  β”‚                                                  β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                  β”‚
β”‚            β”‚                                                           β”‚
β”‚            β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€> Codex CLI (OpenAI) - Uses BSU/ESU               β”‚
β”‚            β”‚                                                           β”‚
β”‚            └─────────> Kiro CLI (AWS) - Cursor only                    β”‚
β”‚                                                                        β”‚
β”‚    Go Ecosystem                                                        β”‚
β”‚    ════════════                                                        β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                  β”‚
β”‚    β”‚   BubbleTea    β”‚                                                  β”‚
β”‚    β”‚ (Elm-style TUI)β”‚                                                  β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                  β”‚
β”‚            β”‚                                                           β”‚
β”‚            └─────────> (Future AI CLIs)                                β”‚
β”‚                        Cursor pattern ready                            β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

TypeScript: Ink Framework

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  INK: REACT FOR THE COMMAND LINE                                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    Ink uses React's component model for terminal UIs.                  β”‚
β”‚    Cursor control is handled via cli-cursor package.                   β”‚
β”‚                                                                        β”‚
β”‚    Render Cycle:                                                       β”‚
β”‚    ─────────────                                                       β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    1. render() called                                         β”‚   β”‚
β”‚    β”‚           β”‚                                                   β”‚   β”‚
β”‚    β”‚           v                                                   β”‚   β”‚
β”‚    β”‚    2. cli-cursor.hide()  --> cursor hide escape               β”‚   β”‚
β”‚    β”‚           β”‚                                                   β”‚   β”‚
β”‚    β”‚           v                                                   β”‚   β”‚
β”‚    β”‚    3. Build output string                                     β”‚   β”‚
β”‚    β”‚           β”‚                                                   β”‚   β”‚
β”‚    β”‚           v                                                   β”‚   β”‚
β”‚    β”‚    4. Write to stdout                                         β”‚   β”‚
β”‚    β”‚           β”‚                                                   β”‚   β”‚
β”‚    β”‚           v                                                   β”‚   β”‚
β”‚    β”‚    5. cli-cursor.show()  --> cursor show escape               β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    AI CLIs using Ink:                                                  β”‚
β”‚    ──────────────────                                                  β”‚
β”‚                                                                        β”‚
β”‚    - Claude Code: Standard Ink usage                                   β”‚
β”‚      + Also adds conditional BSU/ESU via terminal capability check     β”‚
β”‚      + Dual-mode: cursor always, BSU/ESU when supported                β”‚
β”‚                                                                        β”‚
β”‚    - Gemini CLI: Forked Ink with modifications                         β”‚
β”‚      + Uses alternate screen buffer                                    β”‚
β”‚      + Cursor pattern still present from Ink base                      β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Python: Rich Framework

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  RICH: PYTHON CONSOLE LIBRARY                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    Rich provides Live display context for dynamic content.             β”‚
β”‚    Cursor is hidden during Live context to prevent flicker.            β”‚
β”‚                                                                        β”‚
β”‚    Live Context Pattern:                                               β”‚
β”‚    ─────────────────────                                               β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    with Live(renderable) as live:                             β”‚   β”‚
β”‚    β”‚           β”‚                                                   β”‚   β”‚
β”‚    β”‚           β”œβ”€β”€ __enter__()                                     β”‚   β”‚
β”‚    β”‚           β”‚        β”‚                                          β”‚   β”‚
β”‚    β”‚           β”‚        └── hide_cursor() --> cursor hide          β”‚   β”‚
β”‚    β”‚           β”‚                                                   β”‚   β”‚
β”‚    β”‚           β”œβ”€β”€ live.update(new_content)                        β”‚   β”‚
β”‚    β”‚           β”‚        β”‚                                          β”‚   β”‚
β”‚    β”‚           β”‚        └── refresh() --> clear + write            β”‚   β”‚
β”‚    β”‚           β”‚                                                   β”‚   β”‚
β”‚    β”‚           └── __exit__()                                      β”‚   β”‚
β”‚    β”‚                    β”‚                                          β”‚   β”‚
β”‚    β”‚                    └── show_cursor() --> cursor show          β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    AI CLIs using Rich:                                                 β”‚
β”‚    ───────────────────                                                 β”‚
β”‚                                                                        β”‚
β”‚    - Aider: Uses Rich Console and Live for streaming                   β”‚
β”‚      + Markdown rendering via Rich                                     β”‚
β”‚      + Progress bars via Rich                                          β”‚
β”‚                                                                        β”‚
β”‚    - Open Interpreter: Uses Rich + yaspin                              β”‚
β”‚      + Rich for output formatting                                      β”‚
β”‚      + yaspin for spinner (also emits cursor hide/show)                β”‚
β”‚      + Dual source, same pattern                                       β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Rust: Ratatui/Crossterm

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  RUST ECOSYSTEM: TWO-LAYER ARCHITECTURE                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    Rust terminal apps typically use two layers:                        β”‚
β”‚    - Crossterm: Low-level terminal backend                             β”‚
β”‚    - Ratatui: High-level TUI framework                                 β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚    β”‚    β”‚  Crossterm (Terminal Backend)                        β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  ─────────────────────────────────                   β”‚   β”‚   β”‚
β”‚    β”‚    β”‚                                                      β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Cursor hide/show (cursor::Hide, cursor::Show)       β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  BSU/ESU Mode 2026 (begin_synchronized_update)       β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Terminal modes (alternate screen, raw mode)         β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Event handling (keyboard, mouse)                    β”‚   β”‚   β”‚
β”‚    β”‚    β”‚                                                      β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  BSU/ESU API available but NOT emitted by default    β”‚   β”‚   β”‚
β”‚    β”‚    β”‚                                                      β”‚   β”‚   β”‚
β”‚    β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚    β”‚                           ^                                   β”‚   β”‚
β”‚    β”‚                           β”‚ uses                              β”‚   β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚    β”‚    β”‚  Ratatui (TUI Framework)                             β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  ───────────────────────────                         β”‚   β”‚   β”‚
β”‚    β”‚    β”‚                                                      β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Widgets (list, table, paragraph, etc.)              β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Layout system                                       β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Double buffering                                    β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Cursor hide on enter, show on exit                  β”‚   β”‚   β”‚
β”‚    β”‚    β”‚                                                      β”‚   β”‚   β”‚
β”‚    β”‚    β”‚  Does NOT emit BSU/ESU by default                    β”‚   β”‚   β”‚
β”‚    β”‚    β”‚                                                      β”‚   β”‚   β”‚
β”‚    β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    Critical Finding:  Support != Usage                                 β”‚
β”‚    ───────────────────────────────────                                 β”‚
β”‚                                                                        β”‚
β”‚    Crossterm PROVIDES BSU/ESU API.                                     β”‚
β”‚    Ratatui does NOT EMIT BSU/ESU by default.                           β”‚
β”‚    Application must explicitly wrap draw() calls.                      β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Rust AI CLIs: Divergent Behavior

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  CODEX CLI VS KIRO CLI: SAME FRAMEWORK, DIFFERENT CHOICES              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    Both use Ratatui + Crossterm. Different BSU/ESU decisions.          β”‚
β”‚                                                                        β”‚
β”‚    Codex CLI (OpenAI):                                                 β”‚
β”‚    ═══════════════════                                                 β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    // Explicit BSU/ESU wrapper                                β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    draw_frame() {                                             β”‚   β”‚
β”‚    β”‚        begin_synchronized_update  // BSU                      β”‚   β”‚
β”‚    β”‚        terminal.draw(frame)       // Ratatui rendering        β”‚   β”‚
β”‚    β”‚        end_synchronized_update    // ESU                      β”‚   β”‚
β”‚    β”‚    }                                                          β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    Result: Emits both BSU/ESU AND cursor pattern              β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    Kiro CLI (AWS):                                                     β”‚
β”‚    ═══════════════                                                     β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    // Standard Ratatui usage, no BSU/ESU wrapper              β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    draw_frame() {                                             β”‚   β”‚
β”‚    β”‚        terminal.draw(frame)       // Ratatui rendering        β”‚   β”‚
β”‚    β”‚    }                                                          β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    Result: Emits cursor pattern only (via Ratatui default)    β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    Lesson: Framework capability does not guarantee application usage.  β”‚
β”‚            MonoTerm must detect actual output, not assume.             β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Go: BubbleTea Framework

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  BUBBLETEA: ELM ARCHITECTURE FOR TERMINAL                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    BubbleTea uses Elm-style Model-Update-View architecture.            β”‚
β”‚    Rendering is framerate-based (60 FPS default).                      β”‚
β”‚                                                                        β”‚
β”‚    Render Cycle:                                                       β”‚
β”‚    ─────────────                                                       β”‚
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β”‚    Model --> Update --> View --> Render                       β”‚   β”‚
β”‚    β”‚      β”‚                   β”‚         β”‚                          β”‚   β”‚
β”‚    β”‚      β”‚                   β”‚         β”œβ”€β”€ hideCursor()           β”‚   β”‚
β”‚    β”‚      β”‚                   β”‚         β”œβ”€β”€ write content          β”‚   β”‚
β”‚    β”‚      β”‚                   β”‚         └── showCursor()           β”‚   β”‚
β”‚    β”‚      β”‚                   β”‚                                    β”‚   β”‚
β”‚    β”‚      <β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                    β”‚   β”‚
β”‚    β”‚                                                               β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    BSU/ESU Status:                                                     β”‚
β”‚    ───────────────                                                     β”‚
β”‚                                                                        β”‚
β”‚    BubbleTea does NOT implement BSU/ESU.                               β”‚
β”‚    Relies on framerate control + cursor pattern for smooth output.     β”‚
β”‚                                                                        β”‚
β”‚    AI CLI Potential:                                                   β”‚
β”‚    ─────────────────                                                   β”‚
β”‚                                                                        β”‚
β”‚    No major AI CLIs currently use BubbleTea.                           β”‚
β”‚    Charm ecosystem (glow, mods) are candidates for future AI tools.    β”‚
β”‚    When they emerge, cursor pattern will provide MonoTerm compat.      β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pairing Summary

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  COMPLETE PAIRING MATRIX                                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚ AI CLI        β”‚ Framework     β”‚ Language      β”‚Cursor β”‚BSU/ESUβ”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ Claude Code   β”‚ Ink           β”‚ TypeScript    β”‚  YES  β”‚ Dual  β”‚   β”‚
β”‚    β”‚ Gemini CLI    β”‚ Ink (fork)    β”‚ TypeScript    β”‚  YES  β”‚ NO    β”‚   β”‚
β”‚    β”‚ Aider         β”‚ Rich          β”‚ Python        β”‚  YES  β”‚ NO    β”‚   β”‚
β”‚    β”‚ Open Interp.  β”‚ Rich + yaspin β”‚ Python        β”‚  YES  β”‚ NO    β”‚   β”‚
β”‚    β”‚ Codex CLI     β”‚ Ratatui       β”‚ Rust          β”‚  YES  β”‚ YES   β”‚   β”‚
β”‚    β”‚ Kiro CLI      β”‚ Crossterm     β”‚ Rust          β”‚  YES  β”‚ NO    β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                        β”‚
β”‚    Statistics:                                                         β”‚
β”‚    ───────────                                                         β”‚
β”‚    - Cursor pattern: 6/6 (100%)                                        β”‚
β”‚    - BSU/ESU native: 1/6 (17%)                                         β”‚
β”‚    - BSU/ESU dual:   1/6 (17%)                                         β”‚
β”‚                                                                        β”‚
β”‚    MonoTerm Compatibility:                                             β”‚
β”‚    ───────────────────────                                             β”‚
β”‚    - Via cursor pattern: 6/6 (100%)                                    β”‚
β”‚    - Via BSU/ESU: 2/6 (33%)                                            β”‚
β”‚    - Total: 6/6 (100%)                                                 β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Insight

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  AI CLI FRAMEWORK PAIRING                                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                        β”‚
β”‚    Key Finding: AI CLIs inherit cursor pattern from TUI frameworks.    β”‚
β”‚                                                                        β”‚
β”‚      Ink       -->  Claude Code, Gemini CLI                            β”‚
β”‚      Rich      -->  Aider, Open Interpreter                            β”‚
β”‚      Ratatui   -->  Codex CLI, Kiro CLI                                β”‚
β”‚      BubbleTea -->  Future AI CLIs                                     β”‚
β”‚                                                                        β”‚
β”‚    All frameworks emit cursor hide/show during render.                 β”‚
β”‚    MonoTerm detects this pattern for atomic frame boundaries.          β”‚
β”‚                                                                        β”‚
β”‚    ───────────────────────────────────────────────────────────────     β”‚
β”‚                                                                        β”‚
β”‚    Critical Insight:                                                   β”‚
β”‚                                                                        β”‚
β”‚      "Support != Usage"                                                β”‚
β”‚                                                                        β”‚
β”‚      Crossterm supports BSU/ESU, but Kiro CLI doesn't use it.          β”‚
β”‚      Framework capability does not guarantee application behavior.     β”‚
β”‚      MonoTerm must detect actual output patterns.                      β”‚
β”‚                                                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜