កំណត់ត្រាផ្លាស់ប្ដូរ

2.4.4
Fixed
  • **SSH 密码与钥匙串:** 远程主机密码默认静默读取钥匙串,避免侧边栏/探测每次触发 macOS 弹窗;保存走默认「登录」钥匙串并清理旧的 login_renamed_* 副本;管理主机时空密码不再误删已存密码;连接时「记住到钥匙串」文案更清晰。
  • **Agent API Key(方案 A):** 检测到 login_renamed_* 或非正式发布包时不再反复读取旧钥匙串条目 com.icc.app.agent-provider-api-key;用户在系统对话框点「始终允许」后,启动时自动把 Key 迁到本地文件并清除旧钥匙串记录,后续不再索要 login_renamed_* 密码。Release build 179.
Changed
  • **Event routing (方案 C).** EventRoutingCoordinator + ResponderLiveness centralize icc_sendEvent policy; portal detach posts MouseForwardTargetInvalidation; FileDropOverlayView and window command-palette overlays live under Sources/EventRouting/.
  • **ContentView split.** Main body stays in Sources/ContentView.swift (~8k lines); chrome, sidebar v3, tab drag, and mount policy moved to Sources/ContentView/*.swift to shrink the monolith and isolate mouse-adjacent UI.
2.4.3
Fixed
  • **右键拖拽不再导致崩溃。** IccMouseRoutingHealthGuard 现在在 AppKit 私有 _routeRightMouseDraggedEvent / _routeOtherMouseDraggedEvent 路由器之前拦截 .rightMouseDragged.otherMouseDragged 事件,防止 SwiftUI hosting responder 链无限递归导致栈溢出。
  • Release build number 推进到 178
2.4.2
Fixed
  • **Grok panes no longer take imux down when the installed Grok binary has a broken macOS signature.** The bundled Grok wrapper now verifies native Grok binaries before launch and stops with an actionable update / reinstall message instead of letting macOS kill the process during terminal selection or copy flows.
  • **Copying and selecting text in Grok / agent panes is safer under heavy clipboard activity.** The terminal pasteboard coordinator now avoids re-entering its own serial queue while Grok is auto-copying selected text, removing a deadlock-prone path behind frequent copy / selection crashes.
  • **Execution Header no longer reserves a blank or misleading band for placeholder-only workspaces.** It now renders only when there is real supervisor context, verified evidence, or an active execution state, and it can show the goal from the task charter, stored goal, startup plan, or execution brief.
  • Release build number advanced to 177.
2.4.1
Fixed
  • **Source Control no longer locks up on repositories with large generated or untracked trees.** The active SCM rail now asks Git for normal untracked-directory grouping instead of expanding every nested file, renders changed-file rows lazily, caches staged / unstaged / conflicted sections once per status snapshot, and collapses overlapping refreshes into one in-flight git status read. Discarding a collapsed untracked directory now uses the directory-aware clean path, so the UI can safely show one generated/ row without breaking deletion.
  • Release build number advanced to 176.
2.4.0
- Command Palette recent resume items surface current warm status ("· 暖") + warm/preheat keywords for instant discoverability of pre-warmed hosts.
Added & Improved
  • **"最近远程" (Recent Remotes) as a true first-class experience** — major upgrade to remote host workflow:
  • All changes pass localization, hot-path purity, and file-size gates (with only pre-existing giant-file type-check tolerance). Arm64-only build for v2.4.0 due to SidebarExplorers.swift scale.
2.3.0
- Multi-pane focus switching and event routing between regular terminals and agent panes (Grok/Clavue) made more responsive.
Added & Improved
  • **Supergrok (Grok CLI) experience significantly hardened and smoothed.**
  • **Performance and smoothness improvements across the board:**
  • All changes pass the full quality gate suite with zero violations. Focus remained on real user-perceived smoothness and stability when using multiple AI agents side-by-side.
2.2.0
- New "Clavue + Grok" button in the AI dock.
Added
  • **Grok (xAI) full agent support + Clavue linkage.** The client now perfectly supports the grok CLI (Supergrok) as a first-class agent pane:
  • **Clavue + Grok linked mode.** One-click creation of a coordinated multi-agent workspace:
  • All new code passes the full quality gate suite (localization, file-size freeze, hot-path purity, control-mainsync, agent tests) with zero violations.
2.1.0
Added
  • **imux CLI name (with icc retained as a compatibility alias).** The bundled command-line tool now ships under the product name imux in addition to the legacy icc. Resources/bin/imux is a thin wrapper that execs the sibling icc binary and forwards every argument unchanged, so the socket protocol, helper binaries, ICC_* environment variables, and socket paths are byte-for-byte identical whichever name you type. CLIAliasContractTests pins the both-names-same-binary contract; usage text, README.md, and docs/v2-api-migration.md are updated.
  • **Product instrumentation for activation events.** A new consent-gated ProductInstrumentation captures the six roadmap activation events with low-cardinality, whitelisted properties only — no paths, URLs, or secrets, and nothing at all when consent is disabled. Pinned by 10 tests over event names and property contracts.
  • **Command Palette v2 foundation.** New CommandPaletteIndex, CommandPaletteActionRouter, and CommandPaletteObjectKind provide the index + routing layer for the v2 palette surface.
  • **Git readiness detection.** GitReadinessDetector + state model report per-workspace git readiness, carrying counts rather than paths to keep the signal privacy-preserving.
  • **Cross-agent handoff packets.** HandoffPacketBuilder assembles handoff packets with a HandoffPacketRedactor pass over sensitive fields, keyed by HandoffRole. Builder and redactor each have dedicated coverage.
  • **Scoped workspace memory.** A new WorkspaceMemoryStore persists entries by scope: private is never exportable, project is exportable, session is pruned by cap, and pinned entries survive pruning. 11 tests.
  • **Richer evidence ledger metadata.** EvidenceModel and the browser / remote-daemon adapters now carry extended ledger metadata surfaced in the ledger view, with adapter / persistence / model / view test coverage.
2.0.2
- **i18n.** All new user-visible strings (panel placeholder, error messages, Finder document type names) are four-language complete (en / ja / zh-Hans / zh-Hant) in `Resources/Localizable.xcstrings`; `audit-localization` baseline unchanged.
Added
  • **Open files in our editor / preview, not the OS default.** Clicking a file in the explorer (or dragging it onto an empty pane, or double-clicking it from Finder when imux is registered) now opens it inside the workspace instead of bouncing to TextEdit / Preview / Office. Two surfaces:
Fixed
  • **Feedback composer endpoint defaulted to production.** FeedbackComposerSettings.defaultEndpoint was an empty string, which made the in-app "Send Feedback" composer (sidebar Help → Send Feedback, plus the sendFeedback keyboard shortcut) throw invalidEndpoint on every shipped build because users would have had to set ICC_FEEDBACK_API_URL in the launch environment for the multipart POST to fire. The default now points at https://www.iccjk.com/api/feedback (the existing Resend-backed /api/feedback route in web/app/api/feedback/route.ts), so feedback submissions reach the team mailbox out of the box. The ICC_FEEDBACK_API_URL env override still wins for staging / self-hosted instances. No behavioral change to the error-report uploader (Sources/Diagnostics/DiagnosticsUploader.swift already hard-codes https://www.iccjk.com/api/error-reports); this fix only restores the user-feedback channel.
2.0.1
- New: `Sources/Control/Handlers/AgentMeshHandlers.swift`, `iccTests/AgentMeshHandlersTests.swift` (10 cases), `docs/dev/evidence-adapter-family.md` (the diff-resistant adapter wire map). (`03f5ddec`)
Added
  • **Inspector v1.16 — write pipeline (read+write Inspector, audit-gated bridge).** The Agent Context Inspector is no longer read-only: it can compose a one-shot "continue session" prompt for a live Clavue / Claude Code / Codex session, gated by a two-step confirm modal and recorded into an append-only, HMAC-chained audit log under ~/.imux/audit/inspector/<YYYY-MM-DD>.jsonl. Pieces:
Performance
  • **Execution Header mounted in WorkspaceContentView chrome (ROADMAP §2.1 Stage 2, follow-up to step 3).** WorkspaceContentView.body (non-minimal branch) now projects ExecutionHeaderViewModel(from: workspace) once per re-eval and mounts ExecutionHeaderView(model:).equatable() at the top of the content VStack, immediately above RestartPreviousAgentsBanner and the configuredBonsplitView split tree. The if executionHeaderModel != .empty guard collapses the subtree to nothing when no workspace is selected (mirroring the empty-state path). .equatable() short-circuits subtree body re-evaluation when the projected fields are stable — same discipline as WorkspaceSidebarV3Card / BrowserPanelView. onNextAction is intentionally nil for now (the next-action button collapses); follow-ups that wire a real callback will land alongside the action surface they trigger. The minimal-display-mode branch remains unchanged (no header in minimal chrome). Projection cost is governed by the executionHeader.render budget added in step 3 (P95 ≤ 2 ms; observed worst-of-4 ≈ 0.0099 ms).
  • **Execution Header render perf gate (ROADMAP §2.1 Stage 2, step 3).** ExecutionHeaderViewModel.init(from:ledger:) now manually times its Workspace + EvidenceLedger projection cost and records each call into HotPathSampler under a new metric executionHeader.render (HotPathMetric.executionHeaderRender). Sampling uses manual start / record(metric:elapsedMs:) — the measure(metric:_:) closure form is unusable here because self is not yet fully initialized when the projection runs. scripts/perf-budget.txt gains an executionHeader.render 2 30 row (P95 ≤ 2 ms over ≥ 30 samples; the worst observed P95 across 4 PerfScenarioTests runs was 0.0099 ms, so the 2 ms entry is a floor, not a fitted budget). PerfScenarioTests.test_perf_envelope_writesSnapshot now drives driveExecutionHeaderRender() for 60 iterations (≥ 30 + 2× headroom) and asserts the metric appears in the snapshot envelope. New iccTests/ExecutionHeaderRenderPerfTests.swift (3 cases) mirrors the HotPathSamplerWiringTests shape: records on init, no-ops when the sampler is disabled, accumulates across instances. ExecutionHeaderView is still not mounted into the main ContentView chrome — that wiring lands in an independent follow-up commit.
  • BrowserPanelView now conforms to Equatable and PanelContentView chains .equatable() on the browser surface, mirroring the WorkspaceSidebarV3Card pattern. Equality compares ObjectIdentifier(panel), paneId, isFocused, isVisibleInUI, and portalPriority; the onRequestPanelFocus closure (recreated on every parent evaluation) and the browserProfileStore singleton are intentionally excluded. This short-circuits the N² omnibar re-evaluation cascade during workspace focus storms. New iccTests/BrowserPanelViewEquatableTests covers 6 cases. (69bda8d2)
Changed
  • EvidenceCompletionGate.evaluate(...) gained a mode: Mode = .strict parameter (Mode.strict / Mode.nonStrict). Default behavior is unchanged — supervisor.complete keeps requiring at least one .verified row in the ledger. Mode.nonStrict lets callers opt out of the verified-row requirement when the gate is being used as a non-supervisor advisory check. New iccTests/EvidenceCompletionGateTests cases: test_evaluate_nonStrict_emptyLedger_allows, test_evaluate_nonStrict_skipsLedger, test_evaluate_defaultModeIsStrict. (8a20bf82)
Added
  • **Execution Header view surface (ROADMAP §2.1 Stage 2, step 2).** New struct ExecutionHeaderView: View, Equatable (Sources/ExecutionHeader/ExecutionHeaderView.swift) renders the seven fields of ExecutionHeaderViewModel as a labeled card. Equality compares lhs.model == rhs.model only — the onAction closure (recreated on every parent evaluation) is intentionally excluded, mirroring the WorkspaceSidebarV3Card / BrowserPanelView short-circuit pattern. Not yet mounted into the main ContentView chrome — first cut is independently compiled and tested, with UI integration + perf-budget gate landing in step 3. Five new localization keys under execution.header.* (goal / stage / agent / branchOrHost / latestEvidence) registered via String(localized:, defaultValue:) (en/zh-Hans/zh-Hant auto-extracted on next build). Covered by 7 new @MainActor cases in iccTests/ExecutionHeaderViewEquatableTests.swift; full unit suite scope grew by 14 (Equatable + ViewModel combined).
  • **Execution Header data projection (ROADMAP §2.1 Stage 2, step 1).** New value type ExecutionHeaderViewModel (Sources/ExecutionHeader/ExecutionHeaderViewModel.swift) — a pure, Equatable projection of Workspace + EvidenceLedger into the seven fields the header card will render (goal, target panel title, branch, remote subtitle, run-journal source, latest verified evidence summary, supervisor status). Factory init(from: Workspace, ledger: EvidenceLedger = .shared) is @MainActor and reads-only — no state is mutated. Remote subtitle takes precedence over branch when the workspace has a remote configuration; run-journal source falls back to the latest supervisor run entry when the target panel resolves to the workspace itself; verified evidence summary picks the most recent countsAsVerified row. Covered by 7 new @MainActor unit tests (iccTests/ExecutionHeaderViewModelTests.swift) using isolated EvidenceLedger() instances. UI integration + perf-budget gates land in a follow-up commit.
  • **Evidence ledger adapter family — fully wired (ROADMAP §2.3 second bullet).** All five adapters are now production-active:
  • ROADMAP §2.3 second + third bullets (Adapters and UI filters) are now marked done with commit refs.
1.15.0
Added
  • **Commit detail window** — clicking a commit row in the file Timeline popover (sidebar explorer) or in the Source Control panel's history list now opens a dedicated, resizable window showing the commit's full metadata (subject, body, author, parents, ISO + relative dates) and a per-file side-by-side diff (FileDiffSplitView) for every changed path. Each (rootPath, sha) pair has at most one open window — repeat invocations bring the existing window forward instead of creating duplicates. The window pulls one git show --no-patch for metadata and per-file git show <sha>:<path> / git show <sha>^:<path> for blob bodies, so additions and deletions render cleanly with one column blank. Added/deleted-file detection treats /dev/null and empty paths as the empty side. Blob cache is keyed by oldPath\u{1f}newPath to avoid rename collisions. Root commits use an empty parent ref. New: Sources/CommitDetailViewModel.swift, Sources/CommitDetailView.swift, Sources/CommitDetailWindowController.swift. Backed by new GitRunner.showCommitMetadata(sha:) / GitRunner.showFile(sha:relativePath:) and the pure-logic CommitFullDetail + CommitFullDetailParser in GitStatusService.swift.
Changed
  • Source Control panel history rows now open the commit detail window directly instead of expanding an inline diff block. The chevron-toggled historyExpanded / commitDiffBlock / commitDiffFileBlock paths and toggleHistoryExpansion were removed; the row icon switches to arrow.triangle.branch and the whole row is a single Button action. Existing commitDiffs cache and loadCommitDiff path are kept for tests.
  • File Timeline popover SHA chip is no longer a copy-to-clipboard target. The whole row is now click-to-open-detail; the seven-character SHA still appears as a tooltip via .help(sha).
Fixed
  • File panel editor no longer visually overlaps the line-number / SCM gutter rulers when the document is wider than the viewport. FilePanelTextEditorRepresentable now follows the standard "scrollable text view with vertical ruler" NSScrollView recipe — isHorizontallyResizable = false, widthTracksTextView = true, container width 0 — so NSScrollView.tile() can hand the leftmost ruleThickness strip to the gutter ruler instead of letting the document view keep the full width and slide under the ruler. Vertical resizing and long-file scroll behavior are unchanged.
1.14.2
- **Redundant fork fan-out** — `SidebarSourceControlPanel.probeOriginRemote()` no longer re-runs `git remote get-url origin` on every `model.status` change (stage / unstage / commit do not mutate remote configuration). `SourceControlSidebarPaneView.refreshSnapshot` no longer triggers `TabManager.refreshWorkspaceGitMetadata` automatically — the per-panel sidebar metadata refresh now fires only when the user clicks an explicit Refresh button (`propagateToSidebar: true`). Initial mount and post-action reloads stay scoped to the panel they belong to.
Fixed
  • Sidebar SCM panel no longer freezes when expanded against a moderately busy repository. Three layered defects were fixed:
  • TabManager.runCommandResult no longer hangs forever when callers pass timeout: nil. The path now applies a 10 s default ceiling, which is enough for every current caller (branch --show-current, status --porcelain, gh pr list) and prevents initialWorkspaceGitMetadataSnapshot from stalling the workspace metadata pipeline.
1.14.1
Fixed
  • Release pipeline: ICC_ERROR_REPORT_TOKEN is now injected through a 0600 mktemp xcconfig and consumed via -xcconfig rather than as an xcodebuild NAME=VALUE CLI argument. The previous shape leaked the token into ps -o command -ax for the lifetime of the build (CWE-214). The xcconfig is removed via an EXIT trap on success, failure, and interrupt. A new scripts/check-build-secret-cli-args.sh guard (paired test in tests/test_check_build_secret_cli_args.sh, wired into the CI workflow-guard-tests job) blocks any reintroduction of the unsafe shape across both inline and array-arg call sites. Note: forward fix only — historical token values must be rotated server-side independently.
1.14.0
Added
  • File panel now ships a VS Code-style line-number gutter and an SCM gutter that classifies added / modified / removed lines via the pure-logic FileSCMGutterClassifier, wired through WorkspaceGitDiffService.
  • Side-by-side word-level diff (FileDiffSplitView) — renders the same word-differ used in inline diffs in a true two-pane layout. The differ itself (WordDiffer) is pure logic and unit-tested.
  • Sidebar gains a VS Code-style text search panel backed by a pure-logic workspace text search service. Results group by file, jump to line/column, and update live as you type.
  • Command palette gets a VS Code-style :NN[:CC] go-to-line mode. Type a colon and a line (and optional column) to jump within the focused editor.
  • Markdown panel adds a preview ↔ source toggle, mirroring VS Code's markdown editor affordance.
  • Explorer rows now trail file / folder modification timestamps and expose a Timeline popover for per-file history (commit list + diffs against working tree).
  • Supervisor and SCM editors accept file drops from the explorer and Finder; dropped files are inserted as references rather than copied into the message.
  • Sidebar SCM panel ports VS Code's GitHub integration (PR / issue affordances inside the SCM tree).
Changed
  • Sidebar resize: drag side effects are coalesced to onEnded, so dragging the resizer no longer fires per-frame work for every observer of the column width.
  • Sidebar workspace cards hoist their @AppStorage subscriptions to the parent, so scrolling a long workspace list does not invalidate every card on every storage write.
1.12.1
Added
  • Remote SSH connect now reuses the directory probe's OpenSSH ControlMaster. Selecting a host opens the directory picker, then launches the terminal — both rounds attach to the same authenticated channel, so password / 2FA hosts only prompt once instead of twice.
  • When a password-auth host has no Keychain entry, the sidebar opens an in-app password prompt (with optional "Save to Keychain") before the directory probe runs, replacing the legacy system SSH_ASKPASS popup. The entered password is reused by both the probe and the eventual terminal session through an in-process ephemeral store.
Changed
  • Clicking a remote host row in the sidebar now connects directly (Option-click opens in a new window). The bolt icon remains as an explicit affordance but is no longer the only hit target.
  • Reopening a remote host that already has an active workspace in the current window now focuses the existing workspace (preserving scrollback, panel layout, and supervisor state) instead of spawning a duplicate session. New-window connects keep their explicit semantics.
Fixed
  • Restored mouse interaction on terminal panes — selection drags, right-click context menus (Copy / Paste / Split), and click-to-focus all work again. The pre-routing IccMouseRoutingHealthGuard was rejecting every mouse event whose hit view's superview chain did not reach window.contentView, but WindowTerminalPortal legitimately installs the terminal host as a *sibling* of contentView under NSThemeFrame whenever contentView is not an NSGlassEffectView (i.e. macOS 14/15 plus any macOS 26 setup without liquid glass). The guard now treats both contentView and contentView.superview as healthy attachment anchors; truly orphaned hit views still fall through to .detached. Regression range: v1.11.4 through v1.12.0.
  • The terminal launch script and the directory probe now negotiate the same ControlPath, eliminating the regression where canceling the directory sheet tore down the master and forced re-authentication for the terminal.
  • Foreground notifications no longer blank out the workspace's terminal/conversation area until you switch tabs. Two redundant SwiftUI invalidations were collapsed: TabManager.moveTabToTopForNotification now skips the *currently selected* workspace (you are already looking at it; reordering it just detaches the portal-hosted terminal anchor for one frame and forces a render-recovery pass), and the top-level ContentView no longer subscribes to TerminalNotificationStore since its body does not actually render notification state — sidebar rows, badges, and the notifications page keep their own subscription so unread counts still update live.
1.11.8
Added
  • Added @ symbol search to Quick Open for the focused file panel. Type @ to list symbols from the current draft, filter them with the same palette search, and jump directly to the selected line/column.
Fixed
  • Symbol jumps now focus the file editor, apply the pending selection once the text view is ready, and preserve unsaved draft text instead of re-reading stale file contents.
  • Command palette typo tolerance now prefers the intended command word over shorter prefix matches when a query omits one character.
1.11.7
Fixed
  • Website-only: legal pages (/privacy-policy, /terms-of-service, /eula) on www.iccjk.com no longer 308-redirect to the locale root. Next.js 16 renamed middleware.ts to proxy.ts during the website upgrade and the legacy redirect set still listed those three slugs even though app/[locale]/(legal)/{privacy-policy,terms-of-service,eula}/page.tsx now serves them directly. Removed the entries so the locale-aware Next routing handles them.
Notes
  • No macOS app changes in this release. The version/build bump (1.11.7 / build 153) is purely to align the Sparkle appcast and the website's published-version metadata with the deployed site fix.
1.11.6
Changed
  • Replaced the third-party Sentry crash SDK with a local diagnostics recorder. Crashes and runtime warnings are kept as JSON under ~/Library/Application Support/imux/diagnostics/<yyyy-MM-dd>/ so you can attach them to a bug report offline.
Added
  • First-party crash collector. While "Send anonymous telemetry" is enabled (default on; togglable in Settings), the same events are uploaded to our own https://www.iccjk.com/api/error-reports endpoint with an anonymous per-install UUID — no email, license key, or hardware identifier. No third-party SDK touches your machine.
Notes
  • Turning "Send anonymous telemetry" off in Settings stops both uploads and PostHog events. Local diagnostic files remain on disk until you remove them.
1.11.5
Changed
  • Hardened the sidebar's remote SSH path: live remote directory contents (no local mirror) and the local↔remote copy/paste pasteboard now live in dedicated, individually testable modules so the explorer stays responsive when remote workspaces churn.
Notes
  • Internal-only refactors otherwise: hot-path observability (per-keystroke terminal refresh, socket dispatch, main-thread hops, session restore) now collects via an opt-in ICC_HOTPATH_SAMPLER=1 sampler and is gated against measured P95 budgets in CI. No user-visible behavior change unless the env var is set.
1.11.4
Fixed
  • Hardened AppKit mouse routing against a stack-overflow crash observed on macOS 26.2 / build 149 (incident 0A9291F4-1C32-4E12-AE19-D21A0E0E08CE). Middle- or side-button drags that hit a hosting view detached during a portal/split rebuild could drive _routeOtherMouseDraggedEvent_nextResponderForEvent:NSHostingView.hitTest into an 87k-frame _objc_msgForward self-loop. A pre-routing structural health check now rejects mouse events whose hit view is detached from the content view or carries a cyclic responder chain before AppKit's router touches it.
  • Added a defense-in-depth reentry counter at the NSWindow.sendEvent chokepoint: any mouse routing event that re-enters sendEvent for the same NSEvent instance is dropped, so related loops that do pass through the window swizzle cannot recurse indefinitely.
Notes
  • Both guards are scoped to mouse routing events (*MouseDown/*MouseUp/*MouseDragged). Key, scroll, and mouse-move events are untouched.
1.11.3
Changed
  • Remote SSH workspaces now persist their connection target, identity, SSH options, terminal startup environment/command, and the directory you were last viewing into the session snapshot. On the next launch, the workspace reopens as a remote workspace and reconnects to the same destination and directory automatically.
  • After a restored remote workspace finishes reconnecting, a one-shot banner offers to relaunch the agent panes (Codex / Claude Code / Clavue) that were running before the previous quit. Choose **Restart all** to relaunch them, or dismiss the banner to skip.
Fixed
  • Remote workspace identity is no longer lost across an app restart. Previously, snapshots omitted the remote configuration and restored remote workspaces would appear as local workspaces with empty terminal panels.
Notes
  • Sensitive material (relay tokens) and dynamically-allocated transport fields (relay/proxy ports, control sockets) are explicitly excluded from the snapshot and renegotiated on each reconnect.
  • Snapshots written by older builds remain compatible: workspaces without the new remote field load as local workspaces, unchanged.
1.11.2
Changed
  • Published the v1.11.2 stable build 148 download set and aligned the website, Sparkle appcast, latest manifest, npm launcher, and release metadata to the same signed DMG.
1.11.0
- Drop progress banner with running / completed / failed states; auto-fade after success.
Added
  • **⌘P Quick Open** in the local Files explorer — fuzzy file-name search with VS Code-style scoring (consecutive runs, boundary bonuses, CamelCase awareness, basename-exact wins). Floating panel with ↑/↓/Enter/Esc keyboard, matched-character highlight. Indexer skips .git, node_modules, DerivedData, and other build/dependency directories; capped at 50,000 entries.
  • **⌘P Quick Open in remote SSH workspaces** — same palette, server-side find walks the remote tree through the existing SSH ControlMaster channel. Picking a result opens it through the remote-file pipeline.
  • **Inline rename** on local file rows — Rename (⌘⇧Return) now edits the row in place instead of opening a sheet. Enter commits, Esc cancels.
  • **Quick Look (Space)** on local file rows — native macOS Quick Look preview for any file (PDFs, images, audio, syntax-highlighted source).
  • **Multi-row selection** in both local and remote sidebars. ⌘+click toggles, Shift+click extends a range. Batch context menu offers Copy N Paths / Insert N Refs / Delete N Items. Multi-row drag ships every selected file through an AppKit drag session so receivers (Finder, terminal, other apps) see the whole selection.
  • **Finder ↔ sidebar drop, both directions**:
  • **Session recovery for claude and codex** in every imux pane. Per-(workspace, surface) session-id mapping persists to disk; reopening a pane resumes the prior conversation automatically. Codex uses a post-launch capture path because its CLI doesn't accept a fresh-launch session id; claude uses --resume directly.
  • **Remote agent wrapper push** — connecting an SSH workspace materializes the claude/codex wrappers under ~/.icc/bin/ on the remote host (base64-embedded, digest-gated, idempotent). Remote claude / codex invocations now go through the same session-recovery layer as local ones.
  • **SSH terminal scrollback** is preserved across reconnects, matching VS Code's remote-terminal behavior.
  • **Keyboard shortcuts** on local file row context menu actions: ⌘⇧Return rename, ⌘⌫ delete, ⌘Return insert into conversation, ⌘⌥C copy path, Space Quick Look.
  • **Remote sidebar internal drag** — moving a row inside the remote tree runs mv on the remote host with a local cycle guard.
Fixed
  • **Main-thread stack overflow on long sessions (P0)** — FileDropOverlayView cached weak NSView references that became dangling after a portal/split rebuild. AppKit's _nextResponderForEvent: then walked a corrupt chain ~87,000 frames deep, overflowing the main-thread stack. Three new safeguards: superview-chain liveness check before honoring the cached target; bounded responder-chain cycle detector; cache cleared on window teardown. Same fix applied to MarkdownPanelPointerObserverView, which had the identical pattern.
  • **SSH password lockout when the remote password is rotated** — the auto-reconnect loop used to retry a stale saved password every 2 seconds, eventually locking the account. Now bails after two consecutive auth failures (SSH exit codes 5 / 255) with a clear hint to update the saved password.
  • **Defense-in-depth for SSH password echo** — the expect helper now suppresses spawn IO across the password write so a misbehaving SSH server (one that didn't disable terminal echo) can't surface the password on screen.
Changed
  • **Control plane reorganization (S1)** — extracted Sources/Control/Envelope (request/response wire format), Sources/Control/Router/CommandRegistry + MainActorHop from the monolithic TerminalController.swift. Migrated system.*, window.*, workspace.*, notification.* (~31 methods) to handler files registered through the registry. No wire-format change; legacy fall-through preserved during migration. New CommandManifestSnapshotTests pins the registered method set so silent drops surface in review.
  • **Telemetry primitive** — HotPathSampler (256-slot reservoir, os_unfair_lock-protected) lands as the collection-only foundation for the v2 plan §5 perf budgets. Disabled by default; opt-in per hot path.
Contributors
1.10.20
- Panel focus-flash token semantics: re-triggers on `MarkdownPanel`, `BrowserPanel`, `FilePanel`, and the terminal CAKeyframeAnimation path are idempotent and cancel any in-flight animation. (§4.5)
Added
  • Added FocusStack (Sources/UI/Focus/FocusStack.swift) so the browser → terminal arrow-key recovery path can find the previously focused surface after the webView lets go of first responder. Producer is wired on both IccWebView.becomeFirstResponder/resignFirstResponder and the terminal GhosttyNSView.becomeFirstResponder/resignFirstResponder; consumer hook added to BrowserPanel.yieldFocusIntent(.webView) with a same-window guard via AppDelegate.focusableTerminalView(forSurfaceId:in:). Stack is capped at 16 frames with idempotent push and pop-if-top semantics. (v2 plan §4.2)
  • Added SidebarTabSummary projection on TabManager so background workspace title / pin / color / customTitle changes refresh the sidebar without re-invalidating the rest of the workspace UI tree. The existing WorkspaceSidebarV3Card Equatable typing-latency protection is preserved; only the four sidebar identity fields now flow through the dedicated channel. (v2 plan §4.1)
  • Added Sources/Telemetry/HotPathSampler.swift, a collection-only primitive for the v2 plan §5 P95 budgets (typing latency, socket non-focus / focus, session restore, etc.). Aggregates count + sum + min + max + a 256-slot reservoir under os_unfair_lock; on-demand percentile from the reservoir; measure(metric:_:) wraps a synchronous block. Defaults disabled — opt-in for individual hot-path measurements. (v2 plan §7 S0)
  • Added two CI-friendly freeze-growth guards: scripts/check-file-sizes.sh over 28 oversized Swift files and scripts/audit-observables.sh over per-file @Published counts plus the addObserver/removeObserver balance. Both run in 0 dependencies, pure shell. Tolerance: max(+5%, +50 lines) for file size; +2 slack on @Published; widening add - remove diff fails. (v2 plan §7 S0)
  • Added 56 new XCTest cases pinning the §4 P0 fixes and the §7 S0 baseline tools: BackgroundWorkspaceTitleFreshnessTests (6), PanelFocusFlashTokenTests (4), TerminalNotificationSortTests (5), TerminalDropPathPosixContractTests (7), SidebarDragLifecycleContractTests (5), FocusStackTests (10), FocusStackConsumerHookTests (3), HotPathSamplerTests (8). 0 failures.
  • Added docs/dev/freeze-growth-baselines.md developer-facing index for the new guards and baselines.
Fixed
  • Fixed background workspace title freshness in the sidebar: titles updated by an agent now appear immediately on non-selected workspaces without needing to switch focus. Root cause was the WorkspaceSidebarV3Card.== Equatable short-circuit not including tab.title/customTitle/isPinned/customColor; routed those four fields through TabManager.sidebarTabSummaries so SwiftUI invalidation fires precisely when needed. (v2 plan §4.1)
  • Fixed manually-marked-unread notifications failing to lift to the top of the notification list. Replaced the previous "insert at index 0" insertion order in TerminalNotificationStore with a total comparator over (isUnread, lastReadChangeAt, createdAt). Every isRead-flipping mutator now stamps lastReadChangeAt = Date() and re-sorts before publishing. (v2 plan §4.6)
  • Fixed browser → terminal arrow-key recovery after the browser webView yields first responder. When the most recent FocusStack frame is a terminal surface in the same window, focus is restored to that surface so arrow keys, shell history, etc. resume working immediately. (v2 plan §4.2)
Changed
  • Pinned regression contracts for three areas the v2 plan §4 audit found already-correct in the production code, so future refactors cannot silently re-introduce known symptoms:
  • Annotated docs/v2_platform_excellence_plan.md §1 with the current Workspace.swift @Published drift (51 → 62 since the plan was written) and a back-link to scripts/observable-baseline.txt so the freeze-growth contract is visible from the plan.
1.10.19
Added
  • Added a root npm run check:runtime verification lane for release-script and reload-shim checks.
Fixed
  • Protected the stable /Applications/imux.app/Contents/Resources/bin CLI path from dev icc shim fallback installation while preserving legacy /Applications/icc.app compatibility.
1.10.15
Fixed
  • Fixed remote SSH file explorer reads for workspaces configured with user@host:port targets so directory listings and file contents use the correct SSH host and port.
Changed
  • Published a fresh stable v1.10.15 hotfix release target so GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed installer.
1.10.14
Added
  • Added workflow-contract parsing, validation diagnostics, and setup-readiness reporting for WORKFLOW.md / IMUX_WORKFLOW.md so orchestration plans can be inspected before automation is enabled.
  • Added richer remote SSH diagnostics and recovery actions, including copyable reconnect commands, SSH config access, helper/proxy state, port details, and recent remote logs.
Changed
  • Hardened remote SSH activation by clearing stale terminal history at reconnect boundaries, stripping inherited scrollback replay environment, and keeping remote workspaces focused on live remote state.
  • Reduced session scrollback replay volume for restored local terminals and disabled replay for remote SSH terminals to avoid heavy transcript reloads and UI stalls.
  • Expanded localized setup, workflow, source-control, remote, and tab-menu copy so Chinese-first operation has fewer English fallback controls.
Fixed
  • Fixed duplicated titlebar buttons by keeping visible controls in the custom top-right titlebar and suppressing the legacy AppKit accessory chrome.
  • Improved remote file-loading status, helper warning states, and retry messaging so connected SSH terminals remain usable while background services recover.
1.10.13
Changed
  • Polished collapsed left and right sidebar rails into persistent, larger edge handles with clearer hover states, labels, badges, and content spacing.
  • Kept top-right titlebar controls visible by default and removed the pill-style titlebar control container for a cleaner native toolbar feel.
  • Expanded Simplified and Traditional Chinese coverage across source-control, GitHub, prompt, language, and linked-agent UI so localized users see fewer English fallbacks.
  • Refined Clavue and Launch API copy, browser focus handling, and titlebar/status metadata to reduce interaction ambiguity.
Fixed
  • Fixed remote workspaces so the visible directory follows the connected remote path instead of showing an inherited local launch directory.
  • Restored remote directory display from persisted remote host paths and resolved the initial remote working directory after connection.
  • Kept release-facing tests aligned with the new collapsed sidebar sizing, localization coverage, browser focus, and remote-directory behavior.
1.10.12
Added
  • Added product dossier, workflow-contract, Symphony integration plan, version-upgrade plan, and version-upgrade TODO documents to guide the next imux product maturity cycle.
Changed
  • Hardened CLI workspace, pane, panel, surface, browser, markdown, notification, and flash targeting so mutating commands prefer explicit or caller-scoped context and fail closed instead of silently falling back to the selected workspace.
  • Clarified CLI usage text around caller-relative workspace and tab resolution, including destructive workspace-action examples that now show explicit workspace targets.
  • Updated remote and browser automation docs to use the window -> workspace -> pane -> surface targeting model consistently.
Fixed
  • Improved close-window and last-surface handling so workspace/window teardown behaves more predictably when closing panes, tabs, and windows.
  • Kept the localized Bonsplit tab context-menu patch in the release path so localized tab operations remain branded and translated in packaged builds.
1.10.11
Added
  • Added setup-readiness and workflow-library foundations so imux can surface launch prerequisites, configuration state, and repeatable workspace workflows more clearly.
  • Added regression coverage for setup readiness, workflow library behavior, shared controls, session persistence, terminal/Ghostty behavior, and Ghostty shell-integration bundle contents.
Changed
  • Refined shared IMUX controls and related workspace surfaces across the app shell, notifications, browser, and file panels so readiness and action states stay more consistent.
  • Hardened release packaging around local signing environment setup, appcast generation, Ghostty helper packaging, and local Bonsplit patch application.
Fixed
  • Localized Bonsplit tab context-menu actions, including Simplified Chinese and Traditional Chinese strings, so tab operations no longer appear as bare English-only labels in localized builds.
1.10.10
Fixed
  • Changed Clavue official launch API setup to show https://www.clavue.com instead of the Anthropic API endpoint, while keeping third-party mode on the Anthropic-compatible default.
  • Blocked accidental API-key pastes in the API URL field so sk-... values are kept in the API Key field instead of being normalized into invalid URLs.
  • Let Clavue/Codex linked mode launch when both CLIs and saved API profiles are ready, with notification hooks shown as optional setup instead of a hard launch blocker.
Changed
  • Simplified the Launch API editor with clearer Official/Third-Party labels, one-line API URL entry, a Use Default URL action, and a Test action that confirms launch readiness after saving.
  • Published a fresh stable v1.10.10 release target so GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed installer.
1.10.9
Fixed
  • Kept the left sidebar restore control visible after collapsing the sidebar, including minimal/titlebar-hidden layouts where the old titlebar control is not visible.
  • Added an always-available right sidebar restore control when the right/detail pane is collapsed, so users can reopen it without relying on controls inside the hidden pane.
Changed
  • Published a fresh stable v1.10.9 release target so GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed installer.
1.10.8
Fixed
  • Simplified Supervisor LLM and Launch API credential saving so API settings persist to protected local files instead of triggering interactive macOS Keychain prompts.
  • Allowed API URL and model settings to save without requiring an API key, while leaving a blank key field preserves an existing saved key.
  • Made Clear Key suppress legacy Keychain fallback values so cleared API credentials stay cleared even when older Keychain entries still exist.
Changed
  • Updated API settings copy and placeholders to remove Keychain wording and make the save behavior clearer.
1.10.7
Fixed
  • Restored Ghostty default config loading when a discovered user config path exists but has no loadable settings, so empty or placeholder config files no longer suppress Ghostty's normal defaults.
Changed
  • Published a fresh stable v1.10.7 release target so GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed installer.
1.10.6
Fixed
  • Hardened the public update feed and latest-release manifest cache policy so Sparkle and website download checks fetch fresh release metadata instead of stale CDN/browser copies.
  • Repaired the website release-link flow so homepage, changelog, latest manifest, appcast, archive URLs, and versioned DMG downloads stay aligned during installer upgrades.
Changed
  • Published a fresh stable v1.10.6 release target so GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed installer.
1.10.5
Added
  • Added an Agent Mesh command surface in the supervisor panel that packages active handoffs, evidence, review rounds, touched-file warnings, risks, requested next actions, and stop criteria into a copyable collaboration brief.
  • Added a trusted-completion guard so supervisor reviews cannot mark work complete from stale metadata alone; completion now requires terminal output, recent execution signals, ledger evidence, or concrete visual evidence.
Changed
  • Published a fresh stable v1.10.5 release target so GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed installer.
1.10.4
Added
  • Added Clavue + Codex linked mode as the default multi-agent launch path, including bundled clavue and imux-agent-mesh helpers for shared task context, peer discovery, notes, claims, and SDK handoff.
  • Added clearer linked-agent UI states so users can see when Clavue and Codex are associated with the same workspace and can install or launch the missing peer directly.
  • Expanded the official website copy with richer imux positioning, Clavue agent collaboration, browser/terminal/file workflows, and agent-sdk use cases.
Changed
  • Polished the left activity rail, sidebar controls, and agent configuration surfaces for a smoother VS Code-style layout with clearer button/list separation and less panel overlap.
  • Updated linked mode labels from Claude + Codex to Clavue + Codex across the titlebar and localized UI.
  • Published a fresh stable v1.10.4 release target so GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed installer.
Fixed
  • Restored debug Ghostty config fallback to the release app-support bundle id so debug builds can reuse the stable imux config when no tagged debug config exists.
1.10.3
Changed
  • Expanded the source control sidebar with a repository history graph, richer file and commit context menus, commit diff previews, compare-with-HEAD actions, and direct GitHub commit links.
  • Added safer repository actions for creating tags and branches from the current HEAD or a selected commit, plus copyable file and commit summaries for faster handoff.
  • Published a fresh stable v1.10.3 release target so GitHub release assets, the npm launcher, website download aliases, and Sparkle feed can advance together on one signed installer.
Documentation
  • Refreshed the GitHub, npm, and official website descriptions to position imux as a source-control-aware AI execution workspace for terminals, files, GitHub, remote hosts, browser tasks, and supervisor-guided handoffs.
1.10.2
Fixed
  • Kept browser pointer-drag focus allowance active until mouse-up so dragged browser interactions can retain focus without reopening background autofocus.
  • Published a fresh stable v1.10.2 release target so GitHub release assets, the npm launcher, website download aliases, and Sparkle feed can advance together on one signed installer.
1.10.1
Fixed
  • Added OpenAI-compatible supervisor response handling for image-capable models such as gpt-image-2, including streamed progress text, generated image links, and backward-compatible persisted supervisor snapshots.
1.10.0
Changed
  • Refreshed the Settings experience with a cleaner canvas, stronger sidebar structure, carded search, and clearer control rows while preserving existing settings persistence and keyboard shortcut workflows.
  • Published a fresh stable v1.10.0 release target so the desktop app, website metadata, download aliases, and Sparkle feed can advance together once the signed installer is generated.
1.9.1
Changed
  • Published a fresh stable v1.9.1 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one new signed installer.
1.8.16
Changed
  • Published a fresh stable v1.8.16 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one new signed installer.
  • Tightened release-site verification so the live manifest, appcast, archived DMG, latest DMG alias, changelog, homepage, and public release pages must agree before a release is considered healthy.
  • Preserved historical website download archives and remote helper release directories when syncing new release assets, so older installers and remote diagnostics stay available after a fresh release.
Fixed
  • Made remote daemon status diagnostics derive their GitHub repository from the published manifest instead of relying on stale hardcoded release metadata.
  • Stopped the public nightly page from silently offering the stable installer when no nightly download URL is configured.
1.8.15
Changed
  • Published a fresh stable v1.8.15 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one new signed installer.
  • Added a repeatable GitHub Actions quality sweep helper for release validation and made the macOS compatibility workflow manually dispatchable against a chosen ref.
Fixed
  • Reduced avoidable main-thread sync churn in terminal, tab, and Ghostty action routing by consolidating the remaining sync hops behind instrumented wrappers.
1.8.14
Changed
  • Published a fresh stable v1.8.14 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one new signed installer.
Fixed
  • Rejected duplicate logical main-window registrations without retargeting the owning TabManager to the duplicate window, preventing split-brain window ownership where one window loses its terminal attachment.
1.8.11
Changed
  • Published a fresh stable v1.8.11 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
  • Bundled the codex launcher plus the shared imux-agent-common.sh helper into the shipped app resources so packaged installs keep the same agent wrapper coverage as the checked-in compatibility CLI surface.
Fixed
  • Stopped notification-ring-only terminal updates from forcing an unnecessary Ghostty portal rebind, which reduces avoidable live terminal churn when background attention state changes.
  • Cleared stale workspace-level remote SSH error notifications as soon as a connection recovers, so the sidebar and notification surfaces stop showing an old failure after the workspace is healthy again.
1.8.10
Changed
  • Published a fresh stable v1.8.10 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
  • Simplified the leading and trailing sidebar chrome by removing the older glass-like card treatments and keeping the rail, explorer panes, and split chrome on flatter solid surfaces with fewer borders.
  • Tightened the remote SSH sidebar metrics toward a denser VS Code-style host and file-tree presentation, while still allowing narrow windows to collapse the leading sidebar down to the activity rail when content space is constrained.
Fixed
  • Reused the normal terminal attach path for Ghostty background prewarming so off-window surface creation no longer leaves a permanently blank terminal that later attaches cannot recover.
  • Added placeholder-tab recovery for orphaned visible pane selections so split and restore churn can rebind the surviving panel instead of leaving the workspace focused on an empty mapping.
1.8.9
Changed
  • Published a fresh stable v1.8.9 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
Fixed
  • Corrected Developer ID G2 intermediate detection in the release signing path so headless local packaging can match the real certificate chain without failing on issuer-order differences.
1.8.8
Changed
  • Published a fresh stable v1.8.8 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
Fixed
  • Added a startup restore window-health gate that rejects unhealthy restored window state, clears the bad persisted snapshot, recreates a clean window, and suppresses intermediate recovery saves so the app no longer re-saves a broken restore snapshot during launch recovery.
1.8.7
Changed
  • Published a fresh stable v1.8.7 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
Fixed
  • Moved supervisor API-key loading off startup and SwiftUI render paths so the app can finish launching without blocking on keychain access.
1.8.6
Changed
  • Published a fresh stable v1.8.6 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
Fixed
  • Restored remote SSH workspace path continuity so reconnecting a configured remote workspace now rehydrates currentDirectory from the persisted per-host remote path state, and remote file restore/open fallback paths continue to preserve SSH identity end-to-end.
1.8.5
Changed
  • Published a fresh stable v1.8.5 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
Fixed
  • Rejected duplicate SwiftUI primary-window registrations without retargeting the owning TabManager to the duplicate window, which prevents the recurring two-client split where one window loses its attached terminal surface.
1.8.4
Changed
  • Published a fresh stable v1.8.4 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one signed build.
  • Stable update checks now run in the background on launch and on the hourly refresh cadence, so new releases can download silently and switch into an explicit install/restart reminder once ready.
  • Tightened the SSH hosts sidebar for compact widths and localized the Bonsplit tab context menu strings so narrow layouts and translated tab actions present more consistently.
Fixed
  • Remote SSH password handling now reads and writes directly against the macOS login keychain and injects the saved credential into the startup environment once, which removes repeated security shell calls from the reconnect loop and avoids the wrong-keychain popup path.
  • Managed remote host launches now auto-connect immediately, and terminals created later by splits, pane replacement, or new-surface recovery inside a remote workspace now stay on the remote SSH session instead of falling back to a local shell.
  • Claude and Codex launch panes now receive stored API keys through initial environment injection rather than shelling out to Keychain on every launch.
  • The SSH host list header and rows now collapse cleanly in narrow leading sidebars instead of overflowing and misaligning the remote host panel.
1.8.3
Changed
  • Published a fresh stable v1.8.3 release so the desktop app, GitHub release assets, and website download aliases can move forward together on one signed build.
  • Added explorer conversation actions so local and remote files can be inserted into the active conversation target from the file manager, including drag and drop into browser and terminal conversation inputs.
Fixed
  • Managed SSH workspaces now apply TCP keepalive defaults, server-alive probes, faster connect timeouts, and a retry loop in the generated startup wrapper so transient transport loss no longer collapses the workspace as aggressively.
  • icc ssh compatibility metadata now reports the long-lived reconnect command and startup path, and the remote shell bootstrap waits briefly for the authenticated relay before handing control to the login shell.
  • Remote explorer state now remembers the last visited remote directory when opening files or revisiting folders, which keeps reconnects and host re-entry aligned with the user’s last working location.
1.8.1
Changed
  • Published a fresh stable v1.8.1 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one new signed installer.
Fixed
  • Prevented non-focus synthetic input and debug socket commands from activating the app or stealing the key window unless the caller explicitly used a focus-intent command first.
  • Reduced unnecessary terminal surface redraw pressure after socket-driven text, key, and clear-screen actions by only forcing refreshes for terminal views that are actually attached to a window.
1.7.4
Changed
  • Published a fresh stable v1.7.4 release so the desktop app, GitHub release assets, website download aliases, and Sparkle feed can advance together on one new signed build.
Fixed
  • Stopped app-level shortcut routing from dropping Cmd+W events that originated in auxiliary non-main windows, so those windows now close correctly without falling through into main terminal panel close logic.
  • Hardened the Ghostty copy/selection path to require a live runtime surface before querying selection state or dispatching copy-related binding actions, which reduces stale-surface crashes around Cmd+C.
1.7.3
Changed
  • Rebuilt and republished the stable v1.7.3 installer as one fresh signed and notarized DMG, then overwrote the existing GitHub release assets so the public release line points to one current artifact again.
  • Refreshed the website-facing changelog, release/update docs, and release metadata so the public site now describes v1.7.3 as the current stable line and points users to the same installer path served by GitHub Releases.
Fixed
  • Corrected the stable website release metadata so appcast.xml, latest.json, the website-hosted archive URL, and the direct download aliases all describe the same DMG bytes, length, hash, and Sparkle EdDSA signature.
  • Hardened the website deploy verification path to download the live archive and validate its size, SHA-256, and Sparkle signature before treating a release as healthy.
1.7.1
Changed
  • Expanded the source control sidebar into a fuller GitHub workflow surface with repository connect and update actions, base-branch selection, compare links, authored pull request forms, and draft release creation directly from the current workspace.
  • Continued the v3 panel polish across titlebar controls, sidebar chrome, iconography, and light-mode tinting so the desktop shell presents a more consistent dark-first visual system without leaving light mode behind.
  • Tightened the bundled icc CLI usage contract around caller-relative workspace and surface defaults, and added executable usage tests so help text stays aligned with the runtime routing model.
Fixed
  • Stabilized portal-hosted terminal and browser layout synchronization so split, sidebar, and window-geometry changes no longer misplace live surfaces as easily during rapid workspace churn.
  • Preserved the last-window session snapshot earlier in the close path, which reduces cases where closing the final main window drops a fuller restore state.
  • Improved remote workspace connection coverage and tab-manager regression coverage around the newer routing and workspace state transitions.
1.7.0
Changed
  • Rebuilt the desktop shell around the new v3 client panel with a denser dark-first chrome system across the left rail, sidebars, top controls, notifications, and settings surfaces, while also rebalancing light mode to use cleaner neutral tones.
  • Migrated core UI affordances onto a shared semantic icon layer backed by curated Lucide assets so navigation, source control, notifications, browser tools, and settings now use more familiar and consistent iconography.
  • Added saved launch API profiles for Claude Code and Codex with Keychain-backed secrets, official endpoints, optional model overrides, and third-party compatible API URL support directly in Settings.
  • Expanded the source control workspace sidebar with GitHub-aware repository creation and quick links for repository, branch, and Actions flows from the current workspace context.
Fixed
  • Background workspace terminal title changes now continue to update workspace labels and sidebar state even while another workspace is focused, which makes multi-workspace monitoring more reliable.
  • Tightened CLI routing for destructive or workspace-sensitive actions so they require caller-relative or explicit workspace, tab, or surface context instead of silently falling back to the currently focused workspace.
  • Refined sidebar and settings layout behavior to keep chrome, badges, and metadata presentation more stable and visually consistent across light and dark appearances.
1.6.0
Changed
  • Generalized the existing WeChat binding model into a broader Channels surface so future account integrations like QQ, Feishu, and Telegram can plug into the same conversation-to-workspace routing model without forking the core sidebar flow.
  • Reworked the shipped imux icon and wordmark set into a cleaner monogram-based system with matching light, dark, debug, and nightly variants generated from a single tracked asset source, and switched the release-facing logo set onto a white-backed mark.
  • Bumped the release line to 1.6.0 / build 100 so the desktop app, signed release artifacts, and website manifests can publish a new stable version cleanly.
Fixed
  • Preserved compatibility for existing saved channel settings and restored sidebar state by continuing to decode legacy wechat identifiers and stored field names while presenting the new Channels naming in the UI.
  • Kept the release-facing desktop and web branding assets aligned by regenerating the app icon, website logo, and wordmark outputs from the same source generator.
  • Reduced sidebar text density again on narrow left and right sidebars, and improved conversation route titles so compact layouts keep meaningful names visible.
  • Stopped the Bonsplit debug event logger from aborting the app when debug log file writes fail on a full disk by falling back to in-memory buffering.
  • Routed terminal notification store mutations back onto the main thread before touching published SwiftUI state, reducing background-thread publish violations in the updated sidebar flows.
1.5.5
Changed
  • Replaced the last shipped iatlas/legacy app-name strings in the menu bar, notification prompts, welcome/about copy, and other localized desktop UI surfaces so the public app now consistently presents itself as imux.
  • Tightened the release-facing app copy around the imux identity while leaving internal compatibility identifiers and legacy restore paths intact where they are still required.
1.5.4
Changed
  • Rebranded the shipped app, website download surfaces, feedback copy, and release asset naming from the legacy icc/atlas mix to the public imux brand.
  • Replaced the shared app and web logo set with a new imux icon system generated from tracked source assets so GitHub, the website, and the desktop app use the same visual identity.
  • Locked the website production build onto next build --webpack, which avoids the Turbopack stall we were seeing on this release host and makes deployment reproducible again.
Fixed
  • Session restore now saves into the new imux support path while still reading legacy iatlas and icc snapshot locations, so existing multi-workspace restores survive the brand migration instead of reopening empty.
  • Release packaging now restages website download assets as part of the signed upload flow, which keeps GitHub release artifacts, latest.json, and the website deploy path aligned on the same versioned DMG.
1.5.2
Fixed
  • Session restore now preserves richer multi-workspace imux snapshots when the last main window closes, so reopening the app no longer tends to collapse a previously open pane set into a thin single-workspace state.
  • Recent thin lifecycle saves no longer override a fuller recent stable snapshot during restore, which makes previously opened conversation and workspace panes far more likely to come back intact after close and reopen.
  • Notification-driven workspace reorder and focus jumps now trigger explicit render recovery, reducing the intermittent black front panel that could appear after task-completion events.
1.5.1
Fixed
  • Remote SSH child-exit on the last terminal now preserves the workspace instead of cascading into workspace and window close, so reconnecting can continue from the same remote context.
  • Enabled the existing transient terminal portal recovery path by default, reducing black-screen failures during split, sidebar, and workspace churn.
1.5.0
Changed
  • Promoted the active stable line to v1.5.0 so the desktop app, GitHub release path, and website metadata can converge on a fresh release target instead of reusing the earlier v1.4.0 line.
  • Tightened the leading workspace chrome again so the activity rail, workspace header, and sidebar rows sit much closer to a dense VS Code-style layout instead of the rounder card-like presentation from earlier builds.
  • Replaced the oversized terminal welcome banner with a compact version and shortcut strip so a fresh workspace opens into usable terminal space immediately.
Fixed
  • Website production builds no longer require feedback-delivery secrets at build time, so the public site can compile even when feedback sending is intentionally disabled.
  • Added an explicit production website deployment workflow for the imux site so the web release path has a dedicated publish job instead of relying on indirect release-only updates.
  • Restored right-sidebar resizing when the inspector is showing files so users can widen and narrow that panel directly instead of getting stuck at one width.
  • Scoped Return forwarding away from active macOS input-method composition in the affected terminal path so pressing Return during IME composition no longer submits the partially composed text unexpectedly.
1.4.0
Changed
  • Refreshed the workspace chrome with denser VS Code-style sidebars, simpler pane titles, tighter file and remote lists, and dedicated left and right sidebar toggles in the titlebar.
  • Local file rows now expose cleaner drag payloads so file paths can be dropped directly into terminal inputs and other compatible targets from the sidebar.
  • Remote SSH workspaces now remember the last visited path for each host and keep the remote workspace configuration available after an SSH session ends, so reconnecting restores context instead of discarding the workspace.
Fixed
  • Reduced the default terminal font fallback to 12pt when the user has not set a font size explicitly, bringing the terminal back in line with the tighter layout.
  • Scoped text-input recovery refreshes to short post-transition windows, which reduces unnecessary refresh work on macOS while still recovering blank terminal frames after visibility and window changes.
  • Prevented duplicate primary windows from remaining open when macOS re-materializes the same logical workspace scene.
1.3.1
Fixed
  • Restored the terminal and browser content inset in within-window sidebar mode so a fresh install no longer draws the live workspace underneath the sidebar on first launch.
  • Narrow-window workspace layouts now keep the content portal aligned with the visible sidebar edge instead of pinning the terminal to column zero behind the left rail.
1.3.0
Changed
  • Added release-asset resync support so an existing signed release can republish the website download surface without rebuilding new binaries.
  • Updated the active GitHub release and homepage metadata so the website links, manifests, and automation all publish the same v1.3.0 release line.
Fixed
  • Browser slash commands in embedded web chat inputs now keep their leading slash on submit even when WebKit routes text entry through its native field editor path.
  • Dev-tagged builds no longer show the install-repair recovery prompt when they are launched from an isolated development path.
1.2.0
Added
  • Added an install-and-relaunch recovery flow when icc is launched from a DMG, App Translocation, or another unsupported path, so the running copy can move itself into an Applications folder without making the user restart the process manually.
Fixed
  • Replacing an older installed icc.app now overwrites the existing app bundle in /Applications or ~/Applications instead of treating that installed copy as a blocking directory.
  • Updater compatibility errors now offer a direct recovery action that repairs the installed copy and relaunches the app from the supported location.
1.1.0
Changed
  • Removed inherited public-brand shadows across the app, website, legal pages, support links, and localized release-facing copy so the active imux product line now presents one consistent identity.
  • Repointed active docs, issue tracking, feedback handling, and release-facing GitHub links to the current imux repository and website surfaces.
  • Refreshed the community and changelog web surfaces so the current stable installer, support entry points, and website messaging all describe the same release line.
Fixed
  • About/help/update surfaces no longer send users through stale repository paths when opening docs, issue tracking, commit links, or release notes.
  • Website feedback delivery now uses imux-branded sender metadata and a configurable recipient path instead of exposing the previous company recipient in active runtime code.
1.0.10
Added
  • Added a titlebar quick action for Claude + Codex linked mode so the multi-model workspace layout is reachable directly from the main window controls instead of being hidden inside the source-control panel.
Changed
  • The AI Command Center collaboration launcher now works from the current workspace directory even when the workspace is not a Git repository.
  • Updated website release copy so the public changelog and download surfaces describe the new stable line consistently.
Fixed
  • Main window, titlebar accessory, and settings-hosted SwiftUI controls now accept the first inactive-window click instead of dropping it on activation.
  • The titlebar shortcut-hint layout now reserves space for the new linked-mode control instead of colliding with the create menu hint positions.
1.0.9
Changed
  • Rebranded active website docs, legal, and community surfaces to icc, and aligned active GitHub links with the current miounet11/icc repository.
  • Updated localized message packs for active product surfaces so install and product copy no longer present legacy icc naming.
Fixed
  • Sidebar interaction flow now supports a persistent left navigation pane while right-side tool panes are open, and workspace switches reset file and remote explorer editor context correctly.
1.0.8
Changed
  • Hardened the macOS installer packaging path by routing local and GitHub releases through one shared DMG creation helper.
  • Updated the website stable-line copy and release notes so the homepage and changelog describe the same current installer version.
Fixed
  • Release publication now mounts and verifies the DMG before upload, checking the app bundle shape and the Applications drag target so malformed installers are blocked before users download them.
1.0.6
Changed
  • Refreshed the stable imux installer and website download surfaces so the public homepage, manifest, and GitHub release can all point to the same versioned macOS package.
  • Regenerated the imux-branded app icons and website logo assets from a single source so desktop and web branding stay aligned.
Fixed
  • Long supervisor prompt cards in the sidebar now stay bounded inside the panel instead of expanding the entire narrow layout.
1.0.4
Added
  • Quick settings import shortcuts for VS Code, Cursor, Claude Code, and Codex so users can move into icc faster without rebuilding their terminal preferences by hand.
  • A source-control sidebar workflow for fast git pull, fast git push, and repo-status actions that opens real terminal panes in the current workspace instead of acting like a disconnected stub.
  • An AI Command Center collaboration panel that can add Claude and Codex panes or create a shared dual-model layout directly inside the current workspace.
Changed
  • Refreshed the app icon, product logo, welcome copy, and linked website surfaces so the public icc brand is more distinct and consistent across the desktop app and the website.
  • Refreshed the release-facing documentation for the icc launch: README files, install guidance, contributing notes, remote SSH docs, browser automation notes, notification docs, and legacy Homebrew/web documentation were updated to describe the current product and repository.
  • Added an imux brand guide and upgraded the translated README files from temporary placeholders into localized landing pages for the public v0.0.1 release.
  • Strengthened the public-facing product narrative so the main docs and web notes present icc as a premium, terminal-first AI command center instead of a plain rename.
  • Updated default terminal presentation to sit closer to a familiar VS Code baseline with a 14pt default font, adjusted terminal palette values, and cleaner sidebar/detail chrome.
  • Reworked user-facing labels that still surfaced legacy icc naming so the shipped product presents itself as icc in the main release-facing paths.
Fixed
  • The right sidebar collapse control now renders a visible icon again.
  • The sidebar now exposes a footer settings entry so users can reach automation and app preferences more directly.
  • English submit behavior in the native feedback/conversation composer now uses Return to send and keeps Shift+Return for newline insertion, while preserving IME composition behavior.
  • Updater compatibility handling for older installs now detects disk-image, app-translocation, and non-Applications launch paths before Sparkle fails, and shows a direct recovery message with the current app path.
0.62.2
Added
  • Configurable sidebar tint color with separate light/dark mode support via Settings and config file (sidebar-background, sidebar-tint-opacity) (#1465)
  • Cmd+P all-surfaces search option (#1382)
  • icc themes command with bundled Ghostty themes (#1334, #1314)
  • Sidebar can now shrink to smaller widths (#1420)
  • Menu bar visibility setting (#1330)
Changed
  • CLI Sentry events are now tagged with the app release (#1408)
  • Stable socket listener now falls back to a user-scoped path, and repeated startup failures are throttled (#1351, #1415)
Fixed
  • Command palette command-mode shortcut, navigation, and omnibar backspace or arrow-key regressions (#1417, #1413)
  • Stale Claude sidebar status from missing hooks, OSC suppression, and PID cleanup (#1306)
  • Split cwd inheritance when the shell cwd is stale (#1403)
  • Crashes when creating a new workspace and when inserting a workspace into an orphaned window context (#1391, #1380)
  • Cmd+W close behavior and close-confirmation shell-state regressions (#1395, #1386)
  • macOS dictation NSTextInputClient conformance and terminal image-paste fallbacks (#1410, #1305, #1361, #1358)
  • VS Code command palette target resolution, Ghostty Pure prompt redraws, and internal drag regressions (#1389, #1363, #1316, #1379)
0.62.1
Added
  • Cmd+T (New tab) shortcut on the welcome screen (#1258)
Fixed
  • Cmd+backtick window cycling skipping windows
  • Titlebar shortcut hint clipping (#1259)
  • Terminal portals desyncing after sidebar changes (#1253)
  • Background terminal focus retries reordering windows
  • Pure-style multiline prompt redraws in Ghostty
  • Return key not working on Cmd+Ctrl+W close confirmation (#1279)
  • Concurrent remote daemon RPC calls timing out (#1281)
Removed
  • SSH remote port proxying (reverted, will return in a future release)
0.62.0
Markdown Viewer, Browser Find, Vi Copy Mode, and Localization

Markdown Viewer. Open Markdown files in their own panel and keep them live with file watching. Notes, READMEs, and docs refresh automatically as the file changes on disk.

Find in Browser. Browser panels now support Cmd+F with inline find controls, so you can search long docs, dashboards, and issue threads without leaving imux.

Vi Copy Mode. Terminal scrollback now has a keyboard copy mode with vi-style navigation, making it much easier to inspect and copy from large output buffers.

Custom Notification Sounds. Choose from bundled sounds or pick your own audio file so background task notifications are easier to notice and easier to personalize.

Expanded Localization. imux now includes Japanese plus 16 additional languages, and a per-app language override lets you change the UI language without changing macOS system settings.

Added
  • Markdown viewer panel with live file watching (#883)
  • Find-in-page (Cmd+F) for browser panels (#837, #875)
  • Keyboard copy mode for terminal scrollback with vi-style navigation (#792)
  • Custom notification sounds with file picker support (#839, #869)
  • Browser camera and microphone permission support (#760, #913)
  • Language setting for per-app locale override (#886)
  • Japanese localization (#819)
  • 16 new languages added to localization (#895)
  • Kagi as a search provider option (#561)
  • Open Folder command (Cmd+O) (#656)
  • Dark mode app icon for macOS Sequoia (#702)
  • Close other pane tabs with confirmation (#475)
  • Flash Focused Panel command palette action (#638)
  • Zoom/maximize focused pane in splits (#634)
  • icc tree command for full CLI hierarchy view (#592)
  • Install or uninstall the icc CLI from the command palette (#626)
  • Clipboard image paste in terminal with Cmd+V (#562, #853)
  • Middle-click X11-style selection paste in terminal (#369)
  • Honor Ghostty background-opacity across all icc chrome (#667)
  • Setting to hide Cmd-hold shortcut hints (#765)
  • Focus-follows-mouse on terminal hover (#519)
  • Sidebar help menu in the footer (#958)
  • External URL bypass rules for the embedded browser (#768)
  • Telemetry opt-out setting (#610)
  • Browser automation docs page (#622)
  • Vim mode indicator badge on terminal panes (#1092)
  • Sidebar workspace color in CLI sidebar_state output (#1101)
  • Prompt before closing window with Cmd+Ctrl+W (#1219)
  • Jump to Latest button in notifications popover (#1167)
  • Khmer localization (#1198)
  • icc claude-teams launcher (#1179)
Changed
  • Command palette search is now async and decoupled from typing for reduced lag
  • Fuzzy matching improved with single-edit and omitted-character word matches
  • Replaced keychain password storage with file-based storage (#576)
  • Fullscreen shortcut changed to Cmd+Ctrl+F, and Cmd+Enter also toggles fullscreen (#530)
  • Workspace rename shortcut Cmd+Shift+R now uses the command palette flow
  • Renamed tab color to workspace color in user-facing strings (#637)
  • Feedback recipient changed to [email protected] (#1007)
  • Regenerated app icons from Icon Composer (#1005)
  • Moved update logs into the Debug menu (#1008)
  • Updated Ghostty to v1.3.0 (#1142)
  • Welcome screen colors adapted for light mode (#1214)
  • Notification sound picker width constrained (#1168)
Fixed
  • Frozen blank launch from session restore race condition (#399, #565)
  • Crash on launch from an exclusive access violation in drag-handle hit testing (#490)
  • Use-after-free in ghostty_surface_refresh after sleep/wake (#432, #619)
  • Startup SIGSEGV by pre-warming locale before SentrySDK.start (#927)
  • IME issues: Shift+Space toggle inserting a space (#641, #670), Ctrl fast path blocking IME events, browser address bar Japanese IME (#789, #867), and Cmd shortcuts during IME composition
  • CLI socket autodiscovery for tagged sockets (#832)
  • Flaky CLI socket listener recovery (#952, #954)
  • Side-docked dev tools resize (#712)
  • Dvorak Cmd+C colliding with the notifications shortcut (#762)
  • Terminal drag hover overlay flicker
  • Titlebar controls clipped at the bottom edge (#1016)
  • Sidebar git branch recovery after sleep/wake and agent checkout (#494, #671, #905)
  • Browser portal routing, uploads, and click focus regressions (#908, #961)
  • Notification unread persistence on workspace focus
  • Escape propagation when the command palette is visible (#847)
  • Cmd+Shift+Enter pane zoom regression in browser focus (#826)
  • Cross-window theme background after jump-to-unread (#861)
  • window.open() and target=_blank not opening in a new tab (#693)
  • Terminal wrap width for the overlay scrollbar (#522)
  • Orphaned child processes when closing workspace tabs (#889)
  • Cmd+F Escape passthrough into terminal (#918)
  • Terminal link opens staying in the source workspace (#912)
  • Ghost terminal surface rebind after close (#808)
  • Cmd+plus zoom handling on non-US keyboard layouts (#680)
  • Menubar icon invisible in light mode (#741)
  • Various drag-handle crash fixes and reentrancy guards
  • Background workspace git metadata refresh after external checkout
  • Markdown panel text click focus (#991)
  • Browser Cmd+F overlay clipping in portal mode (#916)
  • Voice dictation text insertion (#857)
  • Browser panel lifecycle after WebContent process termination (#892)
  • Typing lag reduction by hiding invisible views from the accessibility tree (#862)
  • CJK font fallback preventing decorative font rendering for CJK characters (#1017)
  • Inline VS Code serve-web token exposure via argv (#1033)
  • Browser pane portal anchor sizing (#1094)
  • Pinned workspace notification reordering (#1116)
  • icc --version memory blowup (#1121)
  • Notification ring dismissal on direct terminal clicks (#1126)
  • Browser portal visibility when terminal tab is active (#1130)
  • Browser panes reloading when switching workspaces (#1136)
  • Sidebar PR badge detection (#1139)
  • Browser address bar disappearing during pane zoom (#1145)
  • Ghost terminal surface focus after split close (#1148)
  • Browser DevTools resize loop and layout stability (#1170, #1173, #1189)
  • Typing lag from sidebar re-evaluation and hitTest overhead (#1204)
  • Browser pane stale content after drag splits (#1215)
  • Terminal drop overlay misplacement during drag hover (#1213)
  • Hidden browser slot inspector focus crash (#1211)
  • Browser devtools hide fallback (#1220)
  • Browser portal refresh on geometry churn (#1224)
  • Browser tab switch triggering unnecessary reload (#1228)
  • Devtools side dock guard for attached devtools (#1230)
0.61.0
Tab Colors, Command Palette, Pin Workspaces

Tab Colors. Right-click any workspace in the sidebar to assign it a color. There are 17 presets to choose from, or pick a custom color. Colors show on the tab itself and on the workspace indicator rail.

Tab Colors

Command Palette. Hit Cmd+Shift+P to open a searchable command palette. Every action in imux is here: creating workspaces, toggling the sidebar, checking for updates, switching windows. Keyboard shortcuts are shown inline so you can learn them as you go.

Command Palette

Open With. You can now open your current directory in VS Code, Cursor, Zed, Xcode, Finder, or any other editor directly from the command palette. Type "open" and pick your editor.

Open With

Pin Workspaces. Pin a workspace to keep it at the top of the sidebar. Pinned workspaces stay put when other workspaces reorder from notifications or activity.

Pin Workspaces

Workspace Metadata. The sidebar now shows richer context for each workspace: PR links that open in the browser, listening ports, git branches, and working directories across all panes.

Workspace Metadata
Added
  • Command palette (Cmd+Shift+P) with update actions and all-window switcher results (#358, #361)
  • Split actions and shortcut hints in terminal context menus
  • Cross-window tab and workspace move UI with improved destination focus behavior
  • Sidebar pull request metadata rows and workspace PR open actions
  • Workspace color schemes and left-rail workspace indicator settings (#324, #329, #332)
  • URL open-wrapper routing into the embedded browser (#332)
  • Cmd+Q quit warning with suppression toggle (#295)
  • icc --version output now includes commit metadata
Changed
  • Added light mode and unified theme refresh across app surfaces (#258) — thanks @ijpatricio for the report!
  • Browser link middle-click handling now uses native WebKit behavior (#416)
  • Settings-window actions now route through a single command-palette/settings flow
  • Sentry upgraded with tracing, breadcrumbs, and dSYM upload support (#366)
  • Session restore scope clarification: icc restores layout, working directory, scrollback, and browser history, but does not resume live terminal process state yet
Fixed
  • Startup split hang when pressing Cmd+D then Ctrl+D early after launch (#364)
  • Browser focus handoff and click-to-focus regressions in mixed terminal/browser workspaces (#381, #355)
  • Caps Lock handling in browser omnibar keyboard paths (#382)
  • Embedded browser deeplink URL scheme handling (#392)
  • Sidebar resize cap regression (#393)
  • Terminal zoom inheritance for new splits, surfaces, and workspaces (#384)
  • Terminal find overlay layering across split and portal-hosted layouts
  • Titlebar drag and double-click zoom handling on browser-side panes
  • Stale browser favicon and window-title updates after navigation
0.60.0
Tab Context Menu, DevTools, Notification Rings, CJK Input

Tab Context Menu. Right-click any tab in a pane to rename it, close tabs to the left or right, move it to another pane, or create a new terminal or browser tab next to it. You can also zoom a pane to full size and mark tabs as unread.

Tab Context Menu

Browser DevTools. The embedded browser now has full WebKit DevTools. Open them with the standard shortcut and they persist across tab switches. Inspect elements, debug JavaScript, and monitor network requests without leaving imux.

Browser DevTools

Notification Rings. When a background process sends a notification (like a long build finishing), the terminal pane shows an animated ring so you can spot it at a glance without switching workspaces.

CJK Input. Full IME support for Korean, Chinese, and Japanese. Preedit text renders inline with proper anchoring and sizing, so composing characters works the way you'd expect.

CJK Input

Claude Code. Claude Code integration is now enabled by default. Each workspace gets its own routing context, and agents can read terminal screen contents via the API.

Added
  • Tab context menu with rename, close, unread, and workspace actions (#225)
  • Cmd+Shift+T reopens closed browser panels (#253)
  • Vertical sidebar branch layout setting showing git branch and directory per pane
  • JavaScript alert/confirm/prompt dialogs in browser panel (#237)
  • File drag-and-drop and file input in browser panel (#214)
  • tmux-compatible command set with matrix tests (#221)
  • Pane resize divider control via CLI (#223)
  • Production read-screen capture APIs (#219)
  • Notification rings on terminal panes (#132)
  • Claude Code integration enabled by default (#247)
  • HTTP host allowlist for embedded browser with save and proceed flow (#206, #203)
  • Setting to disable workspace auto-reorder on notification (#215)
  • Browser panel mouse back/forward buttons and middle-click close (#139)
  • Browser DevTools shortcut wiring and persistence (#117)
  • CJK IME input support for Korean, Chinese, and Japanese (#125)
  • --help flag on CLI subcommands (#128)
  • --command flag for new-workspace CLI command (#121)
  • rename-tab socket command (#260)
  • Remap-aware bonsplit tooltips and browser split shortcuts (#200)
Fixed
  • IME preedit anchor sizing (#266)
  • Cmd+Shift+T focus against deferred stale callbacks (#267)
  • Unknown Bonsplit tab context actions causing crash (#264)
  • Socket CLI commands stealing macOS app focus (#260)
  • CLI unix socket lag from main-thread blocking (#259)
  • Main-thread notification cascade causing hangs (#232)
  • Favicon out-of-sync during back/forward navigation (#233)
  • Stale sidebar git branch after closing a split
  • Browser download UX and crash path (#235)
  • Browser reopen focus across workspace switches (#257)
  • Mark Tab as Unread no-op on focused tab (#249)
  • Split dividers disappearing in tiny panes (#250)
  • Flaky browser download activity accounting (#246)
  • Drag overlay routing and terminal overlay regressions (#218)
  • Initial bonsplit split animation flicker
  • Window top inset on new window creation (#224)
  • Cmd+Enter being routed as browser reload (#213)
  • Child-exit close for last-terminal workspaces (#254)
  • Sidebar resizer hitbox and cursor across portals (#255)
  • Workspace-scoped tab action resolution
  • IDN host allowlist normalization
  • setup.sh cache rebuild and stale lock timeout (#217)
  • Inconsistent Tab/Workspace terminology in settings and menus (#187)
Changed
  • CLI workspace commands now run off the main thread for better responsiveness (#270)
  • Remove border below titlebar (#242)
  • Slimmer browser omnibar with button hover/press states (#271)
  • Browser under-page background refreshes on theme updates (#272)
  • Command shortcut hints scoped to active window (#226)
  • Nightly and release assets are now immutable (no accidental overwrite) (#268, #269)
0.59.0
Fixed
  • Fix panel resize hitbox being too narrow and stale portal frame after panel resize
0.58.0
Fixed
  • Fix split blackout race condition and focus handoff when creating or closing splits
0.57.0
Added
  • Terminal panes now show an animated drop overlay when dragging tabs
Fixed
  • Fix blue hover not showing when dragging tabs onto terminal panes
  • Fix stale drag overlay blocking clicks after tab drag ends
0.56.0
No user-facing changes.
0.55.0
Changed
  • Move port scanning from shell to app-side with batching for faster startup
Fixed
  • Fix visual stretch when closing split panes
  • Fix omnibar Cmd+L focus races
0.54.0
Fixed
  • Fix browser omnibar Cmd+L causing 100% CPU from infinite focus loop
0.53.0
Changed
  • CLI commands are now workspace-relative: commands use ICC_WORKSPACE_ID environment variable so background agents target their own workspace instead of the user's focused workspace
  • Remove all index-based CLI APIs in favor of short ID refs (surface:1, pane:2, workspace:3)
  • CLI send and send-key support --workspace and --surface flags for explicit targeting
  • CLI escape sequences (\n, \r, \t) in send payloads are now handled correctly
  • --id-format flag is respected in text output for all list commands
Fixed
  • Fix background agents sending input to the wrong workspace
  • Fix close-surface rejecting cross-workspace surface refs
  • Fix malformed surface/pane/workspace/window handles passing through without error
  • Fix --window flag being overridden by ICC_WORKSPACE_ID environment variable
0.52.0
Changed
  • Faster workspace switching with reduced rendering churn
Fixed
  • Fix Finder file drop not reaching portal-hosted terminals
  • Fix unfocused pane dimming not showing for portal-hosted terminals
  • Fix terminal hit-testing and visual glitches during workspace teardown
0.51.0
Fixed
  • Fix menubar and right-click lag on M1 Macs in release builds
  • Fix browser panel opening new tabs on link click
0.50.0
Fixed
  • Fix crashes and fatal error when dropping files from Finder
  • Fix zsh git branch display not refreshing after changing directories
  • Fix menubar and right-click lag on M1 Macs
0.49.0
Fixed
  • Fix crash (stack overflow) when clicking after a Finder file drag
  • Fix titlebar folder icon briefly enlarging on workspace switch
0.48.0
Fixed
  • Fix right-click context menu lag in notarized builds by adding missing hardened runtime entitlements
  • Fix claude shim conflicting with --resume, --continue, and --session-id flags
0.47.0
Fixed
  • Fix sidebar tab drag-and-drop reordering not working
0.46.0
Fixed
  • Fix broken mouse click forwarding in terminal views
0.45.0
Changed
  • Rebuild with Xcode 26.2 and macOS 26.2 SDK
0.44.0
Fixed
  • Crash caused by infinite recursion when clicking in terminal (FileDropOverlayView mouse event forwarding)
0.38.1
Fixed
  • Right-click and menubar lag in production builds (rebuilt with macOS 26.2 SDK)
0.38.0
Added
  • Double-clicking the sidebar title-bar area now zooms/maximizes the window
Fixed
  • Browser omnibar Cmd+L now reliably refreshes/selects-all and supports immediate typing without stale inline text
  • Omnibar inline completion no longer replaces typed prefixes with mismatched suggestion text
0.37.0
Added
  • "+" button on the tab bar for quickly creating new terminal or browser tabs
0.36.0
Fixed
  • App hang when omnibar safety timeout failed to fire (blocked main thread)
  • Tab drag/drop not working when multiple workspaces exist
  • Clicking in browser WebView not focusing the browser tab
0.35.0
Fixed
  • App hang when clicking browser omnibar (NSTextView tracking loop spinning forever)
  • White flash when creating new browser panels
  • Tab drag/drop broken when dragging over WebView panes
  • Stale drag timeout cancelling new drags of the same tab
  • 88% idle CPU from infinite makeFirstResponder loop
  • Terminal keys (arrows, Ctrl+N/P) swallowed after opening browser
  • Cmd+N swallowed by browser omnibar navigation
  • Split focus stolen by re-entrant becomeFirstResponder during reparenting
0.34.0
Fixed
  • Browser not loading localhost URLs correctly
0.33.0
Fixed
  • Menubar and general UI lag in production builds
  • Sidebar tabs getting extra left padding when update pill is visible
  • Memory leak when middle-clicking to close tabs
0.32.0
Sidebar Metadata

Sidebar Metadata. The sidebar now displays git branch, listening ports, log entries, progress bars, and status pills for each workspace.

Added
  • Sidebar metadata: git branch, listening ports, log entries, progress bars, and status pills
Fixed
  • localhost and 127.0.0.1 URLs not resolving correctly in the browser panel
Changed
  • browser open now targets the caller's workspace by default via ICC_WORKSPACE_ID
0.31.0
Added
  • Arrow key navigation in browser omnibar suggestions
  • Browser zoom shortcuts (Cmd+/-, Cmd+0 to reset)
  • "Install Update and Relaunch" menu item when an update is available
Changed
  • Open browser shortcut remapped from Cmd+Shift+B to Cmd+Shift+L
  • Flash focused panel shortcut remapped from Cmd+Shift+L to Cmd+Shift+H
  • Update pill now shows only in the sidebar footer
Fixed
  • Omnibar inline completion showing partial domain (e.g. "news." instead of "news.ycombinator.com")
0.30.0
Fixed
  • Update pill not appearing when sidebar is visible in Release builds
0.29.0
Added
  • Cmd+click on links in the browser opens them in a new tab
  • Right-click context menu shows "Open Link in New Tab" instead of "Open in New Window"
  • Third-party licenses bundled in app with Licenses button in About window
  • Update availability pill now visible in Release builds
Changed
  • Cmd+[/] now triggers browser back/forward when a browser panel is focused (no-op on terminal)
  • Reload configuration shortcut changed to Cmd+Shift+,
  • Improved browser omnibar suggestions and focus behavior
0.28.2
Fixed
  • Sparkle updates from 0.27.0 could fail to detect newer releases because release build numbers were behind the latest published appcast build number
  • Release GitHub Action failed on repeat runs when SUPublicEDKey / SUFeedURL already existed in Info.plist
0.28.1
Fixed
  • Release build failure caused by debug-only helper symbols referenced in non-debug code paths
0.28.0
Added
  • Optional nightly update channel in Settings (Receive Nightly Builds)
  • Automated nightly build and publish workflow for main when new commits are available
Changed
  • Settings and About windows now use the updated transparent titlebar styling and aligned controls
  • Repository license changed to GNU AGPLv3
Fixed
  • Terminal panes freezing after repeated split churn
  • Finder service directory resolution now normalizes paths consistently
0.27.0
Fixed
  • Muted traffic lights and toolbar items on macOS 14 (Sonoma) caused by clipsToBounds default change
  • Toolbar buttons (sidebar, notifications, new tab) disappearing after toggling sidebar with Cmd+B
  • Update check pill not appearing in titlebar on macOS 14 (Sonoma)
0.26.0
Fixed
  • Muted traffic lights and toolbar items in focused window caused by background blur in themeFrame
  • Sidebar showing two different textures near the titlebar on older macOS versions
0.25.0
Fixed
  • Blank terminal on macOS 26 (Tahoe) — two additional code paths were still clearing the window background, bypassing the initial fix
  • Blank terminal on macOS 15 caused by background blur view covering terminal content
0.24.0
Changed
  • Update bundle identifier to com.icc.app for consistency
0.23.0
Changed
  • Rename app to icc — new app name, socket paths, Homebrew tap, and CLI binary name (bundle ID remains com.icc.app for Sparkle update continuity)
  • Sidebar now shows tab status as text instead of colored dots, with instant git HEAD change detection
Fixed
  • CLI set-status command not properly quoting values or routing --tab flag
0.22.0
Fixed
  • Xcode and system environment variables (e.g. DYLD, LANGUAGE) leaking into terminal sessions
0.21.0
Fixed
  • Zsh autosuggestions not working with shared history across terminal panes
0.17.3
Fixed
  • Auto-update not working (Sparkle EdDSA signing was silently failing due to SUPublicEDKey missing from Info.plist)
0.17.1
Fixed
  • Auto-update not working (Sparkle public key was missing from release builds)
0.17.0
Fixed
  • Traffic lights (close/minimize/zoom) not showing on macOS 13-15
  • Titlebar content overlapping traffic lights and toolbar buttons when sidebar is hidden
0.16.0
Added
  • Sidebar blur effect with withinWindow blending for a polished look
  • --panel flag for new-split command to control split pane placement
0.15.0
Fixed
  • Typing lag caused by redundant render loop
0.14.0
Added
  • Setup script for initializing submodules and building dependencies
  • Contributing guide for new contributors
Fixed
  • Terminal focus when scrolling with mouse/trackpad
Changed
  • Reload scripts are more robust with better error handling
0.13.0
Added
  • Customizable keyboard shortcuts via Settings
Fixed
  • Find panel focus and search alignment with Ghostty behavior
Changed
  • Sentry environment now distinguishes between production and dev builds
0.12.0
Fixed
  • Handle display scale changes when moving between monitors
Changed
  • Fix SwiftPM cache handling for release builds
0.11.0
Added
  • Notifications documentation for AI agent integrations
Changed
  • App and tooling updates
0.10.0
Added
  • Sentry SDK for crash reporting
  • Documentation site with Fumadocs
  • Homebrew installation support (brew install --cask icc)
  • Auto-update Homebrew cask on release
Fixed
  • High CPU usage from notification system
  • Release workflow SwiftPM cache issues
Changed
  • New tabs now insert after current tab and inherit working directory
0.9.0
Changed
  • Normalized window controls appearance
  • Added confirmation panel when closing windows with active processes
0.8.0
Fixed
  • Socket key input handling
  • OSC 777 notification sequence support
Changed
  • Customized About window
  • Restricted titlebar accessories for cleaner appearance
0.7.0
Fixed
  • Environment variable and terminfo packaging issues
  • XDG defaults handling
0.6.0
Fixed
  • Terminfo packaging for proper terminal compatibility
0.5.0
Added
  • Sparkle updater cache handling
  • Ghostty fork documentation
0.4.0
Added
  • icc CLI with socket control modes
  • NSPopover-based notifications
Fixed
  • Notarization and codesigning for embedded CLI
  • Release workflow reliability
Changed
  • Refined titlebar controls and variants
  • Clear notifications on window close
0.3.0
Added
  • Debug scrollback tab with smooth scroll wheel
  • Mock update feed UI tests
  • Dev build branding and reload scripts
Fixed
  • Notification focus handling and indicators
  • Tab focus for key input
  • Update UI error details and pill visibility
Changed
  • Renamed app to icc
  • Improved CI UI test stability
0.1.0
Added
  • Sparkle auto-update flow
  • Titlebar update UI indicator
0.0.x
Initial releases with core terminal functionality:
  • GPU-accelerated terminal rendering via Ghostty
  • Tab management with native macOS UI
  • Split pane support
  • Keyboard shortcuts
  • Socket API for automation