Repository navigation
Releases: databricks-solutions/mason
Release list
v1.5.1 - Chat history reliability and renaming
What’s changed
- Fixed long chat history selection and loading reliability.
- Added persistent chat renaming from the sidebar.
- Simplified button styling with borderless hover states.
- Updated the desktop app version to 1.5.1.
Merged pull request: #21
Full changelog: v1.5.0...v1.5.1
v1.5.0 — Agentic Workflow Designer
Agentic Workflow Designer
Build multi-model agentic pipelines on a drag-and-drop canvas (sidebar button above Profile, or Cmd+D). Each cell picks a model, a subset of your connected tools, and a prompt; wire cells with flow edges to pipe output downstream, or feedback edges to create bounded revision loops where a reviewer routes work back until it passes. Mix providers freely — a Fable cell can feed an Opus cell whose work a Sonnet cell validates — all through the same governed gateway.
- Hand-rolled canvas (pan/zoom, drag-to-connect ports, labeled multi-input joins, fan-out/fan-in)
- Gate cells route via a forced
route_outputverdict — works across every tool-capable model - Bounded feedback loops: per-cell revision cap (editable on the card), live
running 3/5status, and a hard 25-cell-run global budget so loops can't run away - Per-cell tool selection; live transcript drawer; workflows saved to
~/.mason/workflows/ - Built-in Spec → Implement → Test → Review template
Cross-model compatibility
- Gate
stream_optionsper model family — fixes400 unknown field "stream_options"on Qwen 3.5 / Llama 4 - Collapse multiple system messages into one — fixes
Gemini models only support one system prompt - Per-family
max_tokenscaps - Flatten array-shaped
delta.contentin the SSE stream — fixes[object Object]output on Qwen 3.5 / Gemini / gpt-oss - New
npm run test:modelscross-model regression sweep (81 scenarios)
v1.4.3 — Progressive markdown rendering
What's new
Live markdown rendering during streaming
Mason used to show raw markdown (## Heading, **bold**, fenced backticks) until the stream finished, then flip the bubble to formatted markdown all at once. Now the response renders progressively as the model types — formatting appears in its final form, never raw.
How it works under the hood: every typewriter tick parses the partial stream and walks a token-aware scanner that finds the last position where all open markdown tokens have closed. The typewriter renders only up to there. Unclosed **, *, `, […](, ``` fences, and any in-progress block-level line are held back invisibly until their closer arrives, then drop into place.
The "Building…" indicator is configurable. Edit THINKING_PHRASES in src/messages.ts to add your own — Mason picks one at random each time it's waiting for the next response. Once content starts streaming, the phrase disappears and the brick animation alone continues below the response.
Smaller things
- Inline streaming chunks render with proper markdown structure (paragraphs, code blocks, links) — no more
<pre-wrap>artifacts colliding with<p>blocks. - Code blocks appear with syntax highlighting and copy button the moment the closing fence lands, rather than streaming partially-highlighted.
Full changelog: v1.4.2...v1.4.3
v1.4.2 — Agentic loop polish + Anthropic prompt caching
What's new
A pile of agent-loop UX and cost fixes that came out of multi-hour SQL/data sessions with Opus 4.7. If you're using Mason for anything tool-heavy, this is worth updating to.
Prompt caching for Claude models — big cost win
Tool schemas are the heaviest static portion of every turn (~16K tokens for ~80 tools). Mason now marks cache_control: ephemeral on the last tool and last system message, so Anthropic caches the entire static prefix for 5 minutes. Subsequent turns within the cache window read at ~10% of input cost — typically 80–90% savings on the static prefix every turn.
Verify it's working in DevTools console after a few turns:
[CHAT] Usage (streamed) — input: 31000, output: 230, cache_created: 0, cache_read: 26017
cache_read climbing turn-over-turn = caching engaged.
OpenAI/GPT models automatic-cache prefixes >1024 tokens, no opt-in needed. Gemini/Meta/Qwen have no standard caching path yet.
Agent loop UX
- Agent iteration budget raised 10 → 40. Polling patterns (waiting on a job run, multi-step SQL builds) used to silently hit the cap and return to idle with no explanation. Now the budget fits real workflows.
- Clear stop message when the loop exhausts. No more "looks like a hang" mystery — the chat surfaces
Agent loop hit the 40-step budget — send "continue" to keep going. - Building bricks stay visible during tool execution and below streaming text. Previously the indicator vanished when "Calling tool: X" appeared, and again once content started streaming — users assumed Mason had frozen during slow MCP calls or model pauses.
- Empty-response detection. If Opus 4.7 burns its token budget on extended thinking and returns no visible content, Mason now shows a clear hint instead of silently rendering an empty bubble.
Chat reliability
max_tokens4096 → 16384. Gives Opus 4.7 extended-thinking headroom before output, and reduces tool-call argument truncation.trimHistorydrops orphan tool results. Anthropic was rejecting whole requests when our message trimming cut between an assistant-with-tool_calls and its result. Now any tool-result message whosetool_call_idisn't matched is pruned.- Tool-call argument sanitization. Empty or malformed JSON in
function.arguments(from truncation or providers that emit no args for no-param tools) now normalizes to{}so the conversation doesn't wedge.
Full changelog: v1.4.1...v1.4.2
v1.4.1 — UC MCP reliability + chat robustness
What's new
Mostly about making Unity Catalog external MCP connections (Atlassian, GitHub, future Google/SharePoint MCPs, etc.) actually work end-to-end, plus a handful of chat-loop robustness fixes that surfaced while debugging.
UC external MCP — now connects on first try
- Auto-authorize on first connect. UC connections return "needs authorization" as a JSON-RPC error embedded in an HTTP-200 response, not a plain 401. Mason now detects this pattern and opens the Authorize browser window automatically; previously it silently logged "Found 0 tools" and required you to copy the URL out of the console.
- Stop hitting SaaS endpoints directly. A previous
directHostshortcut was meant for Databricks Apps (*.databricksapps.com) but was applied to every UC connection — Mason was tryinghttps://mcp.atlassian.com/mcpandhttps://www.googleapis.com/mcpand getting 404s. The shortcut is now gated on*.databricksapps.com; everything else routes through the UC proxy where credential translation happens. - Filter the UC picker to MCP-capable connections only. Many system-managed UC HTTP connections (Google Drive, SharePoint, Gmail, Tavily REST, etc.) are OAuth credential proxies, not MCP servers — they had no business in the MCP picker. Mason now respects the
is_mcp_connectionflag. - Self-heal stale saved URLs. If a saved UC URL persistently 404s, Mason drops it from
workspaces.jsonat the end of auto-connect so it doesn't haunt every restart.
Chat reliability
- Tool-call argument sanitization. Tool calls coming back from the model with empty, truncated, or otherwise malformed
argumentsJSON used to wedge the entire conversation — the gateway would 400 on every subsequent turn withParam 'arguments' … is not a valid JSON string. Mason now rewrites bad arguments to"{}"so the tool runs (possibly with the wrong inputs) and the model recovers on the next turn. Logs[CHAT] Tool call <name> had malformed arguments; replacing with {}when this fires.
Full changelog: v1.4.0...v1.4.1
v1.4.0 — Skills
What's new
Skills — user-authored, on-demand instruction bundles
Mason now supports skills — folders of specialized instructions the LLM can load on demand when the user's request matches. Same progressive-disclosure pattern Anthropic uses, executed locally so it works across every model Mason supports (Claude, GPT, Gemini, Llama, Qwen, custom endpoints) through the Databricks AI Gateway. No beta headers or sandboxed containers required.
How it works:
- At chat time, an
<available_skills>block lists each enabled skill's name + one-line description in the system prompt. - When relevant, the model calls the new built-in
load_skill(slug)tool. - Mason reads the skill's
SKILL.mdfrom disk and returns it as the tool result; the model continues with full instructions in context.
Where skills live:
~/.mason/skills/<slug>/SKILL.md— user-authored, edited in Settings~/.ai-dev-kit/repo/databricks-skills/<slug>/SKILL.md— auto-discovered, read-only (forward-compatible with ai-dev-kit's planned skills-only releases; existing MCP still works in parallel)
UI:
- Settings → Skills — list / create / edit / delete user skills with enable toggle and auto-load preference.
- + icon → Skills — quick per-skill enable/disable, mirroring the Tools modal.
Format is Anthropic-compatible (YAML frontmatter + markdown body), so user-authored skills are portable.
Platform notes
- macOS (Apple Silicon) — signed + notarized DMG/zip attached.
- Windows (x64) — installer attached (
Mason Setup 1.4.0.exe). Windows ARM64 not built in this release. - The Windows PowerShell installer (
scripts/install.ps1) added in 1.3.13 auto-detects architecture and pulls the matching asset.
Full changelog: v1.3.13...v1.4.0
v1.3.12
What's new
- Streaming with tools. Chat completions now stream from the first token even when tools (read_file, write_file, ask_user, MCP) are attached. Previously Mason disabled streaming whenever any tool was in scope, so slower models like Opus 4.7 sat on "Building…" until the full response was generated. The SSE loop now accumulates tool_call deltas in the main process and synthesizes the response shape the renderer already understood, so assistant preambles render live and tool calls execute as before.
- Responses API path (some GPT models) stays non-streamed — different SSE shape.
Full changelog: v1.3.11...v1.3.12
v1.3.11
What's new
- New built-in tool: ask_user. The LLM can pause to ask 1–4 clarifying questions before taking further steps, all in a single inline card. You step through the questions, pick an option (or type "Other"), and the answers flow back to the model in one go — no extra round-trip per question. Available alongside read_file / write_file in the Tools modal.
- Better cross-model support. Normalized message content on the main-process side so models that return content as array-of-parts (Gemini and some others) no longer crash the renderer with the marked() "input is an array" error. ask_user now works on Gemini, Claude, GPT, and the others.
Full changelog: v1.3.10...v1.3.11
v1.3.10
What's new
- Internal: full TypeScript migration. The entire Mason runtime (main + preload + all 11 renderer modules) is now TypeScript. Strict mode, typed IPC contract between preload and renderer, ambient typing on
window.masonstate. No user-visible changes — same flows, same MCP behavior — but every future feature ships on a typed foundation. - Settings: scrollable workspaces list. When you have many profiles in
~/.databrickscfg, the list now caps at ~6 visible entries with internal scroll instead of stretching the Settings page.
Full changelog: v1.3.9...v1.3.10
v1.3.9
What's new
- Auto-OAuth on profile switch: switching to a profile with no cached token now opens the browser sign-in flow automatically — no manual Authenticate click needed.
Full changelog: v1.3.8...v1.3.9