Version 3.7.5 was built on October 14, 2026. Credit to Nimanou (nuved) for the right-to-left rendering, selection, and copy improvements in this release. Major New Features: - Floating Panes: a pane that floats over a tab’s split panes. Create one with Shell > New Floating Pane with Current Profile, or with a key binding or pointer action. Drag its title bar to move it and its edges to resize it. Hold Control while dragging to dock it into the split panes or move it to another tab or window. Window > Floating Panes can raise, dock, move and hide them. They are saved with window arrangements. tmux integration shows tmux’s own floating panes (tmux 3.7 and later; moving, resizing, raising and docking them needs tmux 3.8). - iTerm2 is now localized: the interface follows your Mac’s language and is available in Brazilian Portuguese, German, Japanese, Russian, and Simplified Chinese. - Support for the Program Status Protocol (OSC 7501), which lets a program report that it is working, waiting on you, done, or failed. The tab shows the most urgent status the program reported, along with its message and progress. A program reporting on several tasks at once gets them listed under its session in the Session Status tool, and each task that needs you can post its own notification. - Session Status has new “done” and “error” statuses for work that finished or failed while you were away. They sort just below “waiting”, above “working”, and “idle” now sorts last. Pressing a key in the session marks the result as seen and turns it idle. Claude Code now reports a finished turn as “done” and an API error as “error”. Customized priority lists get the two new statuses added below “waiting”, notifying if “idle” did. New Features: - Ollama is now a first-class AI provider alongside OpenAI, Anthropic, Gemini, and DeepSeek. Choose it in Settings > General > AI and iTerm2 lists the models installed on your local Ollama server, reading each model’s context window and capabilities (thinking, tools, vision) from the server, so there is nothing to configure. You can pick one model for chats and a smaller one for quick background tasks. For a server on another machine, use the new “Ollama (auto-discover)” or “Ollama (native)” presets, or the manual model editor’s new Fetch Models button and Vision checkbox. The native API type, formerly named “Llama”, is now named “Ollama”; it sizes the context window to your prompt so long prompts are no longer silently truncated, and the chat’s Think toggle now controls whether a reasoning model thinks. - ⌘Z now undoes text editing in the field you’re editing (the composer, browser address bar, annotations, notes, and AI chat), and ⌘⇧Z redoes. Undo Close is now solely Shell ▸ Undo Close (⌘⇧T). The first time you press ⌘Z with a recently closed session still restorable, a one-time notice explains the change and lets you choose Undo Close or a regular undo. - The Session Status tool can now follow Codex CLI as well as Claude Code. There is no installer for Codex yet: in ~/.codex/hooks.json, point each hook event at a script that runs the cc-status tool from the utilities folder inside iTerm2.app’s Resources with --agent codex, and set timeout to 3 on the Interrupt and SessionEnd hooks. The tab then shows Codex’s status and a progress indicator through each turn. Codex also reports a finished turn as “done” and an API error as “error”. - The Cockpit can now send a command to many sessions at once from a composer docked along its bottom. Type @ to pick a session, tab, or window (selecting rows in the list does the same), then type the command and press Shift-Return to send it to every chosen pane. The Cockpit also now shows each session’s live status and detail line in every grouping, and a filter bar along the top narrows the list to one status. - A new “Set Profile Setting” trigger action turns a profile checkbox on or off for the session. Paired with Job Started and Job Ended matches it gives declarative “while this job runs” logic. - A new “Prevent sleep” profile setting keeps the Mac from idle-sleeping while a session with the setting enabled exists. Combine it with the new “Set Profile Setting” trigger action to keep the Mac awake only while a long-running job, like an AI coding agent, runs. It applies only while the Mac is on AC power. - AI chat can now set a timer to act after a delay or at a set time (for example, “in two hours, run this command”). The timer survives restarts, fires immediately if its time already passed, and can push your phone when it fires. - You can now press Cmd-F in an AI chat to search the current conversation. A find bar appears at the top with match counts and next/previous navigation; matches are highlighted in place. Supports smart-case, case-sensitive, and regular expression modes. - Right-clicking your own message in AI chat now offers Delete, which removes that message and everything after it. Edit, Fork, and Delete are also available when right-clicking inside the message text. Editing or deleting a message now also syncs to a paired iPhone viewing the same chat (and the phone can delete messages too). - New OSC 1337 codes let a program move and resize its window across monitors using global coordinates: SetWindowFrame=x;y;w;h sets the frame, while ReportWindowFrame and ReportScreenFrames report the current frame and the layout of all displays. Unlike the older CSI 3;x;y t sequence, these are not limited to the monitor the window is already on. - The OSC 1337 SetColors escape sequence now accepts a palette index as the value, written i:N where N is 0-255. Indices 0-15 follow the loaded color preset and light or dark mode, so a program can set the badge or tab color to track the preset instead of hardcoding an RGB value. For example, SetColors=badge=i:3 uses ANSI yellow. Issue 12991. - iTerm2 now answers CSI 16 t (report character cell size), which was previously ignored. - Each profile can now choose what its bell sounds like, in Settings > Profiles > Terminal > Bell sound. Pick one of the sounds installed on your Mac or choose “Other…” for any audio file of your own, and give noisy sessions a bell you can tell apart from the rest. - There is a new “Centered, No Title Bar” window style, in Settings > Profiles > Window > Style and in the Window > Window Style menu. It stays centered on the screen like the Centered style but has no title bar or window controls, which is how Centered windows looked before 3.7.0. - Window > Lock Location pins a window to its current display and position. If anything moves the window it goes right back, and if its display is disconnected, as happens while a laptop sleeps, the window returns when the display comes back. Dragging the window turns the lock off. - The built-in web browser can now remember HTTP basic-auth user names and passwords. Check “Remember this password” in the sign-in dialog and it is saved in the browser password manager (Keychain, 1Password, and the other supported back ends) and offered automatically next time. The dialog also has a Password Manager button to pick an existing login. View or remove saved passwords from the password manager. - The Compact and Minimal themes, which have no title bar, can now show the window name beside the tabs. It appears once you name a window with Window > Edit Window Title, so windows you haven’t named look the same as before. Double-click the name to rename the window. - The workgroup toolbar can show an AI Usage gauge with your Claude subscription’s session and weekly usage as progress bars. Add it to a session’s toolbar in the workgroup settings and choose how often it refreshes; it reads the numbers by running the Claude Code command-line tool. You can point it at your own command instead. - New variables iterm2.workingSessionCount and iterm2.waitingSessionCount count the sessions whose status reads “working” or “waiting”. Use them anywhere interpolated strings work, such as badges, tab titles, and the status bar. - New setting in Settings > Appearance > General shows an iTerm2 icon in the menu bar, optionally followed by an interpolated string such as \(iterm2.workingSessionCount). - New per-profile setting “Use HDR cursor when available” in Settings > Profiles > Colors. When on, a white cursor renders brighter than white on an HDR-capable display, with either the GPU or the legacy renderer, and a slider sets how bright it gets. - Apps can now control right-to-left text reordering with the BDSM and SCP escape sequences. CSI 8 l enters explicit mode, in which text is drawn exactly as written, and CSI 8 h returns to implicit mode. This keeps full-screen apps that lay out their own text from being scrambled. CSI 1 SP k and CSI 2 SP k make reordered lines left-to-right or right-to-left, and CSI 0 SP k restores the default. - it2 can now target the session showing a particular tmux pane. From inside a tmux Integration pane, pass --tmux "$TMUX" --tmux-pane "$TMUX_PANE" to session set-status, get-status, set-var or get-var. This also works on a host reached through SSH Integration. Claude Code’s status is no longer reported from a pane of a plain tmux session (one not using tmux Integration), since iTerm2 can’t tell which tab, if any, is showing that pane. - New `it2 session get-status` prints a session’s status indicator as JSON. `set-status` no longer requires --session and defaults to the active session. - A session status can now say when it stops being true. With it2 set-status --expires-on, a program gives the status to switch to once the work it describes is over, so a status doesn’t outlive a program that was stopped partway through. - The it2 command-line tool can now send a push notification to your paired companion device with “it2 notify «title» «body»”. Improvements: - A warning that iTerm2 shows while you are away from your Mac no longer cuts off your paired iPhone. The iTerm2 Buddy app stays connected, shows the warning, and lets you answer it, including “don’t ask again” and password prompts (a password manager’s master password, an scp password). Other kinds of dialogs can’t be answered from the phone, but it now says the Mac is waiting instead of appearing disconnected. Requires an up-to-date iTerm2 Buddy. - Pairing a companion iPhone no longer requires AI. The setup wizard (iTerm2 > Companion Device Settings) now lets you choose “Terminal viewing & control only”, so you can browse sessions, watch live output, and type from your phone without an AI plugin or API key. Chat features appear disabled with an explanation until you turn AI on. - If a profile archives sessions when they close (Settings > Profiles > Session), Undo Close keeps working after its time limit runs out. Archived sessions come back from their archives in their original split panes, tabs, and windows. The last 20 can be undone even after restarting iTerm2. - iTerm2 now recognizes when a terminal is running on your own Mac by machine identity rather than by hostname, so features that only work locally keep working over a VPN or Tailscale connection where the hostname no longer matches. Reinstall shell integration (iTerm2 > Install Shell Integration) to enable this. - The AI timeout is now an idle timeout (the maximum gap between bytes received) rather than a cap on the total time a request may take. A slow but healthy generation, such as a reasoning model that is still thinking or a cold local model, keeps running as long as it makes progress, while a dead connection still fails. The default was also raised to 20 minutes. This fixes spurious timeouts against local Ollama servers. - The manual AI model editor can now set custom HTTP headers and an API key for each model, so an authenticated self-hosted or gateway endpoint gets its own Authorization header and key. Existing global headers are copied to your saved models. The new API key setting can send a provider’s stored key, a key entered just for that model, or no key. The default, Automatic, shows which key it picked and sends a provider’s key only to that provider’s own servers, so a gateway such as OpenRouter no longer receives your OpenAI key unless you choose it. Models you already set up keep sending the key they sent before. Issues 12975 and 13105. - Hidden hotkey windows no longer redraw at the full active cadence. Sessions with continuous output (builds, tails, agents) in a hidden hotkey window used to burn CPU and GPU rendering frames nobody could see, spinning fans on laptops. Hidden windows now drop to the background refresh rate and repaint the instant they are revealed. - iTerm2 no longer gradually slows down when left running for days. The Snippets and Jobs tools no longer rebuild their lists every time you switch tabs, and the Script Console now keeps only the 200 most recent finished scripts and API connections; tools that connect once per command, like it2, had piled up thousands of them. - Reduced idle CPU usage that previously grew with the number of open windows. - Typing in a session connected with SSH Integration is more responsive on slow or distant connections. When you typed faster than the network round trip, each keystroke waited for the previous one to be acknowledged before it was sent. Issue 13013. - The session list in iTerm2 Buddy now updates live as sessions are opened, closed, or renamed on the Mac. It used to change only when you reopened it or pulled to refresh. Requires an up-to-date iTerm2 Buddy. - The built-in AI model list is up to date. It adds GPT-6 Astra, GPT-6.1 Sol, GPT-6 Sol, GPT-6 Luna, GPT-5.4 Pro, GPT-5.4 mini, Gemini 3.8 Flash, DeepSeek Flash (V4.1), Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1, Claude Opus 5, and Claude Fable 5, and the recommended model for each provider is now its newest flagship. Newer Claude models also get their full 1 million token context window. o4-mini, which OpenAI is shutting down, has been removed. - The Move Tab Left and Move Tab Right shortcuts now move just the current tab instead of its whole tab group. Moving a tab past the edge of its group pops it out of the group, and moving an ungrouped tab into a neighboring group adds it to that group. - Dragging a tab into a collapsed tab group now adds it to that group. The group stays collapsed unless you dragged the active tab, in which case it expands. While you drag, the group's pill highlights to show the tab will drop inside it. - Duplicate Tab now opens the copy immediately to the right of the original tab instead of at the end of the tab bar. - The password manager’s settings menu now offers a single choice of how often to ask for Touch ID or your password: never, once per launch, once per launch and after the screen locks, or every time it opens. The new “every time it opens” option also closes the password manager when the screen locks. - Focus Follows Mouse no longer takes focus away from the find bar, composer, or other fields in a pane by accident. To have focus follow the pointer onto those views and back onto the terminal, turn on “…even to views like Search or Composer” under Settings > Pointer. - Uploads over SSH Integration are about three times faster. - “Upload and Paste Path” now works in tmux integration windows reached through SSH Integration, and before shell integration has reported a directory (the file goes to your home directory). Pasted screenshots are converted from TIFF to PNG and each gets a unique name. - Dropping files into a session connected to a remote host now offers Paste as Text for a text file, which types its contents, and “Upload and Paste Paths” for several files, which uploads them all and types their remote paths. Local paths are no longer offered there, since they name nothing on that host. - AI command suggestions can now recognize when you have typed a plain-English request instead of the start of a command. In that case the suggested command replaces what you typed rather than being appended to it. - Right-clicking a tab now offers Rename Tab, which opens the same dialog as double-clicking the tab. - “it2 session list” takes a --format option: an interpolated string evaluated in each session, such as '\(session.path)'. It prints one line per session, or with --json adds the result to each session as “formatted”. This lists every session’s directory or job in one command. - Pausing a spinning progress indicator with OSC 9;4;4 now shows a paused spinner: a still yellow band in the session and a pause symbol in the tab, instead of a yellow bar at 10%. - The git branch shown in the session toolbar can now be right-clicked to copy its name, or dragged into a text field to paste it (or dropped on the Finder as a text clipping). Available only while a branch name is showing, not during a rebase or similar. - The Current Directory status bar component’s folder icon is now a proxy icon: drag it to another app to drag the session’s working directory, like the proxy icon in a window title bar. - The Interpolated String status bar component now shows [undef: x] for a reference to an undefined variable instead of silently rendering an empty string, making typos and unavailable variables obvious. Use \(x?) to treat a missing value as empty. - The session’s status is now available in the session variable “status”, so you can show it in a badge, title, or status bar component. - AI chat asks for approval less often when it types a message you dictated into another session, such as telling a coding agent to re-run its tests once a watched session finishes. - The Session Status toolbelt tool now lists Claude Code sessions running inside tmux Integration panes on this Mac. They never appeared before, and their status went unreported to the rest of the app. Issue 13049. - If you launch a second copy of iTerm2 while one using the same settings is already running, iTerm2 now warns you that the two could overwrite each other’s preferences and saved windows, and offers to quit and switch to the running copy or launch anyway. - Browser tabs now show a title (page title, or the host, or the profile name) instead of a blank tab and window title. - In the minimal theme, a browser tab's light or dark appearance and tint now follow the page's background color instead of the profile's terminal background color. - The Session Status toolbelt tool has a snooze button next to the notify button that toggles snooze on the selected session. - The Companion setup wizard no longer asks for an API key when AI already works, or when you chose a model manually in Settings > General > AI. If that model isn’t set up yet, the wizard says so and lets you finish setup anyway. - AI command safety checks now use your provider’s smaller, cheaper model when one is available, so they cost less. - Settings search now reveals controls that live on an inner sub-tab (such as AI > Features). It switches to the correct nested tab before highlighting, instead of dimming a bogus area. - With the tab bar on the left or right, the tab and tab group context menus now say “New Tab Below” and “Close Tabs Below” instead of “to the Right”, matching the direction the tabs actually run. The confirmation for closing the tabs after a group follows suit. - The About window now follows the current theme, updating live when you switch between light and dark. On macOS 26 the backer list sits in a rounded container matching the sponsor cards; before that, dark themes get a frosted-glass look. Bug Fixes: - Opening an Instant Replay recording no longer applies settings embedded in the file that could run commands, such as triggers. Only appearance settings like colors, fonts, and cursor style are taken from a recording. Issue 13128. - Answering “Always” to “Close tmux windows after detaching?” now closes only the tmux integration windows left open by the detach. It used to close every session in the app. - Restarting or logging out of macOS while Claude Code was running in iTerm2 could cause your windows not to be restored at the next login. Claude Code’s status updates could relaunch iTerm2 just as it was quitting, and that brief launch replaced the saved windows. - After iTerm2 restarted with your sessions restored, which happens after an update, a crash, or a force quit, commands in newly opened sessions could fail to reach devices on your local network with “No route to host” until you quit and reopened iTerm2. New sessions now get local network access right away. Sessions restored from before the restart still need to be restarted to regain it. Issue 12106. - When an SSH Integration connection dropped, for example because the ssh process or the remote server was killed, the session hung: nothing you typed afterward appeared. It now ends the connection and returns to the local shell. - Stopping an AI chat reply while another chat is also replying no longer cancels the other chat’s reply, and the stopped reply now really stops downloading instead of running (and using up tokens) until it finishes. - Fixed various crashes, including ones when splitting, maximizing, swapping, or rearranging panes in a tmux integration window left open after detaching; when a maximized split pane was torn down, such as when a tmux connection dropped; at every launch when a profile’s name began with a combining character; when a trigger had no regex, such as an event trigger written by hand in a Dynamic Profile; when opening a tab while a paired iPhone was connected; and when saving a debug log that captured malformed text. - Pressing space twice in a terminal no longer types a period when macOS’s “Add period with double-space” setting is on. In vim this could repeat your last command. Issue 13123. - iTerm2 no longer applies macOS’s automatic spelling correction, capitalization, or smart quotes and dashes. They could change what you type in a terminal. Text replacements still work. - A tab name you set yourself with Edit Tab Title is no longer replaced by the session’s name whenever the tab’s subtitle changes or its label is otherwise refreshed. Issue 13072. - Make Text Bigger works again when you type it as ⌘⇧= (the way you type ⌘+). Since 3.7.0, that keystroke opened the Clippings panel instead, because Show Clippings had claimed it. Show Clippings is now ⌘⇧⌥G. Issue 13022. - In a session that ssh'ed to another machine without ssh integration, the current directory (and paths used by Upload and Paste Path) no longer switches to the local Mac's directory after you run a command. - Fixed restored sessions bringing lines that had been erased by a clear screen back onto the screen, above the newer output, with the cursor in the wrong place. - On macOS 26, hiding a hotkey window when no other iTerm2 windows are open once again returns focus to the previous app right away, so text you type immediately afterward no longer goes to the terminal. - A hotkey window set to appear on all spaces no longer switches you to a different space when revealed after reopening the laptop lid. It is now revealed on the current space and rejoins all spaces afterward. Issue 12968. - Fixed a bug on macOS 26 where pressing Cmd-Tab to leave a full screen window would flash the other app and immediately switch back to iTerm2, sometimes leaving you unable to change apps without the mouse. This affected windows using the older full screen style with menu bar hiding turned on. - Fixed dark triangles that could appear over a background image near the edges of the window with the GPU renderer. Issues 12604, 12642, 12653, and 12791. - Fixed “Remember my choice” applying the wrong choice in the dialog that appears when you paste a file, folder, or image. The answer was remembered by button position, so a choice saved for a local file could turn into a different button in a session connected to a remote host, silently uploading the file. Each set of choices the dialog can offer now remembers its own answer, so silencing it for a local file no longer silences it for a folder or for a remote host. Any answer you had saved for these dialogs is cleared, so you will be asked once more. - Fixed a beachball with a large file, or a file on a slow disk, copied from the Finder. Opening Edit > Paste Special read the whole file just to decide whether to enable Paste File Base64-Encoded, and pasting read it again before offering the paste options. Opening the menu no longer reads the file at all, and pasting looks at only the first 50 KB. - Fixed a lag when switching or closing tabs with the Session Status tool open in the toolbelt. - Fixed a rare race where a new session could silently lose some of the first output it received. - Attaching with tmux Integration no longer fails when a pane’s scrollback contains raw tmux control-mode text (for example, from an earlier tmux -CC run in a terminal without tmux Integration). iTerm2 mistook a %exit line in that text for tmux quitting, dropped the connection, and printed the rest of the protocol stream into the window. - In a tmux Integration session, keys such as Shift-Enter are now encoded the same way before and after a detach and reattach. Previously a pane could encode them one way before a detach and another way after, until the app was restarted. With tmux 3.9 or later, iTerm2 lets tmux encode each key for the app in the pane, including with the Kitty keyboard protocol. Issue 13076. - In tmux integration, a layout change made by tmux while Find > Filter was open on a pane no longer hides pane %0 or moves keyboard focus away from the filtered pane. - In tmux integration, a new pane now picks up user variables, the host name, the current directory, and the shell integration version that its shell reported while the pane was opening. Before, a badge such as \(user.host_name) stayed empty until the shell showed its second prompt. Issue 13006. - In tmux integration, a window created with “tmux new-window -d” now opens as a background tab instead of taking focus. Issue 13112. - In tmux integration, iTerm2 could miss a window switch made by another tmux client or a script and keep showing the old tab. - Fixed tmux integration sessions not resizing when the tab bar hides or shows in full screen with “Hide tab bar when there is only one tab” enabled, which left an unused strip at the bottom of the window. - When a tmux integration window first loads, its tab now shows the finished title right away. It used to briefly show a bare session name, with neither the “↣” marker that flags a tmux tab nor the second line under the title. - Stopped falsely offering to reset the key reporting mode after every command when your shell turns the keyboard protocol on and off itself, as Fish 4 does. 3.7.2 fixed this only for Fish with oh-my-posh. - Fixed slow replies to cursor-position and other status queries. Programs that send many of them at once, such as during capability detection, waited seconds instead of milliseconds. Issue 13035. - Fixed Kitty keyboard protocol base-layout reporting for non-US keyboard layouts, so shortcuts such as Ctrl-C work without switching layouts. - With “Report keys using CSI u” turned on and Option set to Meta, pressing Option with a letter sent nothing at all. It now sends the meta byte, as it does without CSI u. - Fixed a bug in the Kitty graphics protocol where transmitting a new image under an image id already in use kept drawing the old image in places that already showed it. The newest image is now used, so one program no longer shows a stale picture left behind by another. - Fixed double-width and double-height lines (ESC #3, #4, and #6) staying double-sized after the line was erased, scrolled, or reset. A full-screen program that drew a large title and then repainted could show giant, clipped text where ordinary text belonged; entering the alternate screen, Reset, and Clear Buffer left the same stale lines behind. - Fixed a bug where a subparameter written after a full CSI parameter list was dropped even though it belonged to a parameter that had been stored, such as the 16th. - Parentheses, brackets, and other mirrored punctuation now draw correctly in right-to-left text, so a bracket around an English phrase inside Persian is handled the same way as in other Mac apps. - Fixed misplaced letters in right-to-left words that combine a lam-alef ligature with a diacritic, such as the Persian کاملاً and لطفاً. - Selecting part of an Arabic or Persian word no longer breaks its cursive joining. Previously a selection or a mid-word color change split the word (for example کامل) into isolated letter forms. Arabic and Persian text could also sometimes be drawn with each letter in its isolated form. - Selecting text on right-to-left lines now selects exactly the columns you drag over. Previously dragging over a line with embedded English or digits could highlight a different, broken-up span, and the first or last character of a right-justified line could be impossible to select. Copied text stays in reading order, and extending a selection across several lines follows each line’s direction. - Fixed a bug where a skin-toned emoji like 👍🏻 was drawn as the plain emoji followed by a separate color swatch, taking four columns. It is now a single emoji two columns wide, matching other modern terminals. - Fixed text written over the right half of an emoji or other wide character landing two columns too far to the right, a bug introduced in 3.7.3. - Find now matches text that spans a blank the program created by moving the cursor instead of printing a space. Before, searching for more than one word could fail on output from programs like Claude Code even though the words appeared separated by a space. - Resizing a window while only blank space was selected left behind an empty selection, so Copy and other selection-based actions acted on nothing. - Fixed a bug where a smooth-blinking cursor passed through light gray while fading in the GPU renderer instead of fading directly to the background color. Issue 12990. - The “Animate large movements” cursor option no longer streaks a cursor-colored trail across the screen when a program such as top redraws the screen on its own. The animation now plays only for cursor jumps that follow your own keyboard or mouse input. - Fixed a bug where pressing Backspace while composing text with an input method such as the Korean 2-Set IME could leave a stray character behind that needed an extra press to remove. Pressing Return while composing now submits the line in one press. - Voice Control corrections, like “replace world with there”, now replace the text when it ends at the cursor. Before, the new text was typed after the original. Corrections elsewhere, or in full-screen apps like vim, are ignored. - Key bindings saved by older versions of iTerm2 no longer fire when you press A while “Interpret key bindings based on physical key” is on, which could make the A key stop typing. iTerm2 also no longer mistakenly offers to turn that setting on when you press a shortcut like ^A. Issue 13110. - Pasting or dropping a file or image into a local tab no longer offers only to upload it when another tool in your shell (such as oh-my-zsh) reports an outdated host name. When iTerm2 can’t be sure a session is on another machine, the paste dialog now also offers to paste a local path. Issue 13117. - Dragging a file into a local terminal now inserts its path on VPN or Tailscale networks, where it had instead been offering to upload the file. Requires the updated shell integration scripts. - The file paste options (Paste Path, Paste Paths, and Upload and Paste Path) now honor the “When pasting a dropped filename, wrap it in double quotes” setting in Settings > General, as dragging a file into a local session already did. They previously always used double quotes, ignoring the setting. - Uploading several files at once to a host you connected to with an SSH profile now uploads all of them instead of only the first, and “Upload and Paste Path” now pastes the path the file actually landed on, such as “name (2)” when the name was taken. - Cancelling an upload over SSH Integration no longer leaves a temporary file on the remote host or gets stuck at “Cancelling…”. - Archive Sessions on Closure failed with “The file doesn’t exist” whenever the session’s name contained a slash, such as a title that shows the tty or the current directory. Slashes and other characters that can’t appear in a filename are now replaced with underscores, the time in the archive name uses periods instead of colons so Finder shows it correctly, and very long names are shortened to fit. The same cleanup now applies to automatic session log filenames, which used to handle only slashes. Issue 13094. - Archive Sessions on Closure failed with “the volume is read only” when no archive folder was chosen. Turning it on with an empty folder now fills in ~/Library/Application Support/ iTerm2/Archives, and profiles that already have it on with no folder archive there. Issue 12980. - Fixed several bugs archiving sessions on close: sessions closed shortly before quitting are now always archived, split panes with the same name are all saved instead of only one, and closing an archived session soon after opening it no longer warns that it ended very soon after starting. - Duplicate Session no longer stamps a permanent working-directory override on the new session. Previously that override was inherited by split panes and could go stale, dropping the shell in the wrong directory. Issue 12981. - The SCP-download menu animation no longer leaves an invisible window behind. That stray window could make clicking the Dock icon fail to open a new terminal after the last window was closed. Issue 12996. - Fixed a bug where auto-update failed with a message about running from the download location when iTerm2 was unzipped or moved to an Applications folder from the command line rather than dragged in the Finder. iTerm2 now fixes this automatically on launch, and no longer offers to move a copy that is already installed. - Semantic History can once again open files in Xcode when the active developer directory is set to the Command Line Tools rather than Xcode. It used to show a “Semantic History Command Failed” alert instead. Issue 13091. - Semantic History could open the wrong file in TextMate, BBEdit or MacVim when the path contained a space, an ampersand, or another character with special meaning in a URL. - “Open Selection as URL” now works on links without a scheme, like example.com/path, and is hidden when the selection isn’t a URL. Issue 13092. - Opening a link from a browser tab in a tab group (with “Open in New Tab” or a link that wants a new window) now puts the new tab in that group instead of leaving it ungrouped in the middle of the group. Issue 13029. - The control sequence that resets a tab color to the profile’s now restores it correctly when the profile has separate light and dark mode colors but its Tab Color predates them. It could leave the tab with a color you never chose, often red, or with no color at all. Issue 13058. - On macOS Tahoe, the progress ring around a tab is no longer missing from the first and last tabs. A tab that is partly scrolled under the window controls now keeps the visible part of its ring, and its activity indicator, instead of losing them entirely, and the ring stays within the tab bar’s rounded ends rather than drawing past them. - Fixed the git ahead/behind arrows in the session toolbar and the git status bar component staying black in dark mode instead of matching the text color. - On macOS 26, Maximized and Centered windows, and windows opened for a single command, now show the tab bar in the title bar like ordinary windows. Before, their tab bar background didn’t match the title bar and a dark line separated the two. - With the Minimal or Compact theme and no tab bar at the top, the window buttons that appear when you point at the window’s top-left corner no longer cover a status bar or Workgroup toolbar there, which made its leftmost item impossible to click. A small arrow appears in the corner instead; click it to show or hide the window buttons. Issue 13100. - Fixed a bug where dismissing a confirmation in certain Settings sheets (such as the hotkey configuration or special exceptions panels) would bring a terminal window to the front. - Help popovers, such as the ones shown by the ? buttons in Settings, no longer cut off the last line of text, and no longer scroll when all of their text fits. - Choosing Show Session Note from Open Quickly no longer makes an empty note appear briefly and then disappear. - When no valid UNIX locale matches your language and region, the prompt to pick one now appears as a normal dialog the first time a hotkey window opens, instead of as a sheet on the not-yet-visible window. - Pairing a companion iPhone no longer fails on networks that can’t reach iterm2.com. iTerm2 now falls back to a second copy of its list of relay servers. If neither can be reached, the pairing window says so and suggests another network; hover over the message to see what went wrong with each server. - Installing the Claude Code Integration now honors $CLAUDE_CONFIG_DIR, so per-tab status indicators work for people who keep Claude Code’s settings outside ~/.claude. It used to always install into ~/.claude, where Claude Code never looked. - The Claude Code Integration no longer warns that it looks broken when you edit its hook commands in Claude Code’s settings.json to use $HOME, ~, or a wrapper script. Reinstalling also keeps such commands instead of adding a second copy of each hook. Uninstalling and reinstalling leave a hook command alone if it runs other programs besides the integration’s, and Uninstall lists any it left in place. - Installing, reinstalling, or uninstalling the Claude Code Integration now updates the file that a symlinked settings.json points to (as with GNU Stow or chezmoi). It used to replace the link with a plain file that other users could read, and Claude Code stopped seeing edits to the original file. Issue 13098. - Installing or reinstalling the Claude Code Integration no longer replaces a Claude Code settings.json that has a syntax error, which erased all your other Claude Code settings. It now leaves the file alone and asks you to fix it and try again. - Interrupting Claude Code with Esc now returns its Session Status to idle. The tab kept reading “working”, or “waiting” if a permission prompt was open, until the next thing you asked it to do. - Fixed Notify on Status Change reporting that a session changed from “none” when its status had already been set before you turned the notification on, and alerting when a program merely restated that status. - Debug logs no longer include passwords sent to or received from password manager integrations, AI API keys, or the values of custom HTTP headers configured for AI models. - The Bitwarden, KeePassXC, and Keeper password manager integrations now find command-line tools installed by Homebrew or npm on your shell’s search path instead of asking you to locate them. Homebrew’s “bw” is a script that needs “node”, which the integration could not find, so Bitwarden showed an empty list. - If you choose a password manager’s command-line tool by hand, iTerm2 now keeps the path you chose, so it keeps working after the tool is upgraded. - The Bitwarden integration now reports the Bitwarden CLI’s own error message instead of showing an empty list or a vague error. It lists only items in a Bitwarden folder named “iTerm2”, and now says so when your vault has no such folder. - Fixed a bug where the manual AI model editor’s Test Connection button ignored the “Supports temperature” toggle and always sent the temperature parameter, failing against endpoints that reject it. - Fixed a bug where the manual AI model editor’s Test Connection button sent your API key to an AI endpoint on your local network, even though real requests never do. An authenticated local server could report a successful test and then reject every chat message. The test now behaves like a real request, and names the header to add under Custom headers when the endpoint wants a credential. - Fixed a bug where the host in an AI model’s URL was compared letter for letter, so its capitalization, or a trailing dot, changed which API key was sent. A local address written that way (http://LOCALHOST:11434) was not recognized as self-hosted and received your provider key, and a provider address written that way (https://API.DEEPSEEK.COM) was attributed to OpenAI, so the wrong key was sent. - Fixed a bug where a custom HTTP header for AI requests whose name differed only in capitalization from one iTerm2 sets itself (such as “authorization”) was sent alongside the built-in header instead of replacing it, leaving it to chance which value the server saw. - Fixed a bug where turning on “Use AI to check safety of commands before running them” on a Mac without Apple Intelligence was turned back off the first time you used AI chat, which then asked whether to enable it again. - Fixed a bug where, if the AI asked for permission in a chat and you ignored the request and sent a new message instead, the chat would stop responding. - Fixed a bug where an AI chat permission button (such as “Check terminal state”) did not update its label after you changed the setting, and re-clicking it appeared to do nothing. - Fixed a bug where quitting iTerm2 unlinked each AI chat from its terminal session and canceled what the chat was watching, even when window restoration brought the session back at the next launch. - Editing an AI chat message now fully removes the later conversation, so the AI no longer sees leftover command results from it. - Stopping an AI chat reply and then sending another message no longer shows the rest of the stopped reply as the answer to the new message. - The API key field shown when AI features ask for a key now hides what you type instead of showing the key in plain text. - In AI chat, a reply that mentions two or more sessions now shows each one as a clickable link. Before, the session names could turn into plain, unclickable text. - Fixed Tab.async_update_layout in the Python API making a browser pane many times too big, squeezing the panes beside it, and sometimes crashing iTerm2. - Fixed the Python API reporting an underline color, block ID, or hyperlink on cells that did not have one. The first plain cell after a run that had one was described as part of that run, so scripts reading screen contents saw the attribute spill past where it ended. - iTerm2 writes to disk less often while it saves window state for restoration. A setting meant to reduce this had been silently turned off. - Installing shell integration without internet access now works on systems that don’t have bash, such as FreeBSD and OpenBSD. Before, the installer could hang partway through writing the script when your shell was tcsh. - The Internet-Free Install of shell integration no longer gets stuck at its first step for zsh users, and that step can no longer be skipped, which made later steps write to an invalid path.