[!NOTE] This is a mainline Coder release. We advise enterprise customers without a staging environment to install our latest stable release while we refine this version. Learn more about our Release Schedule.
Changelog
BREAKING CHANGES
- Remove native chat usage limits in favor of AI Gateway budgets (#27329, f0e6ac64b3) (@ibetitsmike)
- feat!: add admin-controlled dynamic client registration toggle (#27316, fbac602456) (@BobbyHo)
- feat!: resolve agent external auth by template, not config order (#27854, 97c4031526) (@BobbyHo)
- feat!: org-scope MCP server configs with RBAC (#27942, 443e3b9b80) (@ibetitsmike)
- feat!: hide Coder Tasks behind the enable-ai-tasks flag (#28008, 8203b2ebaf) (@david-fraley)
- feat!: scope chat model configs to organizations (#27955, f32592ec6b)
- feat!: enforce organization scope for chat models (#27959, aefc761fcf) (@ethanndickson)
- feat!: scope chat model override settings to organizations (#28442, 0ef331fcd0)
- fix!: deprecate
login_type=none, convert existing users to password login (#26851, 0e104f38e0) (@jakehwll) - refactor!: consolidate chat model availability (#28440, 3809314b31)
- refactor!: remove default organization model routes (#28632, aa209ae573)
Features
- Dashboard: Announce cost controls move to AI Governance (#27543, e83f018f5f) (@ibetitsmike)
- Add group AI spend endpoint (#27568, ed37483ff7) (@ssncferreira)
- Add chat lifecycle hook dispatch backend (#27401, 8ea2586189) (@ibetitsmike)
- Add enable/disable support for user secrets (#27537, 85984ff142) (@zedkipp)
- Search users by display name (#27398, 09a69e624a) (@aqandrew)
- Log tailnet tunnels to the connection log (#27423, 1a6a8be96c) (@sreya)
- Add coder secret import for bulk secret files (#27534, 0b2a6cac78) (@dylanhuff-at-coder)
- Add bulk secret import upload to Add secret dialog (PLAT-240) (#26725, efbf802319) (@dylanhuff-at-coder)
- Dashboard: Hide workspace resources when lacking workspace-create permission (#27278, ce769680ba) (@jscottmiller)
- Dashboard: Confirm before batch stopping workspaces (#27631, d072aa7bd0) (@jakehwll)
- Add agent runtime hour license claims and entitlement feature (#27459, 06ceb4253d) (@jaaydenh)
- Add chat suffix messages, idle failure, and content update support (#27428, 91c7232d97) (@ibetitsmike)
- Wire chat lifecycle hooks into chatd (#27429, c17bed25e0) (@ibetitsmike)
- Dashboard: Surface chat lifecycle hook outcomes in the chats UI (#27430, 4bf9b9d1e6) (@ibetitsmike)
- Dashboard: Modernize OAuth2 applications settings UI (#27562, 6c42309ccb) (@jakehwll)
- Add hourly hb_agent_runtime_v1 usage events for Coder Agent runtime (#27312, 54d5eb7ec2) (@jaaydenh)
- Back the per-chat cost endpoint with AI Gateway data (#27328, 95a2c2ba02) (@ibetitsmike)
- Add network calls summary to AI session threads API (#27417, 841a1765f7) (@SasSwart)
- Show network request summary on AI session detail card (#27418, 3f3fd1c4d7) (@SasSwart)
- Dashboard: Add generateUUID helper (#27661, cf7f876880) (@jeremyruppel)
- Server: Use conditional requests for GitHub JSON reads (#27628, 2acfe7e829) (@joshfree)
- Add network calls list to AI session threads API (#27425, 8886a5749a) (@SasSwart)
- Dashboard: Label AI spend as estimated (#27584, ec9b0f04d1) (@ssncferreira)
- Expose dynamic client registration in deployment settings (#27480, 4245e4e378) (@BobbyHo)
- Show what a chat lifecycle hook changed (#27655, df1c0f9710) (@ibetitsmike)
- Helm: Make HTTPS redirect status code configurable (#27360, 24ff135801) (@02strich)
- Promote MinimumImplicitMember experiment to GA (#27472, 52423eb87b) (@Emyrk)
- Scale Testing: Llm-mock tool calls and paced streaming (#26850, a779320d87) (@ethanndickson)
- Dashboard: Show network calls list on AI session detail (#27426, a60f393773) (@SasSwart)
- Add per-model OpenAI Responses API toggle (#27683, c6cee10e8b) (@ibetitsmike)
- Remove native chat cost tracking in favor of AI Gateway cost data (#27330, 6b8f820493) (@ibetitsmike)
- Dashboard: Tighten base infra step grid and card typography (#27797, 5f3b8755ac) (@tracyjohnsonux)
- feat(dogfood/coder): add agent-browser live preview app (#27838, d40c4f77b9) (@ibetitsmike)
- Server: Support public OAuth2 client tokens at the schema layer (#27712, d814dfad88) (@BobbyHo)
- Add --chat-hook-allow-insecure to allow plain HTTP chat hook URLs (#27896, 4b9880afa6) (@ibetitsmike)
- Add per-template Coder Agents access control (#27285, 0ac23e3ee1) (@ethanndickson)
- Dashboard: Add per-template Coder Agents controls (#27514, 01c00ce1bf) (@ethanndickson)
- CLI: Add --agents-allowed to template commands (#27517, 78b5a0f5a2) (@ethanndickson)
- Harden chat generation runtime instrumentation for billing (#27451, 4b7494be72) (@jaaydenh)
- Dashboard: Reintroduce chat search cache invalidation (#27892, 632eecc090) (@DanielleMaywood)
- Dashboard: Reconcile chats-by-workspace cache across archive and watch paths (#27901, f9047e5836)
- Dashboard: Scroll to module when clicking sidebar row (#27351, baed1455cf) (@aqandrew)
- DEVEX-732 premium badging (#27847, 50640063a2) (@untra)
- Include agent metadata in workspace list responses (#27934, 9a57dfa642) (@Emyrk)
- Constrain the OAuth2 client type column (#27931, 16c58770f8) (@BobbyHo)
- Log rate-limited external auth token validation (#26754, 66b065323b) (@jscottmiller)
- Dashboard: Add server-side search and pagination for groups page (#27994, 87fdd2b59b)
- Add paginated API endpoint for groups (#27603, 6e07e2610f) (@aqandrew)
- Add built-in Browser tab for agent-browser (#27910, 2e5353bde7) (@ibetitsmike)
- Make CLI/API doc generators emit front-matter metadata (Phase 2) (#27246, 0a7bb80a1e) (@nickvigilante)
- Invalidate provisioner daemon sessions on key deletion (#26532, 866e676320) (@jscottmiller)
- Dashboard: Consolidate git panel tab strip into a view switcher dropdown (#27012, f7f840ac69) (@tracyjohnsonux)
- Dashboard: Add download and export for personal skills (#28032, 6765731ea9) (@Shelnutt2)
- Wire chat search box to full-text search (#27973, c424a76a12) (@DanielleMaywood)
- Redesign the advisor tool row (#28069, 5a33b669b4) (@DanielleMaywood)
- Unhide --oidc-redirect-url server option (#28072, f0c17291b3) (@Emyrk)
- Migrate coderd MCP server to official MCP Go SDK (#28056, 08a1525f78) (@ibetitsmike)
- CLI: Migrate exp mcp stdio server to official MCP Go SDK (#28057, 26fe3f3185) (@ibetitsmike)
- Server: Migrate external MCP client to official Go SDK (#28058, 1e546ea8a3) (@ibetitsmike)
- Agent: Migrate workspace agent MCP client to official Go SDK (#28059, 7720e283f5) (@ibetitsmike)
- Migrate aibridge injected-MCP proxy to official MCP Go SDK (#28060, c8e8b21a88) (@ibetitsmike)
- Dashboard: Render list_subagent_models tool results (#28116, abe9c79605) (@DanielleMaywood)
- Add experimental CLI to price unpriced AI models (#27926, 2d9b6eda8f) (@ssncferreira)
- Add Coder Agents chat tools to the MCP toolsdk (#28025, 8d4d0b35dd) (@ibetitsmike)
- Add oauth2 scope columns and single-use delete queries (#28007, 990d24dc42) (@BobbyHo)
- Redirect to the template builder after first time setup (#27670, e1fa247e59) (@aslilac)
- DEVEX-751 updated premiumpaywall component (#28070, b26f4c0e03) (@untra)
- Dashboard: Migrate agent chat scrolling (#28130, 57dc47dc42)
- Add username and email user search filters (#27922, a005e5cd22) (@wyattfry)
- Dashboard: Gate appearance settings behind Premium paywall (#27948, 41d2ecec0b) (@jakehwll)
- Dashboard: Replace proxy emoji with latency radio icon in trigger (#28128, b4971bc49f) (@tracyjohnsonux)
- Dashboard: Make sidebar steps navigable (#28153, 039c0da5ae) (@aqandrew)
- Add redirect URL override for external auth (#28082, b5d18bb9c9) (@code-asher)
- Tolerate unusable runtime hours claims and decode -1 allocation as unlimited (#27984, d15800b494) (@jaaydenh)
- Report agent runtime hours usage in entitlements (#27985, fa8ffe4eda) (@jaaydenh)
- Add per-license Products section with Coder Agents price gates (#28051, 995d7fe31b) (@jaaydenh)
- Limit concurrent chat agents with pooled admission (#27902, 119f2b1dd9) (@ibetitsmike)
- Defer MCP tool schemas behind a find_tools search (#28225, 7724ee281a) (@ibetitsmike)
- Extend agent chat MCP tools for remote UAT evidence loops (#28233, affeeaf9c8) (@ibetitsmike)
- Audit chat system instructions changes (#27668, d3f08b1983) (@mafredri)
- Dashboard: Surface subagents in the chat sidebar (#28234, b3f05a23fc) (@tracyjohnsonux)
- Server: Correlate request logs and spans by client_session_id (#27671, 71e95a3611) (@aqandrew)
- Dashboard: Add Install Coder Desktop item to UserDropdown (#28244, 4d13bef74d) (@jakehwll)
- Derive OAuth2 client type from token_endpoint_auth_method (#28043, 663f41ffa9) (@BobbyHo)
- Add yaml config option to standalone AI gateway (#28258, a441b03d70) (@pawbana)
- Dashboard: Show best-effort model pricing on the model form (#28290, 8405bbb26c) (@DanielleMaywood)
- Dashboard: Add shared DateTimeRangeFilter component (#28255, da99941099) (@johnstcn)
- Automate weekly AI model price book refresh (#28146, 05699c4d55) (@evgeniy-scherbina)
- Default AI Gateway sessions list to a 24h time range (#28256, 023f61626d) (@johnstcn)
- Track Junie as an AI Gateway client (#28266, 7ff1278ab3) (@matifali)
- Audit MCP server config changes (#27943, 299e72ad30) (@ibetitsmike)
- Add group and user ACLs to MCP server configs (#27944, 7ca7c30f40) (@ibetitsmike)
- Add organization picker to MCP server settings pages (#28150, 24b83dc727) (@ibetitsmike)
- Dashboard: Move PR icon to diff line, center unread dot, persist kebab (#28326, 5be2fa7974) (@tracyjohnsonux)
- Dashboard: Show total agent hours consumption on the licenses page (#27953, e5deb57079) (@jaaydenh)
- Remove task management MCP tools (#28354, 2f996d765a) (@ibetitsmike)
- Distinguish default and custom AI model prices (#28204, 9390e51422) (@ssncferreira)
- Support custom prices for models in the price book (#28328, 19d1ee9fc8) (@ssncferreira)
- Label process_output rows with the process command (#28300, 4a7a0a3348) (@DanielleMaywood)
- Add a source filter to the AI model price list (#28329, 50ecd6959f) (@ssncferreira)
- Dashboard: Add provider icon to chat model selector (#28330, 015d6a6e06) (@DanielleMaywood)
- Add CTAs to AI budget admin notifications (#28138, 363d7fc4d9) (@ssncferreira)
- Apply reasoning effort and surface thinking blocks for Google chat models (#28273, 8eb1e43f0b) (@ibetitsmike)
- Server: Compare scopes by permission coverage (#28167, dea3a2944a) (@BobbyHo)
- Dashboard: Dim unselected sidebar chat titles (#28382, b605446016) (@tracyjohnsonux)
- Scale Testing: Add create-users scaletest subcommand (#28287, 854991099c) (@cstyan)
- Scale Testing: Add opt-in --reuse-users (#28289, c3cd692f86) (@cstyan)
- Register public clients without a secret (#28046, 6348c83142) (@BobbyHo)
- Update premium paywall copy and link each page to its feature docs (#28339, e7eea0f06f) (@david-fraley)
- Dashboard: Add date-time range picker with quick picks (#28392, af05849c9c) (@tracyjohnsonux)
- Dashboard: Use DateTimeRangePicker on the AI sessions page (#28426, 1c139402d0) (@tracyjohnsonux)
- Add workspace agent session count protocol (#28125, 903d7b756d) (@EhabY)
- Premium Page CTA updates and form handling (#28226, f44a3b59d7) (@untra)
- Add premium paywall conversion telemetry (#28425, a2afb458c5) (@david-fraley)
- Show a premium paywall on the external auth settings page (#28435, cb52f5339d) (@david-fraley)
- Server: Include chat model organization IDs in telemetry (#27956, ac41b5b4f9) (@ethanndickson)
- Add chat model config RBAC resource (#27957, cbe24a3da5)
- Use organization-scoped chat models (#27960, 75ad45109d)
- Audit chat model config changes (#28439, a53c6e6366)
- Audit operational agent settings (#28369, c275327fb7)
- Server: Bill completed local tool batches in agent runtime (#28360, ba8030ecef) (@jaaydenh)
- Server: Record live tool execution stamps in the message part buffer (#28361, bdddb82dcc) (@jaaydenh)
- Server: Bill interrupted tool batches on cancellation rows (#28362, e7f1e08348) (@jaaydenh)
- Enable Coder Agents for organization members (#28186, 632cf6385e) (@ibetitsmike)
- Allow sharing MCP servers with users and groups (#28593, 8f45d5510c) (@ibetitsmike)
Bug fixes
- Database: Resolve duplicate 000554 migration collision (#27581, bd5d640f1e) (@jakehwll)
- Remove
@mui/materialfromformUtils.stories.tsx(#27503, 448fe10d82) (@jakehwll) - Delete the unused ChatMessagePart.Signature field (#27588, be226409b8) (@DanielleMaywood)
- Server: Match sync.Map semantics in the typed wrapper (#27582, eb905702c8) (@mafredri)
- Remove chatd usage limit enforcement (#27535, 75fd7bc09a) (@johnstcn)
- Server: Reject workspace proxy hostname prefixes (#27544, 8cc7f2bb0e) (@geokat)
- Server: Give chat message ids an append-order guarantee (#27495, e96d8646e2) (@ibetitsmike)
- Report combined member limit in group AI spend (#27589, 0b4095085e) (@ssncferreira)
- Server: Extract plain-text provider error bodies (#27597, 5d2a69d85a) (@johnstcn)
- fix(aibridge): handle sonnet 5 adaptive thinking in bedrock (#27339, b371262e5c) (@johnstcn)
- Database: Order the chat prompt query and its boundary by id (#27619, 1c722ff969) (@ibetitsmike)
- Dashboard: Order chat transcript by message id (#27620, fb30674806) (@ibetitsmike)
- Ai cost control cap configurable AI spend limit (#27640, e71249a821) (@ssncferreira)
- Dashboard: Refresh group member budgets after overrides (#27553, e3a5a697ab) (@EhabY)
- Dashboard: Reflect submitting state during batch update (#27630, 0b93731ebf) (@jakehwll)
- Demui
<OAuth2AppForm />(#27561, 659fb48a1d) (@jakehwll) - Prefetch outdated Coder CLI in e2e setup instead of in the test (#27629, 4e512f786f) (@BobbyHo)
- Add warn log level to unpriced models message (#27678, 3660ffecdd) (@ssncferreira)
- Helm: Render service nodePort with an explicit if guard (#27682, e819dd4af6) (@pawbana)
- Hide AI budget override controls without permission (#27654, b4eda32a2e) (@ssncferreira)
- Dashboard: Announce cost controls move in v2.36 (#27688, b3852c707b) (@ibetitsmike)
- Dashboard: Point Use template to builder (#27663, a86e67d3d9)
- Add info log level to unpriced models message (#27693, 7b104b6a98) (@ssncferreira)
- Dashboard: Delete unreachable WaitForExternalAuth tool code (#27684, 4003f0086f) (@DanielleMaywood)
- Dashboard: Delete dead execute auth_required flow (#27687, 11e03cfb3a)
- Remove nodePort from required service fields of ai-gateway chart (#27696, 6df24634fd) (@pawbana)
- Dashboard: Delete unreachable switch arms from ToolLabel and ToolIcon (#27697, 9bc681fa6e) (@DanielleMaywood)
- Dashboard: Prevent Add secret dialog overflow (#27649, e30a7bcd0d) (@dylanhuff-at-coder)
- Build actionlint from source to avoid the shellcheck deadlock (#27679, bc9c7855d9) (@ibetitsmike)
- Dashboard: Correct autostop restart prompt on the workspace schedule page (#27632, a76c51dfc4) (@jakehwll)
- Dashboard: Use "Create token" wording in token settings (#27634, 31ac9a4782) (@jakehwll)
- Dashboard: Link spend page alert to cost control migration section (#27782, f4110122ec) (@ssncferreira)
- Correct authorization header spelling in api docs (#27721, 7bd9f5ec93) (@penso)
- Reserve chat hook dispatch capacity for running turns (#27656, fc24c27dfd) (@ibetitsmike)
- Bound golangci-lint memory to stop lint OOM kills (#27637, 6e5f02bfbe) (@ibetitsmike)
- Agent: Detect IPv6-bound listening ports (#27765, 8a4adeec32) (@bpmct)
- Support adding multiline secrets via the UI (#27253, f44e8c12d6) (@rowansmithau)
- Server: Preseed AI providers for title tests (#27564, 9bab7a8e06) (@ibetitsmike)
- Fix port assignment race from aigatewaystart_internal_test (#27801, 0b8b48913f) (@pawbana)
- Dashboard: Tidy AI model provider configuration layout (#27843, 4aec1ea592) (@DanielleMaywood)
- Price AI usage by configured provider type (#27836, db88ec3f6a) (@ssncferreira)
- Remove unbound Client() method from aibridged.Server (#27845, 8f5f15a92f) (@pawbana)
- Server: Deflake TestPrebuildsAutobuild prebuild waits (#27601, 8a510314df) (@BobbyHo)
- Require bedrock model fields for the invoke-model protocol (#27846, 11427066a1) (@evgeniy-scherbina)
- Dashboard: Allow only template admins/owners to navigate to template version pages by clicking VersionRow (#27550, ca3de3c8c5) (@aqandrew)
- Dashboard: Show error state with retry when chat fetch fails (#27887, 5ed73f06ad) (@DanielleMaywood)
- Add codersdk JSON response decoder for typed API endpoints (#27804, db68c6c9fe) (@dylanhuff-at-coder)
- Detect out-of-range AI Gateway costs instead of wrapping silently (#27602, dae41eb711) (@evgeniy-scherbina)
- Database: Match group name case-insensitively in search (#27894, d458fe4941) (@david-fraley)
- Dashboard: Show tooltip in AppLink + WorkspacesTable when coder_app URL is invalid (#27556, 3e2a8bd421) (@aqandrew)
- Server: Document HTTP 201 for workspace and build creation (#27903, 0d0c6e53ba) (@david-fraley)
- Dashboard: Name template versions in promote/archive dialogs and toasts (#27633, 6c8a8647f6) (@jakehwll)
- Server: Classify bedrock credential errors as non-retryable (#27913, 4e2620d64f) (@johnstcn)
- Dashboard: Defer external app API key generation to on-click (#27907, bab9963a9a) (@jakehwll)
- Dashboard: Fan chat message upserts out to every containing page (#27912, 19fdc23d63) (@DanielleMaywood)
- Dashboard: Treat chat deleted watch events as archive instead of eviction (#27921, 192842c8f2) (@DanielleMaywood)
- Markdown rendering improvements (07f79af65b)
- Server: Start test AI bridge after config in automatic title tests (#27971, 95e8b71d03) (@ibetitsmike)
- Dashboard: Prevent protocol-relative login redirects (#27363, 84f4a8bb17) (@ThomasK33)
- Only write AI model prices that changed (#27923, 5efa7abe7d) (@ssncferreira)
- fix(aibridge): use latest streaming chat usage instead of cross-chunk sum (#27967, ad100452d4) (@ibetitsmike)
- Raise test-go-pg timeout budget, lower macOS parallelism (#27997, bd693ad4ae) (@BobbyHo)
- Server: Render collected_at as UTC RFC3339 in the agent metadata aggregate (#27991, 053b38944d) (@Emyrk)
- Dashboard: Make delete dialog confirmation text use primary color (#28002, baa1e3a6c5) (@jeremyruppel)
- Improve layout of CLI install page (#27998, b29af7f64a) (@aslilac)
- Hide the favorite button for workspaces you don't own (#28000, ddb2799009) (@aslilac)
- Prevent IP leaks via external chat images (#27362, 496ed757ed) (@ThomasK33)
- Server: Enforce Force On MCP server policy on the backend (#27990, 91d3027498) (@ThomasK33)
- Server: Block SSRF in MCP OAuth2 discovery and client registration (#27989, 37b3f11243) (@ThomasK33)
- SDK: Read trial claim instead of misspelled trail (#28014, 5bdabc95c8) (@jaaydenh)
- Derive diff cache keys from patch content (#27987, df278ec079) (@DanielleMaywood)
- Keep chat attachments while a linking chat exists (57f38b5c24) (@ibetitsmike)
- Server: Deflake TestRunner_StartsRealInterruptTask (#28024, 7f75e625cc) (@hugodutka)
- Server: Use service account wording in account notifications (#27536, d7953bd046) (@matifali)
- fix(.github/workflows): run windows mise install under bash, tolerate missing mtimehash (#28020, 2c35d33a28) (@ThomasK33)
- Disable keep-alives on mock aibridged to prevent stale-conn EOF (#28016, 5febde0ebb) (@johnstcn)
- Dashboard: Gate TemplateExampleCard Use template link on builder state (#28035, e9ee83af69) (@jeremyruppel)
- Dashboard: Improve git panel color contrast (#28038, 5fab238ed1) (@tracyjohnsonux)
- Server: Synchronize aibridgeTestFactory recorded fields (#28031, bde38e9d10) (@ibetitsmike)
- Dashboard: Stop attachment downloads from trapping iOS PWAs (#27853, ac11ae52d1) (@ibetitsmike)
- Report per-request Anthropic usage in chat token accounting (#27966, 88e113554a) (@ibetitsmike)
- Keep chat token usage for streams ending with usage-less chunks (#28068, b3607f51b2) (@ibetitsmike)
- fix(aibridge): record token usage without an MCP proxier (#27886, 7a545b35ed) (@blockgroot)
- Dashboard: Add aria-label to icon-only Back navigation links (#26222, b145142404) (@tracyjohnsonux)
- Allow manual chat compaction from the error state (#28022, 1458d27d78) (@ibetitsmike)
- Server: Deflake TestDispatcherTimeoutNoRetry (#28050, 0acd9785fa) (@ibetitsmike)
- Reject PKCE code_verifier below RFC 7636 length floor (#28003, 209d1ca498) (@BobbyHo)
- Dashboard: Include owner context in Agents org picker permission check (#28076, d509e1e6a0) (@ibetitsmike)
- Dashboard: Keep standard avatar border for normal AI spend state (#28037, 49cbd7dde3) (@tracyjohnsonux)
- Dashboard: Prefer permitted organization for chat creation (#28078, bca5d72c1c) (@ibetitsmike)
- Server: Make edit_files schema and errors actionable for models (#28121, 48e1e28638) (@ibetitsmike)
- Server: Deflake TestChatMessageWithFiles/FileCapExceeded (#28091, d5bb35a49a) (@ibetitsmike)
- Server: Send assigned chat model IDs verbatim (#28144, 93c6faf1de) (@ibetitsmike)
- Server: Set Cache-Control: no-store on OAuth2 responses (#28143, 1aa3553b52) (@BobbyHo)
- Agent: Create missing log_path parent directory (#28166, af90d8e2be) (@35C4n0r)
- Repair stale chat agent bindings after workspace rebuild (#28152, 521c383f6b) (@ibetitsmike)
- Enforce uniqueness and hour alignment for agent runtime usage events (#27983, 20c376a575) (@jaaydenh)
- Label unpriced token usage metric by provider name and type (#28210, 95328f1ead) (@ssncferreira)
- Server: Also retry on 503 (#28218, aa80fa3550) (@johnstcn)
- Dashboard: Replace hardcoded text-[13px] with scale tokens outside agents (#28071, 5d746aa594) (@tracyjohnsonux)
- Dashboard: Deflake adjust user theme preference (#28219, 46ec620767) (@jeremyruppel)
- Dashboard: Allow single-label AI provider endpoints (#28122, 444fb8aa9b) (@johnstcn)
- Dashboard: Persist empty MCP selection (#28238, 30dc7ebd71) (@ethanndickson)
- Follow-up fixes for conditional VCS requests (#27711, 6079c514ee) (@johnstcn)
- Dashboard: Treat interrupting chats as busy in the composer (#28209, 14e3ae33cf) (@DanielleMaywood)
- Dashboard: Stop gating chat stream parts on client status (#28207, 9590e9586e) (@DanielleMaywood)
- Dashboard: Stop redundant RBAC paywall error toast on Groups page (#28249, a3a0079bd2) (@jakehwll)
- Dashboard: Clean up agents composer borders and normalize dropdown pills (#28230, 16ae996b93) (@tracyjohnsonux)
- Dashboard: Remove sidebar nav bottom divider (#28239, cb0a9ebbbf) (@tracyjohnsonux)
- Dashboard: Repair the locally-run storybook vitest suite (#28261, 5af08a1a09) (@ibetitsmike)
- Dashboard: Quote colon-containing values in filter serialization (#28254, 962366ffc6) (@johnstcn)
- Dashboard: Disallow queued message edits (#28265, ba5717dc67) (@ibetitsmike)
- Bound request body size on JSON API endpoints (#28168, 166d92ba73) (@BobbyHo)
- Dashboard: Stop the new-turn scroll snap on agent chat (#28213, 72a6c8ae72) (@DanielleMaywood)
- Log tailnet tunnel authorization decisions (#27819, 821d91fabd) (@sreya)
- Link workspaces empty state to template builder (#28280, 60722bb653) (@aslilac)
- Provisioner: Sync version constants with the shipped binary (#27871, 1fbd029754) (@yysu)
- Treat a missing serve endpoint as a fatal dial error (#27864, 63641b98c8) (@pawbana)
- Show no budget instead of unlimited for empty group AI budget (#27993, 97cb722fb8) (@tracyjohnsonux)
- Server: Remove per-chat system prompt limit (#28294, c2bb62446d) (@hugodutka)
- Standardize EmptyState typography (#27720, 46c0dba1e9) (@jakehwll)
- Server: Remove AI Governance required banner (#28268, 6107cfe918) (@jcjiang)
- Dashboard: Centralize UUID generation and fix non-secure crash (#28285, 1bb0978361) (@phorcys420)
- Harden org-scoped MCP config chat gating, updates, and visibility (#28065, f7a0de7a11) (@ibetitsmike)
- Dashboard: Fix price threshold display and debounce model price lookup (#28298, 29c129e2d0) (@DanielleMaywood)
- Gate MCP user tokens on owner-scoped personal RBAC (#27945, a3eb1ee930) (@ibetitsmike)
- Add distributed protection for external auth refresh (#27479, 7ba2e6e22a) (@code-asher)
- Only create workspace agents for start builds (#28276, 676b9bb06b) (@aslilac)
- Dashboard: Clear streamed message when a chat errors (#28277, eed420a0eb) (@DanielleMaywood)
- Clarify AI model price configuration (#28372, d58788cb23) (@ssncferreira)
- Gate group settings page and fix unauthorized group patch (#28314, ab6601086a) (@ssncferreira)
- Serialize empty MCP tool properties as {} not null for OpenAI (#28380, 5480299cef) (@DanielleMaywood)
<BuildingTemplateLoader />icon sizes (#27733, 47ffa87fa5) (@jakehwll)- Dashboard: Use RotateCcwIcon for update actions (#28183, 376217423d) (@designertyler)
- Dashboard: Scroll per-script logs selector on overflow (#28353, 05b78a0902) (@jakehwll)
- Dashboard: Prevent duplicate menu when right-clicking chat kebab (#28391, e58a603949) (@tracyjohnsonux)
- Dashboard: Hide kebab while archiving spinner shows (#28393, 93d5f82849) (@tracyjohnsonux)
- Dashboard: Fix model selector trigger layout on form-style pages (#28399, b14bce12bf) (@ibetitsmike)
- Dashboard: Freeze motion animations during Pixel captures (#28396, c940284e18) (@DanielleMaywood)
- Dashboard: Stop completed process_output rows animating forever (#28414, 7970cd6d11) (@ibetitsmike)
- Dashboard: Show chat instead of the right panel on small viewports (#28387, bb7f2f2332) (@bpmct)
- Dashboard: Improve chat slash menu enter handling, anchoring, and placement (#28411, 6f1d225d2e) (@ibetitsmike)
- Dashboard: Match Input height when empty (#28409, cfc7b825c2) (@tracyjohnsonux)
- Server: Identify audit rows by content instead of order in diff tests (#27904, 952c0ce5e6) (@dylanhuff-at-coder)
- Dashboard: Align settings header style and paywall spacing (#28418, 3ffb266af6) (@tracyjohnsonux)
- Dashboard: Right-align DateTimeRangePicker dropdown to match other dropdowns (#28428, fd09112e28) (@tracyjohnsonux)
- Dashboard: Auto-select MCP server after successful OAuth (#28155, 05fcd06979) (@ibetitsmike)
- Dashboard: Repair failing storybook interaction tests and pixel captures (#28417, 58c1248cf3) (@ibetitsmike)
- Dashboard: Sync paywall copy with the latest copy doc (#28436, b8fcdbd32f) (@david-fraley)
- Dashboard: Use the browser-only bullets from the copy doc (#28434, 9ce42293b0) (@david-fraley)
- Dashboard: Point queued-capacity trial link to /deployment/premium (#28437, ee87ad6521) (@mattvollmer)
- Dashboard: Keep TemplateCard official badge inline under preflight (#28433, 7b72f5d86b) (@jeremyruppel)
- Dashboard: Disable archive actions for active chats (#28264, 610f321d52) (@ibetitsmike)
- Dashboard: Update Coder Agents license copy (#28432, c9a1e2bcee) (@jaaydenh)
- Server: Prevent stale chat model config writes (#27968, cd1362abfd) (@ethanndickson)
- Require audit capture for chat settings (#28394, 2aba2685ad) (@ethanndickson)
- Move organization model overrides from Models to Coder Agents settings (#28473, d935313383) (@ethanndickson)
- Dashboard: Harden organization-scoped model loading (#28495, f5f4032aaf) (@ethanndickson)
- Dashboard: Remove redundant model warning (#28484, 1e509dca93) (@ethanndickson)
- Surface duplicate AI provider hostname as warning, not error (#28208, 9b609dce49) (@johnstcn)
- Avoid 500 when generating chat title from rename dialog and remove unused endpoint (#28306, 67db41cd5c) (@f0ssel)
- Dashboard: Clarify chat model permission labels (#28579, 3e0fc60ce6) (@ethanndickson)
- Documentation: Document org-scoped admin configuration for agents (#28482, d7fef22611) (@ethanndickson)
- Stem chat search terms with the english text search config (#28319, 31e8160ede) (@f0ssel)
- Prevent markdown injection in notifications (#28340, f24d6710cc) (@BobbyHo)
- Dashboard: Distinguish cross-org budgets (#28596, d99f257f1f) (@ssncferreira)
- Dashboard: Show Manage agents link to organization model admins (#28637, 71cf4d0ed3) (@ethanndickson)
- Server: HTML-escape the email template values (#28397, 29cae5f954) (@BobbyHo)
- Server: Reject agent requests from suspended owners (#28513, dbd479bbda) (@hwang251)
- Dashboard: Gate browser-only paywall on entitlement (#28660, 50bd5fcd70) (@david-fraley)
- Batch backport tracyjohnsonux UI fixes for Agents and Coder admin area to release/2.37 (#28673, ba7e1844ac)
- Dashboard: Repair failing Storybook stories (#28462, 1cea7ec3b7) (@ethanndickson)
- Dashboard: Point MCP server ACL msw handlers at v2 paths (#28659, cc20e7ee27) (@ibetitsmike)
- Clarify AI provider collision warnings (#28549, ccaeafdfcb) (@ssncferreira)
- Dashboard: Standardize AI provider badge tooltips (#28624, 38b2a299ca) (@ssncferreira)
- Update disabled state on AI provider rows (#28558, acc91a1c6d) (@tracyjohnsonux)
- Make chat model sharing work for sharers without directory access (#28703, e1f017e2d6)
- Dashboard: Let organization admins manage agent templates (#28636, ff22804779) (@ethanndickson)
- Server: Keep NUL out of jsonb chat content (#28625, a73c8afe00) (@mafredri)
- Use old_text/new_text vocabulary across edit_files (#28626, e06d16593b) (@mafredri)
- Enable Copilot HTTP transport fallback (#28494, b7d7be9814) (@ssncferreira)
- Add cache write accounting to OpenAI interceptors and service tier to TokenUsage metadata for all interceptors (#28714, 89df1c2ef5)
- Server: Accept RFC 9728 resource metadata with array-valued resource (#28592, 79863650b0) (@f0ssel)
- Dashboard: Adjust context usage indicator error states so it is readable (#28719, 749e5d4873) (@tracyjohnsonux)
- Dashboard: Size chat pill selectors to content with an 8ch truncation floor (mobile and desktop fixes) (#28691, 9ed8ffbcc3) (@tracyjohnsonux)
- Dashboard: Remove member-facing Models nav item (#28772, 152c5b1584) (@ethanndickson)
Documentation
- Present AI Governance as included with Premium (#27545, 4987afada7) (@mattvollmer)
- Add standalone AI Gateway docs (#27592, 18128b7b52) (@pawbana)
- Document AI Gateway cost controls (#27643, 3f1973f45c) (@ssncferreira)
- Update 2.35 latest release to v2.35.3 (#27511, 07073024ee) (@mtojek)
- Add a glossary to the reference section (#27165, ee7e7ecb74) (@nickvigilante)
- Lead with env vars in admin docs and add configuration reference (#26824, ba4779fc87) (@nickvigilante)
- Note user secret target uniqueness and delivery boundary (#27532, fe4a73f8ab) (@dylanhuff-at-coder)
- Bump AI Gateway client modules to latest and remove Coder Tasks refs (#27810, 84cdc17602) (@app/blinkagent)
- Correct 2.35 stable version to v2.35.3 (#27842, 866eb970a4) (@mtojek)
- Documentation: Fix self-violating examples (#27849, 10b366cb7c) (@nickvigilante)
- Replace enterprise-base image references with example-base (#27025, 79723db2d2) (@bpmct)
- Note bulk stop confirmation (#27908, 3e0b943333) (@jakehwll)
- Add style-guide rule against "whose" for non-person antecedents (#27866, aa039479ed) (@nickvigilante)
- Documentation: Adopt STE-derived prose rules (#27852, 2d320de71e) (@nickvigilante)
- Document per-template agents_allowed (#27518, ee49107ea9) (@ethanndickson)
- Refresh JFrog Artifactory integration guide for SaaS (#28005, b781be0fa2) (@matifali)
- Remove beta references from Coder Agents docs and manifest (#27939, 75e0790cd7) (@mattvollmer)
- Document prebuilds quota group behavior (#28015, e5629126b7) (@johnstcn)
- Remove AI Governance Add-On references (#28073, 52bd05adb4) (@mattvollmer)
- Use approximate spend and add Everyone group tip for AI Gateway cost controls (#28012, 3426f83a27) (@ssncferreira)
- Add Coder Desktop stale-tunnel recovery and improve macOS log capture (#26735, 043bebb7bc) (@app/blinkagent)
- Remove invalid
--yesflag fromcoder template version promote(#28084, f3fd4c4a77) (@nickvigilante) - Fix prometheus metric name and slack webhook backtick (#28085, 3145cc8386) (@nickvigilante)
- Fix Helm TLS/ingress value keys in admin/setup (#28087, 5b97d99a48) (@nickvigilante)
- Fix P2/P3 typos and syntax errors from drift sweep (#28101, 1d189cc204) (@nickvigilante)
- Correct nginx X-Forwarded-Proto and certbot instructions flavor (#28086, b0e93b6e3b) (@nickvigilante)
- Correct broken CLI commands and flags from drift sweep (#28098, 58de9ab8f8) (@nickvigilante)
- Rebrand Windsurf doc page to Devin Desktop (#28205, 062c0fdd3b) (@matifali)
- Documentation: Fix self-violations found by audit (#27855, 0db25caad6) (@nickvigilante)
- Add Licensing & Usage page and reorder agents manifest (#28263, 5f6eeda588) (@mattvollmer)
- Remove inaccurate Agent Firewall filesystem protection claim (#28286, ddcffd8248) (@mattvollmer)
- Note JetBrains client attribution in AI Gateway (#28296, 34e95c46bf) (@matifali)
- Update Tallyman Agent Time reporting (#28275, ddf2d33665) (@mattvollmer)
- Fix prebuilt-workspaces example syntax and defaults (#28088, 31e95f7096) (@nickvigilante)
- Add markdown_url front matter so the About page links to /docs.md (#28281, fc6d6babfa) (@nickvigilante)
- Fix broken callout on the AI Gateway Monitoring page (#28303, 71b5bc398f) (@nickvigilante)
- Remove JetBrains Fleet references (#28301, 7268cada94) (@matifali)
- Uppercase mixed-case GitHub-style callout markers [DOCS-681] (#28304, 2ee6f459b2) (@nickvigilante)
- Remove space in GitHub-style callout markers [DOCS-680] (#28305, e003014ff8) (@nickvigilante)
- Complete swagger annotations for organization-scoped MCP routes (#28064, f2bc9ab1f5) (@ibetitsmike)
- Refresh workspace-management screenshots with current UI (#28356, d3b3aeaabc) (@jakehwll)
- Clarify who can set AI model prices and how they are keyed (#28401, d989ae36cd) (@ssncferreira)
- Streamline agent instructions (#28243, 9d6ef1e701) (@ibetitsmike)
- Fix broken .style/ link and lift details block out of list item [DOCS-661] (#28180, c6deadbc6c) (@nickvigilante)
- Address AI Gateway documentation review feedback (#28309, 4ce8e8ed56) (@pawbana)
- Documentation: Document the chat search: full-text filter (#28474, da9a9ea0d2) (@f0ssel)
- Remove early access label from chats API reference (#28761, e25a7dddd8)
Code refactoring
- Make user AI budget and spend endpoints consistent (#27611, d6a5c8e9f8) (@ssncferreira)
- Migrate story snapshot params to pixel (#26844, 2b28515d9b) (@aslilac)
- Dashboard: Use uuid package instead of generateUUID helper (#27709, 218829d444) (@jeremyruppel)
- Dashboard: Replace label/icon switches with tables and registry invariants (#27706, 46d01fca65)
- Dashboard: Demui
Form.stories.tsxstories (#27762, 0a42334f77) (@jakehwll) - Dashboard: Rename
<404Page />to<NotFoundPage />(#27731, 26bae42c98) (@jakehwll) - Dashboard: Demui
<NotificationEvents />into dropdown (#27732, ce20ad8b2f) (@jakehwll) - Dashboard: Demui
<ProvisionerTagsField />(#27763, 5e29a878f2) (@jakehwll) - Dashboard: Migrate VS Code button menus off MUI (#27730, 0028fea0e5) (@jakehwll)
- Dashboard: Remove mui components from
<LicenseSettingsPage />descendants (#27764, c350710aeb) (@jakehwll) - Dashboard: Migrate
<Markdown />and<InlineMarkdown />off MUI (#27724, fba9f0d485) (@jakehwll) - Dashboard: Demui workspace build data and outdated tooltip (#27787, fc27714fcd) (@jakehwll)
- Dashboard: Demui workspace topbar, schedule controls, and timings (#27790, 20ff957c74) (@jakehwll)
- Dashboard: Demui PortForwardButton and popover view (#27786, 497ab9e1a6) (@jakehwll)
- Server: Carry the resolved OpenAI transport on a model wrapper (#27703, b5c9e8e471) (@ibetitsmike)
- Server: Read the OpenAI transport from the model (#27704, 0e16e356b0) (@ibetitsmike)
- Server: Own provider option construction in one function (#27705, 404bb2f663) (@ibetitsmike)
- Dashboard: Demui template settings forms (#27636, 209c990888) (@jakehwll)
- Dashboard: Replace MUI update-check snackbar with
<UpdateCheckNotice/>(#27728, d23d0d5313) (@jakehwll) - Dashboard: Demui create template gallery and form (#27788, df1700916e) (@jakehwll)
- Dashboard: Demui AgentRow and AgentStatus (#27789, 3640b69533) (@jakehwll)
- Remove introductory access banner from /agents page (#27865, 1c993c7c5c) (@mattvollmer)
- Dashboard: Replace MUI Stack, TextField, and Link with shared components (#27817, 7a4ae2649e) (@jakehwll)
- Server: Optimize chatdebug (#27129, c62079c053) (@johnstcn)
- Dashboard: Show TableLoader in loading tables (#27870, 0a79610f7b) (@aqandrew)
- Dashboard: Migrate chats query keys to collections/entities taxonomy (#27841, 0c88c2accc) (@DanielleMaywood)
- SDK: Use ReadBodyAsJSON in typed endpoints (#27857, 76ae64391a) (@dylanhuff-at-coder)
- SDK: Use shared error helpers in chat endpoints (#27858, ed10064748) (@dylanhuff-at-coder)
- Dashboard: De-MUI custom role create/edit form (#27820, db4b6dc556) (@jakehwll)
- Dashboard: Migrate WorkspacesButton to Combobox (#27723, a79031a3f5) (@jakehwll)
- Dashboard: Migrate shared Pill to Badge (#27638, c98d6bb535) (@jakehwll)
- Dashboard: Centralize chat cache operations in semantic cache functions (#27869, f96671d588) (@DanielleMaywood)
- Dashboard: Demui
<IconField />(#27719, 7a9b4250aa) (@jakehwll) - Dashboard: Redesign
<AppearanceSettingsPage />(#27722, ad225269aa) (@jakehwll) - Dashboard: Move
Add usersinto<SettingsHeader />(#27906, b2cfc4e530) (@jakehwll) - Dashboard: Migrate organization settings form off MUI (#27718, b3acf7f75a) (@jakehwll)
- Dashboard: Add
<Drawer />and migrate build logs drawer (#28009, 726e86cef7) (@jakehwll) - Dashboard: Render live assistant output as a chat timeline row (#28079, 7617b6bdcc) (@DanielleMaywood)
- Remove MUI and Emotion (#27821, ea8ba0c678) (@jakehwll)
- Dashboard: Show audit log retention and Premium paywall on observability settings (#27947, 0350bfd2ea) (@jakehwll)
- Dashboard: Tidy secrets list layout (#27917, a749cf521f) (@jakehwll)
- Move chat prompt sanitization into codersdk (#28283, 8a7e8d9d5b) (@bpmct)
- Remove AI add-on badge, seat column, and add-on wording leftovers (#28004, dd43574990) (@tracyjohnsonux)
- Server: Add related-data selection to workspace queries (#28302, f5d42a868e) (@spikecurtis)
- Share the AI Gateway price book contract (#28310, 211f490910) (@evgeniy-scherbina)
- refactor(aibridge): extract bedrock mantle SigV4 signing to bedrocksig (#28407, edd8bf8b9b) (@johnstcn)
- Server: Unify LLM model-call construction behind a resolver (#28145, 9168dbf4d3) (@ibetitsmike)
- Normalize workspace agent session metadata (#28124, c767cc5198) (@EhabY)
- Upgrade golangci-lint to v2.0.2 (#28416, 5ca0143992) (@aslilac)
- Clarify chat model resource names (#27958, 9bd8899359)
- Server: Return PersistedStep directly from ExecuteLocalTools (#28359, 759ae8362a) (@jaaydenh)
- Rename edit_files wire type to old_text/new_text (#28467, 8aad49e59f) (@mafredri)
Performance improvements
- Server: Collapse org authorization to a set-membership test (#27244, 7e708b24ce) (@jeremyruppel)
- Server: Build span role attributes only when recording (#27310, d9d6ce9ddf)
- Server: Batch authcheck permissions via rbac.Filter (#27309, 51a9aa1bfc)
- Server: Build the workspace build fan-out maps once per batch (#28074, 62f4afbb60) (@jscottmiller)
Tests
- Don't use ptytest for client side of SSH session tests (#27681, dc31791c88) (@spikecurtis)
- Fix tailnet connection teardown flake (#27768, 4dbb3a236c) (@ethanndickson)
- Server: Drain dormancy audit log before reset in StartWakesUpDormantWorkspace (#27541, 76eb43a78e) (@Emyrk)
- Agent: De-flake TestAgent_Session_EnvironmentVariables (#27803, 87494c4f88) (@dylanhuff-at-coder)
- Dashboard: Isolate httptest server clients (#27769, cb992b35fd) (@ethanndickson)
- Server: Accept query cancellation in subagent wait (#27818, 1702bbb816) (@ethanndickson)
- Dashboard: Fix failing Storybook play functions (#27874, 05baba1e63) (@jakehwll)
- Fix failing storybook stories (#27674, efd5ce3668) (@aslilac)
- Skip racey tasks test (#28033, 0d0f5b4392) (@Emyrk)
- CLI: Add standalone AI Gateway connection tests (#27860, 94f487b890) (@pawbana)
- Dashboard: Cover version picker stacking (#28154, 6dfba5c567) (@david-fraley)
- CLI: Add standalone AI Gateway tests against a live coderd (#27863, 0a34a37314) (@pawbana)
- CLI: Wait for OAuth server readiness (#28358, 36bae07a9b) (@hugodutka)
Continuous integration
- Explicitly specify bash in mise tools installation (#27666, dc1d6c3f3a) (@johnstcn)
- ci(.github): retry build-tool downloads in Windows signing jobs (#27664, d210b311dc) (@BobbyHo)
- Run test-go-pg mise tool install under bash on Windows (#27483, 0e1a9a9f05) (@nickvigilante)
- Broaden linkspector Stack Overflow ignore for weekly docs check (#27799, 71c7e92084) (@nickvigilante)
- ci(.github): retry Go module downloads (#27816, 1f946bb50b) (@ethanndickson)
- Add scheduled audit-docs-paths workflow (#27245, 2f34e1abd0) (@nickvigilante)
- Ignore flaky codeium.com and marketplace.visualstudio.com links (#28203, b674d40d39) (@matifali)
- Skip oversized flake-check selections (#28293, 059546e92a) (@ethanndickson)
- ci(.github): skip Playwright apt installation (#28292, cbb36e613d) (@ethanndickson)
- Use dedicated release App token to publish releases (backport 2.37) (#28591, 10251b248d)
Chores
- Dashboard: Demui
<ScheduleForm />component (#27563, 5f72c1525e) (@jakehwll) - Documentation: Update release docs for v2.34.7 (#27591, 3c61a9a939) (@mtojek)
- Remove emyrk from coderowners of commonly touched rbac (#27596, 206938154a) (@Emyrk)
- Scale Testing: Reduce workspace poll interval to 5s (#27548, e657d2ab9d) (@cstyan)
- Remove ai-gateway-cost-control experiment flag (#27579, 3deecb481e) (@ssncferreira)
- Drop stale cost control experiment params (#27650, 740f5f7e1e) (@ssncferreira)
- Upgrade to @coder/pixel-storybook 0.3 (#27658, 95275d9659) (@aslilac)
- Replace
isChromaticwithisPixel(#26832, 6cfefc0685) - Dashboard: Migrate all
<Dialog />s off MUI (#27506, 79724ab0ba) (@jakehwll) - Dashboard: Remove unused SelectMenu component (#27800, cce5a21933) (@jakehwll)
- Fix port availability check flake from aigatewaystart_internal… (#27784, a2287d6739) (@pawbana)
- Documentation: Update release docs for v2.36.0 (#27828, 11b38272f6) (@mtojek)
- Update model prices to include more providers (#27837, 60161fd375) (@johnstcn)
- Add more known model prices to ChatModelAdminPanel (#27839, b169066773) (@johnstcn)
- Dashboard: Use
<TableEmpty />for table empty states (#27583, 120ec1f318) (@jakehwll) - Add docs inline-HTML linter and backtick generated placeholders (#27399, 9dcb75cd56) (@nickvigilante)
- Regenerate configuration-reference.md for bedrock placeholder (#27898, 4b6104229c) (@app/blinkagent)
- Add agents_allowed to templates (#27284, b3485d9b3a) (@ethanndickson)
- Remove legacy chat template allowlist (#27515, d2f9280138) (@ethanndickson)
- Forbid direct response body JSON decode in codersdk (#27859, 9b27d12929) (@dylanhuff-at-coder)
- Dashboard: Upgrade pierre diffs to 1.3.3 (#27932, e751b285ca) (@DanielleMaywood)
- Documentation: Update release docs for v2.34.8 (#27970, 0414948454) (@mtojek)
- Documentation: Update release docs for v2.35.4 (#27972, cfeae56bed) (@mtojek)
- Dashboard: Remove Beta tag from agents navigation (#27986, a3a51228ee) (@mattvollmer)
- Use 'AI spend' and 'approximate' in budget UI (#27977, 27414788f7) (@ssncferreira)
- Update stale Chromatic comments (#27714, 09b0d8e108) (@aslilac)
- Sync fantasy fork with upstream v0.40.0 and openai-go with v3.50.0 (#27981, c97f4da3ac) (@ibetitsmike)
- Server: Bump computer-use models to current frontier releases (#28026, c6e3be5090) (@matifali)
- Dashboard: Add generateConnectionSessionId helper function (#27935, b721935fc1) (@aqandrew)
- Add NewUnstartedHTTPServer helper to disable keep-alives on test servers (#28052, e02d9adc11) (@johnstcn)
- Add test coverage for chatd compaction (#28053, 3f9e8cca2a) (@johnstcn)
- Retire mark3labs/mcp-go dependency (#28061, e92fd8e96f) (@ibetitsmike)
- Update chatd ARCHITECTURE.md guidance in AGENTS.md (#28103, bfa937a36a) (@hugodutka)
- Dashboard: Allow devin: URI scheme for Devin Desktop deep links (#28214, fb3ed7a56a) (@matifali)
- Dashboard: Add devin icon (#28206, 753f3d95c6) (@matifali)
- Correct AI Gateway metric provider label and cardinality notes (#28220, db3566c1a3) (@ssncferreira)
- Add supabase icon (#28327, 64f26ef387) (@DevelopmentCats)
- Documentation: Update release docs for v2.36.1 (#28357, 2529a54cfc) (@mtojek)
- Refresh AI model price book (#28365, 5e0710de92) (@cdrci)
- Remove retired go report from README (#28385, 54e64c2228) (@bpmct)
- Refresh README links and streamline quickstart and support sections (#28386, 4ed03f5ee2) (@bpmct)
- Backport post-2.37 merged PRs to release/2.37 (#28683, f7e068e8c9)
- Refresh AI model price book (#28711, 4fef2216d9) (@cdrci)
- Purge identified terraform modules via dbpurge (#28802, 8a148a9a57) (@Emyrk)
Reverts
- "fix: markdown rendering improvements" (#27979, 8c2f7adeb1) (@jdomeracki-coder)
Other changes
- refactor(site): demui template editor dialogs and create-template inputs (#27791, 0a30dc8184) (@jakehwll)
- Change all windsurf.com links to devin.ai links (#28270, 27e3d0fb00) (@nickvigilante)
- Revert "chore: add @coder/docs as a CODEOWNER for docs content and tooling" (#27802, 4e54f311bd) (@nickvigilante)
- Update contributing link in CONTRIBUTING.md (#28029, 160964fc66) (@nickvigilante)
Compare: e96e7cfec23ca55d6700b684474b82df97cfd22b...v2.37.0
Container image
docker pull ghcr.io/coder/coder:2.37.0
Install/upgrade
Refer to our docs to install or upgrade Coder, or use a release asset below.