Download Latest Version coder_2.39.0_windows_amd64_installer.exe (149.2 MB)
Home / v2.39.0
Name Modified Size InfoDownloads / Week
Parent folder
provisioner_helm_2.39.0.tgz 2026-11-03 15.8 kB
coder_latest_sbom.spdx.json 2026-11-03 1.7 MB
coder_helm_2.39.0.tgz 2026-11-03 14.9 kB
coder_docs_2.39.0.tgz 2026-11-03 87.8 MB
coder_2.39.0_windows_arm64.zip 2026-11-03 164.9 MB
coder_2.39.0_windows_amd64_installer.exe 2026-11-03 149.2 MB
coder_2.39.0_windows_amd64.zip 2026-11-03 171.9 MB
coder_2.39.0_linux_armv7.tar.gz 2026-11-03 167.2 MB
coder_2.39.0_sbom.spdx.json 2026-11-03 1.7 MB
coder_2.39.0_linux_armv7.rpm 2026-11-03 172.8 MB
coder_2.39.0_linux_armv7.deb 2026-11-03 168.9 MB
coder_2.39.0_linux_armv7.apk 2026-11-03 172.8 MB
coder_2.39.0_linux_arm64.tar.gz 2026-11-03 165.3 MB
coder_2.39.0_linux_arm64.rpm 2026-11-03 170.8 MB
coder_2.39.0_linux_arm64.deb 2026-11-03 167.1 MB
coder_2.39.0_linux_amd64.tar.gz 2026-11-03 171.5 MB
coder_2.39.0_linux_arm64.apk 2026-11-03 170.9 MB
ai-gateway_helm_2.39.0.tgz 2026-11-03 12.8 kB
coder_2.39.0_checksums.txt 2026-11-03 2.2 kB
coder_2.39.0_checksums.txt.asc 2026-11-03 833 Bytes
coder_2.39.0_darwin_amd64.zip 2026-11-03 174.8 MB
coder_2.39.0_darwin_arm64.zip 2026-11-03 168.6 MB
coder_2.39.0_linux_amd64.apk 2026-11-03 177.1 MB
coder_2.39.0_linux_amd64.deb 2026-11-03 172.8 MB
coder_2.39.0_linux_amd64.rpm 2026-11-03 177.2 MB
README.md 2026-11-03 59.8 kB
v2.39.0 source code.tar.gz 2026-11-03 115.5 MB
v2.39.0 source code.zip 2026-11-03 121.4 MB
Totals: 28 Items   3.2 GB 3

Changelog

BREAKING CHANGES

  • chore!: remove the chat automations experiment (#30412, f923f4a525) (@ThomasK33)
  • chore!: remove the coder_report_task MCP tool (#30742, 69fab7de06) (@app/coder)
  • chore!: remove the deprecated advisor config request fields (#30982, 71cd5e67b3) (@ibetitsmike)
  • feat!: confirm role changes in coder users edit-roles (#30140, cf60604a75) (@nickvigilante)
  • feat!: confirm before coder update restarts a running workspace (#30150, b6aab35a7b) (@nickvigilante)
  • feat!: add output formats to coder schedule start, stop, and extend (#30136, a8303a8f2b) (@nickvigilante)
  • feat!: report template insights session usage per app (#29796, f4cd0deccb) (@EhabY)
  • feat!: label the VS Code family and report built-in app usage per app (#29906, 28192213ab) (@EhabY)
  • fix(cli)!: match the exact workspace in coder schedule show (#30153, 41e698edc3) (@nickvigilante)
  • fix(coderd/x/chatd/chattool)!: fail closed when the plan path cannot be resolved (#30983, 70b1e4716e) (@ibetitsmike)
  • fix!: make --yes skip the rename confirmation prompt (#30151, 237616a87d) (@nickvigilante)
  • fix!: remove the unused --yes flag from coder autoupdate (#30149, 98bcc3afb7) (@nickvigilante)
  • fix!: validate workspace app URLs on the server (#31262, 8b0c0cc35e) (@EhabY)
  • refactor!: drop edit_files search/replace wire compat (#29221, cc76b62009) (@mafredri)

SECURITY

  • Server: Group sync may only add users to groups of the syncing org (#30706, 296da93f6b) (@eric-hughes-coder)

Features

  • Add Claude Sonnet 5.5 and GPT-6.1 Sol to Agents and AI Gateway (#30159, 1e9dd0abbc) (@ibetitsmike)
  • Run chat tool calls once per tool call ID on the agent (#29946, 1ba09d2ce2) (@mafredri)
  • Send tool call IDs and cancel unresolved calls on interrupt (#29954, fa5bac6e77) (@mafredri)
  • Provisioner: Build script order graphs (#29925, 2caa2120fa) (@geokat)
  • Add JSON output to coder licenses add and delete (#30137, fd41ca682a) (@nickvigilante)
  • Add JSON output to coder server create-admin-user (#30138, 302edffd87) (@nickvigilante)
  • Add --yes to coder users suspend and activate (#30155, dde500a646) (@nickvigilante)
  • Add --column to coder users show (#30143, e6774c2602) (@nickvigilante)
  • Show coder workspace-proxy in CLI help and reference docs (#30146, 3baeaceb1d) (@nickvigilante)
  • Add chatd lifecycle stage tracer (#29769, 7a9442014e) (@jscottmiller)
  • Open a chat_turn span per prompt (#29771, fc0af7fbd8)
  • Trace chatd provider stages and count only output parts as first token (#29770, e988ddb11d)
  • Show coder sharing in CLI help and reference docs (#30141, 0d1225694e) (@nickvigilante)
  • Server: Key chat diff statuses by ref (#29081, 63a95d87f3) (@DanielleMaywood)
  • Add chat projects API (#29242, 7cd1b2040b) (@f0ssel)
  • Validate documented experiment keys (DOCS-139) (#29316, 149366a459) (@nickvigilante)
  • Add generated API key scopes reference (DOCS-135) (#29307, 4a184ca54a) (@nickvigilante)
  • Dashboard: Add Pi coding agent icon (#29687, b5b5887822) (@nickvigilante)
  • Add type and secret status to the configuration reference (DOCS-896) (#29310, 2e0f97e5de) (@nickvigilante)
  • Dashboard: Upload personal skill files (#30170, c94a98ae0f) (@jakehwll)
  • Preserve user-supplied chat titles (#29486, ff158c0589) (@mafredri)
  • Report port-forward sessions as app usage (#30156, 1ad46e48ac) (@nickvigilante)
  • Add chat automations schema, RBAC resource, and audit entries (#30085, f55aa6c50d) (@ThomasK33)
  • Add chat automations management API behind chat-automations (#30112, 9316d67440)
  • Server: Add chatd automation admission seam and queue promotion guard (#30096, eaca2290b0)
  • Disable, re-enable, and rotate chat automations with schedule preview (#30117, 5c1662ea4c)
  • Server: Create a chat for each webhook event of a new_chat automation (#30134, 1e1e884c25)
  • Deliver webhook events to existing chats through chat automations (#30127, b517db4beb)
  • Add Run now for schedule chat automations (#30166, b25f8859f2)
  • Server: Run chat automation schedules (#30160, 8620361fcc)
  • Add the Agents automations list page and chat-list automation filter (#30171, a3fbd2384d)
  • Label automation messages in agent chats (#30167, b96f1b970c)
  • Add webhook automations to the automation editor (#30207, a0ef149ace)
  • Dashboard: Add the schedule automation editor (#30187, adcee75987)
  • Server: Add manage_automations write actions (#30217, 20ff7f1715)
  • Add the manage_automations chat tool switch and read actions (#30214, fb0951b850)
  • Add the manage automations toggle, tool rendering and CODAGT-1217 tests (#30219, a3b6881aea)
  • Add client_session_id to ssh connections (#29701, cc0c868c55) (@code-asher)
  • Dashboard: Preview thinking text in header when no heading exists (#30253, 5c9d9db768) (@ibetitsmike)
  • Align MCP workspace tools with Coder Agents and add execute tools (#30275, 98332c739b) (@kylecarbs)
  • Add shared project memory API for chats in a project (#29301, a08ba6a70c) (@f0ssel)
  • Wire AI Gateway proxy routing and recorder dependencies (#29725, 7cfc38d0e7) (@pawbana)
  • Helm: add singleStackIPv6 to accomodate IPv6 only clusters (#27405, fd33879687) (@rowansmithau)
  • Expose per-ref diff statuses (#29082, 49b1a2cf5d) (@DanielleMaywood)
  • Add organization-scoped Coder Agents instructions (#30272, 7993c73c87) (@ibetitsmike)
  • Dashboard: Fetch and merge diff statuses per ref (#29543, 8f1fc537b7) (@DanielleMaywood)
  • Dashboard: Add the chat projects data layer and project dialog (#30377, 10986adf3b) (@f0ssel)
  • Lock the new-chat form to a project's organization (#30378, 145bf77135) (@f0ssel)
  • Dashboard: Add the chat project page (#30379, 036e08097a) (@f0ssel)
  • Add chat project folders to the sidebar (#29583, ee63db3a52) (@f0ssel)
  • Dashboard: Choose an organization when creating a project (#30181, c28dc3c3c9) (@jaaydenh)
  • Dashboard: Keep project chat list caches in sync (#30292, f32d0b1c98) (@jaaydenh)
  • Dashboard: Redesign the project page header (#30293, 8d50b9d6ed) (@jaaydenh)
  • Match PR number prefixes in chat search (#30404, e4682343e6) (@ibetitsmike)
  • Remove model_intent from the execute, process_output, and advisor tools (#30397, 67a781ce1d) (@ibetitsmike)
  • Dashboard: Add a copy submenu to agent chat menus (#30016, 0829748ef6) (@jakehwll)
  • Dashboard: List project chats on the project page (#30294, a531ba39e5) (@jaaydenh)
  • Dashboard: Group assistant steps into working blocks (#29417, 1910ae4f51) (@ibetitsmike)
  • Dashboard: Add the working block disclosure (#29418, 682d4fdb4d) (@ibetitsmike)
  • Dashboard: Fold assistant steps in the conversation timeline (#29419, 045cdc9177) (@ibetitsmike)
  • Dashboard: Add the collapse assistant steps chat preference (#29115, a26d5c1b75) (@ibetitsmike)
  • Server: Evaluate read_template parameters for the chat owner (#29561, 28fe61ffa1) (@ibetitsmike)
  • feat(.agents/skills/deploy-ephemeral): add deploy-ephemeral skill (#30440, 431f8c9b2f) (@ibetitsmike)
  • Validate AI Gateway actor and credentials in proxy mode (#30225, f08bfddfa7) (@pawbana)
  • Allow template version selection for workspace builds (#30199, b4d51012da) (@dylanhuff-at-coder)
  • Agent: Support outcome-aware dependencies (#30390, c430310dfe) (@BobbyHo)
  • Add script resource address and dependencies to Script (#30451, a115896a58) (@BobbyHo)
  • Dashboard: Share org in personal agent model settings (#29122, 29e876df4d) (@jakehwll)
  • Dashboard: Use the app's icon and name on the terminal page opened via ?app= (#30448, 38e932564e) (@costajohnt)
  • CLI: Add TextFormatFunc and OutputFormatter.WriteLine helpers (#30508, 0efb574355) (@nickvigilante)
  • Provisioner: Carry script addresses and prepare dependency attachment (#30491, b27e158fd9) (@BobbyHo)
  • Dashboard: List every PR in the top bar (#29831, 051eb587d4)
  • Dashboard: Per-ref views in the git panel (#29544, 86013c253e) (@DanielleMaywood)
  • Dashboard: Count every PR in the chats sidebar (#29832, ff3fa22f68)
  • Load whole chat turns per history page (#30524, 782fb30f09) (@ibetitsmike)
  • Dashboard: Quieter read-only view for other users' chats (#30483, 8697b91870) (@tracyjohnsonux)
  • Provisioner: Index Terraform graphs (#30277, a2686cd747) (@geokat)
  • Provisioner: Query Terraform graphs (#30334, 652ae952a2) (@geokat)
  • Trigger compaction independently for the chat and compaction models (#28568, c28ae0dc9b) (@ibetitsmike)
  • Separate connection log methods from app names (#30466, 5b060beeb1) (@EhabY)
  • Persist script resource addresses and dependencies (#30625, dae7967bd1) (@BobbyHo)
  • Dashboard: Show provider type in model form and model list icon tooltip (#30353, 1320c010af) (@SasSwart)
  • Server: Add chat project instructions storage and prompt injection (#30367, ad85646164) (@jaaydenh)
  • Add chat project instructions API (#30368, 97c5260adb) (@jaaydenh)
  • Add the organization skills data model (#30609, b67587c875) (@ibetitsmike)
  • Add organization skill API routes (#30610, db7f5a7703) (@ibetitsmike)
  • Add organization skill sharing ACL routes (#30611, 2c432a12a3) (@ibetitsmike)
  • Dashboard: Add organization skill settings with a shared skills UI (#30612, 6498c5776d) (@ibetitsmike)
  • Load organization skills in chats (#30613, adcce66826) (@ibetitsmike)
  • Send RFC 8707 resource parameter on MCP server OAuth2 flows (#30651, fa7cd62c8b) (@ibetitsmike)
  • Provisioner: Resolve applied script orders (#30669, 31dd0540a3) (@geokat)
  • Provisioner: Integrate script ordering into graph conversion (#30670, 99afdc3b0f) (@geokat)
  • Dashboard: Add the project instructions editor dialog (#30369, a46d514a23) (@jaaydenh)
  • Dashboard: Show project instructions in the project page details panel (#30370, 876378036e) (@jaaydenh)
  • Dashboard: Design improvements for projects page (#30740, 40c0adc7ac) (@jaaydenh)
  • Report agent connection methods and app identities (#30467, f573ec3533) (@EhabY)
  • Dashboard: Move View PR into the git panel toolbar (#30751, 05fa806855) (@ibetitsmike)
  • Dashboard: Add a project picker to the new chat composer (#30455, 85783e4275) (@jaaydenh)
  • Add chat project sharing database layer (#30479, 2b9fad8bba) (@f0ssel)
  • Accept template version IDs in --template-version (#30563, c856d5fb22) (@dylanhuff-at-coder)
  • Attach script order dependencies during conversion (#30556, fb09983c77) (@BobbyHo)
  • Send script resource addresses and dependencies in the agent manifest (#30627, ee5e3a4029) (@BobbyHo)
  • Add Gemini 4 Argon to Agents and AI Gateway (#30780, e7c2fd5d2e) (@ibetitsmike)
  • Add ServerTailnet logs and metrics for unreachable agents (#30133, 603dd420d1) (@BobbyHo)
  • Add workspace secrets table, queries, and RBAC (#30248, 7aef110ca2) (@Emyrk)
  • Database: Encrypt workspace secrets (#30249, 58a71f6238) (@Emyrk)
  • Set workspace secrets on workspace builds (#30250, f25b6294b6) (@Emyrk)
  • Deliver workspace secrets in the agent manifest (#30251, 7d75210abf) (@Emyrk)
  • Order lifecycle scripts by their dependencies (#30765, 4d1f95e73e) (@BobbyHo)
  • List a workspace build's secrets in coder secret list (#30388, 03cba25a63) (@Emyrk)
  • Add script ordering adoption telemetry (#30860, 6d34557d74) (@geokat)
  • Server: List workspace secrets on workspace build audit entries (#30459, 357e81b470) (@Emyrk)
  • Dashboard: Add Projects empty state and persist section collapse (#30741, c5bf97b463) (@jaaydenh)
  • Add byte tracking to ssh and pty connections (#30389, 899d25a5b1) (@code-asher)
  • Expose skipped and canceled script outcomes in coderd and the Build Timeline (#30875, 764e67bcff) (@BobbyHo)
  • Report skipped and canceled script outcomes from the agent (#30888, 54274c18e0) (@BobbyHo)
  • Add JSON output to coder ai-gateway keys create (#30139, 93205d98bc) (@nickvigilante)
  • Add project skill queries and authorization (#30826, a379c849da) (@jaaydenh)
  • Add project skill API routes (#30827, e289c6fe01) (@jaaydenh)
  • Add chat project sharing API (#30439, 6ebefb8325) (@f0ssel)
  • Move a chat family between projects in chatd (#30893, 0968f97a43) (@ibetitsmike)
  • Move chats between projects through the chat update API (#30894, dfdd6a59a5) (@ibetitsmike)
  • Dashboard: Move chats between projects from the chat menu (#30895, 2cade245bd) (@ibetitsmike)
  • Dashboard: Drag chats onto project folders in the sidebar (#30795, 71435e1edb) (@ibetitsmike)
  • Dashboard: Keep agent attachments in working blocks and list them under Attachments (#30788, 8e76aecf42) (@ibetitsmike)
  • Tidy AI Gateway sessions list columns and tooltips (#30733, afe74722cc) (@tracyjohnsonux)
  • Database: Add organization AI model config table (#30717, d14631df1a) (@SasSwart)
  • Load project skills in chats (#30838, 3216580614) (@jaaydenh)
  • Retry failed MCP servers on context resync (#30489, 281b838856) (@jeremyruppel)
  • Dashboard: Add the project skills dialog (#30855, cbc53b4bcb) (@jaaydenh)
  • Discover ACP harnesses configured in the workspace (#30557, bf5dda330c) (@hugodutka)
  • Agent: Publish ACP harnesses in context snapshots (#31060, 58276d2170)
  • Probe ACP harness capabilities (#31057, fbf7eb3d61)
  • Show available ACP harnesses in chat context (#31059, c61d842b9c)
  • Manage project skills from the project page (#30856, 7253bd127b) (@jaaydenh)
  • Send skill invocations as structured message parts (#30861, ffd24861a1) (@jaaydenh)
  • Dashboard: Add an xs Avatar size (#31151, 64b954908b) (@tracyjohnsonux)
  • Dashboard: Insert skills as chips in the composer (#30880, e88de212ef) (@jaaydenh)
  • Render skill invocations in the transcript and edit flow (#30881, 3c83820887) (@jaaydenh)
  • Server: Add queries for organization AI model prices (#30718, da78c88100) (@SasSwart)
  • Server: Price token usage with organization prices (#30719, 837c2e1af1) (@SasSwart)
  • Serve internal MCP servers to chats in process (#29828, 15a160aec9)
  • Add skill action and automatic-use settings (#30882, c4d76a4009) (@jaaydenh)
  • Show project skill actions above project chat composers (#30884, 63f3bde725) (@jaaydenh)
  • Enable Coder.AcronymPeriods Vale rule (#31180, c1bec1b3e4) (@app/coder)
  • Enable Coder.LGBTQ Vale rule (#31181, f2edbeaf60) (@app/coder)
  • Enable Coder.AmbiguousWords Vale rule (#31182, b59fea22d1) (@app/coder)
  • Enable Coder.InclusiveLanguage Vale rule (#31183, ffc2a3ffff) (@app/coder)
  • Documentation: Enable Coder.ImperativeNegation Vale rule (#31184, 635a1a8a5f) (@app/coder)
  • Documentation: Enable Coder.CheckOut Vale rule (#31185, 78aa570078) (@app/coder)
  • Make doc-check review docs quality, not only missing docs (#31193, c242029192) (@nickvigilante)
  • Enable Coder.Please Vale rule (#30789, 58d19d78c5) (@nickvigilante)
  • Enable Coder.USSpelling Vale rule (#30790, 9edb2e388d) (@nickvigilante)
  • Enable Coder.LatinAbbreviations Vale rule (#30794, 7eacfe95b2) (@nickvigilante)
  • Resolve orgs from workspace session tokens in AI Gateway requests (#30902, 946c2f0e04) (@SasSwart)
  • Show cache tokens on AI Gateway session page (#30511, 9efe7a3d67)
  • Add cost to AI Gateway session threads API (#30509, 15a5844253) (@ssncferreira)
  • Show cost and model prices on AI Gateway session page (#30512, 5bd641a720)
  • Send include_related from WorkspaceByOwnerAndName options (#29908, 9fe52826da) (@spikecurtis)
  • Dashboard: Add Agents label to the Coder Agents PWA icon (#31277, 6cf18f4c73) (@mafredri)
  • Add ACP session runtime and transcripts (#30835, 43ec0ba8d5)
  • Watch and subscribe to ACP session updates (#30903, d2c32e666d)
  • Add agent-local ACP session interaction (#30831, 4b9b98794a)
  • Restore and recover agent-local ACP sessions (#30857, e3068bb4c4)
  • Dashboard: Support ACP subagents on the frontend (#30561, b644b19f02)
  • Add ACP subagent waiting and transcript streaming (#30560, e75885a37e)
  • Add tools to start, message, and interrupt ACP agents (#31022, 8fd94eba27)
  • Add JSON output to coder ping (#30148, d469763bc0) (@nickvigilante)
  • SDK: Accept options on ResolveWorkspace (#29913, e17851d968) (@spikecurtis)
  • Honor disable-model-invocation in skill frontmatter (#31147, 514f23979a) (@ibetitsmike)
  • Enable Coder.StepLength Vale rule (#30791, 81c40579dc) (@nickvigilante)
  • List every chat attachment in the Summary panel (#31140, 3f055e7a56) (@ibetitsmike)
  • Show web searches and the pages they found in chats (#29861, 2cb10b5cec) (@mafredri)
  • Expose connection duration and client session ID in connection logs (#30759, 0d1cba2def) (@EhabY)
  • Add approximate cost note to AI Gateway session summary (#31259, 926742b4d5) (@ssncferreira)
  • Dashboard: Add NixOS rainbow and trans icons (#31325, 191d2686cf) (@phorcys420)
  • SDK: Mark the chat-projects experiment as safe (#31313, f348cd66d7) (@f0ssel)
  • Run one doc-check verifier per group of findings (#31243, 9666549f3c) (@nickvigilante)
  • Enable Coder.Semicolons Vale rule (#30787, 21471da74c) (@nickvigilante)
  • Dashboard: Add community Codernaut variant and WASD controls to the Codernauts game (#30837, 5e0b0c0b3e) (@bartekgatzcoder)
  • Dashboard: Replace the Coder Agents PWA icon with the stacked-agents mark (#31368, d6ea98483b) (@ibetitsmike)
  • Add start and message jitter to chat scaletest (#30264, 4b6f2c1a59) (@cstyan)
  • Graduate chat projects out of the chat-projects experiment (#31354, b54f7de4c6) (@f0ssel)
  • Server: Store the organization on AI Gateway interceptions (#31118, 161b7233d9) (@SasSwart)
  • Add Harbor-based A/B eval for Coder Agents against main (#30686, dbd7db6877) (@f0ssel)

Bug fixes

  • Server: Tell the model when output hit the token limit mid tool call (#30120, 5a997c471a) (@ibetitsmike)
  • Return token usage for every thread in AI Gateway session detail (#30087, 1e7a300dab) (@SasSwart)
  • Dashboard: Align context usage ring with its glyph in Safari (#28986, 0b17b85d63) (@tracyjohnsonux)
  • fix(aibridge): relay streams when accumulation fails (#30119, d203439495) (@ibetitsmike)
  • Swap description and command in coder organizations show examples (#30154, c9813d97f7) (@nickvigilante)
  • CLI: Offer a None option in the coder create preset prompt (#30068, 04b2af25ca) (@nickvigilante)
  • Stop escaping ampersands in docs manifest titles (#30161, 0ce91ffc18) (@nickvigilante)
  • Hide the unused --yes flag on coder organizations create (#30144, 46265fc361) (@nickvigilante)
  • Server: Accept ambient-credential providers in model overrides (#30205, 8e323e435c) (@jscottmiller)
  • Documentation: Regenerate CLI manifest for coder sharing (#30216, 1e15109c6d) (@BobbyHo)
  • Dashboard: Stop the flyout overlapping the main menu (#30196, ad924a3835) (@tracyjohnsonux)
  • Dashboard: Keep personal skills table rows on one line (#30169, d9c13dc06d) (@jakehwll)
  • Require and clarify API key auth fields for MCP servers (#30197, decf1ddc3b) (@mafredri)
  • fix(scripts/aibridgepricesgen): drop claude-sonnet-5-5 bare ID injection (#30229, 35abc22fa9) (@ssncferreira)
  • Server: Stop announcing stale chat retries and fence retried attempts (#30241, 9ac4628947) (@ThomasK33)
  • Server: Refuse to create a child chat under an archived root (#30240, 303b822a85) (@ThomasK33)
  • Drain proxy requests before closing DRPC (#29724, 7e64b46721) (@pawbana)
  • Dashboard: Keep card content still when colored and shade uncolored group headers (#30231, cc73f326e9) (@mafredri)
  • Server: Recheck auto-archive candidates under the family lock (#30242, cdc87ee047) (@ThomasK33)
  • Server: Enforce chatd concurrent-agent capacity on every path into running (#30243, d11809f095) (@ThomasK33)
  • Update Playwright for Ubuntu 26.04 support (#30228, 4691192299) (@matifali)
  • Server: Keep user chat renames made during title generation (#30254, 7b40aa7fa6) (@ThomasK33)
  • Database: Fix duplicate chat projects migration and stale chat title query (#30257, a328bee007) (@f0ssel)
  • Prevent Prometheus metrics reference drift (#29314, 72e31ffb4c) (@nickvigilante)
  • Server: Return queued chat messages in promotion order (#30255, bb31a19e5b) (@ThomasK33)
  • Server: Finish interruption inline for unowned interrupting chats (#30259, 15382ebd5d) (@ThomasK33)
  • Dashboard: Keep other users' pinned chats out of the sortable Pinned section (#29697, dc07908504) (@jakehwll)
  • Dashboard: Improve AI budget USD label contrast on groups pages (#30234, e4215a2312) (@chrifro)
  • Dashboard: Raise option source flag contrast (#30232, f488086f36) (@chrifro)
  • Server: Drop late preview parts after a chat error (#30279, e3446c9c21) (@ThomasK33)
  • Dashboard: Evaluate the completion chime only on status_change events (#29570, 49ceba47ad) (@mafredri)
  • Database: Lock chat tables before 000609 alters them (#30297, 122757d1d2) (@ThomasK33)
  • Server: Cancel tool calls in messages deleted on edit (#30194, 0f78361750) (@mafredri)
  • Dashboard: Wrap note links inline and float note actions (#30332, 2e07a5486b) (@mafredri)
  • Apply Anthropic prompt caching through OpenRouter and OpenAI-compatible gateways (#29563, bb9f31d94b) (@ibetitsmike)
  • Server: Never dial the embedded DERP region over the network (#30221, 939d05b906) (@ethanndickson)
  • Dashboard: Raise emoji picker placeholder contrast (#30227, 5325b25221) (@chrifro)
  • Reject encoded path traversal in ai gateway before forwarding upstream (#30178, bf3db74b83) (@SasSwart)
  • Dashboard: Use singular labels for one-second build durations (#30358, 6f3aa61ef8) (@jakehwll)
  • Dashboard: Format group membership counts (#30345, b7b5ff15c2) (@jakehwll)
  • Dashboard: Prevent upload folder icon from shrinking (#30359, 37a87519c5) (@jakehwll)
  • Dashboard: Start the iOS home-screen app below the status bar (#30357, c143365cd3) (@ibetitsmike)
  • Dashboard: Prevent SSH copy tooltip from opening automatically (#30315, 86063e6f1a) (@jakehwll)
  • Dashboard: Show zero duration for completed sub-second builds (#30366, 8cc0d88f14) (@jakehwll)
  • Accept 128-character template descriptions on creation (#30348, 3f444d9528) (@jakehwll)
  • Dashboard: Make health page refresh spinner visible in dark mode (#30204, 66af9766ec) (@app/blinkagent)
  • Dashboard: Make extra roles keyboard accessible (#30342, 5169248583) (@jakehwll)
  • Dashboard: Use info alert for implied member role in role selector (#30284, b2c0fc383e) (@chrifro)
  • Dashboard: Raise light destructive token contrast and align error role to tokens (#30282, ae7c466560) (@chrifro)
  • Dashboard: Pass chatRecordUpdatedAt in chat store test (#30393, 0ba80796ef) (@DanielleMaywood)
  • Dashboard: Raise contrast of upcoming steps in template builder selection summary (#30281, 8d97f24435) (@chrifro)
  • Let scoped tokens list and mark inbox notifications read (#30176, f0e2fce326) (@EhabY)
  • Dashboard: Expose organization picker as a combobox (#30402, 9d8de750d7) (@chrifro)
  • Dashboard: Avoid double-encoding user picker searches (#30385, 3c5de0a175) (@jakehwll)
  • Dashboard: Align Premium paywall corner radii (#30304, 515bda9f2f) (@jakehwll)
  • Dashboard: Position filter flyouts with Radix so they stay on screen (#30081, d5f75aa2c0) (@tracyjohnsonux)
  • Dashboard: Support token lifetime limits below one day (#30386, 89d10258f2) (@jakehwll)
  • Networking: Replace peer node instead of mutating KeepAlive (#30296, 05eac0832f) (@aqandrew)
  • fix(scripts/metricsdocgen/scanner): normalize package keys to slash paths (#30360, d031680ff2) (@nickvigilante)
  • Explicitly close ssh upgrade listener (#30442, 008166356a) (@code-asher)
  • Dashboard: Match group form name limits to the API (#30347, 0243445de7) (@jakehwll)
  • Dashboard: Move session avatar above timestamp (#30310, a6a18849fe) (@jakehwll)
  • Dashboard: Update project chat rows to the current menu API (#30452, d266327068) (@jakehwll)
  • Dashboard: Replace undeclared default border color tokens (#30099, b38240a4c1) (@jaaydenh)
  • Keep new API keys within the caller's scopes and allow list (#30256, fc01bee831) (@EhabY)
  • Dashboard: Resolve codernauts appearancesettings padding (#30450, 5552152e93) (@jakehwll)
  • Networking: Wait for DERP controller to exit on cancel (#30458, 01aee8d65f) (@EhabY)
  • CLI: Close coderd on server startup errors (#30280, 7c39819665) (@ibetitsmike)
  • Dashboard: Wait for the revoked picker to unmount (#29637, 514eb7fa0d) (@ibetitsmike)
  • Dashboard: Keep streaming text alive inside expanded working blocks (#29420, ec27e23d3b) (@ibetitsmike)
  • Dashboard: Preserve Unicode avatar fallback characters (#30344, 5ca77e24c5) (@jakehwll)
  • Dashboard: Stop counting reasoning tokens twice in the context meter (#30336, f9cee5a974) (@mafredri)
  • Dashboard: Keep long base URLs from overflowing the providers table (#30095, 6db5a3608f) (@tracyjohnsonux)
  • Dashboard: Persist disabled template autostop settings (#30477, 1c6b121610) (@jakehwll)
  • Dashboard: Keep multi-select parameters in sync (#30475, cd4a0a962d) (@jakehwll)
  • Dashboard: Show page numbers when the widget has room (#30488, 861bcbb130) (@tracyjohnsonux)
  • Coalesce AI session metadata in list query (#30351, ef590afda7) (@SasSwart)
  • Dashboard: Use solid colors for help icon contrast (#30463, 36d68ed937) (@chrifro)
  • Dashboard: Adjust working block content alignment (#30495, c84b9ebe86) (@jakehwll)
  • Dashboard: Allow archiving and deleting multiple agent workspaces at once (#30276, 593829a638) (@jakehwll)
  • Dashboard: Show a visible indicator on highlighted dropdown options (#30472, 95f5c4aeb5) (@chrifro)
  • Dashboard: Own chat archive mutations per surface (#30299, c85d07e2bf) (@jakehwll)
  • Dashboard: Own chat pin mutations per surface (#30300, 8a30ce8bbd) (@jakehwll)
  • Dashboard: Own manual chat read mutations per row (#30301, b5bd01c297) (@jakehwll)
  • Dashboard: Prevent clipboard timers after unmount (#30506, 8801f29d43) (@jakehwll)
  • fix(scripts/docsgenfiltercheck): accept CRLF line endings in banner check (#30476, bcedc5d47e) (@nickvigilante)
  • Examples: Match whole language entries in the install script (#30373, d23280a347) (@nickvigilante)
  • Support path-aware OAuth discovery for remote MCP (#30168, 261269aff0) (@matifali)
  • Dashboard: Honor workspace sharing permission (#30510, f766be77d2) (@jakehwll)
  • Dashboard: Fall back to canonical template organization names (#30520, 276683b3ce) (@jakehwll)
  • Dashboard: Add copy button to chat code blocks (#29447, af8fb5977b) (@bpmct)
  • Dashboard: Raise scrollbar thumb contrast (#30461, cc4b0de9a9) (@chrifro)
  • Dashboard: Make text-only tooltip triggers keyboard focusable (#30403, 5b51a276aa) (@chrifro)
  • Dashboard: Raise contrast of selected resources sidebar item (#30464, eb73068273) (@chrifro)
  • Move organization instructions to the Instructions page (#30428, 6bae268487) (@ibetitsmike)
  • Dashboard: Keep the live working timer width stable (#30485, 2b5c0f3569) (@tracyjohnsonux)
  • Dashboard: Add missing effect dependencies (#30568, 697d7387b9)
  • Dashboard: Correct useMemo dependencies (#30567, 8797ca50e4)
  • Dashboard: Exclude disabled workspaces from bulk selection (#30517, 3364368657) (@jakehwll)
  • Dashboard: Abort chat history requests when the query is cancelled (#30542, 2d96e88ebe) (@ibetitsmike)
  • Server: Return database errors at chat create and subagent spawn (#30449, 807878c1ab) (@ethanndickson)
  • Server: Return database errors from turn preparation (#30492, 4afd834ad2)
  • Dashboard: Keep agent chat scroll on tool toggles and log streams (#29354, c735c1dd1d) (@DanielleMaywood)
  • Server: Attach subagent git refs to the root chat (#30647, cf6ab8739e) (@DanielleMaywood)
  • Dashboard: Use page count in usePaginatedQuery overshoot fallback (#30572, 1c805b0931) (@jeremyruppel)
  • Dashboard: Keep path separator in terminal websocket URL (#30573, abc2faed60)
  • Dashboard: Align collapsible section chevron with title (#30654, ca7d7afea9) (@tracyjohnsonux)
  • Agent: Disable standalone SSE for HTTP MCP servers (#30484, c4fabe90ae) (@jeremyruppel)
  • Fold web searches, answer reasoning, and OpenAI narration into working blocks (#30529, 41f5caafec) (@ibetitsmike)
  • Deduplicate template insights family metrics (#30497, 2f2169ed19) (@EhabY)
  • Dashboard: Raise breadcrumb and topbar separator contrast (#30546, bc445defd6) (@chrifro)
  • Keep error toasts visible until dismissed (#30420, d68b2c8b25) (@chrifro)
  • Anchor golangci .git exclusion and fix hidden findings (#30621, e8dcf9a3f1) (@ibetitsmike)
  • Dashboard: Raise theme swatch ring contrast to 3:1 (#30539, 4e4603eae9) (@chrifro)
  • Dashboard: Show a loader instead of the error page during stale chunk reload (#30658, 454a2fcc69) (@DanielleMaywood)
  • fix(aibridge): correlate Codex custom tool results to their AI Gateway thread (#30667, 71e8e526fa) (@dannykopping)
  • Replay stateless OpenAI reasoning across chat turns (#30298, b2c8798e0e) (@ibetitsmike)
  • Dashboard: Keep paragraph breaks in streamed chat text (#30551, e7b7687209) (@mafredri)
  • Database: Renumber MCP OAuth2 resource migration to 000622 (#30722, 0ea3f16dd3) (@BobbyHo)
  • Allow fixing stale parameters when the active version is required (#30660, 893461a91f) (@aslilac)
  • Dashboard: Put context usage popover ARIA on the button (#30708, 0e9edc1eb0) (@tracyjohnsonux)
  • Dashboard: Announce new tab on version link (#30715, 5d5f8672fa) (@tracyjohnsonux)
  • Run chat interrupt messages before earlier queued messages (#30729, 60c6c0959e) (@ethanndickson)
  • Dashboard: Use singular pagination labels for one result (#30519, a4c100e5fe) (@jakehwll)
  • Dashboard: Raise checkbox and radio border contrast to 3:1 (#30462, 01f78b37e3) (@chrifro)
  • fix(aibridge/intercept/messages): treat Bedrock Opus 5, Haiku 5.5, Fable 5, and Mythos 5 as adaptive-only (#30692, e6d24ff30a) (@dannykopping)
  • fix(scripts/release): promote stable on immutable releases (#30745, 200cffcfd8) (@denisra)
  • Agent: Track the default working directory for chat processes (#30674, 2b844aa649) (@DanielleMaywood)
  • Dashboard: Refetch the open chat when the chat watch reconnects (#30677, dad010ff11)
  • Dashboard: Replace git state on reconnect (#30676, 63eef9efde)
  • Agent: Re-resolve chat paths on refresh (#30675, e981ff4eec)
  • Dashboard: Make git panel refresh match a page reload (#30678, b8c9195b3f)
  • Server: Guard quickstart C/C++ install on every tool it installs (#30374, 6afd1515e0) (@nickvigilante)
  • Dashboard: Use a radio group for module category filters (#30523, 4f7bddb640) (@aqandrew)
  • Give buttons accessible names (#30796, 1d57682dab) (@aqandrew)
  • Server: Only retry without drop_block when it's rejected (#30821, aef7f15510) (@ethanndickson)
  • Make workspace create denials on behalf of another user actionable (#30537, c85ebc1346) (@matifali)
  • fix(scripts/dogfood): pass GO_LINT_NEW_CODE_BASE to the image lint run (#30851, 17ec9459c0) (@app/coder)
  • Bump Go version from 1.26.5 to 1.26.9 (#30807, d36c1535d5) (@droopy4096)
  • Dashboard: Replace role="application" on recharts charts (#30375, 5261723186) (@aqandrew)
  • Dashboard: Preserve personal instructions drafts (#30626, 3b283eb047) (@jakehwll)
  • Dashboard: Increase Switch off-state contrast to meet WCAG 1.4.11 (#30547, bef7ba8023) (@chrifro)
  • Dashboard: Use shared radio for theme cards (#30833, 4dfec5c966) (@chrifro)
  • Dashboard: Add surface-scrollbar token for scrollbar thumbs (#30744, e58424aad6) (@chrifro)
  • fix(flake): update Linux Chrome download (#30899, 5bde0ea6ab) (@phorcys420)
  • Match chart accessible name in story (#30907, e637c9203e) (@aslilac)
  • Server: Reset stream history only if after_id is deleted (#29808, 939146b077) (@jscottmiller)
  • Server: Return agent and subagent lookup database errors (#30661, aedd998db6) (@ethanndickson)
  • Server: Return database errors from workspace tools (#30822, e254086494)
  • Server: Commit chat workspace bindings with dependent state (#30663, e09407c366)
  • Server: Return MCP OAuth token database errors (#30662, 096db5de02)
  • Log workspace shutdown reasons for SSH connections (#30515, 1a65385a4b) (@fioan89)
  • Dashboard: Stop iPadOS blurring the top of the home-screen app (#31027, 3f1874c340) (@ibetitsmike)
  • Server: Make compaction fit an overflowing context (#30766, 8245457c8a) (@ibetitsmike)
  • Server: Keep the chat output cap on compaction summaries (#31042, 3576e04e2d) (@ibetitsmike)
  • Server: Drop blocked tools from Explore sub-agent turns (#30911, e53cfef864) (@ibetitsmike)
  • fix(scripts/releaser): use the v-prefixed image tag in release notes (#31032, 7b8d480ae8) (@denisra)
  • Dashboard: Raise session timeline border contrast to 3:1 (#30839, 2f748947b8) (@chrifro)
  • Dashboard: Remove borders from grey badges (#31043, 0187b967cb) (@chrifro)
  • Dashboard: Enlarge undersized Autocomplete clear and HelpPopover icon targets to 24px (#30890, 76ae9bf77d) (@chrifro)
  • Server: Bound push response body read and add client timeout (#31129, cc66f30a19) (@BobbyHo)
  • Set project chat row text color to content-secondary (#31158, 9d840ae236) (@jaaydenh)
  • Server: Ignore retired OAuth2 scopes such as task:* (#31117, f69b98abfc) (@ethanndickson)
  • Server: Allow evicted bridges ten minutes to drain (#30830, 30499fdcfa) (@dannykopping)
  • Dashboard: Show refreshed diff content in the Git panel (#31166, 31024621a5) (@DanielleMaywood)
  • Exempt service accounts from user dormancy (#30824, 9b8d880d63)
  • Dashboard: Speed up overlay and tooltip motion (#29823, face989d73) (@jakehwll)
  • Dashboard: Consolidate Badge into sm and md sizes (#31149, 9704d8535b) (@tracyjohnsonux)
  • Dashboard: Use sm Badge size for project skill labels (#31194, 7d7ab2416c) (@jaaydenh)
  • Only inject session tokens into trusted app links (#31208, 43ecc7c92f) (@EhabY)
  • Server: Coalesce deltas when persisting interrupted turns (#29661, 3c36790c86) (@mafredri)
  • Dashboard: Open a transcript mounted after its scroller at the end (#30608, b9e76bd827) (@mafredri)
  • Dashboard: Open model settings filtered to the selected provider (#30392, b97d048862) (@tracyjohnsonux)
  • Show configured provider icons and names in AI settings (#31033, 4e4a56b665) (@tracyjohnsonux)
  • Server: Traverse schema branches (#31128, 457d777af1) (@hugodutka)
  • Documentation: Regenerate ping docs with table headers (#31292, 1893b80805) (@nickvigilante)
  • Retry workspace quota commits with jittered backoff (#31207, 1e0a481a60) (@dylanhuff-at-coder)
  • Dashboard: Stop browsers refilling provider credentials (#30391, cdfdaed267) (@tracyjohnsonux)
  • Bump Go to 1.26.10, terraform to 1.16.7, alpine to 3.24.3 (CVE-2026-111943) (#31301, 688c4a390c) (@sreya)
  • Harden chat workspace file upload input validation (#30184, 34ef30ee90) (@ibetitsmike)
  • Server: Restrict chat workspace rebinding to the chat owner (#30185, 27db7ace68) (@ibetitsmike)
  • Hide pricing warning for prompts without usage (#31265, 5e427bf525) (@ssncferreira)
  • Dashboard: Make the PWA title bar follow the active theme (#31297, 0f3e1aa328) (@mafredri)
  • Link AI spend tooltip to how spend is calculated (#31258, e676f6d1b2) (@ssncferreira)
  • Server: Store chat ACL keys as canonical UUIDs (#31037, 9551fa3b3e) (@ibetitsmike)
  • Show each OpenAI reasoning summary title on its own line (#31349, 9f7a5d5b2f) (@mafredri)
  • Agent: Compare fake harness directory identity (#31161, 28effca5aa) (@hugodutka)
  • CLI: Scope keyring credentials to the deployment origin (#29764, bc65edc737) (@RyanL2)
  • Server: Reject overflowing chat workspace TTL values (#31036, 2116682e61) (@ibetitsmike)
  • Dashboard: Show a list tree icon on working blocks (#31364, 05505d0718) (@mafredri)
  • Keep ACP harness context synchronized (#31351, 1a9d5b28ba)
  • Agent: Probe ACP harnesses before workspace readiness (#31350, 38e621afcb) (@hugodutka)
  • Database: Close listener before waiting on latency probe (#31317, 7283fff69f) (@ibetitsmike)
  • Server: Replace interrupted ACP tool output (#31362, a3fb196ce4) (@hugodutka)
  • Dashboard: Keep related connections link from stretching (#31369, decd769d14) (@EhabY)
  • Server: Reject overflowing workspace TTL values (#31329, 36bccbf08b) (@ibetitsmike)
  • Dashboard: Split live Working blocks at assistant text and scroll to their end on expand (#30656, 083670a288) (@ibetitsmike)
  • Bump coder/tailscale to bound DERP dup client sendHistory (#31248, f1f57d9ae0) (@dylanhuff-at-coder)
  • Dashboard: Show success toasts after copying chat ID and branch (#31402, cd55565f14) (@app/coder)
  • Dashboard: Call chats chats in sidebar empty states (#31401, f85e0ce1b7) (@app/coder)
  • Dashboard: Give each user settings page a descriptive title (#31186, 23ee3e7175) (@chrifro)
  • Dashboard: Outline the inactive switch state (#31165, c440977e4a) (@chrifro)
  • Require SSH permission to fetch external agent credentials (#31388, a736d65c98) (@dylanhuff-at-coder)
  • Wait for full completion before asserting in tests (#30885, bb8912dc46) (@eric-hughes-coder)
  • Confine read_skill_file reads to the skill directory (#31462, 5f58fb27d2) (@ibetitsmike)
  • Database: Lock the workspaces row when claiming a prebuild (#31518, 289138dd3b) (@dylanhuff-at-coder)
  • Bump bundled terraform to 1.17.1 (backport 2.39) (#31458, 48cd3a239a)
  • Bump gomarkdown/markdown to fix GHSA-cv23-7vc5-jfh7 (backport 2.39) (#31457, fcdd867c5e)
  • Dashboard: Show pinned and unloaded chats in project sidebar folders (#31343, e22dce1142) (@jaaydenh)
  • Server: Anchor CSRF exemption patterns (#31125, 8d897357dd) (@BobbyHo)

Documentation

  • Remove feature states from page titles (#30109, c2d243891f) (@nickvigilante)
  • Add YAML front matter to remaining pages (#30115, 4a62b0fc9c) (@nickvigilante)
  • Flatten lone index pages to single files (#30129, 1fd383e4fd) (@nickvigilante)
  • Remove AI Governance usage row from air-gapped comparison (#30202, eae031d483) (@mattvollmer)
  • Document cherry-pick and backport label flows (#30102, f73b65a8df) (@f0ssel)
  • Document support bundle collection across CLI and IDEs (#30118, 191a9f3d3a) (@matifali)
  • Author the sidebar in per-section YAML compiled to manifest.json (#30165, f1ed84ffab) (@nickvigilante)
  • Drop task-list checkboxes from the Chats migration guide (#29856, 1bb77bb765) (@nickvigilante)
  • Add redirects.json and rebuild the docs site when it changes (#30208, 14bb1f27d3) (@nickvigilante)
  • Add chat automations documentation (#30220, 7f3d35353e)
  • Turn the Quickstart's next steps into goal-based paths (#29800, c30b44ad14) (@nickvigilante)
  • Render audit log resources as one table per resource (#29797, fcbf45c571) (@nickvigilante)
  • Add playback controls and descriptions to autoplaying videos (#30263, 3f408825b5) (@nickvigilante)
  • Shorten the add-a-language install script copy and note apt reinstalls (#30376, 44af8a1b56) (@nickvigilante)
  • Documentation: Reformat to one sentence per line (#30438, 21c1abe9ad) (@ianjevans)
  • Documentation: Clarify VS Code support bundle requirements and limits (#30430, d56cc3a6c3) (@EhabY)
  • Correct the CODER_AGENT_BLOCK_FILE_TRANSFER block list (#29705, c9680e4f36) (@app/blinkagent)
  • Clarify that disable-password-auth also applies to owners (#30362, b4fb7901e6) (@jdomeracki-coder)
  • Document dropping capabilities for restricted Pod Security (#30271, 020b437ec9) (@andrewdunndev)
  • Note the pubsub cluster port between HA replicas (#30290, c11d60ad8d) (@andrewdunndev)
  • Mention chat reasoning_tokens is part of output_tokens (#30500, befda9b29f) (@mafredri)
  • Document VS Code SSH keepalive and reconnection settings (#30501, f8e053e385) (@app/coder)
  • Remove references to unsupported SAML authentication (#30507, dfa72df9aa) (@nickvigilante)
  • Point the 2.29 ESR row at v2.29.21 (#30538, d7bf081e57) (@denisra)
  • Note coder_agent dir un-deprecation in 2.29-2.34 ESR upgrade guide (#30533, 8674e8529e) (@app/coder)
  • Documentation: Fix broken vscode-coder demo GIF links (#30655, f2ddf215dc) (@nickvigilante)
  • Add Claude Desktop as a supported client (#30653, 8a063ef0d5) (@matifali)
  • Update release calendar for v2.38 (#30757, 2254965ef8) (@Lisa-Fiander)
  • Delete unlisted pages and their screenshots (#30758, 935e076210) (@nickvigilante)
  • Documentation: Reformat to one sentence per line (#30705, ed6a8441dc) (@nickvigilante)
  • Documentation: Reformat setup and integrations docs to one sentence per line (#30704, 1872b183ee) (@nickvigilante)
  • Documentation: Reformat to one sentence per line (#30701, c647260901) (@nickvigilante)
  • Documentation: Reformat to one sentence per line (#30703, c58ac71ca3) (@nickvigilante)
  • Documentation: Reformat AI Gateway client and Agent Firewall docs to one sentence per line (#30702, 1f61a290e7) (@nickvigilante)
  • Documentation: Add compliance-claims wording rule to the style guide (DOCS-1256) (#30778, 0dc36786de) (@nickvigilante)
  • Documentation: Fix tab block class typo on the remote desktops page (#30862, 4ae1b7bd28) (@nickvigilante)
  • Replace references to the retired Enterprise license tier (#30853, c6a47c4428) (@nickvigilante)
  • Documentation: Reformat to one sentence per line (#30700, 9eba637584) (@nickvigilante)
  • Documentation: Document workspace secrets (#30252, fa926fcc77) (@Emyrk)
  • Documentation: Fix 404 OpenShift build config link (#30900, ff58693acb) (@nickvigilante)
  • Add missing rules from the docs style guide project (#30782, c4cfe8a9ea) (@nickvigilante)
  • Add Pethost to community install methods (#30901, b477ada408) (@sadfun)
  • Documentation: Reformat to one sentence per line (#30699, c4d983420d) (@nickvigilante)
  • Documentation: Reformat to one sentence per line (#30697, 07f3d952e0) (@nickvigilante)
  • Documentation: Reformat networking docs to one sentence per line (#30695, 17658685af) (@nickvigilante)
  • Documentation: Reformat monitoring and security docs to one sentence per line (#30694, acd03e4bf8) (@nickvigilante)
  • Reformat reference, start, and install docs to one sentence per line (#30696, f5909d2acb) (@nickvigilante)
  • Documentation: Reformat to one sentence per line (#30693, 644519e1f0) (@nickvigilante)
  • Server: Resolve ARCHITECTURE.md TODOs for idle chats and workspace files (#30039, ea287daf71) (@ibetitsmike)
  • Refresh release calendar and install versions for the 2026-10-19 patches (#31034, 8afae4d84c) (@denisra)
  • Add an Agent Firewall example policy page (#29468, 7777bf3fc3) (@jdomeracki-coder)
  • Fold dynamic parameters into a Parameters section (#30912, e5c5779a56) (@app/coder)
  • End every page description with a period and lint for it (#30863, d187dea338) (@nickvigilante)
  • Attribute unlimited agent concurrency to AI Premium (#31088, 54f77d2cc1) (@app/coder)
  • Give screenshots their own alt text and fill empty table headers (#30873, fda1ed5dcd) (@nickvigilante)
  • Point the ESR paragraph at v2.34.13 (#31070, 360e2ffb31) (@denisra)
  • Give every table header cell text and fail lint on empty ones (#30879, 6e51c66a97) (@nickvigilante)
  • Remove beta label from JetBrains Toolbox (#31164, b1f5f0b4c1) (@matifali)
  • Documentation: Clarify who confirms bulk workspace actions (#31178, 6205471472) (@app/coder)
  • Documentation: Call the languages parameter a multi-select (#31179, bf0c7a5e6a) (@app/coder)
  • Documentation: Document Toolbox support bundle requirements (#31289, e4e62d99da) (@fioan89)
  • Document declarative script ordering (#31227, aa9b0a950a) (@geokat)
  • docs(.claude/skills/frontend-deep-review): keep JSDoc on exports in CD5 fix (#31318, de562476e5) (@ibetitsmike)
  • Promote usage of Nix(OS) and discourage use of envbuilder (#31141, 3ed2dfd8ca) (@phorcys420)
  • Add guide for tracing workspace connections (#31342, 131d4fc3df) (@matifali)
  • List VS Code session ID sources and View related connections (#31371, deb76fadf3) (@EhabY)
  • Documentation: Add Coder Agents projects page (#30684, cfe6303d63) (@f0ssel)
  • Document ACP subagents (#31430, 823decdc54) (@hugodutka)

Code refactoring

  • refactor(aibridge): expose provider credentials and invocation models (#29886, fc861975bf) (@johnstcn)
  • CLI: Replace deprecated GroupsByOrganization in groups list (#30142, 1f7aa2d14c) (@nickvigilante)
  • Provisioner: Extract Terraform addresses (#30261, 3f95f430f9) (@geokat)
  • Add agent connection reporter (#30069, c7da54cf03) (@code-asher)
  • Dashboard: Replace the banner color picker (#30308, 70bc2e5540) (@jakehwll)
  • Dashboard: Align compaction settings table (#30274, 8dca7c9e30) (@jakehwll)
  • Use typed AI Gateway actor identity (#30258, ffc7dadfe2) (@pawbana)
  • refactor(aibridge): export passthrough handler (#30283, 63d9b6b38f) (@pawbana)
  • Move coderd/x/nats to coderd/nats (15616728d5) (@cstyan)
  • Dashboard: Require always-passed right panel props (#29893, 21212e4c5c) (@DanielleMaywood)
  • Dashboard: Require chat IDs in chat store helpers (#29888, deff49f589) (@DanielleMaywood)
  • Dashboard: Require always-passed chat input props (#29890, 82629f2f57) (@DanielleMaywood)
  • Dashboard: Require org, MCP servers and URL transform in timeline (#29894, f2e995f28c)
  • Dashboard: Require always-passed settings and misc props (#29892, 33b69ff997) (@DanielleMaywood)
  • Dashboard: Require always-passed timeline and tool props (#29891, 0e81c4b954) (@DanielleMaywood)
  • Dashboard: Move the composer layout out of AgentCreateForm (#30291, 7d1191c9bc) (@jaaydenh)
  • Dashboard: Avoid per-render fallback arrays in hook deps (#30566, dfeea82325)
  • Dashboard: Read latest callbacks in effects with useEffectEvent (#30565, 7439225b1a)
  • Dashboard: Depend on stable Formik setters in effects (#30564, 71f468b2e0) (@jeremyruppel)
  • Dashboard: Use NANO_DAY instead of multiplying NANO_HOUR by 24 (#30575, 89d9492b02) (@aqandrew)
  • Move ssh upgrade listener to the corresponding serve (#30532, 7829b8f924) (@code-asher)
  • Provisioner: Extract script ordering (#30337, e2abd0f01d) (@geokat)
  • Provisioner: Stage script order resolution (#30481, 50c785cc6d) (@geokat)
  • Dashboard: Add ToolCall.Scrollable (#30648, ff5edf2c3a) (@DanielleMaywood)
  • Server: Move chat mutations into chat_mutations.go (#28756, b7d63121b0) (@ibetitsmike)
  • Server: Remove the no-op allowedBehaviorToolNames filter (#30864, 5ccbef037b) (@ibetitsmike)
  • Rename prepareGeneration to buildTurnEnvironment (#30866, a41e5ae6eb) (@ibetitsmike)
  • Server: Name the Server receiver p in turn_environment.go (#30869, 8065f84af2) (@ibetitsmike)
  • Server: Move turn preparation helpers into turn_environment.go (#30870, 54ba766f77) (@ibetitsmike)
  • Server: Share chat creation with in-process callers (#30027, de42c37f76) (@ethanndickson)
  • Server: Extract AI model price body decoding and validation (#30716, 41e5b2dd24) (@SasSwart)
  • Server: Replace executeTools and executeSingleTool with toolBatch (#30938, 3df3c03288) (@ibetitsmike)
  • Server: Delete the CompactionOptions and compactionOutcome mirrors (#30984, 63c116fddd) (@ibetitsmike)
  • Server: Resolve tool name aliases in one toolBatch method (#30939, a86012f82b) (@ibetitsmike)
  • Server: Delete the chat debug run and step heartbeats (#30988, 2397f3953a) (@ibetitsmike)
  • Delete chatdebug FinalizeStale and the stale threshold (#30989, 367358862b) (@ibetitsmike)
  • Delete the FinalizeStaleChatDebugRows query (#30995, 8b6f209e8f) (@ibetitsmike)
  • Server: Create and finalize debug runs through one helper (#30934, e8882b6b51) (@ibetitsmike)
  • Server: Share one finalize-once lifecycle between the stream wrappers (#30981, 95e6a73f5c) (@ibetitsmike)
  • Server: Number chat debug steps in the database (#31007, eea839ccc4) (@ibetitsmike)
  • Server: Share one outstanding tool-call scan (#30883, 82288467d9) (@ibetitsmike)
  • Server: Replace run-summary Postgres subtests with literal rows (#30972, 5c9815b474) (@ibetitsmike)
  • Dashboard: Extract SkillEditorForm and shared skill helpers (#30854, c1d4907f6c) (@jaaydenh)
  • Dashboard: Organize agent pages into route folders (#31142, 1f8353ad22) (@jakehwll)
  • Server: Delete the process-global step counters (#31008, e3657389bb) (@ibetitsmike)
  • Server: Drop the unused runnerCtx from the runner debug turn (#31010, 39c4bd6ced) (@ibetitsmike)
  • Server: Share chat updates with in-process callers (#30731, 9d5f0cd3c0)
  • Server: Share chat sends and interrupts with in-process callers (#30730, d8a78b28fd) (@ethanndickson)
  • Server: Drop the direct Bedrock client (#30928, 766a0eb918) (@ibetitsmike)
  • Server: Drop the remaining direct provider clients (#30929, cdc914108c) (@ibetitsmike)
  • Server: Drop provider options only direct clients read (#30958, 17c7fe9632) (@ibetitsmike)
  • Server: Drop transport branches only direct clients used (#30966, 231537da8b) (@ibetitsmike)
  • Server: Derive the BYOK auth header from the AI Gateway client choice (#30979, 9f2389a908) (@ibetitsmike)
  • Share the session app fold rule and method derivation (#31028, 7e9735c4ec) (@EhabY)
  • Server: Create the compaction debug run through StartRun (#31087, a33af01605) (@ibetitsmike)
  • Server: Remove the relay dialer's DialerFn bypass (#30920, 8b6f2c656c) (@ibetitsmike)
  • Server: Delete the write-only generatedChatTitle (#30926, aef1917171) (@ibetitsmike)
  • Server: Delete the runner's unreachable task index (#30936, 509f142781) (@ibetitsmike)
  • Server: Delete the test-only advisor runtime getters (#30952, 16486f7c7f) (@ibetitsmike)
  • Delete the ChatProviderAPIKeys test seam (#30927, c7f1f4b9ef) (@ibetitsmike)
  • Server: Drop Anthropic guard escalation passes (#30970, 85f02dfc29) (@ibetitsmike)
  • Server: Remove unused Worker.RefreshChat (#30944, c9204a5cff) (@ibetitsmike)
  • Server: Share the deployment chat setting PUT handler (#31018, 4630e2e2e7) (@ibetitsmike)
  • Server: Share the chat model config write error mapping (#31019, 44149fb3e9) (@ibetitsmike)
  • Server: Share the chat prompt length check (#31020, 67d586bb13) (@ibetitsmike)
  • Server: Drop pass-through chat message conversion wrappers (#31023, 0b8d9135ae) (@ibetitsmike)
  • Server: Extract the recording boundary parser and table its tests (#30953, 9ede7ceed6) (@ibetitsmike)
  • Server: Extract the recording multipart parser and table its tests (#30954, ae6013f9d5) (@ibetitsmike)
  • Server: Drop write-only fake state and share the shape check (#30950, 50b7c04398) (@ibetitsmike)

Performance improvements

  • Server: Make chat stream reads lock-free (#30266, 1a96da2b6a) (@cstyan)
  • Database: Index chat message pagination (#30562, d28a433b23) (@ibetitsmike)
  • Server: Bound the initial chat stream snapshot to the client cursor (#29761, 200fa7dea7) (@ibetitsmike)
  • Provisioner: Optimize selectors and tune graph limits (#31177, a3876a3634) (@geokat)

Tests

  • Dashboard: Wait for the cleared spend request (#30132, 95c9dcaa17) (@tracyjohnsonux)
  • test(scripts/docgenenv): match missing include by fs.ErrNotExist (#30285, 12caf883fc) (@nickvigilante)
  • Server: Check tool call cancels through the agent API (#30346, f85f194849) (@mafredri)
  • Server: Reduce chat test fixture and timer waits (#29523, 9cfe27063d) (@ibetitsmike)
  • Enterprise: Avoid fixture and provisioning timer waits (#29527, dd0346c8a6) (@ibetitsmike)
  • Skip agent tool call tests until netstack TIME_WAIT fix (#30465, 788a8bc1ba) (@mafredri)
  • Make Responses streaming test handle CRLF SSE boundaries (#30352, a4b68acf9e) (@SasSwart)
  • Eliminate a race for http.DefaultClient (#30454, 54ee377364) (@SasSwart)
  • Server: Cover the turn tool policy at buildTurnEnvironment (#30867, c42c9af23a) (@ibetitsmike)
  • Server: Remove end-to-end tool policy tests (#30868, 752da8d60f) (@ibetitsmike)
  • Server: Renew the expired TLS test certificate (#30922, 121393842c) (@ibetitsmike)
  • Database: Use subtest context in TestProjectSkillQueries (#31011, 452654d07f) (@jaaydenh)
  • Server: Cover provider tool runners in ExecuteLocalTools (#30937, f004c72749) (@ibetitsmike)
  • Provisioner: Add script-order conversion fixtures (#31038, 709fb5d79b) (@geokat)
  • Server: Use a random cluster port in TestPubsub/CloseIdempotent (#31056, 90a8d51418) (@ibetitsmike)
  • Agent: Stop asserting the exit code of SSH sessions closed by agent shutdown (#31058, aae5602ef4) (@ibetitsmike)
  • Server: Pin the debug runs that turns, titles and status labels record (#30933, a1556f8e62) (@ibetitsmike)
  • Server: Table the stream wrapper tests and cover their status rules (#30980, 01ee3484cc) (@ibetitsmike)
  • Server: Check the run-summary query boundary (#30973, ffc6aac6a8) (@ibetitsmike)
  • Server: Cover BYOK header choice for Bedrock and OpenAI-compatible routes (#30978, 707d373a76) (@ibetitsmike)
  • Server: Replace the plan-mode lock counterexample test (#30921, cc51592c6f) (@ibetitsmike)
  • Server: Table the chatstate queue and invalid-state endpoint tests (#30941, 83cdc8e346) (@ibetitsmike)
  • Server: Share one server across the chat message pagination tests (#30965, 5a1a0594c4) (@ibetitsmike)
  • Server: Run the TestPostChats model and org rejections on one server (#30975, cfddedb95c) (@ibetitsmike)
  • Server: Cover advisor eligibility in the tool policy table (#30990, 300f73b05a) (@ibetitsmike)
  • Server: Share one server across the chat child archive tests (#30956, f34aaeb017) (@ibetitsmike)
  • Server: Run the TestPostChats workspace, input, and MCP rejections on one server (#30976, 56fe6ec5e3) (@ibetitsmike)
  • Server: Remove the end-to-end advisor gating tests (#30991, ac62f2e760) (@ibetitsmike)
  • Server: Remove end-to-end root and child tool list tests (#30992, c78ceccfaa) (@ibetitsmike)
  • Server: Fold the duplicate advisor scenarios (#30993, 9cda919eb1) (@ibetitsmike)
  • Agent: Cover session runtime and transcripts (#30841, 9add27f852)
  • Server: Move the Anthropic guard unit test into its own file (#30968, 94b4c9d7fe) (@ibetitsmike)
  • Server: Make the chatd idle wait fail on timeout (#30967, b9e130283f) (@ibetitsmike)
  • Server: Move the Anthropic guard unit test into chatsanitize (#30969, 0647a096f2) (@ibetitsmike)
  • Server: Fold the effort clamp fixture into the pending-user test (#30942, 453e21a050) (@ibetitsmike)
  • Server: Merge the computer-use child CreateChat tests (#30943, bcaf21b812) (@ibetitsmike)
  • Server: Assert the compaction debug run finishes (#31328, c8ed6f6cb2) (@ibetitsmike)
  • Server: Reuse recordingPubsub in the task test fixture (#30923, f0b6bf12ac) (@ibetitsmike)
  • Server: Table the text and error tool result rows in memory (#30945, fa7ed93ffe) (@ibetitsmike)
  • Server: Table the OpenAI fake positive tests and fail on error streams (#30948, 8bafa8de62) (@ibetitsmike)
  • Server: Fold taskTestFixture into workerTestFixture (#30924, 7dee434315) (@ibetitsmike)
  • Server: Table the media codec matrix in memory (#30946, b32aff6a5c) (@ibetitsmike)
  • Server: Pin the fake response-shape errors (#30949, 3cc2861fc4) (@ibetitsmike)
  • Server: Run the advisor config tests on one server (#30986, 9848c41100) (@ibetitsmike)

Continuous integration

  • Validate docs/redirects.json (#30209, bb58916e6c) (@nickvigilante)
  • Skip the gen job for docs-only PRs that cannot change its output (#30164, b9c0853473) (@nickvigilante)
  • Start the heaviest test packages first (#29491, 5da4462eb8) (@ibetitsmike)
  • ci(scripts/docsredirectscheck): reject redirects an earlier rule swallows (#30383, 35b3052ea8) (@nickvigilante)
  • Add coder[bot] to CLA allowlist (#30502, 2810038f82) (@matifali)
  • Keep coder-preview images for 30 days instead of 7 (#30635, 594bc829c1) (@denisra)
  • Fail the test process with a heap profile when memory passes a per-runner limit (#30487, 11f1ee7d9f) (@BobbyHo)
  • Add coder-backporter-app[bot] to CLA allowlist (#30798, 34e8125979) (@aslilac)
  • ci(.github): time out stalled Go module downloads (#30889, 7298a29885) (@ethanndickson)
  • Bump paralleltestctx to detect timeout contexts used through closures (#31039, 86ea5d4c4e) (@ethanndickson)
  • Raise the Linux Go temp dir tmpfs to 16g (#31115, 14f66c0b07) (@ethanndickson)
  • Install site dependencies before formatting generated JSON (#31170, d8a4d30449) (@jscottmiller)
  • ci(.github/workflows): run setup-go-paths in nightly-gauntlet (#31382, 542e5b6952) (@ethanndickson)
  • ci(.github/workflows): add doc-check kill switch and auth-failure stop (#31242, 44285af741) (@nickvigilante)

Chores

  • Update CODEOWNERS (#30174, 2a81d59ccc) (@ssncferreira)
  • Mark nested CLI reference pages as generated (#30162, f0a68f55b7) (@nickvigilante)
  • Refresh AI model price book (#30233, b530f0154d) (@cdrci)
  • Extract recorder construction (#30224, f96d2696a4) (@pawbana)
  • Mark generated configuration and API key scope docs as linguist-generated (#30365, cdbfcbf5e3) (@nickvigilante)
  • Enable no-fallthrough oxlint rule (#29947, 0fcc89751c) (@jeremyruppel)
  • Enable no-danger oxlint rule (#29950, 08c54ab698)
  • Enable click-events-have-key-events oxlint rule (#29948, e7786411ab)
  • Disable Biome rules noInferrableTypes, useConsistentCurlyBraces, and noEmptyInterface (#29959, bd1f21f1d2) (@aqandrew)
  • Update references to the relocated install docs paths (#30380, 28cf704f27) (@nickvigilante)
  • Remove the Coder Agents chat board prototype (#30394, 02a12fefa8) (@mafredri)
  • Add code owners for docs/ and the docs CI (#30114, 9ce4f2f358) (@nickvigilante)
  • Improve code vpn-daemon run help text (#30331, dad9f733f4) (@aslilac)
  • Refresh AI model price book (#30498, 315789c6bf) (@cdrci)
  • Update cost control codeowners (#30505, 483d889efb) (@ssncferreira)
  • Enable no-console oxlint rule (#30521, ac33ffa9de) (@jeremyruppel)
  • Adjust security policy to explicitly exclude volumetric DDoS (#30548, 4276b93551) (@Lisa-Fiander)
  • Enable exhaustive-deps oxlint rule (#30569, 408cc8ec02)
  • Remove unused autofill-parameters endpoint and experiment (#30525, 86ebc72236) (@aslilac)
  • Add golangci new-code quality gates (#30622, 7517301ffa)
  • Add frontend-deep-review agent skill (#30182, 0702372dcf) (@ibetitsmike)
  • Refresh AI model price book (#30828, 7e69cd0af7) (@cdrci)
  • Johnstcn -> mafredri as code owner for protobufs (#30852, 5cd67a418d) (@spikecurtis)
  • Bump bundled terraform to 1.16.6 (#30516, 116660193e) (@app/coder)
  • Server: Log workspace agent lookup errors in turn preparation (#30865, 2088618930) (@ibetitsmike)
  • Check out text files with LF line endings on every OS (#31041, 8ec252f01a) (@ethanndickson)
  • Remove accidentally committed releaser binary (#31062, 45e392b8be) (@f0ssel)
  • Documentation: Update release docs for v2.38.1 (#31063, ce3cd6f9a4) (@brittany-coder)
  • Add ssncferreira and SasSwart as code owners of AI query files (#31116, 409cdf6214) (@SasSwart)
  • Remove shadow from badge component (#31124, bd1b10673f) (@jaaydenh)
  • Enable no-noninteractive-tabindex oxlint rule (#31146, 2dd492ed3a) (@aqandrew)
  • Dashboard: Enable oxlint correctness category (#31127, 4fd773ae27) (@jeremyruppel)
  • Database: Drop the chat debug stale-sweep indexes (#31009, 98104d10fe) (@ibetitsmike)
  • Refresh AI model price book (#31162, 04d7d4da9c) (@cdrci)
  • Dashboard: Stop emitting hidden source maps in production builds (#31232, 8315d74b17) (@kylecarbs)
  • chore(Makefile): group embedded slim binaries by architecture (#31233, e7b8033981) (@kylecarbs)
  • Bump Node.js to 22.23.4 (#31263, 8cf19bd03c) (@Lisa-Fiander)
  • Bump github.com/andybalholm/brotli to v1.2.7 (#31231, 10e7b3f769) (@Shelnutt2)
  • Dashboard: Upgrade storybook and addons to 10.6.2 (#30688, 26aa086e56) (@jeremyruppel)
  • Documentation: Update release docs for v2.38.2 (#31218, 9bf68b8e6b) (@brittany-coder)
  • Use go test cache for test-go-pg-17 and test-go-race-pg (#31295, b2e6f89766) (@sreya)
  • Skip Storybook on PRs without site changes (#31298, 578b5270a6) (@sreya)
  • Dashboard: Enable no-useless-fallback-in-spread oxlint rule (#31229, 46c0cfdb35)
  • Dashboard: Enable no-conditional-tests oxlint rule (#31228, 19ad8f346f)
  • Dashboard: Enable static-components oxlint rule (#31224, bcafbe2aae) (@jeremyruppel)
  • Dashboard: Enable preserve-manual-memoization oxlint rule (#31240, fc13808e97)
  • Dashboard: Enable control-has-associated-label oxlint rule (#31239, 898776816a)
  • Dashboard: Enable no-noninteractive-element-interactions oxlint rule (#31238, 711f64bc40)
  • Dashboard: Enable no-useless-spread oxlint rule (#31241, 9b34c5a12a)
  • Sync fantasy with upstream v0.45.5 (#31288, 1aff810443) (@mafredri)
  • Documentation: Update release docs for v2.29.23 (#31320, 255850fcfa) (@f0ssel)
  • Documentation: Update release docs for v2.38.3 (#31314, 94d209b4d3) (@brittany-coder)
  • Comment out docs directory owner in CODEOWNERS (#31361, ba738b6c96) (@nickvigilante)
  • Bump coder/preview and coder/trivy to converge random_* values passed into modules (#31357, 76d9452877) (@BobbyHo)

Compare: 4a67ac3306657da8290c426903e09bee2eb95057...v2.39.0

Container image

  • docker pull ghcr.io/coder/coder:v2.39.0

Install/upgrade

Refer to our docs to install or upgrade Coder, or use a release asset below.

Source: README.md, updated 2026-11-03