Appearance
Changelog
All notable changes to Otty.
1.3.1
July 27, 2026
Bug fix
- Fixed Copy returning the terminal's first line in a freshly opened window — mouse selection resolved a few rows above the pointer until the window had been on screen for a moment.
- Fixed
Shift+click and Shift-drag inside a mouse-tracking program selecting most of the viewport instead of extending from where you clicked. Esccloses the fzf window opened withCtrl-Ragain.- Fixed ligatures rendering squeezed and detached in split-style fonts such as Zed Mono and Fira Code.
- A program killed mid-session no longer strands the terminal on the alternate screen, with mouse reporting on, or with the cursor hidden — that state is reclaimed at your next shell prompt.
- Fixed
Ctrl+Shift+Tand other Kitty-protocol chords silently degrading to their legacy form inside agent CLIs that mark up their own output. - Fixed the SSH Files panel sitting on "Waiting for SSH authentication" for the rest of the session when its first probe lost the race.
- Fixed session restore replaying a screenful of prompt fragments in panes where no command ever ran, with two-line prompts such as powerlevel10k and starship.
- Fixed scrollback being dropped on restore under bash when starship, atuin, or ble.sh claims the
DEBUGtrap. - Fixed
config.tomlcollecting one more(reset to default)comment on every font zoom cycle. Config writes are atomic now, so a crash mid-write can no longer truncate the file. - Directional pane focus remembers where you came from: leaving a stacked pane and coming straight back lands on the pane you left.
Download for macOS (Apple Silicon)
1.3.0
July 24, 2026

New
- Sixel graphics — inline bitmap images from
chafa,img2sixel,lsix, and anything else that speaks Sixel, alongside the existing Kitty image protocol. Learn more. - More coding agents — Cursor CLI, Kimi Code, Pi, and omp join the built-in integrations, with session resume, history viewing, and fork where the agent supports it. Learn more.
- Vim keys in the editor — modal editing in file panes and in the agent history pager, toggled from the Command Palette (Editor Vim Keys).
- Mark Tab — set an unread, processing, or failed badge on a tab by hand, from its context menu or the Command Palette. A tab marked Processing flips to unread the moment its next command or agent turn finishes.
- Scripting a live pane —
otty pane send-text,otty pane run, andotty pane exectype into a pane, run a command, and report the process state back to a script or an agent. Learn more. otty://links — a deep-link URL scheme that focuses a specific window, tab, or pane. Learn more.- Editor crash recovery — unsaved file-pane edits and their dirty state come back after a crash.
- Clipboard consent — allow, ask, or deny when a program reads or writes your clipboard (Settings ▸ Advanced).
- Mouse-mode bypass keys — choose which modifier hands the pointer back for selecting text or opening a link inside a mouse-tracking program (Settings ▸ Controls).
- Per-shell integration toggles — turn shell integration on or off for zsh, bash, and fish individually, with the master switch following your default shell.
- Resizable Settings panel, and the UI font size now scales every piece of chrome text.
- Never confirm on close — a Never option for the close confirmation, plus an option to hide the unsaved-changes dot in the window's close button.
Improvement
- Splitting an SSH pane now reconnects to the same host and remote directory instead of dropping back to your local home folder.
- The agent history viewer is fully keyboard navigable, and agent integrations in Settings are now a compact per-agent list.
- The Git panel bounds its refreshes, so large or very dirty repositories no longer pile up
gitprocesses. - Terminal compatibility improved with Sixel and
XTSMGRAPHICSreporting, fullDECSCUSRcursor-shape and blink control, reverse-video screen mode, focus reporting, OSC 52 clipboard reads, notification urgency, and colour save/restore that also covers the palette a program set with OSC 10/11/12. - The Git sidebar disables Commit on a clean tree and no longer asks you to confirm a Fetch.
Bug fix
- Fixed a blank flash while typing with an IME in agents that repaint the whole screen.
- Fixed glass and vibrancy materials turning black in native full screen.
- Fixed a crash when double-clicking a small file in the SSH file panel.
- Fixed memory growing over long sessions — every pane rebuild stranded a scroll overlay and a wake box.
- Fixed a cancelled pane drag leaving
Escdead app-wide until restart. - Fixed mouse selection landing on the wrong lines while scrolled back.
- Fixed ligatures being squeezed and underlines cutting into glyphs on non-Retina displays.
- Font Ligatures off /
calt/dlignow actually take effect. - Fixed shade blocks rendering double-composited, and wide glyphs with overhang being clipped.
- Fixed an image sequence split across two reads swallowing the output that followed it.
- Fixed a Sixel redraw storm that could hang the terminal.
- Pagers on the alternate screen scroll with the wheel again.
- Fixed a dirty TUI exit leaving you stuck on the alternate screen with mouse reporting on.
- Pasted text containing an embedded end-of-paste marker can no longer inject input into the shell.
- Fixed the shell prompt being stranded after a resize.
- Font scale is preserved across tab switches, and tabs sorted by update time keep a stable order.
- New panes are sized to the pane area instead of the whole window.
- Fixed folders that are symbolic links listing as empty in the Files pane.
- Thin drag targets are now as wide as they look.
Ctrl-Spaceis forwarded to the terminal.- Claude session history and Outline now resolve inside Git worktrees.
- Autocomplete no longer loses the first character of a command when the prompt redraws narrower.
- Shell integration survives a pre-existing alias on a wrapped name instead of producing a zsh parse error.
- Kimi Code is detected when it is only on your interactive-shell
PATH. - Fixed a crash refreshing Git status in huge repositories with many dirty submodules.
- Child processes can request microphone access.
- A manual Mark Tab ▸ Unread dot stays visible on the active tab.
⌘Jin Open Quickly switches to the Current filter instead of dismissing it.- Directional pane focus follows true border adjacency, so neighbours are never skipped.
- Vertical sidebar tab order stays stable when focus moves between split panes.
- Custom agent commands survive a session resume, and an opencode session no longer reports busy after it has gone idle.
Download for macOS (Apple Silicon)
1.2.3
July 7, 2026
Bug fix
- The Composer now renders the text you type and keeps it readable against its background, including on macOS 15.
- Fixed open terminals only partially repainting when switching the dark-mode theme.
- Applying a theme from the Command Palette in dark mode now updates the active dark slot.
- Duplicating a theme auto-numbers the copy (Copy, Copy 2, Copy 3) instead of colliding on the same name.
- Claude session history no longer shows up empty for project paths that contain dots, underscores, or spaces.
Download for macOS (Apple Silicon)
1.2.2
July 3, 2026
New
- AppleScript automation — open tabs, run commands, read a tab's visible contents or history, check whether a tab is busy, and set custom tab titles from scripts.
- VoiceOver accessibility — the terminal viewport, selections, cursor position, tab rows, pane controls, toolbar buttons, and custom-drawn chrome are all narrated.
- BiDi / RTL text — Hebrew, Arabic, and mixed-direction lines are reordered visually, while copy, paste, find, and scrollback stay in logical order.
- Global hotkey — a system-wide shortcut brings Otty to the front, opening a window if none is open (Settings -> Key Bindings -> Global Hotkey).
- New Window When All Windows Closed — keep a fresh terminal ready after the last window closes (Settings -> General).
- Notification sounds — opt-in sounds for terminal notifications and task state changes.
- Quit
<program>— stop a stuck foreground TUI straight from the Command Palette. - Dark-mode app icon — a new app icon that follows the macOS appearance.
modifyOtherKeys(XTMODKEYS) — disambiguated key reporting for programs that request it.
Improvement
- Added an install prompt when an agent integration is missing.
- Added Git sidebar support for changed submodules, including nested submodules up to depth 2.
- Added Reset to Built-in Version for stale built-in themes.
- Added dragging a pane corner to resize its width and height at once, with a diagonal resize cursor at split junctions.
- File drags can spring-load tabs after a short dwell, making cross-tab drops faster and easier to aim.
- Files tree folders now toggle when you click the folder icon, not only the disclosure triangle.
- Open Quickly finds more agent sessions, resumes agents after session reopen, and keeps the search query when switching filters.
- Read-only mode and Vi mode survive view swaps and rebuilds.
- Terminal compatibility improved with application keypad mode, backarrow key mode, and better Kitty keyboard-mode cleanup at the shell prompt.
- Shell integration now survives zsh/bash
noclobbersettings when dumping aliases and PATH. - Reopening Otty while it is already running now opens a new window instead of doing nothing.
- Double-clicking the standard title bar now zooms the window.
- Tab names now follow the shell's OSC 1 icon title and the window title follows OSC 2, with cleaner labels for truncated working-directory titles.
- Otty stays responsive during large reflows and Git status refreshes by moving PTY writes, resize reflow, and Git subprocess calls off the main thread.
Bug fix
- Fixed transcript-wide find in agent history and re-enabled the Find menu over file panes.
- Closed tabs are no longer resurrected from cached tab order on relaunch.
- Fixed Dvorak-QWERTY Command shortcuts by resolving shortcuts with
charactersIgnoringModifiers. - Fixed legacy modified Backspace, numeric keypad Enter, and macOS function-key private-use characters being sent incorrectly to the PTY.
- Fixed Indic, Thai, and other complex-script combining marks that could render doubled, smeared, or as duplicate rows.
- Fixed OSC 7 current-working-directory URI decoding for non-ASCII paths.
- Fixed tab rename and prefix actions applying to the focused pane instead of the tab.
- Fixed natural editing chords such as
Option-Delete,Option-Forward Delete,Option-Left, andOption-Right. - New tabs now inherit the live current directory, and tab badges show the real shell/process state.
- Fixed the
glass-darktheme material on macOS. - Pane drag handles are confined to the handle capsule while the rest of the title area remains usable for window drag.
- Toggling docked panels now reflows the terminal grid up front.
- Split panes now tear down individually when their shell exits.
Escis passed through to foreground programs instead of opening the autocomplete panel.open -a Otty <folder>now routes to a tab in that folder.--panetargeting now works across background tabs for send-keys, capture, and show commands.- Zoom resync no longer changes the effective font size.
- Prompt queue state survives view rebuilds and restart.
- Left/Right arrow caret movement is fixed for visually reordered BiDi text.
- File -> New Window/Tab and
Cmd-Nremain usable when no window is open. - Clear Screen no longer wipes the grid on the alternate screen.
- Custom keybindings can override
Cmd-S, and Open Quickly filter shortcuts are no longer stolen by menu bindings. - Fixed UI font-size round-tripping and submodule Stage All handling.
- Shift-click now extends the selection from the last click or the caret even when nothing is selected yet.
- Trackpad momentum scrolling no longer floods full-screen pagers with a burst of arrow keys after you lift your fingers.
- Multi-row Backspace/Delete now removes the whole selection reliably, and the caret collapses to the selection edge on arrow keys.
- IME composition no longer stretches or compresses CJK glyphs on the row being composed.
- Clearing the screen over a foreground program no longer leaves a literal
^Lbehind. - Fixed a spurious Claude "task complete" notification that fired once per subagent.
Download for macOS (Apple Silicon)
1.1.0
June 23, 2026
Improvements
- File ▸ Open Recent now records non-blank windows when you close them.
- Double-click the divider line in the tabs panel to set its text.
Fixes
- Image previews now render correctly in yazi.
- Fixed a freeze that could occur while running zellij or working over SSH.
- Resizing the window no longer leaves a stranded copy of the shell prompt.
- Fixed a crash when changing the tab-bar layout in full screen.
- Opening a folder from Finder on a cold launch now opens that folder instead of your home directory.
- Tab titles now follow the focused pane in split layouts.
- Oversized glyphs no longer overflow their cells; block, sextant, and Powerline glyphs render crisply.
- Option-as-Alt now applies to letter and symbol keys.
- Fixed a reverse-video block when typing CJK at an SSH prompt.
- Git status now decodes non-ASCII filenames correctly.
- The SSH file panel refreshes after you create a folder, and shows upload progress.
- The Composer re-focuses when clicked and shows the text you type.
- Smooth scrolling no longer leaves a partial-row offset after the layout changes.
Download for macOS (Apple Silicon)
1.0.4
June 18, 2026
Fix known issues.
Download for macOS (Apple Silicon)
1.0.1
June 10, 2026
The first public release of Otty for macOS.

Highlights
- GPU-accelerated rendering on Metal — smooth scrolling, ligatures, true color, and inline images.
- Tabs, splits, and panes with drag-to-rearrange layouts, live status badges, and unread dots.
- Session recovery — close the lid, reopen, and every pane is right where you left it.
- Command Palette (
⌘⇧P), Open Quickly (⌘⇧O), and inline autocomplete. - Recipes — save commands, layouts, and snippets, then replay them.
- First-class agent affordances — session history, fork & branch, the Composer and prompt queue, and send-to-chat.
Notes
- Native on macOS (Apple Silicon and Intel). Windows and Linux are on the way.