# Otty > Otty is a modern cross-platform terminal emulator. Native rendering, intelligent panes, and a configuration file that gets out of your way. ## Getting Started - [First Launch](https://docs.otty.sh/getting-started/first-launch): Four things worth setting up the first time you open Otty. All of them live in **Settings** (⌘,) — no config files required. - [Installation](https://docs.otty.sh/getting-started/installation): How to get Otty running on each platform. ## User Interface - [Command Palette](https://docs.otty.sh/user-interface/command-palette): The VSCode-style command palette for *running an action*. Counterpart to Open Quickly, which is for *jumping to a thing*. - [Details Panel](https://docs.otty.sh/user-interface/details-panel): The **Details Panel** is a right-side panel that gives you context about the focused pane without leaving the terminal — its working directory, what's running, git status, an outline of the content, and a file tree. It always reflects the **focused pane**, updating as you switch panes or tabs. - [Drag and Drop](https://docs.otty.sh/user-interface/drag-and-drop): Otty accepts files, folders, and URLs from Finder, browsers, and any app that exports the standard pasteboard types. - [Files, Folder and Links](https://docs.otty.sh/user-interface/files-and-links): In live terminal output and scrollback, Otty detects: - [Find](https://docs.otty.sh/user-interface/find): In-pane search across the visible buffer and scrollback. - [Open Quickly](https://docs.otty.sh/user-interface/open-quickly): The Xcode-style ⌘⇧O picker. One field — fuzzy across everything you might want - [Outline / Jump To](https://docs.otty.sh/user-interface/outline): Otty keeps an index of every prompt, command, and file in a pane's scrollback so you can leap straight to any of them instead of scrolling to hunt. The same index drives two views: the **Jump To** panel and the **Outline** panel. Both are powered by the prompt marks your shell already emits — you don't change your prompt. - [Status Bar](https://docs.otty.sh/user-interface/status-bar) - [Window, Tab and Split](https://docs.otty.sh/user-interface/window-tab-split): Otty's workspace is built from three nested levels. Knowing how they relate makes the rest of this section — tabs, splits, drag-and-drop — easy to reason about. ## Customization - [Advanced / All Settings](https://docs.otty.sh/customization/advanced-settings): The main Settings tabs (General, Shell, Controls, Appearance, Key Bindings) - [Config File](https://docs.otty.sh/customization/config-file): Where Otty keeps its settings, how to edit the file by hand, and how changes - [Custom Commands / Layouts / Snippets](https://docs.otty.sh/customization/custom-commands) - [Keybindings](https://docs.otty.sh/customization/custom-keybindings): You can rebind almost anything from the GUI, or edit config.toml directly. The two stay in sync — GUI changes are written back to your config file. - [Fonts and Text Rendering](https://docs.otty.sh/customization/fonts): Font family, size, weight, and ligatures. - [Import / Export](https://docs.otty.sh/customization/import-export): Otty can read configs from other terminals (Ghostty, Kitty, Alacritty) and - [Themes](https://docs.otty.sh/customization/themes): How to pick, switch, and write themes. ## Workflows - [Using the CLI in your Shell](https://docs.otty.sh/workflows/cli-usage): Practical recipes for the otty command. For the full reference of every subcommand and flag see Reference → CLI. - [Data Sync](https://docs.otty.sh/workflows/data-sync): Otty stores configuration, fonts, themes, recipes under ~/.config/otty, so for now you could sync or back up Otty configuration by syncing or backing up that config folder. Better data sync, and cross-device experience is still under development. - [Frequent Folders](https://docs.otty.sh/workflows/frequent-folders): Otty remembers the folders you work in and ranks them by **frecency** — - [Recipes](https://docs.otty.sh/workflows/recipes): A **recipe** is a snapshot of your repeatable work, from simple text snippets, to a whole workspace including tabs, panes, working directories, and optionally the commands you ran — saved as a portable file you can re-open later or share with a teammate. - [Session Recovery](https://docs.otty.sh/workflows/session-recovery): Otty remembers what you had open. Closed tabs come back, crashed windows restore. - [SSH / Remote Development](https://docs.otty.sh/workflows/ssh-remote): Basic ssh works today — you can connect to remote hosts and run sessions just like in any terminal. The planned work covers deeper remote development integration. ## Terminal Features - [Autocomplete / Inline Suggest](https://docs.otty.sh/terminal-features/autocomplete): Inline ghost-text and a candidate panel — driven by a Fig-compatible spec database with 700+ CLI tools shipped and Otty's on-device learning. - [BiDi / RTL Text](https://docs.otty.sh/terminal-features/bidi-rtl): Otty renders Hebrew, Arabic, and mixed right-to-left text in the order people - [Box Drawing](https://docs.otty.sh/terminal-features/box-drawing): Pixel-perfect rendering of Unicode box-drawing, block, Braille, and Powerline glyphs — drawn analytically rather than rasterized from a font. - [Copy and Paste](https://docs.otty.sh/terminal-features/copy-and-paste): How Otty moves text between the terminal and the system clipboard, plus the safety net that catches risky pastes. Everything here is configured in the GUI — no config file needed. - [Cursor and Mouse](https://docs.otty.sh/terminal-features/cursor-and-mouse): How Otty styles the text cursor and handles mouse / pointer input. Everything here is configured in the GUI — no config file needed. - [Hint Mode](https://docs.otty.sh/terminal-features/hint-mode): Vimium-style keyboard navigation for links and file paths in the visible - [Images](https://docs.otty.sh/terminal-features/images): Otty supports inline images via three protocols: iTerm2's OSC 1337, the Kitty graphics protocol, and Sixel. - [Input](https://docs.otty.sh/terminal-features/input): How Otty handles the keyboard — native-macOS editing, international input, the Kitty keyboard protocol, and secure entry. Everything here is configured in the GUI, and every shortcut below is a factory default you can re-bind in **Settings → Key Bindings** (see Custom Keybindings). - [Privilege and Notifications](https://docs.otty.sh/terminal-features/notifications): Desktop notifications, bell behaviour, focus / attention requests, and the security toggles that gate what a program in the terminal is allowed to do. - [Progress State](https://docs.otty.sh/terminal-features/progress-state): Otty surfaces the live state of long-running commands and tasks *visually* — a spinner or badge on the tab, an animated Dock icon, and (on supported platforms) a taskbar-style progress bar. The state is driven by the **ConEmu OSC 9;4 progress protocol**, with three ways to feed it: - [Read-only Mode](https://docs.otty.sh/terminal-features/read-only-mode): Locks a pane so nothing you type reaches the shell. Useful when a long-running process is producing important output and you don't want a stray keystroke to interrupt it — or when you hand the window to someone else for a quick look. - [Scroll](https://docs.otty.sh/terminal-features/scroll): How Otty handles scrollback and the scroll gesture. Everything here is configured in the GUI — no config file needed. - [Selection](https://docs.otty.sh/terminal-features/selection): How Otty handles native text selection and copying to the clipboard. - [Shell Integration](https://docs.otty.sh/terminal-features/shell-integration): Otty injects small shell hooks that emit OSC 133 (FTCS) prompt marks. These power command outlines, working-directory tracking, and exit-status indicators. - [$TERM and Identification](https://docs.otty.sh/terminal-features/term-value): How Otty tells the programs running inside it *what kind of terminal they're - [Unicode and Text Styles](https://docs.otty.sh/terminal-features/unicode-and-text-styles): Otty renders text on the GPU — Metal on macOS, DirectX 12 on Windows — caching each glyph so it's rasterized once and reused. This page covers what Otty can put on screen: Unicode and emoji, ligatures, Nerd Font icons, the full set of text styles, and color depth. - [Vi Mode](https://docs.otty.sh/terminal-features/vi-mode): Navigate scrollback and select text with vi-style keys — no mouse, no arrow keys. ## Working with Agents - [Working with Code Agents](https://docs.otty.sh/agents/agents-overview): Otty is built for the way people code now — with an agent doing the typing. Run Claude Code, Codex, or OpenCode as first-class panes and let Otty handle the rest: it shows you what each agent is doing, pings you when one needs you, and gives you real input and editing tools instead of a bare prompt. - [Composer](https://docs.otty.sh/agents/composer): The composer is the input affordance for agent sessions — multi-line, cursor operations, undo / redo, float on top... - [Fork / Branch Session](https://docs.otty.sh/agents/fork-branch-session): Split a conversation in two. Forking copies a session's history up to the current point into a **fresh** session, so you can explore an alternative without disturbing the original thread. Both the original and the copy stay live, so you can chase different directions **in parallel**. - [Agent History](https://docs.otty.sh/agents/history): Every agent conversation is captured and searchable. Resume a thread days later, or fork a new task off an old context. - [Monitor Tasks](https://docs.otty.sh/agents/parallel-tasks): Agents run on their own clock — a task can take seconds or many minutes, and you'll often have several going at once. Otty keeps you informed without making you babysit a tab: it can badge the tab, send a notification, keep the Mac awake while work is in flight, and line up the next command to fire the moment the current one finishes. - [Prompt Queue](https://docs.otty.sh/agents/prompt-queue): Line up several prompts while an agent is still working. Otty holds them in a queue and feeds the next one the moment the current turn finishes — no need to babysit the session. - [Send to Chat](https://docs.otty.sh/agents/send-to-chat): Pull terminal output, file-pane selections, or shell context straight into an agent conversation — without copy-pasting. "Send to Chat" attaches the source as context to the active (or a new) agent session. - [Setup](https://docs.otty.sh/agents/setup): Otty doesn't run agents for you — you keep using **Claude Code**, **Codex**, or **OpenCode** exactly as you do today. The one-time setup here teaches each agent to report its state back to Otty, so the window can show live badges, fire notifications, resume sessions, and surface history. It's a single click per agent. - [Supported Code Agents](https://docs.otty.sh/agents/supported-agents): Otty integrates with the coding-agent CLIs you run yourself. You keep using the agent exactly as you would in any terminal — Otty plugs into it so the tab badges, notifications, history, resume, and (where the agent supports it) fork all work. The in-app experience is the same across every one. ## Terminal API (VT) - [BEL — Bell](https://docs.otty.sh/vt/c0/bel): Rings the terminal bell. Modern terminals translate the byte into one of three behaviours depending on user preference: - [BS — Backspace](https://docs.otty.sh/vt/c0/bs): Moves the cursor one cell to the left. **Does not erase** the cell underneath — to delete, follow with a space then another BS, or use DCH. - [CAN — Cancel](https://docs.otty.sh/vt/c0/can): Aborts any control sequence currently being parsed. After CAN the parser returns to the ground state — partially-received CSI / OSC / DCS payloads are silently discarded. - [CR — Carriage Return](https://docs.otty.sh/vt/c0/cr): Moves the cursor to column 1 of the current row. **Does not** change the row. - [DEL — Delete](https://docs.otty.sh/vt/c0/del): Originally used to "erase" a previously-typed character on paper tape. On modern terminals, DEL is **ignored when received from the host** — it doesn't move the cursor or erase anything. - [ESC — Escape](https://docs.otty.sh/vt/c0/esc): The single most important control byte. ESC introduces every multi-byte sequence in the terminal vocabulary — CSI, OSC, ESC-final, DCS, APC, and so on. - [FF — Form Feed](https://docs.otty.sh/vt/c0/ff): Historically advanced a printer to the next page. On terminal emulators FF is treated as LF — Otty follows this convention. Some shells use Ctrl-L (which sends FF) as a clear-screen idiom; that's handled by the shell, not the terminal. - [HT — Horizontal Tab](https://docs.otty.sh/vt/c0/ht): Advances the cursor to the next tab stop. Default tab stops are every 8 columns. Tab stops are set with HTS (ESC H) and cleared with CSI g. - [C0 Controls](https://docs.otty.sh/vt/c0): Single-byte controls in 0x00–0x1F and 0x7F, plus the Fe-class two-byte introducers built on ESC. These are the most primitive terminal controls — backspace, line feed, carriage return, bell. - [LF — Line Feed](https://docs.otty.sh/vt/c0/lf): Moves the cursor down one row. The column does **not** change — to start a new line in the leftmost column you need CR LF (or NEL). - [SI — Shift In](https://docs.otty.sh/vt/c0/si): Switches the active character set back to **G0** (the default — usually US ASCII). Pairs with SO, which switches to G1. - [SO — Shift Out](https://docs.otty.sh/vt/c0/so): Switches the active character set to **G1**. Combined with ESC ( B / ESC ) 0 etc. to designate which character set G0 / G1 point at. - [SUB — Substitute](https://docs.otty.sh/vt/c0/sub): Identical behaviour to CAN: aborts any in-flight control sequence and returns the parser to the ground state. The two bytes exist as a historical artefact; either works. - [VT — Vertical Tab](https://docs.otty.sh/vt/c0/vt): Historically advanced the cursor to the next vertical tab stop. Vertical tab stops are essentially never used on modern terminals — Otty (like every modern emulator) treats VT as a synonym for LF. - [Colors](https://docs.otty.sh/vt/concepts/colors): Otty supports four color depths, layered: 24-bit truecolor, 256-color indexed, ANSI 16, and the default (no SGR). - [Control Sequences](https://docs.otty.sh/vt/concepts/control-sequences): A **control sequence** is any byte stream that the terminal interprets as a command rather than rendering as text. The terminal's parser is a small state machine that distinguishes printable bytes from control bytes and routes them differently. - [Cursor](https://docs.otty.sh/vt/concepts/cursor): The cursor is the active write position. Programs move it explicitly; characters output advance it implicitly. - [Screen](https://docs.otty.sh/vt/concepts/screen): The "screen" is the rectangular viewport visible inside a pane. Above it is **scrollback**; below it (on resize) gets reflowed. - [CUB — Cursor Back](https://docs.otty.sh/vt/csi/cub): Moves the cursor columns to the left in the current row. Default = 1. Clamps at column 1; no wrap. - [CUD — Cursor Down](https://docs.otty.sh/vt/csi/cud): Moves the cursor down rows in the current column. Default = 1. Does not scroll — clamps at the bottom of the active region. - [CUF — Cursor Forward](https://docs.otty.sh/vt/csi/cuf): Moves the cursor columns to the right in the current row. Default = 1. Clamps at the right margin; no wrap. - [CUP — Cursor Position](https://docs.otty.sh/vt/csi/cup): Moves the cursor to the given absolute position. Row and column are **1-indexed** — CSI 1 ; 1 H is the top-left cell. - [CUU — Cursor Up](https://docs.otty.sh/vt/csi/cuu): Moves the cursor up rows in the current column. Default = 1. The cursor does not move past the top of the active region (no scroll). - [DCH — Delete Characters](https://docs.otty.sh/vt/csi/dch): Deletes cells starting at the cursor, shifting remaining cells in the row to the left. Cells on the right are filled with blanks. - [DECRST — Reset DEC Private Mode](https://docs.otty.sh/vt/csi/decrst): Disables one or more DEC private modes. Same mode numbers as DECSET. - [DECSCA — Select Character Protection Attribute](https://docs.otty.sh/vt/csi/decsca): Marks subsequently written characters as **protected** or **erasable**. Protected cells are skipped by the selective-erase sequences DECSED (CSI ? J) and DECSEL (CSI ? K); ordinary ED / EL ignore the attribute and erase everything. - [DECSCUSR — Set Cursor Style](https://docs.otty.sh/vt/csi/decscusr): Sets the cursor shape and blink state. Note the literal SP (space, 0x20) between the parameter and the final q. - [DECSET — Set DEC Private Mode](https://docs.otty.sh/vt/csi/decset): Enables one or more DEC private modes. Each is a numeric mode identifier. Multiple modes can be set in a single sequence with ;-separation. - [DECSTR — Soft Terminal Reset](https://docs.otty.sh/vt/csi/decstr): Resets the terminal **state** without wiping the screen. Restores: - [DL — Delete Lines](https://docs.otty.sh/vt/csi/dl): Deletes rows starting at the cursor, scrolling subsequent rows up within the active region. New blank rows appear at the bottom. - [DSR — Device Status Report](https://docs.otty.sh/vt/csi/dsr): A host program asks the terminal about its state and the terminal answers by - [ED — Erase in Display](https://docs.otty.sh/vt/csi/ed): Erases part of the display. Default = 0. - [EL — Erase in Line](https://docs.otty.sh/vt/csi/el): Erases part of the current line. Default = 0. - [ICH — Insert Characters](https://docs.otty.sh/vt/csi/ich): Inserts blank cells at the cursor position, shifting existing content to the right. Cells that move past the right margin are lost. - [IL — Insert Lines](https://docs.otty.sh/vt/csi/il): Inserts blank rows at the cursor, scrolling subsequent rows down within the active region. Rows scrolled past the bottom of the region are lost (they do **not** enter scrollback). - [CSI Sequences](https://docs.otty.sh/vt/csi): Control Sequence Introducer — ESC [ followed by parameters and a final byte. The bulk of cursor movement, erase, mode setting, and SGR (color / style) lives here. - [SGR — Select Graphic Rendition](https://docs.otty.sh/vt/csi/sgr): Sets graphic rendition for subsequent characters — foreground / background color, weight, italic, underline, strike-through, etc. Parameters are 1+ numeric codes separated by ; (or : for sub-parameters); multiple codes apply in order. - [XTPUSHCOLORS / XTPOPCOLORS / XTREPORTCOLORS](https://docs.otty.sh/vt/csi/xt-colors): xterm's color-stack mechanism for programs that want to **temporarily** change the palette and **atomically** restore it on exit, even after the user has made their own runtime adjustments. Three operations: - [XTWINOPS — Window Manipulation & Size Reports](https://docs.otty.sh/vt/csi/xtwinops): xterm's window-manipulation family. The first parameter Ps selects an operation: many of them *act* on the window (deiconify, move, resize, raise/lower, maximize), and a few *report* a dimension back over the PTY. - [DECRQSS — Request Selection or Setting](https://docs.otty.sh/vt/dcs/decrqss): DECRQSS lets a program **read back** the terminal's current setting for a control function, instead of assuming its own last write took effect. The request names the control function by its final (and intermediate) bytes in D…D; the terminal replies with the value it would emit for that function. - [DCS Sequences](https://docs.otty.sh/vt/dcs): Device Control String — ESC P (or the 8-bit 0x90) followed by parameters, an intermediate/final selector, a string payload, and a string terminator. DCS frames carry longer, structured payloads than CSI or OSC: sixel images, terminfo queries, and the DECRQSS setting queries. - [DECALN — Screen Alignment Display](https://docs.otty.sh/vt/esc/decaln): Fills the entire visible screen with the character E (uppercase) using the default attributes. Introduced on DEC VT terminal hardware so technicians could verify screen geometry and convergence. - [DECKPAM — Keypad Application Mode](https://docs.otty.sh/vt/esc/deckpam): Switches the numeric keypad to **application mode**. In application mode the keypad keys send escape sequences instead of their numeric values, so programs can bind them as function keys. - [DECKPNM — Keypad Numeric Mode](https://docs.otty.sh/vt/esc/deckpnm): Switches the numeric keypad to **numeric mode** — keypad keys send their literal digits / operators. This is the default for normal shell sessions. - [DECRC — Restore Cursor](https://docs.otty.sh/vt/esc/decrc): Restores the cursor state previously saved by DECSC. If no DECSC has been issued for the active screen, DECRC moves the cursor to home (1, 1) with default attributes. - [DECSC — Save Cursor](https://docs.otty.sh/vt/esc/decsc): Saves the cursor state for later restoration with DECRC. The saved state includes: - [HTS — Set Tab Stop](https://docs.otty.sh/vt/esc/hts): Sets a horizontal tab stop at the cursor's current column. Subsequent HT presses (\t) will advance to the next stop. - [IND — Index](https://docs.otty.sh/vt/esc/ind): Moves the cursor down one row, scrolling the active region if the cursor is at the bottom. Equivalent in effect to LF but encoded as a two-byte ESC sequence — useful inside escape sequences where you don't want to use a raw control byte. - [ESC Sequences](https://docs.otty.sh/vt/esc): Single-ESC sequences (not starting with [). These include DEC private sequences (ESC #, ESC ( … )), cursor save / restore, character-set selection, and the Fe-class introducers. - [NEL — Next Line](https://docs.otty.sh/vt/esc/nel): Moves the cursor to column 1 of the next row — equivalent to CR LF (\r\n) but as a single two-byte sequence. - [RI — Reverse Index](https://docs.otty.sh/vt/esc/ri): Moves the cursor up one row, scrolling the active region down if the cursor is at the top. The opposite of IND. - [RIS — Full Reset](https://docs.otty.sh/vt/esc/ris): Resets the terminal to its power-on state: - [External Protocols](https://docs.otty.sh/vt/external-protocols): Extensions to the VT vocabulary adopted from other terminals. These ride on the underlying byte stream but define their own structured payloads. - [OSC Sequences](https://docs.otty.sh/vt/osc): Operating System Command — ESC ] followed by a numeric command, semicolon-separated arguments, and a string terminator. Used for cross-cutting concerns like window title, hyperlinks, clipboard, and shell integration. - [OSC 0 / OSC 2 — Set Window Title](https://docs.otty.sh/vt/osc/osc-0-2): Sets the window title (and optionally the icon title — Otty treats them as the same). - [OSC 10 / 11 / 12 / 17 / 19 — Dynamic Color Set / Query](https://docs.otty.sh/vt/osc/osc-10-19): Lets a program set or query one of the terminal's "named" colors at runtime — distinct from the 256-color palette (OSC 4) and from per-cell SGR colors. - [OSC 104 / 105 / 110-119 — Color Reset](https://docs.otty.sh/vt/osc/osc-104-119): Reset companions for the OSC 4 palette set and the OSC 5 / 10-19 named-color set sequences. The reset brings the slot back to the **configured default** (the terminal's startup palette / theme) — not to whatever the program saved earlier. For "restore exactly the prior runtime value", use XTPOPCOLORS instead. - [OSC 133 — Shell Integration (FTCS)](https://docs.otty.sh/vt/osc/osc-133): Marks the boundaries of prompts and commands in the byte stream. The terminal uses these marks for command outlines, jump-to-prev / next-command, exit-status indicators, and intelligent paste. - [OSC 1337 — iTerm2 Proprietary Extensions](https://docs.otty.sh/vt/osc/osc-1337): OSC 1337 is not a single sequence — it's iTerm2's umbrella for a whole family of - [OSC 22 — Mouse Cursor Shape](https://docs.otty.sh/vt/osc/osc-22): Asks the terminal to change the mouse pointer shape while the cursor is over the terminal pane. Introduced by xterm, extended and popularized by kitty; widely used by full-screen TUIs (yazi, btop, htop, mc, ranger) and mouse-driven REPLs to telegraph "this region is draggable / clickable / inert". - [OSC 26 — Terminal Agent Protocol](https://docs.otty.sh/vt/osc/osc-26): A coding agent — Claude Code, Codex, OpenCode, Aider, and the rest — runs as a - [OSC 4 — Palette Set / Query](https://docs.otty.sh/vt/osc/osc-4): Sets or queries one entry of the terminal's 256-color palette — the same indices that SGR 38;5; / SGR 48;5; reference. Used by tools that ship their own color schemes (base16, dotfiles color managers) without touching the terminal config. - [OSC 5 — "Special" Color Set](https://docs.otty.sh/vt/osc/osc-5): xterm-style "special color" slots — colors that decorate one of the SGR attributes globally rather than per-cell. Less widely used than OSC 10/11/12 but a small number of programs (kitty themes, the base16 schemes, some debuggers' integrated REPLs) emit them. - [OSC 52 — Clipboard Manipulation](https://docs.otty.sh/vt/osc/osc-52): Reads or writes the system clipboard from a program — including over SSH, where there's no other way to get text into the host's clipboard. - [OSC 7 — Current Working Directory](https://docs.otty.sh/vt/osc/osc-7): Reports the pane's current working directory. The terminal stores it per-pane and uses it for: - [OSC 777 — Desktop Notification (urxvt style)](https://docs.otty.sh/vt/osc/osc-777): Like OSC 9, but adds a separate **title** field. Originated with rxvt-unicode and adopted by other terminals. Otty maps it to a native macOS notification with the title displayed as the notification title. - [OSC 8 — Hyperlinks](https://docs.otty.sh/vt/osc/osc-8): Wraps a span of text in a clickable hyperlink. The link target stays attached to the cells until they're overwritten — so a hyperlinked path stays clickable as it scrolls through the buffer. - [OSC 88 — Terminal Resume Protocol](https://docs.otty.sh/vt/osc/osc-88): When a terminal restarts — a crash, an OS reboot, an app upgrade, or just - [OSC 9;4 — Progress / Task State (ConEmu)](https://docs.otty.sh/vt/osc/osc-9-4): Reports the live state of a long-running task — a determinate percentage, an indeterminate spinner, or an error. ConEmu introduced this on the OSC 9 number with a leading 4 argument; it is a distinct sub-protocol from the OSC 9 desktop notification (the dispatcher branches on the 4; prefix). - [OSC 9 — Desktop Notification (iTerm style)](https://docs.otty.sh/vt/osc/osc-9): Posts a system notification with body text only. iTerm2 introduced this; Otty maps it to a native macOS notification (and Windows toast, when shipped). - [OSC 99 — Kitty Desktop Notification Protocol](https://docs.otty.sh/vt/osc/osc-99): Richer alternative to OSC 9 / OSC 777. Introduced by kitty so a single notification can carry a separate title and body, an urgency level, an icon, and stable IDs for replacement / chunked transmission. Otty maps every fully-assembled OSC 99 to a native macOS notification. - [VT Overview](https://docs.otty.sh/vt/overview): A reference for every escape sequence Otty interprets. Useful if you're writing TUIs, debugging a misbehaving program, or just curious what \x1b[31m actually does. - [Sequence Reference](https://docs.otty.sh/vt/sequence-reference): A searchable index of every VT sequence Otty interprets, sorted by category and final byte / mnemonic. Cells in the **Otty** column: ✓ implemented, ◐ partial, ☐ not yet. - [Terminal Comparison](https://docs.otty.sh/vt/terminal-comparison): How Otty's escape-sequence support compares to other modern terminals. Use this when porting a TUI between terminals or deciding which protocols are safe to rely on. ## Reference - [Accessibility](https://docs.otty.sh/reference/accessibility): Otty is a custom-rendered terminal, but it still exposes the parts of the app - [AppleScript Automation](https://docs.otty.sh/reference/applescript): Otty is scriptable with AppleScript, so you can drive it from osascript, - [CLI Reference](https://docs.otty.sh/reference/cli): Complete reference for the otty command-line tool. For scenario-oriented examples see Using the CLI in your Shell. - [Config File Format](https://docs.otty.sh/reference/config-file-format): The syntax of ~/.config/otty/config.toml. - [Otty Configuration Reference](https://docs.otty.sh/reference/configuration): Configuration file: ~/.config/otty/config.toml - [Credits](https://docs.otty.sh/reference/credits): Otty is built with the help of many open-source projects. Thank you to all the authors and contributors. - [Keybindings Reference](https://docs.otty.sh/reference/keybindings): The default key map shipped with Otty. Every action is re-bindable (and many ship unbound) — see Keybindings and **Settings → Key Bindings** to customize. - [Performance](https://docs.otty.sh/reference/performance): How Otty stays fast, what to measure, and what to tune. - [Theme Format](https://docs.otty.sh/reference/theme-format): Theme files at ~/.config/otty/themes/.ottytheme are **real TOML** (unlike the main config). Schema below. - [URL Scheme](https://docs.otty.sh/reference/url-scheme): Otty registers the otty:// URL scheme, so any link — a bookmark, a menu-bar