docs/notes-3.7.5.txt
Rama master · réplica de lectura del repositorio original.
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.