✨ Release Highlights
Netcatty v1.1.71 is a large transfer-and-platform release. The headline is a global SFTP transfer center modeled after dedicated multi-connection clients: transfers keep running when you close a panel, can pause and resume across reconnects, and show up from a single top-bar control. Alongside that, the plugin host grows real permission, UI, and terminal-provider surfaces; terminals pick up Kitty keyboard completion, smarter exit behavior, and TUI redraw fixes; and AI agents gain Cursor subscription login plus silent MCP sessions.
📦 Global SFTP transfer center
SFTP transfers no longer live only inside the side panel you opened. A new global transfer center in the top bar lists active, queued, completed, and failed work across hosts, with badges for count and attention states.
Under the hood this is a full transfer lifecycle redesign, not a cosmetic queue:
- Dedicated transfer connections with a connection pool, so browsing and bulk transfer do not starve each other the way a single shared session often does.
- Pause / resume / prioritize / cancel for top-level jobs, including directory trees, with checkpoints retained so large downloads and uploads can continue after interrupt, app restart, or temporary network loss.
- Conflict handling (skip / replace / stop) that stays consistent when you resolve in the same moment a job is pausing or canceling, including batch “Stop” that cancels the remaining unfinished set cleanly.
- Directory jobs that rehome child tasks correctly, keep cancelled children out of the failed bucket, and avoid poisoned cancel latches when you resume.
- Open-folder / open-file UX and controls refined so you can jump from a finished row back to the right place without hunting through panels.
Closing an SFTP panel no longer means losing track of in-flight work: transfers stay visible and controllable from the global center until you dismiss them.
🧩 Plugin platform: permissions, UI, and terminals
The plugin foundation from recent builds expands into surfaces plugins can actually use:
- A permission and security boundary with capability authorization, safer activation, companion trust checks, and session-grant revocation when a worker exits.
- Native UI contributions so plugins can present views and lifecycle-owned UI without fighting the host’s tab and context refresh rules.
- A terminal provider API for ordinary providers: host state, transport identity, command completion, and lifecycle hardening so providers do not leak listeners, double-submit, or return stale results.
- A reviewed privileged terminal data pipeline for the cases that need deeper terminal I/O under explicit policy.
Plugin work remains gated for development where appropriate, but the contracts are substantially closer to something installable and reviewable.
⌨️ Terminal: Kitty keyboard, exit policy, and TUI stability
Terminal sessions behave more predictably for modern TUIs and long-lived tabs:
- Kitty keyboard protocol support is completed and key-release handling is preserved for broadcast paths, so tools that rely on rich key reporting work more reliably.
- New exit auto-close setting, plus fixes so non-zero shell exits no longer drop tabs unexpectedly—you choose when a session should disappear.
- Claude Code / Codex-style DEC 2026 full redraws no longer stack ghost frames (#2291); delayed full clears keep the right context.
- Ctrl+C with scroll-on-input scrolls to the bottom again so interrupt feedback is visible; hidden log output is batched to cut unnecessary work.
- Session startup commands run after restore, and search highlights clear when the search field is emptied.
🤖 AI agents: Cursor login and silent MCP sessions
- Cursor CLI login is supported so subscription quota can be used without forcing only API-key mode.
- MCP silent sessions can run without hijacking your visible tab set; when you need to inspect them, they open in an attach terminal popup instead of stealing focus from the workspace.
- External MCP settings layout and a top-bar External MCP quick toggle make turning agent integration on and off faster during daily use.
📁 SFTP reliability beyond the transfer center
Even outside the new center, everyday SFTP is sturdier:
- Opening SFTP can reuse the already-authenticated terminal SSH session.
- High-latency download throughput is restored, with safer bounds and concurrent progress preservation.
- SFTP follows the terminal cwd more correctly on macOS/BSD remotes and on first open; copied tabs keep distinct cwd state.
- Recursive directory deletion is more reliable; active transfers remain reachable after the panel is closed.
🧭 Hosts, vault, and top-bar controls
Day-to-day host management is smoother: add and edit hosts from the terminal host list, improved keychain identity layout, CSV import/export of key authentication, FreeBSD host icons, and a dedicated top-bar quick controls panel for theme, opacity, and related toggles. Windows gains a portable data directory option. SSH MFA prefers keyboard-interactive when appropriate (including jump hosts), and port forwarding recovers OTP auth routing plus auto-start after network recovery.
Also in this release: Russian UI localization completion, host picker keyboard navigation, host-details resize and row-height polish, tray session close buttons, and assorted lint/UI color consistency fixes for the new transfer and quick-control controls.
Download based on your OS:
| OS | Download |
|---|---|
| Windows | |
| macOS | |
| Linux |
What's Changed
- chore(nix): update release metadata for v1.1.70 by @binaricat in #2318
- fix: complete Russian UI localization by @pyroch in #2323
- feat(plugins): add permission and security boundary by @ryan-wong-coder in #2315
- fix: forget remembered passphrase when deleting a key by @binaricat in #2333
- feat(windows): support portable data directory by @binaricat in #2336
- feat(plugins): add native UI contributions by @ryan-wong-coder in #2324
- fix(terminal): clear search highlights when search input is emptied by @tces1 in #2334
- fix(ssh): prefer keyboard-interactive for MFA hosts by @RainGoal in #2331
- [codex] Fix keyboard navigation in host pickers by @mam15mon in #2344
- feat(plugins): add terminal provider API by @ryan-wong-coder in #2338
- feat(ai): 新增 MCP 会话静默运行开关 by @ice616 in #2345
- fix(sftp): restore high-latency download throughput by @binaricat in #2351
- fix(sftp): reuse authenticated SSH session for SFTP by @myderr in #2350
- fix(port-forward): restore OTP authentication by @binaricat in #2352
- feat: add FreeBSD host icon by @binaricat in #2358
- fix(terminal): run host startup command after restore by @binaricat in #2360
- fix(sftp): keep copied tab cwd distinct by @binaricat in #2356
- fix(port-forwarding): restart auto-start rules after network recovery by @binaricat in #2361
- fix(tray): 托盘面板会话条目新增关闭按钮 by @ice616 in #2362
- feat: 在终端主机列表中新增和编辑主机 by @Ryanisgood in #2363
- Support key authentication in host CSV import/export by @binaricat in #2354
- Improve external MCP settings layout by @binaricat in #2368
- Fix quick switcher selection and workspace creation UX by @binaricat in #2369
- fix(sftp): keep active transfers accessible after closing the panel by @binaricat in #2370
- fix(sftp): make recursive directory deletion reliable by @binaricat in #2371
- feat: add External MCP quick toggle by @Ryanisgood in #2355
- feat: add a dedicated top-bar quick controls panel by @binaricat in #2374
- polish host auth method UI and clear lint warnings by @binaricat in #2375
- polish quick connect protocol picker presentation by @binaricat in #2377
- align SFTP host picker rows with quick switcher by @binaricat in #2376
- fix(ui): unify HostDetails setting row heights by @binaricat in #2378
- fix(ui): enable host details panel resize from host tree by @binaricat in #2379
- fix(terminal): disable incomplete Kitty keyboard negotiation by default by @zopenb in #2382
- fix(ui): open AI silent sessions in an attach terminal popup by @binaricat in #2380
- [codex] complete Kitty keyboard protocol by @binaricat in #2389
- fix(sftp): follow terminal cwd on macOS/BSD remotes and first open by @tces1 in #2388
- [codex] preserve Kitty broadcast key releases by @binaricat in #2391
- fix(terminal): preserve tabs after non-zero shell exits by @RoryChou-flux in #2390
- feat(terminal): add exit auto-close setting by @binaricat in #2394
- feat(plugins): add reviewed privileged terminal data pipeline by @binaricat in #2402
- fix(plugin): revoke session grants after worker exit by @binaricat in #2404
- Improve keychain identity discoverability and layout by @binaricat in #2406
- fix(terminal): batch hidden log output by @binaricat in #2399
- feat(ai): support Cursor CLI login for subscription quota by @itzhang89 in #2412
- fix(terminal): stop stacking Claude Code DEC 2026 full redraws (#2291) by @binaricat in #2415
- fix(ui): keep quick controls trigger color static by @binaricat in #2416
- fix(terminal): scroll to bottom on Ctrl+C with scroll-on-input by @binaricat in #2417
- feat(sftp): global transfer center with FileZilla-style dedicated connections by @binaricat in #2410
- fix(lint): clear react-hooks and unused-import warnings by @binaricat in #2419
- fix(ui): match global transfer toggle to top-tab muted icons by @binaricat in #2420
New Contributors
- @RainGoal made their first contribution in #2331
- @zopenb made their first contribution in #2382
- @itzhang89 made their first contribution in #2412
Full Changelog: v1.1.70...v1.1.71