Back to all releases

v0.94.0

Platform

// July 28, 2026

Per-person spend budgets, Claude Opus 5 as the default model, and summaries for agent sessions

Spend is now something you can cap per person rather than review after the fact: budget rules match people by their directory attributes, warn or block when someone crosses their limit, and reset on the calendar window you choose. In-app chat and newly created assistants now run on Claude Opus 5. Agent Sessions gained on-demand summaries and pinning, so a long session can be read at a glance and the ones worth returning to stay within reach.

Features

  • Per-person spend budgets #4229 - Set organization-wide budget rules that target people by their directory-synced attributes and give each matched person a spend limit for a UTC calendar window. A periodic evaluator totals every matched person's LLM spend, records warning and breach events, and rules set to block stop that person's Claude Code traffic until the window resets. Editing a rule archives the current version and creates a successor instead of overwriting it, and rules are archived rather than deleted, so a past event always resolves to the exact configuration that fired it. Budgets appears as a tab on the Costs page and is rolling out to selected organizations behind a feature flag. (Author: @subomi)
  • Claude Opus 5 is the default chat model #4574 - Claude Opus 5 joins the supported model catalog and becomes the default for in-app chat and for assistants you create from now on. Purpose-specific choices for judges, embeddings, and similar tasks are unchanged. (Author: @simplesagar)
  • Summaries and pinning on Agent Sessions #4533 - Ask for a summary of a session on demand and read it in the session side panel, and pin the sessions worth returning to from either the list or the detail sheet. A Pinned filter narrows the list to what you marked. (Author: @simplesagar)
  • A dedicated view for pinned sessions #4611 - An All and Pinned toggle on Agent Sessions gives pinned work its own list rather than leaving it behind a filter chip. (Author: @simplesagar)
  • Export chat transcripts with a producer API key #4527 - chat.load now accepts a producer-scoped API key alongside a dashboard session and a chat-session token, so a backend integration can pull transcripts without a browser session. A direct producer key counts as a first-party project credential and can load any chat in its project, while external-user callers and chat-session tokens stay limited to their own chats and the project and organization boundaries still apply. The key-scope description in the dashboard now says the key can export transcripts, and the endpoint appears in the published API docs. (Author: @mfbx9da4)
  • Redesigned login and register screens #4534 - Signing in now opens on an animated walkthrough of a governed agent session, showing five policy decisions (grant, flag, deny, hold, and audit) in sequence, next to a cleaner panel carrying the Speakeasy lockup and single sign-on. (Author: @simplesagar)
  • Admin controls for the chat analysis pipeline #4529 - Platform administrators can turn the work-units judge on or off for an organization, set its daily evaluation cap, and start a pass immediately with a Run now control instead of waiting for the next chat write or periodic sweep. Every change records a before and after audit snapshot. (Author: @chase-crumbaugh)
  • Admin management of platform-level external credentials #4550 - An External Services section in organization settings lets platform administrators create, inspect, update, and remove the platform's own external credentials, starting with the ambient GCP identity, with a live verification probe that reports which identity a credential resolves to. (Author: @bflad)
  • Custom domain and certificate health checks, in observation mode #4404 - A daily check now examines custom domain routing and TLS certificate health and logs what it finds, including the notifications a later release will send. Nothing is stored or emailed yet, and the dashboard warnings and manual recheck ship alongside but stay dormant until the observation period ends. (Author: @ThomasRooney)
  • Groundwork for device integrations #4554 - New tables record the connection between an organization and an external device-management or compliance vendor, the sync schedule for each connection, and the hardware inventory those vendors report. Devices that stop being reported are marked missing rather than removed, so coverage history survives. (Author: @daviddanialy)
  • AI SDK 7 for dashboard chat #4418 - The dashboard chat runtime moves to AI SDK 7, along with matching major versions of its integrations, the OpenRouter provider, and the assistant-ui adapter. (Author: @alx-xo)
  • Telemetry log mirroring always runs #4607 - Telemetry log rows are now always mirrored to their Pub/Sub topic. The killswitch that gated this could never evaluate correctly and so blocked every publish while logging a warning on each batch, and the publish path was already best-effort. (Author: @subomi)

Bug fixes

  • Enabling an MCP server no longer fails on a duplicate display name #4538 - When the project's Default plugin already listed a server under the same display name, enablement aborted. It now picks the first available name instead, and deleting an MCP server detaches it from its plugins so the name is free for a replacement. (Author: @disintegrator)
  • External OAuth metadata is accepted by strict clients #4570 - MCP servers backed by an external authorization server now publish RFC 8414 metadata whose issuer matches the server's resource URL, so spec-compliant OAuth clients no longer reject the document. (Author: @bflad)
  • Published plugin names follow an MCP server rename #4541 - Renaming an MCP server now updates the name shown for it in published plugins, instead of leaving the old one behind. (Author: @disintegrator)
  • Import .env now works for MCP environment variables #4572 - The control opens a file picker, fills in one secret row per assignment, and tells you when a file cannot be read, rather than doing nothing. (Author: @simplesagar)
  • Tool Logs show the real tool name for Codex calls #4514 - Codex sends no per-call tool identifier, so its MCP calls could never be joined to their recorded provenance and each session collapsed to a single arbitrary tool name. Both sides now derive from a shared session and tool key, so rows carry the tool that actually ran and group per tool rather than per session. (Author: @bradcypert)
  • Detection sensitivity sits with the detectors it affects #4598 - The sensitivity slider moved out of its own policy-editor step and into the Detect stage, appearing only when a confidence-scored category is enabled. The policy flow is now Detect, Scope, Action, and Review, and the help text no longer names internal engines. (Author: @dennnis-ez)
  • Dead skill share links show a friendly message #4545 - A mistyped or expired public skill link now lands on the page's own unavailable state instead of a full-page crash, and crash details redact capability tokens from error messages and URLs so a share token is never shown. (Author: @simplesagar)
  • Common Billing date ranges resolve instantly #4588 - Ranges like this month, this year, and since July 1 are now worked out locally rather than costing an AI request. (Author: @speakeasyforgebot)
  • Platform Status opens the right page #4556 - The profile menu link now points at status.speakeasy.com, the domain the status page moved to. (Author: @simplesagar)
  • Stronger dashboard session tokens #4528 - Newly issued session tokens are generated from 256 bits of random entropy rather than a v4 UUID, which carries less entropy in a recognizable format and was never meant to be used as a security token. Existing sessions stay valid. (Author: @mfbx9da4)
  • Custom domain provisioning no longer trips over unused machinery #4585 - An unused Kubernetes Gateway API provisioner was removed. No environment enabled it, and it broke the custom domain health sweep on clusters without those definitions installed. Custom domains are provisioned entirely through Ingress. (Author: @ThomasRooney)
  • The dashboard asks search engines not to index it #4509 - The app shell and the web server now both send a noindex signal for the whole dashboard host, including error responses. Nothing there is meant for search results, since the app sits behind login and shared pages are tokenized links. (Author: @simplesagar)
  • Newer hooks binaries are served to installations #4599 - Hook installations now receive the 0.3.5 binary, following #4553 for 0.3.4. Previously pinned releases stay available, so an installation that has not regenerated its bootstrap script still installs. (Author: @gram-bot)
Sagar Batchu
Sagar Batchu
View on GitHub