Cortex Code Desktop v1.21.2 release notes

v1.21.2 builds on v1.21.1 with four new chart types for visualizing query results, a clearer way to create local and cloud automations, and a redesigned restricted session scope dialog. It also fixes a renderer memory leak that grew steadily during long chat sessions and restores startup on managed machines whose policy file was saved with a byte-order mark.

What’s new

  • Four new chart types: Charts add table and data_frame for tabular output, horizontal_bar_chart for ranked lists and long category names, and vega_lite_spec for charts the built-in types don’t cover, such as heatmaps, box plots, and layered or faceted charts. These are available to everyone, with no setting to enable.

  • Choose local or cloud when creating an automation: + New now asks which kind of automation you want instead of following the active tab, and each tab explains what that kind of automation can reach. Cloud automation titles are validated as you type, with the naming rules shown under the field, and Create stays disabled until the title and prompt are valid.

  • Hide scheduled sessions: A Scheduled filter in the SESSIONS sidebar hides automation-generated sessions.

  • Automations follow the active connection: cortex automation commands run from chat now target the account the app is connected to, rather than the command line’s default connection. A missing cortex binary now explains how to install it, and authentication failures point you to sign in, instead of surfacing a raw shell error.

  • Redesigned restricted session scope dialog: Read-only and named scopes now share one selection flow that matches Snowsight. Scope details and your active scope appear immediately instead of loading in, read-only stays selectable while the scope list loads, matching text is highlighted in the role picker, and creating or applying a scope can be cancelled.

  • Snowflake catalog improvements: Built-in functions and procedures are no longer listed alongside your own, the dynamic table and materialized view filters work again, and returning to a connection you’ve already browsed loads from cache instead of re-querying.

  • Automations UI polish: Both Automations tabs present their tip the same way, Refresh has moved into the page header next to + New, and long MCP server and secret names in the automation details sidebar are shown as labelled chips with the full identifier on hover.

Reliability and fixes

  • Fixed: memory leak in long chat sessions: Memory grew continuously and never recovered, reaching several gigabytes over multi-day uptime, because streaming tool calls retained their rendered output indefinitely.
  • Fixed: Desktop refusing to start under managed settings: A policy file saved as UTF-8 with a byte-order mark, as Notepad and some MDM tools write it, prevented startup. Genuinely malformed policy files still block startup by design. An incomplete hook entry in settings.json is now skipped instead of failing hook loading entirely.
  • Fixed: chat history lost on multi-root workspaces: Adding a second folder to a window no longer strands the chats belonging to the first, and saving a previously untitled multi-root workspace carries its history, transcripts, and images across.
  • Fixed: repeating MCP sign-in prompts: Servers that request no permission scopes could prompt for sign-in on every request.
  • Fixed: catalog omitting tables: Browsing a database could silently omit some of a schema’s tables.
  • Fixed: “Could not establish an isolated Snowflake session”: After credentials expired, this error persisted until the app was restarted. The connection is now re-established automatically.
  • Conversations stay connected after summarization: Server-side compaction no longer detaches the thread, so long conversations keep using incremental history. Renaming a session now updates the corresponding Cortex thread, and the local title still applies if that update fails.
  • Fixed: sessions with saved plans could fail to open: Affected sessions now load correctly.
  • Failed queries report their query ID: Failed SQL run from chat omitted the identifier needed to look the query up in QUERY_HISTORY.