Downloads (v2.2.0)
| Platform | Architecture | Download |
|---|---|---|
| Windows | x64 | Installer · Portable |
| Windows | arm64 | Installer · Portable |
| macOS | Apple silicon (arm64) | DMG · ZIP |
| macOS | Intel (x64) | DMG · ZIP |
| Linux | x64 | AppImage · DEB · RPM |
| Linux | arm64 | AppImage · DEB · RPM |
Release Notes
Cherry Studio 2.2.0 - Skill Marketplace, Notifications, and Agent Runtime
✨ New Features
- [Marketplace] Browse skill catalogs, external skill sources, Agent templates, and MCP resources in one Marketplace, with guided installation and focused MCP and skill management.
- [Notifications] A new notification drawer beside the sidebar gathers task results and official announcements, with unread indicators, reply previews, and announcements shown in your language.
- [Scheduled Tasks] Scheduled tasks now have a dedicated sidebar page with task conversations, paginated run history, and management for completed or missed tasks. The duplicate Settings page was removed.
- [Cherry Cloud] Subscription usage and monthly quotas appear in Settings and the account panel, with plan badges, subscribe entry points, a quota notice above the input, and a notice when a subscription becomes active.
- [Selection Assistant] Ask Agent and agent-bound actions open a dedicated agent window for the selected text. Windows can collapse into capsules, follow auto-close rules, and continue the session in the main window.
- [Agent] New agents default to the Pi Durable runtime, which persists sessions natively and streams background subagents independently. Sessions can fork at completed checkpoints while keeping independent state.
- [Agent] View and edit agent memory from Agent configuration.
- [Agent] Session details show grouped subagents, task progress, and context usage in a compact card.
- [Agent] Edit and resend now replaces the message and removes everything after it without creating another history version. Files are not restored; fork first to keep the original conversation.
- [Chat] Click the branch counter on a message to jump between alternate replies, with previews in the switcher.
- [Chat] Generated images offer Use as Reference for models that accept image input.
- [Paintings] GPT Image 2.6 Flare and Sunburst support scene complexity and animated GIF output, and ComfyUI workflows can use attached input images.
- [Models] Added LongCat 2.5 and Hunyuan 4 with image input, plus reasoning-effort controls for Qwen 3.8 Flash Next.
- [Files] Copy a file or folder itself to the system clipboard from the Agent file pane.
- [Notes] Save selected conversation text to Notes, and reference Notes from the chat input with @.
- [Translate] Copy a completed translation as a full-length PNG image.
- [Export] Export MCP server configurations as JSON and export multiple assistants as one file.
- [Skills] Choose which managed skills are exported to ~/.agents/skills for external agents.
- [Shortcuts] Number shortcuts switch conversations and tabs, and new shortcuts switch assistants and topics; all can be customized in Settings.
- [Conversations] Permanently delete conversations from list, More, and History menus, and delete owners from list and group menus, after a confirmation that names the item.
- [Markdown] Bare image URLs in responses now render as inline images.
- [Mini Apps] The catalog has new creative and productivity sites, and the More menu can restart a MiniApp.
- [HTML Artifact] Copy an HTML artifact's source from its inline source toolbar.
💄 Improvements
- [Chat] Regenerate is available below user messages and uses the currently selected model.
- [Chat] Conversation anchors appear from the first turn; the separate side navigation toolbar was retired in favor of the bottom arrow.
- [Agent] Context usage reports runtime capacity, estimated categories, and resources consistently across runtimes, including subagents.
- [Agent] Switching permission mode while a task runs applies to its next tool call instead of waiting for the next message.
- [Agent] Plan and Goal modes are available as explicit Quick Panel actions, and unsupported history actions are disabled.
- [UI] Context-menu shortcuts render as compact keycaps, resize handles use neutral colors, and clipped letter descenders are fixed.
- [File Preview] Word previews fit the pane, and more file types show proper icons and labels.
- [Models] Qwen AI Platform and Qwen Cloud branding, links, and default API endpoints are updated. Qwen Token Plan keys now work with image generation.
- [Claude] The runtime download banner displays correctly and the runtime is named Claude.
- [Settings] Resetting a customized provider API host asks for confirmation.
- [About] Simplified product information with a Star button, email contact, and bottom-docked DevTools.
- [Web Search] A warning now names the provider that actually ran a search when it falls back.
🐛 Bug Fixes
- [Chat] Edited messages update immediately in the open conversation.
- [Chat] Sending a message no longer recreates existing history, and code blocks show readable source before highlighting.
- [Chat] Images below a provider's minimum edge are padded instead of aborting the request.
- [Chat] Returning to the bottom animates smoothly, and bottom-follow resumes after resend.
- [Chat] The manual composer height survives typing and pasting.
- [Chat] A knowledge-base instruction prompt no longer leaks into the input after returning from Settings.
- [Agent] Sessions no longer stay busy after a pending connection fails during close, and interrupted subagents show as stopped.
- [Agent] Background continuations stay in the existing reply, and reasoning tokens are reported correctly in usage.
- [Agent] Stopping a task on Windows now ends its child processes.
- [Agent] move_to_trash and save_attachment work inside managed workspaces and report the real failure reason.
- [Agent] The built-in delete guard no longer blocks harmless text that mentions deletion.
- [Agent] Tool approval cards are retired when their runtime disappears instead of leaving the conversation stuck.
- [Models] Prompt caching works for Claude models on AWS Bedrock.
- [Models] OpenAI and Azure OpenAI Responses tools no longer treat optional arguments as required.
- [Models] Ollama Agent requests work again after tool calls.
- [MCP] Parameterless MCP tools work with strict providers, and installing an existing MCP server reuses its definition.
- [Providers] Errors caused by unsupported parameters no longer claim the model was retired; invalid inline images are reported as rejected requests.
- [Providers] OpenRouter reranking models are discovered correctly, and Mistral tool-call streams no longer fail when an ID is missing.
- [Notes] Full-text search lists matching lines and jumps to them again, and toolbar formatting applies before the editor takes focus.
- [Editor] Inline math no longer replaces adjacent text, and multi-line LaTeX environments stay intact.
- [Settings] Fallback model pickers warn when configured models are unavailable.
- [Knowledge] Invalid knowledge-base URLs are rejected before saving.
- [Local Models] Model cards explain when the shared runtime is missing, and the FunASR INT8 decoder was replaced.
- [Dictation] The speech-recognition model requirement is now surfaced.
- [Tabs] Pinned-tab state persists, and archived items no longer stay disabled after a tab switch.
- [Right Panel] Topic drag-and-drop sorting works again.
- [Browser] Bare IPv6 loopback addresses are accepted.
- [File Editor] A UTF-8 BOM no longer drops following content.
- [Security] Provider API keys are no longer written to logs or diagnostic bundles.
- [Windows] Close-to-tray now actually hides the main window.
- [Selection Assistant] The Windows Snipping Tool is excluded from selection retrieval.
- [Computer Use] Unconfirmed runtime cleanup can be recovered without restarting Cherry Studio.
- [Claude] Claude Code installs on Windows ARM64, and Linux shows guidance instead of launching without a session bus.
- [Tesseract] OCR loads its engine in packaged builds.
- [Agent] Remember the session details card's last open or closed state across all sessions and app restarts.
- [Agent] Fixed Claude Code (login) agents on macOS failing with "Not logged in · Please run /login" even after logging in with
claude /login. - [Subscription] The China edition now picks up subscription changes once the server's notification service comes online, without restarting the app.
- [Subscription] The China edition shows subscription changes (activation, renewal, expiry and more) in the notification center.
- [Workspace] Consistent icon colors and sizing, clearer Chinese agent labels and settings, restored tooltip contrast, and smoother tabs, pane resizing, conversation shortcuts, and notifications
- [API Gateway] Preserve agent instructions, tool schemas, and cache hints when forwarding requests, and prevent unintended tool execution or retries inside the gateway.
- [UI] Restore popup close animations, correct prompt and memory editor sizing and styling, and prevent stale actions or drafts when reopening dialogs.
- [Agents] Enable PowerShell commands for Pi and Pi Durable on Windows without requiring Git Bash.
- [Settings] Group built-in tools in a secondary settings menu and move interface language selection to a dedicated Language section in General.
- [Agents] Pi and Pi Durable subagents now default to bypass permissions, avoiding ordinary tool approval prompts. No action required.
- [Navigation] Restore sidebar settings on Windows and other non-macOS platforms, and in macOS fullscreen; show the session-details tooltip below its button after a hover delay.
⚡ Performance
- [Chat] Preparing large text attachments no longer blocks the interface.
- [Agent] Large session lists update more smoothly.
What's Changed
- docs(resource-list): propose event-time reads for conversation lists by @kovsu in #23206
- refactor(pi-runtime): bind native Pi providers to the internal gateway by @MyPrototypeWhat in #21436
- chore(release): sync v2.1.10 metadata by @kangfenmao in #23252
- fix(local-model): use compatible FunASR INT8 decoder by @DeJeune in #23243
- feat(analytics): report desktop package edition by @kangfenmao in #23234
- fix(chat-message-outline): keep the outline rail above the composer band by @cherry-coding[bot] in #23195
- Drop empty-name dynamic tools from message replay by @404-Page-Found with @Copilot in #23233
- feat(about-settings): streamline About, feedback and DevTools by @kangfenmao in #23208
- fix(pi-runtime): omit store for Google OpenAI-compatible endpoints by @cherry-coding[bot] in #23274
- ci(deps): bump actions/setup-node from 6 to 7 by @dependabot[bot] in #23285
- ci(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #23286
- ci(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #23287
- fix(provider): accept Bedrock tool-use starts without input (patch 4.0.96) by @cherry-coding[bot] in #23350
- refactor(resource-list): keep list helpers in one module by @kovsu in #23357
- refactor(renderer-helpers): remove duplicated notes and health-check helpers by @kovsu in #23356
- refactor(assistant-mutations): keep one mutation hook for assistants by @kovsu in #23355
- refactor(renderer): remove residual v1 types chain by @kovsu in #23353
- perf(resource-list): keep list actions stable across host handlers by @kovsu in #23352
- docs(artifact-pane): propose removing the test-only wrapper by @kovsu in #23358
- fix(web-search): tell the user when a search falls back to another provider by @cherry-coding[bot] in #23342
- feat(agent-runtime): add native session observation and context extensions by @MyPrototypeWhat in #21437
- feat(agent-runtime): add todo and user-question extensions on native sessions by @MyPrototypeWhat in #21438
- docs(website-docs): propose bidirectional content synchronization by @kangfenmao in #23201
- feat(website-docs): add bidirectional synchronization and local preview by @kangfenmao in #23204
- feat(agent-runtime): run foreground subagents with native session forks by @MyPrototypeWhat in #21578
- feat(agent-runtime): persist goals and verify native session context by @MyPrototypeWhat in #21607
- fix(api-gateway): omit the strict tool field for non-Responses targets by @cherry-coding[bot] in #23382
- chore: version packages by @github-actions[bot] in #23388
- fix(provider): derive the DashScope image host from the configured chat base URL by @cherry-coding[bot] in #23381
- fix(rich-editor): keep inline math input from replacing adjacent text by @cherry-coding[bot] in #23372
- feat(agent-runtime): continue background subagents from native storage by @MyPrototypeWhat in #21693
- fix(pi-runtime): omit store for custom chat-completions routes by @cherry-coding[bot] in #23337
- docs(agent-behavior): propose the harness-neutral agent behavior package by @MyPrototypeWhat in #21995
- feat(agent-behavior): add the harness-neutral agent behavior package (rule core, ports, orchestration, fake harness) by @MyPrototypeWhat in #21996
- feat(agent-runtime-pi): implement the agent-behavior harness ports on coding-agent by @MyPrototypeWhat in #22014
- fix(file-editor): keep the caret inside the active line highlight by @kovsu in #23391
- feat(composer): reference Notes from @ mentions by @louisfy in #20196
- refactor(artifact-pane): remove the test-only wrapper by @kovsu in #23390
- perf(agent-sessions): re-render only the changed session row by @kovsu in #23389
- feat(agent-runtime): correlate owned child inputs and terminal responses by @DeJeune in #22010
- fix(windows-tests): make the full test suite portable by @DeJeune in #20309
- fix(e2e-regression): isolate the launched app's HOME so CLI tests stop rewriting real credentials by @cherry-qa[bot] in #23118
- Restore automatic retries for failed channel startups by @404-Page-Found with @Copilot in #23385
- docs(resource-list): drop owned group menus from the conversation list Spec by @kovsu in #23404
- fix(virtual-list): keep group headers pinned during scrolling by @ousugo in #23327
- fix(anthropic-cache): keep cache_control breakpoints within Anthropic's limit by @cherry-coding[bot] in #23407
- feat(models): support LongCat 2.5 by @ousugo in #23425
- fix(anthropic-cache): count only serialized breakpoints and keep TTL order by @cherry-coding[bot] in #23418
- fix(tool-schema): opt Responses tools out of default strict mode by @pczhao1210 in #23415
- feat(skills): allow per-skill exports to ~/.agents/skills by @radianceded in #20356
- Fix Ollama Agent tool-call history serialization by @404-Page-Found with @Copilot in #23394
- Expose Qwen 3.8 Flash Next effort controls for compatible providers by @404-Page-Found with @Copilot in #23393
- chore: version packages by @github-actions[bot] in #23437
- fix(browser): enable CDP Runtime on demand so pages cannot detect the console by @cherry-coding[bot] in #23436
- chore(patches): remove orphaned yarn-era patch files by @kovsu in #23433
- test(rich-editor): avoid background highlighting in line lookup fixture by @DeJeune in #23445
- fix(binary-manager): keep uv's build cache off spaced macOS paths by @cherry-coding[bot] in #23448
- feat(agent-runtime): persist native contexts and submission facts by @DeJeune in #22071
- test(e2e): regression harness with the 56 cases passing on macOS and Windows by @cherry-qa[bot] in #23427
- feat(agent-session): retain edited message branches by @DeJeune in #22077
- fix(chat): return the viewport to bottom-follow after an accepted resend by @cherry-coding[bot] in #23456
- perf(channel-stream): coalesce live channel updates before sanitizing by @kovsu in #23460
- feat(export): restore MCP JSON export and add batch assistant export by @cherry-coding[bot] in #23465
- docs(main-dependencies): propose bundling main-process JavaScript dependencies Spec by @kovsu in #23464
- feat(file-pane): copy the file itself to the OS clipboard by @cherry-coding[bot] in #23477
- fix(messages): drop router dependencies from message navigation by @EurFelux in #22981
- feat(selection-assistant): add agent bindings and explicit runners to selection actions by @EurFelux in #22990
- feat(selection-assistant): open agent actions in a selection agent window by @EurFelux in #23065
- feat(selection-assistant): apply state rules and draft hand-off to the selection agent window by @EurFelux in #23089
- feat(selection-assistant): collapse started agent windows into capsules by @EurFelux in #23097
- feat(selection-assistant): collapse agent windows from the macOS yellow light by @EurFelux in #23158
- feat(pi-runtime): integrate shared behavior with desktop sessions by @DeJeune in #22107
- fix(move-to-trash): let managed agent workspaces reach the trash by @cherry-coding[bot] in #23492
- fix(tab-bar): keep title descenders visible by @DeJeune in #23526
- perf(main-dependencies): bundle document-parsing packages into the main build by @kovsu in #23527
- fix(data-api): redact credentials in request-logger debug output by @404-Page-Found with @Copilot in #23512
- feat(agent): add an in-app memory viewer and editor by @linktao159357 in #23008
- feat(mini-app): add restart action to More menu by @HappyAny in #19649
- feat(agent-session): persist and stream independent Pi child conversations by @DeJeune in #22689
- fix(openrouter): discover reranking models and rerank through its provider by @cherry-coding[bot] in #23471
- fix(i18n): say unlink instead of delete in the Russian prompt-binding tooltip by @cherry-coding[bot] in #23296
- feat(reasoning): replay edited signed thinking as text by @JuLuogo in #23472
- fix(error-category): stop reading deprecated parameters as retired models by @cherry-coding[bot] in #23314
- fix(api-gateway): continue internal Agent requests after settled tool tails by @cherry-coding[bot] in #23470
- fix(rich-editor): deliver user format commands before focus arrives by @cherry-coding[bot] in #23462
- feat(composer): localize builtin slash command descriptions by @cherry-coding[bot] in #23410
- fix(openclaw): treat schema stderr warnings as diagnostics, not incompatibility by @cherry-coding[bot] in #23489
- fix(chat): keep conversation anchors visible in narrow message columns by @cherry-coding[bot] in #23412
- refactor(agent-sessions): move Sessions into a feature folder by @kovsu in #23413
- fix(selection-assistant): exclude Windows system screenshot hosts by @cherry-coding[bot] in #23335
- refactor(ai-stream): share desktop message projections by @DeJeune in #22698
- fix(code-cli): keep provider row actions usable without hover input by @cherry-coding[bot] in #23511
- refactor(native-integrations): relocate selection panel and system speech by @DeJeune in #23537
- docs(website-docs): align content before enabling synchronization by @cherry-docs-sync[bot] in #23544
- fix(scroll-area): unify application scrolling and stabilize sidebar spacing by @DeJeune in #23515
- chore: version packages by @github-actions[bot] in #23546
- feat(pi-durable): integrate shared behavior with desktop sessions by @DeJeune in #22755
- perf(main-dependencies): bundle channel and remote-access packages into the main build by @kovsu in #23530
- perf(main-dependencies): bundle media and system packages into the main build by @kovsu in #23533
- feat(mini-apps): refresh catalog entries using shared SVG icons by @WhiteZeek in #21553
- perf(main-dependencies): bundle the agent SDKs, drop stale packaging rules, fix the Tesseract core by @kovsu in #23536
- fix(main-window): hide the window on Windows close-to-tray (#23487) by @cherry-coding[bot] in #23539
- chore(claude-code): upgrade SDK to 0.3.311 and define runtime migration by @DeJeune in #22766
- fix(ai-params): strip top-k from fixed-sampling Claude requests by @MasterZRC in #23547
- feat(agent-runtime-claude-code): add native thread access and observation by @DeJeune in #22809
- fix(agent-edit-dialog): hide Skills tab for sealed built-in agents by @404-Page-Found with @Copilot in #23542
- chore(electron): upgrade to 45.2.2 and better-sqlite3 13.0.3 by @DeJeune in #23548
- test(e2e-regression): expand desktop coverage and harden cross-platform runs by @cherry-qa[bot] in #22618
- fix(voice): surface the speech-recognition model requirement for dictation by @cherry-coding[bot] in #23567
- fix(right-panel): open shortcut tooltips below the top toolbar by @cherry-coding[bot] in #23573
- fix(page-header): keep title descenders visible by @DeJeune in #23607
- fix(general-settings): surface unavailable fallback models in settings by @404-Page-Found in #20925
- refactor(topics): move Topics into a feature folder by @kovsu in #23589
- docs(export): clarify citation-exclusion setting also applies to Word export by @404-Page-Found with @Copilot in #23581
- fix(feishu-channel): stay silent when the mention policy rejects a message by @cherry-coding[bot] in #23590
- fix(mcp): reuse an existing MCP server definition on install by @cherry-coding[bot] in #23614
- docs(notification-center): propose drawer and task result redesign by @WhiteZeek in #23054
- fix(cache): avoid Electron downloads in service tests by @DeJeune in #23632
- fix(agent-memory): move editor into agent configuration by @DeJeune in #23633
- fix(agent-messages): resume bottom follow after sending by @MasterZRC in #23559
- fix(agent-memory): remove unused description translations by @DeJeune in #23637
- fix(file-preview): complete desktop file icon and label mappings by @LWWZH in #23624
- refactor(agent-session-context): remove test-only context helpers by @kovsu in #23641
- feat(provider-registry): add GPT Image 2.6 Flare and Sunburst by @ousugo in #23648
- chore: version packages by @github-actions[bot] in #23650
- refactor(agent-session-context): drop discarded ancestry read in reserveBranchTx by @kovsu in #23658
- refactor(agent-session-message): read the native path in one query by @kovsu in #23656
- fix(chat-navigation): show anchors immediately and retire side buttons by @DeJeune in #23655
- fix(preference-tests): separate cold import from per-test setup by @DeJeune in #23659
- fix(shortcut): resolve character shortcuts from the produced character by @cherry-coding[bot] in #22648
- perf(agent-session-message): project only token columns from context rows by @kovsu in #23642
- fix(registry-sync): keep GPT Image 2.6 models in legacy catalogs by @ousugo in #23687
- feat(message-anchor): add keyboard and screen-reader navigation to the turn rail by @404-Page-Found with @Copilot in #23692
- feat(shortcuts): add hotkeys to switch assistants and topics by @404-Page-Found with @Copilot in #23682
- feat(markdown): render bare network image URLs as inline images by @404-Page-Found with @Copilot in #23681
- fix(claude-code): kill the whole process tree when stopping an Agent task on Windows by @404-Page-Found with @Copilot in #23103
- feat(sidebar): add Ctrl/Cmd+1–9 shortcuts to open sidebar items by @404-Page-Found with @Copilot in #23689
- feat(notification-center): add unified left drawer and announcement refresh by @WhiteZeek in #23060
- feat(task-notifications): show compact outcomes and reply previews by @WhiteZeek in #23061
- feat(notification-center): add localized announcements and account menu access by @kangfenmao in #23668
- fix(e2e-regression): stabilize phase cleanup and remaining regressions by @cherry-qa[bot] in #23428
- fix(notes): restore jump-to-line from full-text search matches by @kovsu in #23732
- fix(anthropic-cache): send Bedrock cache points for Claude models by @Haarris in #23726
- chore(deps): upgrade eslint-plugin-react-hooks to 7.1.1 by @kovsu in #23735
- perf(renderer-hooks): keep Effect Events out of effect dependencies by @kovsu in #23736
- perf(remote-access): stop idle timers while remote access is unused by @kovsu in #23733
- fix(lifecycle): stop tracking cleanup functions disposed before stop by @kovsu in #23734
- refactor(home-page): remove unused SHOW_ASSISTANTS manual-open event by @kovsu in #23738
- fix(main-dependencies): ship ai and zod once and drop packaging leftovers by @kovsu in #23743
- fix(thinking): stop replaying blank Anthropic thinking blocks by @cherry-coding[bot] in #23744
- fix(shortcut): make ESC exit-fullscreen respect IME composition and fullscreen state by @cherry-coding[bot] in #23664
- fix(chat): pad image attachments below the provider minimum edge by @cherry-coding[bot] in #23757
- fix(e2e): restore the app.shell UI contract anchor on the main-window roots by @cherry-coding[bot] in #23759
- docs(skills): propose skill labels and grouped bulk assignment in the agent skill selector by @cherry-coding[bot] in #22958
- refactor(agent-runtime): unify desktop execution and message projections by @DeJeune in #22856
- docs(agent-context): define harness-owned context usage by @DeJeune in #23146
- feat(agent-runtime): unify passive thread context usage by @DeJeune in #23164
- perf(agent-session-message): read the edit path once per snapshot by @kovsu in #23653
- perf(child-thread-projection): index alias reverse lookup once per history load by @kovsu in #23652
- perf(child-thread-projection): avoid full-row read and quadratic scans in archive reorder by @kovsu in #23651
- fix(pi-durable): report interrupted subagents as stopped by @kovsu in #23631
- perf(ai-stream): project topic messages per flushed batch by @kovsu in #23630
- fix(registry-sync): hide GPT Image 2.6 GIF in legacy catalogs by @ousugo in #23765
- fix(agent-runtime): isolate observation deliveries by @DeJeune in #23767
- feat(provider-registry): add Hy4 to Tencent and TokenHub by @Contentment003111 in #23535
- feat(qwen-provider): update branding, links and default endpoints by @shigzz in #23704
- chore: version packages by @github-actions[bot] in #23769
- docs(agent-notes): propose a conversation target for IM channels by @cherry-coding[bot] in #23768
- refactor(agent-runtime-pi-durable): resolve child relations from native records by @DeJeune in #23772
- fix(registry-sync): filter unsupported GPT Image 2.6 legacy controls by @ousugo in #23771
- fix(error-category): classify invalid inline image payloads as bad_request, not rate_limit by @404-Page-Found with @Copilot in #23719
- fix(agent-runtime): reuse native SDK types and helpers by @DeJeune in #23780
- fix(shortcuts): unify numbered conversation and tab navigation by @DeJeune in #23778
- fix(ai-stream): name the failed stage and log the cause when a response stream dies by @cherry-coding[bot] in #23752
- refactor(agent-session): unify thread projection message storage by @DeJeune in #23783
- fix(provider-error): name the cause of unprocessable successful responses by @cherry-coding[bot] in #23762
- fix(file-processing): downscale oversized images before Windows system OCR by @404-Page-Found with @Copilot in #23711
- feat(translate): copy translated output as an image by @louisfy in #23698
- fix(assistant-files): make move_to_trash and save_attachment usable by @NatsUIJM in #23598
- fix(api-gateway): require content on Anthropic message entries by @cherry-coding[bot] in #23643
- docs(chat-markdown): specify consecutive code block tabs by @DeJeune in #23181
- docs(spec): propose illustrations within assistant replies by @leezehuan in #23551
- docs(remote-access): propose client-owned P2P transport by @DeJeune in #23636
- docs(mcp-skills): propose client protocol integration by @DeJeune in #22350
- docs(agent-notes): propose Spec for clear conversation context on explicit request by @William20100221 in #23329
- fix(file-edit): preserve content following a UTF-8 BOM by @yunyv in #22699
- fix(webview-address): normalize bare IPv6 loopback hosts by @yunyv in #23309
- fix(citations): preserve Unicode at X preview truncation boundary by @yunyv in #23106
- fix(html-artifact): preserve multiline preview titles by @yunyv in #22697
- fix(render): keep loading state when a metadata request is superseded by @HHHSL in #21539
- fix(serializable): preserve shared non-circular references by @yunyv in #22923
- fix(resource-catalog): keep the create wizard draft across tab switches by @cherry-coding[bot] in #23302
- fix(api-gateway): surface classified 504 on upstream idle timeout instead of an opaque 500 by @xxiaoxiong in #22080
- fix(error-diagnosis): classify provider content-filter rejections as content by @cherry-coding[bot] in #22351
- fix(mcp-npx-search): inspect all README server entries for npx samples by @yunyv in #23219
- fix(paintings): restore terminal state for cached image generations by @felixren7 in #22707
- feat(html-artifact): add copy-source action to the inline source toolbar by @cherry-coding[bot] in #23180
- fix(composer): restore live tokens when rebuilding content with an empty draft seed by @Leeeeizz in #23457
- fix(quick-panel): avoid backtracking when filtering prompts by @yunyv in #23080
- feat(provider-settings): confirm before resetting the provider API host by @cherry-coding[bot] in #23071
- fix(archive): name the job record blocking permanent deletion by @cherry-coding[bot] in #23070
- feat(selection): save selected conversation text to Notes by @louisfy in #23453
- fix(tabs): keep pinned-tab persistence at a fixed point by @cherry-coding[bot] in #22774
- fix(archive): release batch busy state across tab switches by @ousugo in #23224
- feat(messages): make the branch counter a direct branch switcher by @404-Page-Found with @Copilot in #23720
- feat(agent-composer): typing-triggered Plan Mode hint by @404-Page-Found with @Copilot in #23774
- Fix drag-and-drop sorting for topics in right panel by @404-Page-Found in #23779
- docs(provider-registry): propose Fortytwo built-in provider by @obantysh in #23635
- fix(discord-channel): request online presence on the gateway IDENTIFY by @cherry-coding[bot] in #23812
- fix(tooltip): swap light and dark mode neutral colors by @DeJeune in #23828
- i18n(skill-import): clarify folder drag and drop support in drop hint by @LWWZH in #23839
- docs(agents): propose agent-scoped IM channel binding entry points by @404-Page-Found in #23859
- docs(agent-notes): propose agent work directory recovery spec by @404-Page-Found in #23860
- fix(remote-access): keep identity key-store access off the gateway activation path by @cherry-coding[bot] in #23827
- refactor(renderer): unify app-route url parsing behind parseAppRouteUrl by @404-Page-Found with @Copilot in #23691
- fix(scroll-area): restore thumb width and rounded ends by @kangfenmao in #23876
- fix(translate): repair image capture theme fixture in CI by @DeJeune in #23883
- fix(selection-toolbar): size the toolbar window with its own zoom by @cherry-coding[bot] in #23502
- Fix non-streaming paths to align with streaming model resolution by @404-Page-Found in #23793
- chore: version packages by @github-actions[bot] in #23885
- Dispose of issue #23059 by updating BinaryManager by @404-Page-Found in #23781
- fix(mistral): tolerate chat-completions tool-call deltas without an id by @cherry-coding[bot] in #23747
- fix(agent-runtime): preserve request controls through the gateway by @DeJeune in #23878
- fix(markdown): keep
\begin{env}LaTeX blocks intact when a line is only=or---by @404-Page-Found with @Copilot in #23541 - fix(file-preview): fit Word previews to the pane and drop the grey mat by @angri450 in #23122
- Support input images in ComfyUI workflows by @404-Page-Found with @Copilot in #23270
- fix(preference): isolate subscription tests from real Electron by @DeJeune in #23887
- fix(validation): include UI theme contracts for renderer changes by @EurFelux in #23879
- docs(scheduled-tasks): specify dedicated task page and interactions by @WhiteZeek in #23207
- feat(scheduled-tasks): filter task pages and paginate run history by @WhiteZeek in #23220
- feat(scheduled-tasks): resolve and retain task conversations by @WhiteZeek in #23221
- feat(scheduled-tasks): add dedicated task conversation page by @WhiteZeek in #23222
- refactor(scheduled-tasks): retire duplicate settings page by @WhiteZeek in #23725
- feat(scheduled-tasks): migrate completed and missed task management by @kangfenmao in #23877
- chore: version packages by @github-actions[bot] in #23894
- chore(deps): drop unused workspace package dependencies by @kovsu in #23893
- feat(scheduler): frame scheduled task triggers as agent executions by @404-Page-Found in #23851
- feat(cherry-cloud): enable subscription surfaces in the China edition by @SiinXu in #22937
- fix(packaging): trim Claude binaries, use ULFO and polish download status by @kangfenmao in #23895
- feat(cherry-cloud): add subscribe touchpoints to the selector and sidebar by @SiinXu in #22938
- chore: version packages by @github-actions[bot] in #23896
- feat(cherry-cloud): announce a newly active subscription by @SiinXu in #22939
- feat(composer): show a quota notice above the input by @SiinXu in #22940
- feat(cherry-cloud): show monthly usage in settings and the account panel by @SiinXu in #22941
- feat(cherry-cloud): follow China-edition subscription notifications by @SiinXu in #23316
- feat(cherry-cloud): add subscription usage insights by @SiinXu in #23405
- Fix stale external-store values in hidden tabs by @404-Page-Found with @Copilot in #23854
- fix(chat): decouple fold-view reply browsing from context selection by @Doekin in #23889
- Restore regenerate action below user messages by @404-Page-Found with @Copilot in #23862
- fix(messages): Honor auto-collapse in Agent reasoning history by @404-Page-Found with @Copilot in #23863
- Show missing shared runtime status on local model cards by @404-Page-Found with @Copilot in #23837
- feat(file-processing): upgrade doc2x processor to v3-2026 with structured layout support by @XueHua-s in #23831
- fix(mcp): normalize input schema for parameterless MCP tools by @404-Page-Found in #23821
- chore(openai): upgrade image adapter within AI SDK 6 by @ousugo in #23678
- docs(paintings): specify GPT Image 2.6 complexity and animation by @ousugo in #23702
- feat(paintings): add GPT Image 2.6 complexity and animation by @ousugo in #23684
- chore: version packages by @github-actions[bot] in #23908
- refactor(cherry-cloud): converge subscription ownership and refresh contracts by @DeJeune in #23906
- feat(agent-details): add compact session details card by @DeJeune in #23899
- fix(message-branches): show previews in branch switcher by @DeJeune in #23910
- fix(message-branches): restore main CI with supported focus event by @DeJeune in #23911
- fix(resize-handle): use neutral interaction colors by @DeJeune in #23912
- fix(computer-use): let the user recover from unconfirmed runtime cleanup by @DeJeune in #23913
- Initialize OpenAI Responses reasoning parts before deltas by @404-Page-Found with @Copilot in #23816
- chore(pi-runtime): upgrade Pi dependencies to 1.5.0 by @DeJeune in #23915
- fix(computer-use): upgrade runtime and expose input channel by @DeJeune in #23918
- fix(agent-runtime): preserve failures and unblock Durable shutdown by @DeJeune in #23919
- feat: add “Use as Reference” to generated chat images by @404-Page-Found with @Copilot in #23847
- fix(agent-subagent): temporarily disable chat continuation by @DeJeune in #23921
- fix(agent-history): align native history actions and explicit mode controls by @DeJeune in #23904
- fix(agent-session): show workspace open shortcut in target menu by @DeJeune in #23922
- test(agent-right-pane): restore main CI command mock by @DeJeune in #23923
- fix(agent-sessions): show pin and archive actions on hover by @DeJeune in #23926
- fix(chat-attachments): keep text preparation off the main thread by @DeJeune in #23927
- fix(agent-runtime): preserve response identity and context freshness by @DeJeune in #23925
- refactor(scheduled-tasks): unify session ownership in migration 0035 by @DeJeune in #23924
- test(ci-validation): restore main CI worker isolation and session checks by @DeJeune in #23928
- test(claude-runtime): enable native idle events in desktop fixture by @DeJeune in #23929
- fix(tool-approval): retire approval cards whose runtime is gone by @NatsUIJM in #23754
- fix(builtin-agent): match the delete guard on executable commands by @NatsUIJM in #23597
- feat(resource-list): restore direct permanent deletion by @SiinXu in #21837
- feat(command-focus): scope keyboard routing and menu origins by @DeJeune in #23917
- fix(context-menu): render shortcuts as keycaps by @DeJeune in #23940
- docs(skill-marketplace): define discovery and installation contract by @WhiteZeek in #23800
- feat(skill-marketplace): add skill catalogs, agent templates and MCP discovery by @WhiteZeek in #20978
- fix(agent-creation): default to Pi Durable and hide runtime configuration by @DeJeune in #23937
- fix(agent-sessions): hide status icons while shortcut hints show by @DeJeune in #23941
- docs(command): specify renderer command target routing by @DeJeune in #23934
- docs(agent-runtime-acp): specify stable v1 adapter by @DeJeune in #23916
- fix(agent-session): keep background continuations in existing replies by @DeJeune in #23943
- Fix regenerate to use the selected model by @404-Page-Found with @Copilot in #23865
- fix(chat-messages): preserve history and paint code before highlighting by @DeJeune in #23947
- fix(desktop-runtime): address product regressions exposed by e2e by @kangfenmao in #23870
- test(agent-session): align approval projection response assertion by @DeJeune in #23955
- fix(command-focus): prevent update loops and improve error fallback by @kangfenmao in #23960
- Align generate_image reference limits with Paintings by @404-Page-Found with @Copilot in #23374
- Reject invalid knowledge-base URLs before saving by @404-Page-Found with @Copilot in #23366
- Close the main window with Cmd+W on the last tab by @404-Page-Found with @Copilot in #23282
- fix(message-list): animate shared return to bottom by @DeJeune in #23965
- fix(command-focus): keep scope attachments stable across rerenders by @DeJeune in #23957
- test(knowledge): assert legacy URLs through the restore schema by @404-Page-Found in #23969
- fix(agent-session): release session when a pending connect fails during close by @kovsu in #23974
- feat(pi-durable): support shared-backend desktop forks by @DeJeune in #23956
- fix(tool-approval): notify onAborted when an approval's signal aborts by @kovsu in #23976
- fix(ci): skip prek binary downloads in CI by @kangfenmao in #23982
- feat(pi-durable): support edit and resend by @DeJeune in #23983
- fix(website-links): update official website and documentation domains by @kangfenmao in #23973
- fix(composer): keep the manual input height through paste and typing by @cherry-coding[bot] in #23970
- refactor(tool-approval): unify pending approval cancellation by @DeJeune in #23984
- feat(agent-runtime): apply permission-mode switches to the running turn by @1lck in #23971
- fix(agent-session): replace edited tails without history versions by @DeJeune in #23989
- fix(pi-durable): keep reasoning tokens in turn usage metadata by @kovsu in #23985
- refactor(pi-runtime): share child task publishing between Pi and Durable by @kovsu in #23986
- fix(marketplace): unify scrolling and MCP management by @kangfenmao in #23975
- fix(chat): refresh rendered message list after editing a message by @404-Page-Found with @Copilot in #23518
- fix(ci): restore marketplace main checks by @DeJeune in #23994
- Fail fast when Claude Code lacks a Linux session bus by @404-Page-Found with @Copilot in #23380
- fix(agent-details): backport shared card visibility to v2.2.0 by @DeJeune in #24027
- fix(release): backport #24030 to v2.2.0 by @kangfenmao in #24032
- fix(release): backport #24035 to v2.2.0 by @kangfenmao in #24039
- fix(release): backport #24036 to v2.2.0 by @kangfenmao in #24040
- fix(release): backport #24041 to v2.2.0 by @kangfenmao in #24050
- fix(release): backport #24037 to v2.2.0 by @kangfenmao in #24052
- fix(release): backport #24081 to v2.2.0 by @kangfenmao in #24095
- fix(release): backport #24113 to v2.2.0 by @kangfenmao in #24121
- fix(settings): backport tools and language layout to v2.2.0 by @kangfenmao in #24120
- fix(release): backport #24124 to v2.2.0 by @kangfenmao in #24128
- fix(release): backport #24123 to v2.2.0 by @kangfenmao in #24131
New Contributors
- @radianceded made their first contribution in #20356
- @cherry-docs-sync[bot] made their first contribution in #23544
- @MasterZRC made their first contribution in #23547
- @Haarris made their first contribution in #23726
- @Contentment003111 made their first contribution in #23535
- @shigzz made their first contribution in #23704
- @leezehuan made their first contribution in #23551
- @William20100221 made their first contribution in #23329
- @felixren7 made their first contribution in #22707
- @Leeeeizz made their first contribution in #23457
- @obantysh made their first contribution in #23635
- @XueHua-s made their first contribution in #23831
Full Changelog: v2.1.10...v2.2.0