Ctrl K
ComunidadGuías…

docs/notes-3.7.4beta1.txt

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
Version 3.7.4beta1 of iTerm2 was built on
September 29, 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.