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. β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Related Research
- Prior Art - What we learned from 6 terminals
- Terminal Analysis - Architecture comparison
- Success Factors - Why the architecture works