Version 3.7.4beta1 of iTerm2 was built on September 30, 2026. Credit to Nimanou (nuved) for the right-to-left rendering, selection, and copy improvements in this release. Major New Features: - iTerm2 is now localized: the interface follows your Mac’s language and is available in Brazilian Portuguese, German, Japanese, Russian, and Simplified Chinese. New Features: - Ollama is now a first-class AI provider alongside OpenAI, Anthropic, Gemini, and DeepSeek. Choosing it lists the models installed on your local Ollama server automatically, reading each model’s context window and capabilities (thinking, tools, vision) from the server, and newly pulled models show up on refresh. When Ollama is your default provider you pick which model to use for regular chats and an optional smaller one for quick background tasks. The chat’s Think toggle now controls whether a reasoning-capable local model thinks, and the context window is sized to your prompt so long prompts are no longer silently truncated. A non-local Ollama server can still be added as a manual model, where a Fetch Models button lists its models and a Vision checkbox lets image-capable models accept images. - 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 track the loaded color preset, so a badge or tab color can follow the preset instead of a hardcoded RGB value. For example, SetColors=badge=i:3 uses ANSI yellow. Issue 12991. - 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. - iTerm2 now answers CSI 16 t (report character cell size), which was previously ignored. - Window > Lock Location pins a window to the display and position it has when you turn it on. If anything moves the window it goes right back, and when that display is disconnected, as happens while a laptop sleeps, the window waits and returns when the display comes back. Dragging the window turns the lock off. Styles that fill or attach to the screen, such as Maximized, Centered, and the edge-attached styles, keep their usual shape and are held to their display instead. Note that macOS puts a returning window on whichever Space its display is showing at the time, which may not be the Space it left. Issue 13031. - 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. Issue 13043. - The window name can now appear beside the tabs in the Compact and Minimal themes, which have no title bar to show it in. By default it appears only once you name a window with Window > Edit Window Title, so windows you have not named look exactly as before. Double-click the name to rename the window. - ⌘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. - A new “Prevent sleep” profile setting keeps the Mac from idle-sleeping while a session with the setting enabled exists. By default it applies on AC power only. - 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 “while this job runs” logic, such as preventing sleep only while a long-running job like an AI coding agent runs. - New per-profile “Use HDR cursor when available” setting 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. A slider next to it sets how bright the cursor gets. - 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. - The password manager’s settings menu now offers one 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 last option is new, and it also closes the password manager when the screen locks. - 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. - You can now press ⌘F in an AI chat to search the current conversation. A find bar appears at the top with match counts and next/previous navigation, and 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 also syncs to a paired iPhone viewing the same chat, and the phone can delete messages too. - 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. - 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. - The Cockpit panel 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, or select rows in the list above it; the rest of what you type is sent to each of them verbatim. Return inserts a newline and Shift-Return sends. The Cockpit also shows each session’s live status in every grouping, with a filter bar along the top that narrows the list to one status. - 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. - The Session Status tool can now follow Codex CLI as well as Claude Code. There is no installer for Codex yet: write a small shell script that runs the hook program inside iTerm2.app (Contents/Resources/utilities/cc-status) with the argument --agent codex, then in ~/.codex/hooks.json point each event at that script and set timeout to 3 on the Interrupt and SessionEnd hooks, since the one second Codex allows them by default is not always enough. The status dot then tracks the agent through a turn, names what a permission request wants to do, clears when you interrupt with Esc, and keeps showing work in progress while a detached sub-agent runs on. The tab gets a progress indicator too, which Codex does not draw for itself. - A session status can now say when it stops being true. Along with the status, a program says what the status should become once the work it describes is over, and iTerm2 makes the change when the program reports that the work finished. This keeps a status from outliving the thing it was reporting on when a program is stopped partway through. Set it with the --expires-on option of it2 set-status, or the expires_on argument of the iterm2.set_status function in the Python API. - The session status is now available in the session-scoped variable “status”. - it2 can now target a session by the tmux pane it is showing. From inside a tmux Integration pane, pass --tmux "$TMUX" --tmux-pane "$TMUX_PANE" to session set-status, get-status, set-var, or get-var; a program running there cannot otherwise learn which session it is in. This works the same 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 cannot 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. - The it2 command-line tool can now send a push notification to your paired companion device with “it2 notify «title» «body»”. - The Python API can now discover and change tab groups, read and write a session’s status indicator and Session Note, and find the session showing a tmux pane. Improvements: - 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. - 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. The phone’s session list also updates live as sessions come and go. - Reduced idle CPU usage that previously grew with the number of open windows. - 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. - The Snippets tool no longer rebuilds its list every time you switch tabs or the running command changes, which had been making windows slowly get slower the longer they stayed open. - Reduced disk writes from saving restorable session state. Sessions with no new output are no longer rewritten on every save. - Keystrokes sent to a host over SSH Integration no longer wait for the previous one’s network round trip, so typing faster than the latency no longer arrives in bursts. Issue 13013. - A program that changes its title rapidly inside a tmux Integration session, such as a spinner in Claude Code’s title, no longer causes needless work several times per second. - 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. - Custom HTTP headers for AI requests are now set per manual model in the model editor, not one global list, so each endpoint can send its own auth header. This lets an authenticated self-hosted or local endpoint work by adding its Authorization header. Existing global headers are copied to your saved models. The editor also shows which API key (if any) each model uses. Issue 12975. - AI command safety checks now use the cheaper “economy” model when one is available, so the frequent low-stakes safety check costs less. It falls back to your configured model when no economy model exists. - 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. - Duplicate Tab now opens the copy immediately to the right of the original tab instead of at the end of the tab bar. - The tab context menu has been reorganized. - 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 Session Status toolbelt tool has a snooze button next to the notify button that toggles snooze on the selected session. - 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. 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. - 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. - 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 tab group rename and creation dialogs now match the light/dark appearance of their window in the Minimal theme. - Dropping a text file into a session connected to a remote host now offers Paste as Text, which types the file’s contents into the terminal. Dropping several files there now offers “Upload and Paste Paths”, which uploads them all and then types their remote paths onto the command line. Local paths are no longer offered there, since they name nothing on that host. - The About window now follows the current theme, updating live when you switch between light and dark. Bug Fixes: - Fixed crashes when editing a dynamic profile whose file had changed on disk, clicking the bookmark button on a command, quitting while several Claude Code sessions were running, asking for notification permission, using a tab’s context menu, running a global search, saving a debug log, tearing down a maximized split pane (such as when a tmux connection dropped), attaching with tmux -CC to a window whose panes are all floating, writing a hyperlink whose address contained an emoji, drawing a combining mark after a box-drawing character, and in the GPU renderer on macOS 26. - 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. - Fixed a performance regression from 3.7.0 that made typing lag or arrive in bursts when using terminal multiplexers (such as tmux -CC) and other programs that query the terminal’s colors or cursor position, especially when switching tabs or windows. Issue 13035. - Fixed severe typing lag in a tmux Integration session running on a host you connected to with an SSH profile. Keystrokes and the output they produced were each held back about a second, so typing arrived in slow bursts. - Fixed occasional delayed screen updates in a session that had gone quiet. A redraw with no other output behind it could be held back until something else happened in the session. - 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. - 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. - 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. - Stopped falsely offering to reset the key reporting mode after every command when your shell manages the keyboard protocol itself, as Fish with oh-my-posh and similar prompt tools do. Issue 13032. - Fixed extended key reporting being lost after a restart with session restoration on. An app that had turned on modifyOtherKeys (so keys like Shift-Enter send a distinct code) now keeps working when its session is restored, instead of quietly reverting to plain keys. - 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. - Fixed Kitty keyboard protocol base-layout reporting for non-US keyboard layouts, so shortcuts such as Ctrl-C work without switching layouts. - 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. Issue 13030. - Fixed a bug on macOS 26 where pressing ⌘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 a bug on macOS 26 where the tab bar became short and shifted down after entering and exiting Lion fullscreen, and where the tabs sat jammed against the top of the screen in fullscreen. Affects the Tahoe tab bar with tabs on top. - On macOS 26, the tab bar in maximized, centered, and single-use windows now sits in the title bar as it does in normal windows, instead of drawing a mismatched background with a dark separator line under the title bar. - On macOS 26, 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 tab dividers in the Tahoe theme having too little contrast in light mode and showing as a light gray line in dark mode. - 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. - 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 scrolling that stopped working in every tab on macOS 27 for the few people who had turned on the old “Dismember scroll view for better GPU performance?” setting. That workaround targeted macOS 10.14 and has been removed, so the setting is gone and anyone who had it on now gets the normal behavior. - 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. - 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. - Fixed ⌘-number tab shortcuts becoming non-consecutive after changing a tab group from the context menu. Removing a tab from a group reordered the tabs but left the shortcut numbers on their old positions. - 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. - 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. - Fixed a bug where a profile whose custom working directory used a tilde (such as ~/www) wrongly reported the directory as unavailable and started in the home directory instead. - “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. - 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. Issue 13094. - 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. - 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. - 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. - Fixed tmux pane sizing when a per-session toolbar (such as the workgroups toolbar) is shown. Panes were told they had more rows than actually fit, so content rendered behind the toolbar and appeared to jump. - Fixed the filter bar briefly matching every line when you changed the query while a search was still in progress, such as by typing quickly. - 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. - 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. Claude Code’s status hook is not yet installed on remote hosts, so sessions there still go unreported. Issue 13049. - 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. - Fixed the workgroup toolbar’s auto-request-review and auto-send-clippings toggles showing a stale off state after a restart even though they were actually on, so the button now always matches whether the behavior is enabled. - Notify on Status Change no longer claims ⇧⌘X as a default keyboard shortcut. That shortcut could shadow a macOS Service bound to the same keys. Assign your own shortcut in System Settings > Keyboard > Keyboard Shortcuts > App Shortcuts if you want one. - 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 text the AI typed into a terminal not being submitted when it ended with a newline. Programs such as Claude Code and vim inserted a line break instead of running the command. - 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. Issue 13021. - 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 as http://LOCALHOST:11434 was not recognized as self-hosted and received your provider key, and a provider address written in capitals was attributed to OpenAI, so the wrong key was sent. - Fixed a bug where a custom HTTP header for an AI model 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. - The Companion setup wizard now saves the pasted API key for the provider you chose in the popup, so choosing a provider other than the current default no longer stores the key under the wrong service. - 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 Kitty graphics placeholder cells drawing nothing when the image id fit in three bytes and the program omitted the optional diacritic that carries the high byte. Other terminals render these, and now iTerm2 does too. - Fixed a bug where blank space rendered as a stray “~” with the GPU renderer in profiles that have Anti-aliased turned off. It showed up most often in bold runs and in the padding of full-screen programs like k9s, and it persisted for the rest of the session once it appeared. - 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. - 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 flag emoji took four columns instead of two, leaving a gap after it. A flag is now always two columns, the width other terminals report for it, so the advanced setting “Lone regional indicators render full-width” no longer affects flags. - 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. Issue 13079. - Fixed a bug where a character that combined with the one before it could come out the wrong width when the two halves arrived in separate writes, leaving the cursor inside the character. - 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 when right-to-left support is on, 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, like the Persian کاملاً and لطفاً: the combining mark’s glyph position no longer perturbs the display order, so the word’s letters stay in right-to-left order and the mark stays on its base letter. - 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. - Selection on right-to-left lines is now visual: a drag selects exactly the columns under it, like every other terminal action. Previously the selection was a logical range, so dragging over a line with embedded English or digits highlighted a different, discontiguous span (selecting «کد پستی 12345» could light 345 but not 12), the first character of a right-justified line could not be selected from the margin, and the trailing period was unreachable. Copy converts the visual span back to logical runs, so copied text stays in reading order; partially selected English inside Persian copies its selected cells only. - Extending a selection upward from a right-justified line keeps the anchor line’s words: the per-line share of a multi-line selection now follows each line’s reading direction instead of always opening on the left. - Copying a single visual sweep that covers logically separated pieces of a mixed right-to-left line now concatenates the pieces in reading order instead of stacking them on separate lines. Pieces on different lines still copy with line breaks. - 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. Any answer you had saved for these dialogs is cleared, so you will be asked once more. - Uploading several files at once to a host you connected to with an SSH profile now uploads all of them. Dropping more than one file on the terminal, or choosing Upload after dropping them, transferred only the first and silently discarded the rest. Uploads over plain shell integration were unaffected. - “Upload and Paste Path” now pastes the path the file actually landed on. Uploading over an SSH profile never overwrites, so a file whose name was already taken on the far host arrived as “name (2)” while the original name was pasted, naming a different file. - 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. - Dragging a file into a local terminal now inserts its path again on VPN or Tailscale networks, where it had instead been offering to upload the file. - A floating Session Note now reappears after iTerm2 relaunches with your sessions restored, instead of staying hidden. - Fixed the Composer clipping the bottom of the last line you typed, and the status bar composer cutting off its top line after a resize. - Fixed a bug where editing only the keystroke of a Select Menu Item or Toggle Setting key binding erased the menu item or setting it was bound to. - Fixed the Screen setting in Settings > Profiles > Window. Choosing “Main Screen” left the popup blank and showed no checkmark next to it when reopened, although the setting was saved correctly. - 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. - Fixed the git ahead/behind arrows in the session toolbar staying black in dark mode instead of matching the text color. - Installing the Python runtime used by scripts now trusts the certificates installed on your Mac. On networks that inspect secure traffic, it could fail with a certificate error even though the same download succeeded in a browser. - Fixed the Python API not reporting OSC 8 hyperlinks (a cell’s CellStyle.url is now populated) and reporting an underline color or a block ID on cells that did not have one, so scripts reading screen contents no longer see those attributes spill past where they ended.