Compatibility Matrix
MonoTerm achieves 100% compatibility with all major AI CLI tools through dual detection of BSU/ESU and cursor patterns.Compatibility Score
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ MONOTERM AI CLI COMPATIBILITY │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ COMPATIBILITY SCORE: 100% │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Claude Code [══════════════════════════] OK │ │
│ │ Gemini CLI [══════════════════════════] OK │ │
│ │ Aider [══════════════════════════] OK │ │
│ │ Open Interpreter [══════════════════════════] OK │ │
│ │ Codex CLI [══════════════════════════] OK │ │
│ │ Kiro CLI [══════════════════════════] OK │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ Zero modifications required to any AI CLI application. │
│ │
└───────────────────────────────────────────────────────────────────────┘
Detection Method by CLI
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ DETECTION METHOD MATRIX │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────┬───────────────────┬──────────────────────────┐│
│ │ AI CLI │ Primary Detection │ Fallback Detection ││
│ ├───────────────────┼───────────────────┼──────────────────────────┤│
│ │ Claude Code │ BSU/ESU (if term) │ Cursor pattern (always) ││
│ │ Gemini CLI │ Cursor pattern │ -- ││
│ │ Aider │ Cursor pattern │ -- ││
│ │ Open Interpreter │ Cursor pattern │ -- ││
│ │ Codex CLI │ BSU/ESU (native) │ Cursor pattern ││
│ │ Kiro CLI │ Cursor pattern │ -- ││
│ └───────────────────┴───────────────────┴──────────────────────────┘│
│ │
│ Detection Priority in MonoTerm: │
│ ─────────────────────────────── │
│ │
│ 1. BSU/ESU (Mode 2026) -> Explicit frame boundaries │
│ 2. Cursor (Mode ?25) -> Implicit frame boundaries │
│ │
│ If BSU/ESU is detected, cursor pattern is ignored for boundaries. │
│ Cursor state changes are still passed through for visibility. │
│ │
└───────────────────────────────────────────────────────────────────────┘
Detailed CLI Profiles
Claude Code (Anthropic)
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ CLAUDE CODE PROFILE │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ Framework: Ink (TypeScript) │
│ Mode: DUAL (cursor always + BSU/ESU conditional) │
│ Detection: BSU/ESU preferred, cursor fallback │
│ │
│ Behavior: │
│ ───────── │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 1. Startup: Check terminal BSU/ESU support │ │
│ │ │ │ │
│ │ ├── Supported ────→ Enable BSU/ESU mode │ │
│ │ │ │ │
│ │ └── Not supported → Cursor pattern only │ │
│ │ │ │
│ │ 2. Each render cycle: │ │
│ │ │ │ │
│ │ ├── If BSU/ESU enabled: │ │
│ │ │ BSU -> content -> ESU │ │
│ │ │ │ │
│ │ └── Always (from Ink): │ │
│ │ cursor hide -> content -> cursor show │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ MonoTerm Strategy: │
│ - Detect BSU/ESU if present (priority 1) │
│ - Fall back to cursor pattern (priority 2) │
│ - Always compatible │
│ │
└───────────────────────────────────────────────────────────────────────┘
Codex CLI (OpenAI)
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ CODEX CLI PROFILE │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ Framework: Ratatui + Crossterm (Rust) │
│ Mode: BSU/ESU NATIVE │
│ Detection: BSU/ESU primary │
│ │
│ Unique Characteristics: │
│ ─────────────────────── │
│ │
│ - Only AI CLI using BSU/ESU natively │
│ - Full-screen TUI application (not just streaming output) │
│ - Wraps draw() calls in sync_update() explicitly │
│ │
│ Output Pattern: │
│ ─────────────── │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ BSU start <- Begin sync │ │
│ │ cursor hide <- Ratatui │ │
│ │ [terminal content...] <- Frame content │ │
│ │ cursor show <- Ratatui │ │
│ │ ESU end <- End sync │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ MonoTerm Strategy: │
│ - Detect BSU/ESU (priority 1) │
│ - Cursor pattern ignored for frame boundaries (nested inside) │
│ - Optimal compatibility via explicit synchronization │
│ │
└───────────────────────────────────────────────────────────────────────┘
Gemini CLI (Google)
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ GEMINI CLI PROFILE │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ Framework: Ink (fork, TypeScript) │
│ Mode: Cursor pattern only │
│ Detection: Cursor pattern │
│ │
│ Special Feature: │
│ ─────────────── │
│ │
│ Uses alternate screen buffer in addition to cursor pattern. │
│ Alternate buffer is screen switch, not frame boundary. │
│ │
│ Output Pattern: │
│ ─────────────── │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ enter alternate screen <- Screen switch │ │
│ │ cursor hide <- Frame start │ │
│ │ [terminal content...] <- Frame content │ │
│ │ cursor show <- Frame end │ │
│ │ ... (repeated renders) │ │
│ │ exit alternate screen <- Screen switch │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ MonoTerm Strategy: │
│ - Detect cursor pattern for frame boundaries │
│ - Pass through alternate buffer sequences (not frame related) │
│ - Cursor pattern provides atomic rendering │
│ │
└───────────────────────────────────────────────────────────────────────┘
Python AI CLIs (Aider, Open Interpreter)
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ PYTHON AI CLI PROFILES │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ Aider │
│ ═════ │
│ Framework: Rich │
│ Mode: Cursor pattern only │
│ │
│ Open Interpreter │
│ ════════════════ │
│ Framework: Rich + yaspin │
│ Mode: Cursor pattern only (dual source) │
│ │
│ Output Pattern (both): │
│ ────────────────────── │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Rich Live context: │ │
│ │ with Live(renderable): │ │
│ │ cursor hide <- Live.__enter__() │ │
│ │ [streaming content] <- Multiple updates │ │
│ │ cursor show <- Live.__exit__() │ │
│ │ │ │
│ │ yaspin (Open Interpreter): │ │
│ │ with yaspin(): │ │
│ │ cursor hide <- Spinner start │ │
│ │ [spinner frames] <- Animation │ │
│ │ cursor show <- Spinner stop │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ MonoTerm Strategy: │
│ - Detect cursor pattern for frame boundaries │
│ - Works regardless of which library emits the pattern │
│ - Same pattern, same detection │
│ │
└───────────────────────────────────────────────────────────────────────┘
Kiro CLI (AWS)
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ KIRO CLI PROFILE │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ Framework: Crossterm (Rust) │
│ Mode: Cursor pattern only (despite BSU/ESU support) │
│ Detection: Cursor pattern │
│ │
│ Key Observation: │
│ ──────────────── │
│ │
│ Crossterm library supports BSU/ESU (begin_synchronized_update API). │
│ Kiro CLI does NOT use this API. │
│ Demonstrates "Support does not equal Usage" principle. │
│ │
│ MonoTerm Strategy: │
│ - Cannot assume BSU/ESU based on Crossterm dependency │
│ - Must detect actual output │
│ - Cursor pattern detection provides compatibility │
│ │
└───────────────────────────────────────────────────────────────────────┘
Implementation Requirements
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ MONOTERM IMPLEMENTATION CHECKLIST │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ Required Detection: │
│ ─────────────────── │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ [OK] BSU/ESU Mode 2026 detection │ │
│ │ Use: Primary frame boundary (if present) │ │
│ │ │ │
│ │ [OK] DCS format BSU/ESU detection │ │
│ │ Use: Alternative encoding (some applications) │ │
│ │ │ │
│ │ [OK] Cursor hide/show detection │ │
│ │ Use: Pseudo-BSU/ESU (universal fallback) │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ Required Behavior: │
│ ────────────────── │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ [OK] Priority handling (BSU/ESU > cursor) │ │
│ │ [OK] Data accumulation during frame │ │
│ │ [OK] Atomic flush on frame end │ │
│ │ [OK] Timeout safety (max wait) │ │
│ │ [OK] Pass-through for cursor visibility │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ NOT Required: │
│ ───────────── │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ [--] Modification to any AI CLI │ │
│ │ [--] Modification to any TUI framework │ │
│ │ [--] Terminal capability negotiation │ │
│ │ [--] Configuration per-application │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────┘
Future Compatibility
Copy
┌───────────────────────────────────────────────────────────────────────┐
│ FORWARD COMPATIBILITY ANALYSIS │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ Why MonoTerm's approach is future-proof: │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 1. Framework Coverage │ │
│ │ ───────────────────── │ │
│ │ │ │
│ │ All major TUI frameworks emit cursor pattern: │ │
│ │ - Ink (TypeScript) OK │ │
│ │ - Rich (Python) OK │ │
│ │ - Textual (Python) OK │ │
│ │ - Ratatui (Rust) OK │ │
│ │ - Crossterm (Rust) OK │ │
│ │ - BubbleTea (Go) OK │ │
│ │ - Charm (Go) OK │ │
│ │ │ │
│ │ Any new AI CLI using these frameworks will be compatible. │ │
│ │ │ │
│ │ 2. Pattern Stability │ │
│ │ ──────────────────── │ │
│ │ │ │
│ │ Cursor hide/show (DECTCEM) is VT220 standard from 1983. │ │
│ │ BSU/ESU (Mode 2026) is gaining adoption. │ │
│ │ Both are stable, documented standards. │ │
│ │ │ │
│ │ 3. No Application Dependencies │ │
│ │ ────────────────────────── │ │
│ │ │ │
│ │ Detection is pattern-based, not application-specific. │ │
│ │ Works with any application emitting these patterns. │ │
│ │ Future AI CLIs automatically supported. │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────┘
Summary
Copy
╔═════════════════════════════════════════════════════════════════════╗
║ ║
║ MONOTERM COMPATIBILITY MATRIX ║
║ ║
║ ┌───────────────────────────────────────────────────────────────┐║
║ │ │║
║ │ Current Coverage: │║
║ │ ───────────────── │║
║ │ - Claude Code OK │║
║ │ - Gemini CLI OK │║
║ │ - Aider OK │║
║ │ - Open Interpreter OK │║
║ │ - Codex CLI OK │║
║ │ - Kiro CLI OK │║
║ │ │║
║ │ Total: 6/6 (100%) │║
║ │ │║
║ │ Detection Method: │║
║ │ ───────────────── │║
║ │ - BSU/ESU (priority 1): 2/6 CLIs │║
║ │ - Cursor pattern (priority 2): 6/6 CLIs │║
║ │ │║
║ │ Requirements: │║
║ │ ───────────── │║
║ │ - MonoTerm changes: Escape sequence detection │║
║ │ - AI CLI changes: NONE │║
║ │ - Framework changes: NONE │║
║ │ │║
║ └───────────────────────────────────────────────────────────────┘║
║ ║
║ Conclusion: ║
║ MonoTerm's dual detection strategy (BSU/ESU + cursor pattern) ║
║ provides universal atomic rendering compatibility with all ║
║ current and future AI CLI applications. ║
║ ║
╚═════════════════════════════════════════════════════════════════════╝
MonoTerm: 100% AI CLI Compatibility