docs/notes-3.7.7beta2.txt
Rama master · réplica de lectura del repositorio original.
Version 3.7.7beta2 of iTerm2 was built on October
27, 2026.
New Features:
- Workgroups now work in tmux Integration tabs.
The workgroup is kept on the tmux server, so it
survives detaching and is picked up again when
you attach, even from another Mac. Requires tmux
3.2 or later.
- When a Workgroup’s main session is on a host
reached through SSH Integration, its companion
sessions, such as Code Review, now run on that
host too.
- The Claude Code integration can now be installed
on a host reached through SSH Integration, so
Claude Code running there reports its status
too. Choose iTerm2 > Install Claude Code
Integration from a session on that host,
including a tmux Integration pane there.
Uninstalling removes it from every host you are
connected to.
- When a host reached through SSH Integration asks
to use it2, you can now choose “Always Allow
This Host” so it is not asked again on later
connections. Review or remove these hosts in
Settings > General > Magic > API access over
ssh.
- In iTerm2 Buddy, web browser sessions now show
the page instead of a black screen, and you can
tap, scroll, and type into them, and use back,
forward, reload, and an address field. Requires
an up-to-date iTerm2 Buddy.
- While you type an @-mention in an AI chat that
can control other sessions, you can click the
session you mean instead of picking it from the
list.
- `it2 session set-status` has a new --progress
option that starts or stops the tab’s progress
indicator.
- `it2 session add-clipping` and
`archive-clippings` accept --tmux and
--tmux-pane.
Other Improvements:
- SSH Integration now paces output from the remote
host, so a program that prints a lot no longer
fills the connection’s buffers. Control-C takes
effect at once instead of after minutes of
buffered output on a slow link, and typing stays
responsive while output streams.
- Downloading a file or folder with “Download
using SSH Integration” is much faster.
- On a host reached through SSH Integration, it2
is now a real command in ~/.iterm2/bin rather
than a shell function, so scripts, sh -c, and
tools such as Claude Code’s Bash tool can run
it, not just an interactive shell. Commands that
read standard input now receive it. A command
run with “it2ssh host command”, or by an SSH
profile, can use it2 too.
- On a host reached through SSH Integration, an
it2 command that names no session now acts on
the session it runs in rather than the focused
one.
- it2 now works on a host reached through SSH
Integration when the shell is tcsh, and when
shell integration is not loaded there.
- it2ssh now loads shell integration on the remote
host by default, whatever the current profile’s
Load Shell Integration Automatically setting.
Run it2ssh --no-shell-integration to skip it.
SSH profiles still follow their own setting.
- The git status bar component now shows the
status of a repository on a host reached through
SSH Integration, by running git there. It used
to need it2git set up on the host. With it2git,
changes are now counted the same way as for a
repository on this Mac.
- Shell integration now loads inside tmux,
including on a host you ssh to from a tmux pane,
so marks, the current directory and host, and
the git status work there.
- In a tmux Integration session on a host reached
through SSH Integration, each pane now knows
which program is running in it, and the git
status bar component and other features that
depend on the session’s host work without shell
integration loaded in the pane.
- The Claude Code hook program is now `it2
handle-agent-hook`, so the hook works wherever
it2 does. Existing installs keep working;
reinstalling the integration updates the hook
entries.
- If you customized the Code Review system prompt,
iTerm2 offers to update it the next time a
review starts, so reviews work in tmux and on
remote hosts. It shows the changes first, and
changes nothing else in your prompt.
- Shell > ssh > Download Files… now lets you
choose any file. Before, it only allowed file
types that the AI provider accepts as
attachments.
- The notification for a failed download or upload
now names the file and gives the reason.
Canceling a transfer no longer reports it as
failed.
- Answering No to “Allow Terminal-Initiated
Download?” (for example, for it2dl) no longer
fills the terminal with the file’s encoded
contents. The same goes for declining to display
a file inline.
- When a session’s program ends and iTerm2 offers
to restart it, short output such as a custom
command’s is no longer hidden behind the offer.
- Announcements in narrow panes put their buttons
below the text when there is no room beside it.
- When you change the theme, an open browser tab
now switches pages that have light and dark
versions to the matching one.
- The browser’s View Source command now shows the
page’s source, with attribute values
highlighted. Before, it always said “No source
available.”
- In Low Power Mode, status bar graphs such as CPU
Utilization move once a second instead of
animating continuously.
- More of the interface is translated, including
Window > Lock Location, the tab menu’s Rename
Tab… and “Tab Color:”, the browser’s error page,
the Downloads and Uploads menus, and file sizes
and units throughout. Translated labels no
longer get cut off in the shell integration
installer, Advanced Paste, Smart Selection,
Settings > Keys > Hotkey, the manual AI model
editor, and elsewhere.
Bug Fixes:
- Fixed various crashes, including ones when
searching in the AI Chats window, importing a
script archive with a damaged signing
certificate, finishing an SSH Integration
download on a user@host connection, using a
trigger in a Dynamic Profile whose parameter has
an unexpected type, and when a display reports a
refresh rate of 0.
- Fixed a hang that could freeze iTerm2 with a
beachball when GPU rendering was on and the
system was under heavy load. Issue 13139.
- Fixed a bug where a trigger whose interpolated
parameter refers to its match, as in
\(matches[0]), could make output stall, and with
tmux integration could freeze every tmux window.
- Programs that turn on the Kitty keyboard
protocol and then request xterm’s
modifyOtherKeys, as Claude Code does, keep the
Kitty protocol. Before, Command keys stopped
being reported. Issue 13138.
- When an app enables the Kitty keyboard protocol
and “Use the Caps Lock key to switch to and from
the last used Latin input source” is on, tapping
Caps Lock no longer sends a malformed key report
that some apps read as Control-C. Issue 13136.
- With the kitty keyboard protocol reporting all
keys, a dead key followed by a key it does not
combine with now reports the dead key and then
the second key, instead of the second key twice.
- Installing Shell Integration with “Download and
Run Installer” installed outdated scripts, so
the warning that they are out of date kept
coming back. Issue 13155.
- Fixed Shell Integration for xonsh, which was
installed but never took effect. Installing it
again fixes an existing installation.
- Fixed many problems with the Internet-Free shell
integration install: it could hang when the
shell you’re using isn’t your login shell or
while installing the utilities, could leave bash
without the line that loads shell integration,
could report success when the utilities failed
to unpack, and could leave you inside its helper
shells after you canceled.
- Shell > SSH > Disconnect now recovers an SSH
Integration session whose local it2ssh process
was killed, and works before advanced SSH
features have started.
- Fixed several ways an SSH Integration session
could stop taking input or type stray text such
as YXV0b3BvbGw= or cmVjb3Zlcg== into the local
shell: when ending a session, after using tmux
integration in it, when it2ssh ran on a nested
host without the Python advanced SSH features
need, and when restoring sessions after
relaunching or after a crash.
- An SSH Integration session restored after
relaunching iTerm2 no longer hangs when its
connection drops while the remote command is
printing output.
- it2ssh no longer leaves the terminal waiting for
Return when ssh fails before connecting, and now
exits with ssh’s exit status.
- it2ssh no longer hangs when the host or command
contains non-ASCII text, and now runs a command
given after the host exactly as ssh does.
Quotes, newlines, tabs and non-ASCII text in the
command were mangled.
- A custom command or SSH profile command that
contains a backslash or a double quote now runs
as written.
- When SSH Integration loads shell integration
into a remote bash, the shell is now a login
shell, so aliases and functions defined in
~/.profile or ~/.bash_profile are available.
- When you connect with it2ssh user@host or an
ssh:// URL, SSH Integration no longer treats all
of “user@host” as the host name.
- Fixed SSH Integration bugs: remote files with
non-ASCII names could not be downloaded,
deleted, or renamed; deleting a remote symbolic
link to a folder failed; a failed remote request
could never finish; asking for an immediate
update of the remote job list ended the
integration; output printed just before a remote
command exited could be lost; the remote PATH
could be misread; and Composer suggested no
remote file names when the host had Python 3.7
or 3.8.
- On a FreeBSD or OpenBSD host reached through SSH
Integration, sessions and the Jobs tool showed
an environment variable such as VENDOR=unknown
instead of the running program.
- A file fetched with Shell > ssh > Download
Files… no longer stays listed as downloading
after it finishes, Clear All now removes
finished SSH Integration downloads, and their
notification no longer says “Upload finished”.
- A failed or stopped SSH Integration download no
longer leaves a hidden partial file in your
Downloads folder or reports success. Stop takes
effect right away even when the connection has
stalled, and a folder download tells you when
files in it couldn’t be read.
- With the Browser Plugin installed, “Download
using SSH Integration” in the context menu no
longer does nothing when the file can’t be
found.
- An upload over SSH Integration no longer
overwrites a remote file of the same name when
iTerm2 could not check whether one exists.
- Running tmux -CC in a session that is already
part of tmux integration now explains that tmux
integration can’t be nested instead of silently
doing nothing.
- Fixed saving a window arrangement to a file and
archiving a session when the text contained
right-to-left text. If either kind of save
fails, iTerm2 now reports an error. Issue 13143.
- With the Minimal or Compact theme and the
Snippets tool enabled in the toolbelt, a window
could be made wider but not narrower. Issue
13118.
- With ligatures turned off, some fonts could
still draw “fi” as a ligature and leave a gap
after it. Issue 13133.
- Turning off “Show activity indicator” in
Settings > Appearance > Tabs now also hides the
tab’s spinner when a program reports progress.
Issue 13145.
- Unpinning a pinned tab that was not the
rightmost pinned tab, or one in a tab group, no
longer breaks the tab bar. Issue 13154.
- Fixed Kitty graphics images cropped to part of
their height showing the wrong part of the image
when GPU rendering is on, and Kitty placeholder
images showing nothing or the wrong part of a
cropped image. Issue 13146.
- Pressing an arrow key or Tab while composing
text with an input method now finishes the
character and performs the key in one press, as
Return already did. Issue 13030.
- Hardened the handler for x-man-page: URLs so a
malicious URL can no longer run an unexpected
command or make man render an arbitrary local
file.
- A web address containing a quote or other
special characters can no longer inject script
or markup into the browser’s page-load error
page.
- When an administrator turns off generative AI,
iTerm2 no longer uses Apple Intelligence for AI
chat, AI tab titles, or the command safety
check.
- Dragging a split divider in a tmux window now
leaves the panes the way the drag showed them.
- In tmux integration, showing timestamps in one
pane of a window split into top and bottom panes
no longer covers the end of that pane’s lines.
- If iTerm2 quits unexpectedly while tmux
integration is attached, tmux integration now
resumes when iTerm2 relaunches, provided you
switched to another app at some point after
attaching. If it quits unexpectedly after you
detach, the session that ran tmux -CC no longer
gets tmux commands typed into its shell.
- Answering Always to “Close tmux windows after
detaching?” no longer closes sessions that did
not ask, such as the tmux session itself.
- In tmux integration, the ReportCellSize,
ReportWindowFrame, and ReportScreenFrames escape
sequences now get a reply.
- With Archive On Closure on, closing a pane in a
tmux integration window no longer saves an
archive that could not be restored.
- When tmux windows open as tabs in the attaching
window, attaching from a hotkey window no longer
moves the hotkey window off screen.
- Fixed Floating Pane bugs: Undo Close now
restores a maximized one maximized and in its
place among the others; Control-drag docking now
keeps keyboard focus; Swap With Session no
longer also highlights the pane underneath;
Change Profile in Arrangement now works for one
restored from an arrangement; hidden ones no
longer count toward the pane limit for the GPU
renderer; and in tmux integration, resizing one
now resizes it in tmux and one is no longer
drawn over the wrong pane while Find > Filter is
open.
- A pane in a Workgroup can no longer be turned
into a floating pane by dragging it onto a
floating pane in another tab.
- A scroll region set by a program that is still
running when iTerm2 quits unexpectedly is kept
when the session is restored.
- When a session is restored with the “Session
Contents Restored” banner, the shell’s output no
longer starts after a blank row.
- After window restoration, a tab whose session
had a status shows it again in the tab bar, not
only in the Session Status tool.
- A trigger written by hand in a Dynamic Profile
no longer forgets its state when the profile
reloads, so an Instant trigger no longer fires
twice on the same line.
- Choosing the Make Hyperlink trigger action with
interpolated string parameters turned on now
fills in a working URL.
- When several Dynamic Profiles files have errors,
the alert now gives the right number of
additional errors.
- An AI chat using a local Ollama model, or a
model you added in Settings > General > AI, no
longer sends its messages to OpenAI or your
cloud AI provider after that model is removed or
renamed. It now shows an error.
- An AI chat’s session watches now resume when
iTerm2 launches, and Stop cancels them. A
pending timer no longer misses its deadline
after you enable orchestration.
- When AI chat asks to run a tool that can’t run
in the linked session, the chat now reports the
error and continues instead of waiting forever.
- In AI chat, if you send a new message instead of
answering a request to run a command, the AI is
no longer told that iTerm2 restarted and invited
to run the command again.
- In AI Chat with streaming responses on, a code
block at the end of a reply now shows as code
with a copy button.
- AI command suggestions no longer repeat a
directory you already typed in the filename they
insert, and filename suggestions in the composer
no longer show extra backslashes.
- With AI command suggestions off, the gray
completion the composer shows for a file name
with a space or other special character is now
escaped.
- Test Connection in the AI model editor can now
be stopped while it runs, and rejects custom
headers that are not valid, as Save does.
- AI custom headers you remove from a model no
longer come back on another Mac that shares your
settings, and changing your AI models no longer
drops the headers set up for a single custom
model.
- AI models on Azure OpenAI in Azure Government
(.azure.us) and Azure China (.azure.cn) now send
their API key the way Azure expects.
- AI network errors now read “HTTP request failed:
…” instead of a broken sentence.
- The AI Usage toolbar item no longer shows
“Unreadable usage data” when Claude Code’s
output contains color codes, and its problem
report no longer fills the screen.
- Fixed AI chat bugs: the “↩ to submit” hint
overlapped a long placeholder, the find bar
squeezed its search field to nothing in a narrow
chat and closing it lost focus, changing a
permission from the info menu didn’t update the
chat’s buttons, session mentions didn’t resize
with the font and showed a terminal icon for
browser sessions, and the AI Chats list
highlight stayed behind when a chat moved to the
top.
- Uninstalling the Claude Code integration no
longer says an empty settings.json couldn’t be
parsed, and installing it over a broken
settings.json symlink no longer marks the new
file executable.
- it2 commands such as it2 session list and it2
profile list no longer show JSON escapes, such
as \/dev\/ttys001 for a tty, and it2 session
set-var now sets a plain value such as hello.
- The it2dl utility now works on systems where
bash is not in /bin, such as Raspberry Pi OS.
- Installing the iTerm2 utility scripts on Linux
no longer prints tar warnings or leaves ._ files
in ~/.iterm2.
- iTerm2 Buddy no longer connects slowly or keeps
saying your Mac is busy while the Mac’s displays
are asleep.
- Turning on generative AI while Companion Device
Settings shows a failed pairing no longer erases
the error and the QR code.
- With “Exclude from Dock and ⌘-Tab Application
Switcher” and “…but only if all windows are
hotkey windows” on, Show menu bar icon is no
longer stuck checked and disabled.
- Look Up, Copy Mode’s cursor, Cmd-hover and
Cmd-click on URLs, and (with the GPU renderer
off) underlines, strikethroughs, and selection
highlights now line up with right-to-left text
where it is drawn. Devanagari vowel signs
written before their consonant are drawn in the
right place again with the GPU renderer off.
- After you change a window’s style in Window >
Window Style, the window keeps keyboard focus.
- After Swap With Session between a tab with one
pane and a split tab, each pane now shows or
hides its title bar to match its new tab.
- With Focus Follows Mouse, returning the pointer
to a pane whose find field had focus no longer
selects the whole query, the status bar’s search
field now takes focus when “…even to views like
Search or Composer” is on, and a pane you point
at while a sheet is open gets focus when the
sheet closes.
- Right-clicking in a browser tab that a page
opened from a link now shows the context menu,
and find, copy on select, autofill, the password
manager, and named marks work on that tab
instead of the tab that opened it.
- After you back out of the password manager from
a website’s sign-in prompt, “Remember this
password” is no longer ticked unless you ticked
it.
- After a screen lock ends password manager
authentication, the trigger editor no longer
lists saved account names until you authenticate
again.
- An scp download that asks for a password no
longer hangs if you close the Password Manager
without choosing a password.
- An alert shown again by “Permanently Forget
Saved Selection” no longer presses a button when
you type a plain letter, and Cmd-H, Cmd-Q,
Cmd-W, and Cmd-M no longer press an alert button
that starts with that letter.
- Typing quickly after a “Press any key to
dismiss” message no longer loses the keys typed
while it slides away.
- Search the Web for Selection now finds text that
contains a plus sign, such as “c++”.
- Advanced Paste now counts lines correctly.
- Command Info no longer shows a negative running
time for a quick command, and its Output size no
longer counts the next prompt.
- With HTML tab titles on, “&” and “<” are
now shown as “&” and “<” even when the title has
no tags.
- In the Minimal theme, a new window now shows the
profile’s subtitle right away, and the git
branch item in a Workgroup’s toolbar draws its
arrows in the toolbar’s text color.
- When settings load from a custom folder and are
saved manually, the red “!” in the Settings
title bar now goes away after Save Now.
- With the Settings window in front, Edit > Find >
Find… now focuses the Settings search field.
- Shell > Close (⌘W) now closes the Cockpit when
it is the key window.
- The Snippets tool no longer shows a folder’s
icon on a snippet or a snippet’s icon on a
folder.
- A profile setting chosen from a pop-up menu now
shows its default instead of a blank menu when
the profile holds a value the menu lacks.
- The setting and menu item pickers in the key
binding editor now say “Select Setting…” or
“Select Menu Item…” until you choose one.
- When pasting text with tabs, the prompt that
offers to convert them to spaces now puts the
cursor in its number-of-spaces field.
- Calling Tab.async_update_layout() from the
Python API now gives each pane the size you
asked for and no longer shrinks the panes when
nothing changed. Session.async_move_to_new_tab()
and async_move_to_new_window() now return None
for a tmux session instead of raising an error.
- The warning shown before opening an untrusted
arrangement no longer counts a session’s command
twice.
- “Prefer integrated to discrete GPU” in Advanced
GPU Settings is now disabled on a Mac with only
one GPU.
- The donation link in the Settings and Edit
Session title bars no longer truncates the
window title.