Skip to main content

AI-Native Terminal Architecture

Visual diagrams showing the architectural differences.

Two Movements in One Terminal

╔═══════════════════════════════════╦═══════════════════════════════════╗
║    SPARSE OUTPUT (HUMAN)          ║    DENSE OUTPUT (AI)              ║
╠═══════════════════════════════════╬═══════════════════════════════════╣
║                                   ║                                   ║
║    ┌───────┐     ┌───────┐        ║    ┌───────┐                      ║
║    │       │     │       │        ║    │  LLM  │                      ║
║    │  User │ --> │  TTY  │        ║    └───┬───┘                      ║
║    │       │ keys│       │        ║        │                          ║
║    └───────┘     └───┬───┘        ║        │ tokens tokens tokens     ║
║                      │            ║        v tokens tokens tokens     ║
║                small updates      ║    ┌───────┐                      ║
║                      v            ║    │       │ tokens               ║
║                 ┌─────────┐       ║    │  TTY  │ tokens               ║
║                 │  Screen │       ║    └───┬───┘                      ║
║                 └─────────┘       ║        │                          ║
║                                   ║        vvvvvvvvvvvvvvvvvvv        ║
║   Input:  ================        ║    ┌─────────────────┐            ║
║   Output: ==                      ║    │  Dense Output   │            ║
║                                   ║    └─────────────────┘            ║
║   Character: Sparse motion        ║                                   ║
║   Need: Low Latency               ║   Input:  ==                      ║
║                                   ║   Output: ================        ║
║                                   ║                                   ║
║                                   ║   Character: Dense motion         ║
║                                   ║   Need: Stability                 ║
╚═══════════════════════════════════╩═══════════════════════════════════╝

Traditional Terminal: Single-Pattern Optimization

┌───────────────────────────────────────────────────────────────────────┐
│  TRADITIONAL TERMINAL: OPTIMIZED FOR INPUT LATENCY                     │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│                      OPTIMIZATION TARGET                               │
│                                                                        │
│    INPUT ───────────────────────────────────────────> OUTPUT           │
│    LATENCY                                            (ignored)        │
│       │                                                                │
│       v                                                                │
│    13-31ms                                                             │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────────────────┐
│  VIM SCENARIO                      LLM SCENARIO                        │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│   key --> render --> OK            chunk --> render                    │
│   key --> render --> OK            chunk --> render                    │
│   key --> render --> OK            chunk --> render                    │
│                                    chunk --> render                    │
│   Output: Low                      ...x4000/sec...                     │
│   Render: keeps up                                                     │
│                                    Output: MASSIVE                     │
│   PERFECT                          Render: EXPLODES                    │
│                                                                        │
│   Sparse motion works well         CRASH - Dense motion overwhelms     │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

MonoTerm: Adaptive Architecture

┌───────────────────────────────────────────────────────────────────────┐
│  MONOTERM: ADAPTIVE TO BOTH PATTERNS                                   │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│    ┌───────────────────────────┐     ┌───────────────────────────┐     │
│    │     RUST BACKEND          │     │      FRONTEND             │     │
│    │                           │     │                           │     │
│    │  Parse: ALWAYS FAST       │ ACK │  Render: WHEN READY       │     │
│    │  ─────────────────────    │<--->│  ─────────────────        │     │
│    │  No DOM = No Reflow       │     │  Controlled pace          │     │
│    │                           │     │                           │     │
│    └───────────────────────────┘     └───────────────────────────┘     │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────────────────┐
│  VIM SCENARIO                      LLM SCENARIO                        │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│   key --> parse --> ACK            chunk ──┐                           │
│              │        ^            chunk   │ Rust                      │
│              v        │            chunk   └--> Grid                   │
│           render ─────┘            chunk   │    (memory)               │
│                                    chunk ──┘                           │
│   ACK cycle: FAST                         │                            │
│   (low output)                            v                            │
│                                    ┌────────────┐                      │
│   ~50ms latency                    │ ACK? emit  │                      │
│                                    │  1 render  │                      │
│   GOOD ENOUGH                      └────────────┘                      │
│                                                                        │
│   Sparse motion responsive         100 chunks --> 1 emit               │
│                                                                        │
│                                    OPTIMAL - Dense motion stable       │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

Reflow: Frame Drop vs DOM Reflow

┌───────────────────────────────────────────────────────────────────────┐
│  FRAME DROP (Game) - Cheap                                             │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│    Frame 1  ================== --> Display                             │
│    Frame 2  [GPU busy - SKIP] --> (nothing, free)                      │
│    Frame 3  ================== --> Display                             │
│                                                                        │
│    Cost: $0 (just don't render)                                        │
│    Recovery: Instant                                                   │
│    UX: "slight stutter"                                                │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────────────────┐
│  REFLOW (Terminal) - Expensive                                         │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│    Chunk 1 --> DOM --> ================ REFLOW (16ms, blocking)        │
│    Chunk 2 --> DOM --> ................ (queued, waiting)              │
│    Chunk 3 --> DOM --> ................ (queued, waiting)              │
│    Chunk 4 --> DOM --> ................ (queued, waiting)              │
│                         ^                                              │
│                         │                                              │
│                    CANNOT SKIP!                                        │
│                         │                                              │
│                         v                                              │
│             ================ REFLOW 1 (16ms)                           │
│             ================ REFLOW 2 (16ms)                           │
│             ================ REFLOW 3 (16ms)                           │
│             ================ REFLOW 4 (16ms)                           │
│                                                                        │
│    Cost: $$$$ (cumulative debt)                                        │
│    Recovery: Never (keeps piling up)                                   │
│    UX: "freeze --> crash"                                              │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

MonoTerm Solution

┌───────────────────────────────────────────────────────────────────────┐
│  MONOTERM: EXECUTION BEFORE THOUGHT                                    │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│      [RUST BACKEND]                     [FRONTEND]                     │
│      Execution: No DOM                  Thought: Display               │
│                                                                        │
│    ┌───────────────────┐              ┌───────────────────┐            │
│    │                   │              │                   │            │
│    │  Chunk --> Grid   │              │                   │            │
│    │  Chunk --> Grid   │              │     (waiting)     │            │
│    │  Chunk --> Grid   │    ──────>   │                   │            │
│    │  Chunk --> Grid   │     ACK      │  Snapshot --> Render           │
│    │  Chunk --> Grid   │    <──────   │       │           │            │
│    │  Chunk --> Grid   │              │   1 Reflow only   │            │
│    │  ...100 updates.. │              │                   │            │
│    │                   │              │                   │            │
│    │  INSTANT          │              │  CONTROLLED       │            │
│    │  (memory only)    │              │  (5-10 fps)       │            │
│    │                   │              │                   │            │
│    └───────────────────┘              └───────────────────┘            │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

Data Flow Comparison

┌───────────────────────────────────────────────────────────────────────┐
│  TRADITIONAL TERMINAL (Open Loop)                                      │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│    PTY ==> Parse ==> Render ==> DOM ==> Display                        │
│     │        │         │         │                                     │
│     │        │         │         └── REFLOW! (blocking)                │
│     v        v         v                                               │
│    100      100       100  <── All visible, all cause reflow           │
│                                                                        │
│                   ┌───────────────────────────┐                        │
│                   │  100 reflows = CRASH      │                        │
│                   └───────────────────────────┘                        │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────────────────┐
│  MONOTERM (Closed Loop - Consumer-Driven)                              │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│    PTY ==> Parse ==> Grid ─ ─ ─ ─ ─ ─ ┐                                │
│     │        │         │              │                                │
│     │        │         │   ┌──────────v──────────┐                     │
│     │        │         │   │   waiting_for_ack?  │                     │
│     v        v         v   │                     │                     │
│    100      100       100  │   YES --> continue  │                     │
│                            │   NO  --> emit ───────> Render ==> DOM    │
│    (all processed)         │          ^          │         │           │
│    (no reflow yet)         │          │          │         │           │
│                            │      grid_ack <─────────────-─┘           │
│                            └─────────────────────┘                     │
│                                                                        │
│                   ┌───────────────────────────┐                        │
│                   │  1 reflow = STABLE        │                        │
│                   └───────────────────────────┘                        │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

Terminal Architecture Evolution

┌───────────────────────────────────────────────────────────────────────┐
│  TERMINAL EVOLUTION TIMELINE                                           │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│                              VT100                                     │
│                             (1978)                                     │
│                                │                                       │
│                                │ decades                               │
│                                v                                       │
│                              xterm                                     │
│                             (1984)                                     │
│                                │                                       │
│              ┌─────────────────┼──────────────────┐                    │
│              │                 │                  │                    │
│              v                 v                  v                    │
│    ┌────────────────┐  ┌────────────────┐  ┌────────────────┐          │
│    │  SPEED BRANCH  │  │ FEATURE BRANCH │  │   WEB BRANCH   │          │
│    │                │  │                │  │                │          │
│    │  Alacritty     │  │  WezTerm       │  │  xterm.js      │          │
│    │  Ghostty       │  │  iTerm2        │  │  Hyper         │          │
│    │                │  │                │  │  VSCode Term   │          │
│    │                │  │                │  │                │          │
│    │  GPU render    │  │  Splits/tabs   │  │  Web compat    │          │
│    │  Low latency   │  │  Ligatures     │  │  Cross-plat    │          │
│    │  Minimal       │  │  Scripting     │  │  Extensible    │          │
│    └────────────────┘  └────────────────┘  └────────────────┘          │
│              │                 │                  │                    │
│              └─────────────────┼──────────────────┘                    │
│                                │                                       │
│                                │ All optimized for:                    │
│                                │ INPUT LATENCY (Sparse output era)     │
│                                │                                       │
│    ════════════════════════════│═════════════════════════════════════  │
│                                │                                       │
│                          2023: │ LLM Era Arrives                       │
│                                │ New pattern: DENSE OUTPUT             │
│                                │                                       │
│              ┌─────────────────┼──────────────────┐                    │
│              │                                    │                    │
│              v                                    v                    │
│    ┌────────────────────┐          ┌────────────────────┐              │
│    │ EXISTING BRANCHES  │          │ AI-NATIVE ARCH     │              │
│    │                    │          │                    │              │
│    │ Continue their     │          │     MONOTERM       │              │
│    │ optimization:      │          │                    │              │
│    │                    │          │ ACK Gate           │              │
│    │ Speed --> faster   │          │ Consumer-driven    │              │
│    │ Feature --> more   │          │ Dual-mode support  │              │
│    │ Web --> broader    │          │                    │              │
│    │                    │          │ Handles BOTH:      │              │
│    │ But for LLM:       │          │ - Sparse motion    │              │
│    │ DOM Reflow Storm   │          │ - Dense motion     │              │
│    └────────────────────┘          └────────────────────┘              │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘