twenty/v2.26.0

blackboardsh/electrobuntwenty/v2.26.0Jul 31, 2026by twenty-pr[bot]

AI Summary

This release introduces a Slack conversational assistant, AI agent tooling improvements, and fixes for workflow versioning. It also includes the breaking changes from the SDK regarding View side effects.

Key Highlights

  • New Slack conversational assistant feature
  • AI agent lazy tool loading implementation
  • Workflow versioning improvements and concrete model pinning
  • Breaking change: Centralized system `View` `viewField` side effect
  • Breaking change: runAgent execution failures now returned as result errors

Breaking Changes

  • Centralize system `View` `viewField` side effect
  • Return runAgent execution failures as result errors

New Features

  • Slack conversational assistant
  • Lazy tool loading for AI agents
  • Workflow version content reading from core
  • Preview highlighted records in search command bar
  • Job enqueueing for logic functions
  • Number formatting extension for charts

Full Release Notes

<!-- generated-release-notes v1 -->

## ⚠️ Breaking changes

- [BREAKING-CHANGE] Centralize system `View` `viewField` side effect ([#23081](https://github.com/twentyhq/twenty/pull/23081)) by @prastoin
- [breaking-change] fix(server): return runAgent execution failures as result errors ([#23390](https://github.com/twentyhq/twenty/pull/23390)) by @abdulrahmancodes

## ✨ New features

- feat: Slack conversational assistant ([#22984](https://github.com/twentyhq/twenty/pull/22984)) by @abdulrahmancodes
- feat(workflow): read workflow version content from core in the engine, behind a flag ([#23403](https://github.com/twentyhq/twenty/pull/23403)) by @thomtrp
- feat(front): preview highlighted record in the search command bar ([#23413](https://github.com/twentyhq/twenty/pull/23413)) by @FelixMalfait
- feat(workflow): pin concrete model on AI agent node creation and exclude interactive tools from workflow runs ([#23447](https://github.com/twentyhq/twenty/pull/23447)) by @etiennejouan
- feat(ai-agent): lazy tool loading for the open-ended runAgent path ([#23454](https://github.com/twentyhq/twenty/pull/23454)) by @abdulrahmancodes
- feat(ai-tool): resolve and default icons in AI metadata tools ([#23480](https://github.com/twentyhq/twenty/pull/23480)) by @etiennejouan
- feat(workflow): make the flow atom authoritative for version content, read core behind a flag ([#23499](https://github.com/twentyhq/twenty/pull/23499)) by @thomtrp
- feat(server): attach app attributes to application rate-limited metric ([#23500](https://github.com/twentyhq/twenty/pull/23500)) by @prastoin
- feat(dashboard): extend number format option to bar, line and pie charts ([#23505](https://github.com/twentyhq/twenty/pull/23505)) by @ehconitin
- feat(apps): add enqueueJob to run a logic function on the workers ([#23527](https://github.com/twentyhq/twenty/pull/23527)) by @martmull

## 💅 Improvements & UX

- Mirror host element geometry into front component workers ([#23264](https://github.com/twentyhq/twenty/pull/23264)) by @bosiraphael
- Restore soft-deleted junction record when re-adding a junction relation ([#23371](https://github.com/twentyhq/twenty/pull/23371)) by @thomtrp
- Show call recorders as calendar event participants ([#23380](https://github.com/twentyhq/twenty/pull/23380)) by @martmull
- Include root cause errors in workspace migration runner exception message ([#23416](https://github.com/twentyhq/twenty/pull/23416)) by @prastoin
- Take openRecordIn from the view in scope instead of a global atom ([#23422](https://github.com/twentyhq/twenty/pull/23422)) by @FelixMalfait
- Make record chips open records natively on touch devices ([#23424](https://github.com/twentyhq/twenty/pull/23424)) by @FelixMalfait
- Docs update ([#23429](https://github.com/twentyhq/twenty/pull/23429)) by @BOHEUS
- Auto-start the workspace setup chat with a data model proposal ([#23437](https://github.com/twentyhq/twenty/pull/23437)) by @bosiraphael
- Keep email participant avatar colors consistent ([#23444](https://github.com/twentyhq/twenty/pull/23444)) by @Weiko
- Add calendar date field submenu with grouped field options ([#23445](https://github.com/twentyhq/twenty/pull/23445)) by @Weiko
- Hide the command menu button while the mobile side panel is open ([#23471](https://github.com/twentyhq/twenty/pull/23471)) by @FelixMalfait
- PDF upload fix ([#23473](https://github.com/twentyhq/twenty/pull/23473)) by @BOHEUS
- Open records on a full page instead of a side panel on mobile ([#23474](https://github.com/twentyhq/twenty/pull/23474)) by @FelixMalfait
- Dashboard doc fix ([#23475](https://github.com/twentyhq/twenty/pull/23475)) by @BOHEUS
- Disable double-tap zoom while keeping pinch zoom ([#23476](https://github.com/twentyhq/twenty/pull/23476)) by @FelixMalfait
- `[Upgrade]` Stop command gracefully on SIGINT/SIGTERM ([#23481](https://github.com/twentyhq/twenty/pull/23481)) by @prastoin
- Resolve route-trigger workspace from bearer token on bare hosts ([#23490](https://github.com/twentyhq/twenty/pull/23490)) by @ehconitin
- Stop building the Campaigns navigation menu item ([#23493](https://github.com/twentyhq/twenty/pull/23493)) by @FelixMalfait
- Restore the Figma halftone shapes and calm the welcome animation ([#23495](https://github.com/twentyhq/twenty/pull/23495)) by @bosiraphael
- Align campaign view column positions with the standard layout ([#23496](https://github.com/twentyhq/twenty/pull/23496)) by @FelixMalfait
- `[Upgrade]` Add a detached-run wrapper for the `upgrade` command ([#23497](https://github.com/twentyhq/twenty/pull/23497)) by @prastoin
- System view tooling explicit params key naming ([#23506](https://github.com/twentyhq/twenty/pull/23506)) by @prastoin
- Fix clipped New chat button label in localized navigation drawer ([#23511](https://github.com/twentyhq/twenty/pull/23511)) by @thomtrp
- Make onboarding cards contrast with the page background ([#23516](https://github.com/twentyhq/twenty/pull/23516)) by @bosiraphael
- Install pre-installed apps in a dedicated job after the workspace upgrade cursor is written ([#23517](https://github.com/twentyhq/twenty/pull/23517)) by @martmull
- Move settings tabs below page headers ([#23519](https://github.com/twentyhq/twenty/pull/23519)) by @Bonapara
- Pin last-contact to twenty &gt;=2.26.0 ([#23520](https://github.com/twentyhq/twenty/pull/23520)) by @prastoin
- Prevent overlapping workspace cleanup executions ([#23522](https://github.com/twentyhq/twenty/pull/23522)) by @Weiko
- Switch call recorder post-call transcription to Gladia with code switching ([#23532](https://github.com/twentyhq/twenty/pull/23532)) by @ehconitin
- Refresh billing state after ending trial period ([#23534](https://github.com/twentyhq/twenty/pull/23534)) by @FelixMalfait
- Keep fullWidth buttons at full width while loading ([#23536](https://github.com/twentyhq/twenty/pull/23536)) by @FelixMalfait
- Document current front component limitations ([#23549](https://github.com/twentyhq/twenty/pull/23549)) by @bosiraphael
- Let the instance upgrade version reach releases without instance commands ([#23552](https://github.com/twentyhq/twenty/pull/23552)) by @prastoin
- Add licensing section to legal FAQ ([#23560](https://github.com/twentyhq/twenty/pull/23560)) by @BOHEUS
- Hide app record-selection commands when all records are selected ([#23561](https://github.com/twentyhq/twenty/pull/23561)) by @bosiraphael
- Clarify application licensing and add trademark policy ([#23564](https://github.com/twentyhq/twenty/pull/23564)) by @FelixMalfait
- Revert the external link confirmation popup for front components ([#23567](https://github.com/twentyhq/twenty/pull/23567)) by @bosiraphael
- Compute last contact on relationship changes in last-contact app ([#23569](https://github.com/twentyhq/twenty/pull/23569)) by @martmull
- Add application job enqueue limits guard on all message queue drivers ([#23570](https://github.com/twentyhq/twenty/pull/23570)) by @martmull
- Display object, field and view links as chips in the AI chat ([#23573](https://github.com/twentyhq/twenty/pull/23573)) by @bosiraphael
- Optimize upgrade status gauges with count-only queries ([#23574](https://github.com/twentyhq/twenty/pull/23574)) by @Weiko
- Delete DESIGN.md ([#23576](https://github.com/twentyhq/twenty/pull/23576)) by @FelixMalfait
- Delete PRODUCT.md ([#23577](https://github.com/twentyhq/twenty/pull/23577)) by @FelixMalfait
- Throttle local cache expiration sweeps ([#23579](https://github.com/twentyhq/twenty/pull/23579)) by @Weiko
- Add connected account handle/provider index ([#23580](https://github.com/twentyhq/twenty/pull/23580)) by @Weiko
- Create INDEX view fields visible on field creation ([#23585](https://github.com/twentyhq/twenty/pull/23585)) by @prastoin
- Add Enterprise plan and competitor pricing comparison pages ([#23588](https://github.com/twentyhq/twenty/pull/23588)) by @FelixMalfait
- Maintain INDEX view system side effects on deactivated views ([#23590](https://github.com/twentyhq/twenty/pull/23590)) by @prastoin
- Cache metadata lookups during ORM result formatting ([#23593](https://github.com/twentyhq/twenty/pull/23593)) by @Weiko

## 🐛 Bug fixes

- fix(page-layout): render standalone rich text widget on record pages ([#23435](https://github.com/twentyhq/twenty/pull/23435)) by @thomtrp
- fix(workflow): rename the trigger step through the dedicated mutation ([#23450](https://github.com/twentyhq/twenty/pull/23450)) by @thomtrp
- fix: Decrypt encrypted front component variables ([#23494](https://github.com/twentyhq/twenty/pull/23494)) by @remihuigen
- fix(server): stop the global catch-all filter from shadowing typed GraphQL exception filters ([#23508](https://github.com/twentyhq/twenty/pull/23508)) by @thomtrp
- fix(workflow): use as draft with an existing draft and cross-object record page filters ([#23524](https://github.com/twentyhq/twenty/pull/23524)) by @thomtrp

## 🔧 Developer & API

- Use client SDK /s dispatch for call-recorder own-route posts ([#23558](https://github.com/twentyhq/twenty/pull/23558)) by @ehconitin

<details>
<summary>🏗️ Internal changes (3)</summary>

- test(workflow): cover the workflow core mirror end to end ([#23434](https://github.com/twentyhq/twenty/pull/23434)) by @thomtrp
- ci(pr-review): label-only manual trigger, thin dispatcher ([#23449](https://github.com/twentyhq/twenty/pull/23449)) by @charlesBochet
- docs: state v1.23 as prerequisite for cross-version upgrades ([#23575](https://github.com/twentyhq/twenty/pull/23575)) by @prastoin

</details>

## 🎉 New contributors

- @remihuigen made their first contribution in https://github.com/twentyhq/twenty/pull/23494

<details>
<summary>Full changelog (93 PRs)</summary>

- feat: Slack conversational assistant ([#22984](https://github.com/twentyhq/twenty/pull/22984)) by @abdulrahmancodes
- [BREAKING-CHANGE] Centralize system `View` `viewField` side effect ([#23081](https://github.com/twentyhq/twenty/pull/23081)) by @prastoin
- Mirror host element geometry into front component workers ([#23264](https://github.com/twentyhq/twenty/pull/23264)) by @bosiraphael
- Restore soft-deleted junction record when re-adding a junction relation ([#23371](https://github.com/twentyhq/twenty/pull/23371)) by @thomtrp
- Show call recorders as calendar event participants ([#23380](https://github.com/twentyhq/twenty/pull/23380)) by @martmull
- [breaking-change] fix(server): return runAgent execution failures as result errors ([#23390](https://github.com/twentyhq/twenty/pull/23390)) by @abdulrahmancodes
- feat(workflow): read workflow version content from core in the engine, behind a flag ([#23403](https://github.com/twentyhq/twenty/pull/23403)) by @thomtrp
- feat(front): preview highlighted record in the search command bar ([#23413](https://github.com/twentyhq/twenty/pull/23413)) by @FelixMalfait
- Include root cause errors in workspace migration runner exception message ([#23416](https://github.com/twentyhq/twenty/pull/23416)) by @prastoin
- Take openRecordIn from the view in scope instead of a global atom ([#23422](https://github.com/twentyhq/twenty/pull/23422)) by @FelixMalfait
- Make record chips open records natively on touch devices ([#23424](https://github.com/twentyhq/twenty/pull/23424)) by @FelixMalfait
- Docs update ([#23429](https://github.com/twentyhq/twenty/pull/23429)) by @BOHEUS
- test(workflow): cover the workflow core mirror end to end ([#23434](https://github.com/twentyhq/twenty/pull/23434)) by @thomtrp
- fix(page-layout): render standalone rich text widget on record pages ([#23435](https://github.com/twentyhq/twenty/pull/23435)) by @thomtrp
- Auto-start the workspace setup chat with a data model proposal ([#23437](https://github.com/twentyhq/twenty/pull/23437)) by @bosiraphael
- Keep email participant avatar colors consistent ([#23444](https://github.com/twentyhq/twenty/pull/23444)) by @Weiko
- Add calendar date field submenu with grouped field options ([#23445](https://github.com/twentyhq/twenty/pull/23445)) by @Weiko
- feat(workflow): pin concrete model on AI agent node creation and exclude interactive tools from workflow runs ([#23447](https://github.com/twentyhq/twenty/pull/23447)) by @etiennejouan
- ci(pr-review): label-only manual trigger, thin dispatcher ([#23449](https://github.com/twentyhq/twenty/pull/23449)) by @charlesBochet
- fix(workflow): rename the trigger step through the dedicated mutation ([#23450](https://github.com/twentyhq/twenty/pull/23450)) by @thomtrp
- chore: bump version to 2.26.0 ([#23451](https://github.com/twentyhq/twenty/pull/23451)) by @twenty-pr
- i18n - docs translations ([#23452](https://github.com/twentyhq/twenty/pull/23452)) by @github-actions
- feat(ai-agent): lazy tool loading for the open-ended runAgent path ([#23454](https://github.com/twentyhq/twenty/pull/23454)) by @abdulrahmancodes
- i18n - docs translations ([#23455](https://github.com/twentyhq/twenty/pull/23455)) by @github-actions
- i18n - translations ([#23459](https://github.com/twentyhq/twenty/pull/23459)) by @github-actions
- i18n - docs translations ([#23460](https://github.com/twentyhq/twenty/pull/23460)) by @github-actions
- i18n - translations ([#23463](https://github.com/twentyhq/twenty/pull/23463)) by @github-actions
- i18n - docs translations ([#23466](https://github.com/twentyhq/twenty/pull/23466)) by @github-actions
- Hide the command menu button while the mobile side panel is open ([#23471](https://github.com/twentyhq/twenty/pull/23471)) by @FelixMalfait
- PDF upload fix ([#23473](https://github.com/twentyhq/twenty/pull/23473)) by @BOHEUS
- Open records on a full page instead of a side panel on mobile ([#23474](https://github.com/twentyhq/twenty/pull/23474)) by @FelixMalfait
- Dashboard doc fix ([#23475](https://github.com/twentyhq/twenty/pull/23475)) by @BOHEUS
- Disable double-tap zoom while keeping pinch zoom ([#23476](https://github.com/twentyhq/twenty/pull/23476)) by @FelixMalfait
- [BREAKING-CHANGE] Add NOT_RECORDED call recording status ([#23478](https://github.com/twentyhq/twenty/pull/23478)) by @ehconitin
- feat(ai-tool): resolve and default icons in AI metadata tools ([#23480](https://github.com/twentyhq/twenty/pull/23480)) by @etiennejouan
- `[Upgrade]` Stop command gracefully on SIGINT/SIGTERM ([#23481](https://github.com/twentyhq/twenty/pull/23481)) by @prastoin
- i18n - docs translations ([#23483](https://github.com/twentyhq/twenty/pull/23483)) by @github-actions
- Resolve route-trigger workspace from bearer token on bare hosts ([#23490](https://github.com/twentyhq/twenty/pull/23490)) by @ehconitin
- Stop building the Campaigns navigation menu item ([#23493](https://github.com/twentyhq/twenty/pull/23493)) by @FelixMalfait
- fix: Decrypt encrypted front component variables ([#23494](https://github.com/twentyhq/twenty/pull/23494)) by @remihuigen
- Restore the Figma halftone shapes and calm the welcome animation ([#23495](https://github.com/twentyhq/twenty/pull/23495)) by @bosiraphael
- Align campaign view column positions with the standard layout ([#23496](https://github.com/twentyhq/twenty/pull/23496)) by @FelixMalfait
- `[Upgrade]` Add a detached-run wrapper for the `upgrade` command ([#23497](https://github.com/twentyhq/twenty/pull/23497)) by @prastoin
- feat(workflow): make the flow atom authoritative for version content, read core behind a flag ([#23499](https://github.com/twentyhq/twenty/pull/23499)) by @thomtrp
- feat(server): attach app attributes to application rate-limited metric ([#23500](https://github.com/twentyhq/twenty/pull/23500)) by @prastoin
- feat(dashboard): extend number format option to bar, line and pie charts ([#23505](https://github.com/twentyhq/twenty/pull/23505)) by @ehconitin
- System view tooling explicit params key naming ([#23506](https://github.com/twentyhq/twenty/pull/23506)) by @prastoin
- i18n - translations ([#23507](https://github.com/twentyhq/twenty/pull/23507)) by @github-actions
- fix(server): stop the global catch-all filter from shadowing typed GraphQL exception filters ([#23508](https://github.com/twentyhq/twenty/pull/23508)) by @thomtrp
- i18n - translations ([#23509](https://github.com/twentyhq/twenty/pull/23509)) by @github-actions
- Fix clipped New chat button label in localized navigation drawer ([#23511](https://github.com/twentyhq/twenty/pull/23511)) by @thomtrp
- i18n - translations ([#23513](https://github.com/twentyhq/twenty/pull/23513)) by @github-actions
- i18n - docs translations ([#23515](https://github.com/twentyhq/twenty/pull/23515)) by @github-actions
- Make onboarding cards contrast with the page background ([#23516](https://github.com/twentyhq/twenty/pull/23516)) by @bosiraphael
- Install pre-installed apps in a dedicated job after the workspace upgrade cursor is written ([#23517](https://github.com/twentyhq/twenty/pull/23517)) by @martmull
- Move settings tabs below page headers ([#23519](https://github.com/twentyhq/twenty/pull/23519)) by @Bonapara
- Pin last-contact to twenty &gt;=2.26.0 ([#23520](https://github.com/twentyhq/twenty/pull/23520)) by @prastoin
- Prevent overlapping workspace cleanup executions ([#23522](https://github.com/twentyhq/twenty/pull/23522)) by @Weiko
- i18n - docs translations ([#23523](https://github.com/twentyhq/twenty/pull/23523)) by @github-actions
- fix(workflow): use as draft with an existing draft and cross-object record page filters ([#23524](https://github.com/twentyhq/twenty/pull/23524)) by @thomtrp
- i18n - translations ([#23525](https://github.com/twentyhq/twenty/pull/23525)) by @github-actions
- feat(apps): add enqueueJob to run a logic function on the workers ([#23527](https://github.com/twentyhq/twenty/pull/23527)) by @martmull
- Switch call recorder post-call transcription to Gladia with code switching ([#23532](https://github.com/twentyhq/twenty/pull/23532)) by @ehconitin
- Refresh billing state after ending trial period ([#23534](https://github.com/twentyhq/twenty/pull/23534)) by @FelixMalfait
- Keep fullWidth buttons at full width while loading ([#23536](https://github.com/twentyhq/twenty/pull/23536)) by @FelixMalfait
- i18n - translations ([#23547](https://github.com/twentyhq/twenty/pull/23547)) by @github-actions
- Document current front component limitations ([#23549](https://github.com/twentyhq/twenty/pull/23549)) by @bosiraphael
- Let the instance upgrade version reach releases without instance commands ([#23552](https://github.com/twentyhq/twenty/pull/23552)) by @prastoin
- i18n - docs translations ([#23555](https://github.com/twentyhq/twenty/pull/23555)) by @github-actions
- Use client SDK /s dispatch for call-recorder own-route posts ([#23558](https://github.com/twentyhq/twenty/pull/23558)) by @ehconitin
- i18n - docs translations ([#23559](https://github.com/twentyhq/twenty/pull/23559)) by @github-actions
- Add licensing section to legal FAQ ([#23560](https://github.com/twentyhq/twenty/pull/23560)) by @BOHEUS
- Hide app record-selection commands when all records are selected ([#23561](https://github.com/twentyhq/twenty/pull/23561)) by @bosiraphael
- i18n - translations ([#23563](https://github.com/twentyhq/twenty/pull/23563)) by @github-actions
- Clarify application licensing and add trademark policy ([#23564](https://github.com/twentyhq/twenty/pull/23564)) by @FelixMalfait
- Revert the external link confirmation popup for front components ([#23567](https://github.com/twentyhq/twenty/pull/23567)) by @bosiraphael
- Compute last contact on relationship changes in last-contact app ([#23569](https://github.com/twentyhq/twenty/pull/23569)) by @martmull
- Add application job enqueue limits guard on all message queue drivers ([#23570](https://github.com/twentyhq/twenty/pull/23570)) by @martmull
- i18n - translations ([#23572](https://github.com/twentyhq/twenty/pull/23572)) by @github-actions
- Display object, field and view links as chips in the AI chat ([#23573](https://github.com/twentyhq/twenty/pull/23573)) by @bosiraphael
- Optimize upgrade status gauges with count-only queries ([#23574](https://github.com/twentyhq/twenty/pull/23574)) by @Weiko
- docs: state v1.23 as prerequisite for cross-version upgrades ([#23575](https://github.com/twentyhq/twenty/pull/23575)) by @prastoin
- Delete DESIGN.md ([#23576](https://github.com/twentyhq/twenty/pull/23576)) by @FelixMalfait
- Delete PRODUCT.md ([#23577](https://github.com/twentyhq/twenty/pull/23577)) by @FelixMalfait
- Throttle local cache expiration sweeps ([#23579](https://github.com/twentyhq/twenty/pull/23579)) by @Weiko
- Add connected account handle/provider index ([#23580](https://github.com/twentyhq/twenty/pull/23580)) by @Weiko
- Create INDEX view fields visible on field creation ([#23585](https://github.com/twentyhq/twenty/pull/23585)) by @prastoin
- i18n - translations ([#23587](https://github.com/twentyhq/twenty/pull/23587)) by @github-actions
- Add Enterprise plan and competitor pricing comparison pages ([#23588](https://github.com/twentyhq/twenty/pull/23588)) by @FelixMalfait
- i18n - docs translations ([#23589](https://github.com/twentyhq/twenty/pull/23589)) by @github-actions
- Maintain INDEX view system side effects on deactivated views ([#23590](https://github.com/twentyhq/twenty/pull/23590)) by @prastoin
- Cache metadata lookups during ORM result formatting ([#23593](https://github.com/twentyhq/twenty/pull/23593)) by @Weiko
- i18n - translations ([#23598](https://github.com/twentyhq/twenty/pull/23598)) by @github-actions

</details>

**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.25.0...twenty/v2.26.0