Skip to main content

What is MonoTerm?

MonoTerm is Monolex’s terminal-in-terminal. It wraps the same headless PTY engine that powers the Monolex desktop app, but renders directly to your existing terminal via crossterm — no Electron, no WebView, no GUI. Published contract: monoterm 0.4.17, OpenCLIs build 2026-07-15-163247. The executing binary, registry, and public CDN metadata agree on this release.

Install

Quick Start

Platform Availability

The exact published targets are darwin-aarch64, linux-x86_64, linux-aarch64, and windows-x86_64. There is no Intel macOS or Windows Arm artifact in this release. ctl uses a Unix domain socket and test uses Unix PTY primitives, so both command families fail closed on Windows until named-pipe and ConPTY transports are implemented.

Complete CLI Reference

The control socket uses newline-delimited JSON at ~/Library/Application Support/Monolex/runtime/sockets/monoterm/control-{PID}.sock. It discovers the newest live process and cleans stale sockets. ctl and test prove different layers: ctl drives an existing PTY directly, while test sends keyboard events through a newly spawned UI and also verifies selected control-socket and PTY-stream paths.

Raw Socket Protocol: 11 Parsed Messages

The six monoterm ctl commands are the stable shell wrapper. Integrations can also send raw newline-delimited JSON. The 0.4.17 parser recognizes exactly 11 message types: This distinction matters for automation: the parser accepting a message is not the same as the current TUI implementing its mutation. The 28-check harness proves status, tab-list, write, and subscribe-pty; it does not turn the three fail-closed tab messages into working commands.

Keybindings

Default keybindings, configurable via JSON: Override via ~/Library/Application Support/Monolex/keybindings.json:

Architecture

MonoTerm does not implement a terminal emulator. It wraps the Monolex headless engine — the same Alacritty VTE parser, AtomicState diff engine, and PTY daemon that power the desktop app.

What MonoTerm adds over raw headless:

Virtual Cursor & IME

When apps like Claude Code hide the real cursor and draw their own using INVERSE video (\x1b[7m), MonoTerm detects the virtual cursor position from the AtomicState layer and places the host terminal’s cursor there. This ensures the parent terminal’s IME (Korean, Japanese, Chinese input) composition window appears at the correct position — where the user is actually editing, not where the hidden real cursor is. The detection uses the same algorithm as the Monolex desktop app:
  • Scan for INVERSE cells on the cursor row first (avoid false positives)
  • Fall back to bottom-up scan
  • Hold position during Ink erase-redraw cycles (6 frames)
  • Distance check to discard false positives (zsh % marker, status bars)

PTY Harness

MonoTerm includes a built-in test system that exercises the headless engine through a real test PTY without requiring a human-operated terminal:
The 28 checks are grouped into 16 ordered sections: startup, shell, prompt box, tree focus, tree search, prompt focus, prompt input, prompt close, sidebar hide and restore, new-tab dialog, dialog cancellation, ctl status, ctl tabs, ctl write, PTY subscription, and the Spotlight palette. Screen assertions poll until the required state appears instead of treating one fixed-delay snapshot as proof.

Source

MonoTerm is released through OpenCLIs from the public Monolex repository under tauri-apps/app-monoterm. A source build, an installed OpenCLIs payload, and a passing PTY harness are separate proof layers.

Relationships