Component: twenty · Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-05.
Breaking-change evidence from the source
⚠️ Breaking changes - [BREAKING_CHANGE] Let AI workflow steps run from their own config and permission scope ([#29368](https://github.com/twentyhq/twenty/pull/29368)) by @FelixMalfait
Twenty v2.56.0 introduces significant structural changes to AI workflow execution, permissions management, and API security. Users must account for breaking adjustments to AI configuration scopes and backend permission policies.
Engineers must update custom AI workflow integrations as they now require independent configuration and specific permission scopes.
📊 Product & Engineering Leads
New capabilities include advanced text filtering, billing management features, and enhanced inbox/conversations UX, supporting more complex CRM workflows.
⚙️ DevOps & Security
CI pipelines should be updated to handle the persistent Nx cache and the new requirements for Lambda logic function drivers.
⚠️ Breaking Changes & Deprecations (1)
⚠️ Breaking changes - [BREAKING_CHANGE] Let AI workflow steps run from their own config and permission scope ([#29368](https://github.com/twentyhq/twenty/pull/29368)) by @FelixMalfait
✨ New Features & Capabilities (4)
Added case-sensitive IS/IS_NOT operands for TEXT fields
Introduced billing arrangement entity with overlapping insertion validation
Added user-scoped connection providers for Microsoft Teams and Fathom
Implemented onboarding and getting-started completion states
⚡ Performance & Enhancements (4)
Refactored AI workflow steps to operate under specific permission scopes
Centralized permission checks via AccessPolicyGuard across REST and GraphQL modules
Renamed Email record tab to Messages with improved channel visibility
Optimized LinkedIn app synchronization and history imports
🔧 Bug Fixes & Patches (4)
Resolved duplicate AI component previews
Fixed incorrect field permission specifications
Fixed caching eviction for renamed or deleted fields
Addressed various security dependencies including follow-redirects and happy-dom
📄 View Raw Release Notes (Original Developer Log)
<!-- generated-release-notes v1 -->
## ⚠️ Breaking changes
- [BREAKING_CHANGE] Let AI workflow steps run from their own config and permission scope ([#29368](https://github.com/twentyhq/twenty/pull/29368)) by @FelixMalfait
- chore(security): bump follow-redirects to 1.16.2 in the app lockfiles ([#29523](https://github.com/twentyhq/twenty/pull/29523)) by @mabdullahabaid
- chore(security): bump follow-redirects to 1.16.2 in the root and application dependency lockfiles ([#29528](https://github.com/twentyhq/twenty/pull/29528)) by @mabdullahabaid
- Keep the Nx cache in the workspace on CI ([#29587](https://github.com/twentyhq/twenty/pull/29587)) by @charlesBochet
- chore(security): bump happy-dom to 20.14.6 in the root lockfile ([#29588](https://github.com/twentyhq/twenty/pull/29588)) by @mabdullahabaid
## ✨ New features
- feat(filter): add case-sensitive IS/IS_NOT operands for TEXT fields ([#29201](https://github.com/twentyhq/twenty/pull/29201)) by @etiennejouan
- feat(billing): add billing arrangement entity and validation ([#29321](https://github.com/twentyhq/twenty/pull/29321)) by @etiennejouan
- feat(billing): reject overlapping billing arrangements on insert ([#29550](https://github.com/twentyhq/twenty/pull/29550)) by @etiennejouan
- feat(front): pick the sending account from the Messages widget + button ([#29562](https://github.com/twentyhq/twenty/pull/29562)) by @martmull
- feat(getting-started): require a payment method to hide Getting started for good ([#29607](https://github.com/twentyhq/twenty/pull/29607)) by @etiennejouan
- feat(getting-started): add a completed state to onboarding cards ([#29671](https://github.com/twentyhq/twenty/pull/29671)) by @etiennejouan
- feat(onboarding): show the invite step only with invite suggestions ([#29684](https://github.com/twentyhq/twenty/pull/29684)) by @etiennejouan
- feat(getting-started): illustrate the mailbox card with the onboarding contacts preview ([#29763](https://github.com/twentyhq/twenty/pull/29763)) by @etiennejouan
## 💅 Improvements & UX
- Choose recipients for new inbox chats ([#28925](https://github.com/twentyhq/twenty/pull/28925)) by @bosiraphael
- Apply Ada participation rules ([#28939](https://github.com/twentyhq/twenty/pull/28939)) by @bosiraphael
- Let apps embed websites with microphone and camera access ([#28944](https://github.com/twentyhq/twenty/pull/28944)) by @bosiraphael
- Choose Ada replies from workspace modes ([#29232](https://github.com/twentyhq/twenty/pull/29232)) by @bosiraphael
- Recheck Ada reply rules before running a turn ([#29233](https://github.com/twentyhq/twenty/pull/29233)) by @bosiraphael
- Remove the record creation form feature flag ([#29246](https://github.com/twentyhq/twenty/pull/29246)) by @Weiko
- Ensure one direct message thread per member pair ([#29286](https://github.com/twentyhq/twenty/pull/29286)) by @bosiraphael
- Mount AI Overview behind the inbox flag ([#29322](https://github.com/twentyhq/twenty/pull/29322)) by @bosiraphael
- Expose the channel of each timeline thread ([#29324](https://github.com/twentyhq/twenty/pull/29324)) by @martmull
- Show the channel of each conversation in the messages list ([#29325](https://github.com/twentyhq/twenty/pull/29325)) by @martmull
- Render app conversations as chat bubbles ([#29326](https://github.com/twentyhq/twenty/pull/29326)) by @martmull
- Reply to app conversations from the thread ([#29327](https://github.com/twentyhq/twenty/pull/29327)) by @martmull
- Rename the Emails record tab to Messages ([#29343](https://github.com/twentyhq/twenty/pull/29343)) by @martmull
- Bundle tabler icons into twenty-ui's individual build ([#29384](https://github.com/twentyhq/twenty/pull/29384)) by @FelixMalfait
- Add user-scoped Microsoft Teams connection provider ([#29427](https://github.com/twentyhq/twenty/pull/29427)) by @ehconitin
- i18n - translations ([#29430](https://github.com/twentyhq/twenty/pull/29430)) by @twenty-pr
- Add user-scoped Fathom connection provider ([#29433](https://github.com/twentyhq/twenty/pull/29433)) by @ehconitin
- Run app disconnect hooks when a removed member's connections are transferred ([#29435](https://github.com/twentyhq/twenty/pull/29435)) by @ehconitin
- Resolve numeric twenty-ui theme tokens when CSS variables can't be read ([#29436](https://github.com/twentyhq/twenty/pull/29436)) by @Weiko
- Name permissions principals by role: main, limiting and app ([#29452](https://github.com/twentyhq/twenty/pull/29452)) by @charlesBochet
- Warn before a field change turns off validation rules ([#29458](https://github.com/twentyhq/twenty/pull/29458)) by @ijreilly
- Add an application role target kind ([#29463](https://github.com/twentyhq/twenty/pull/29463)) by @prastoin
- i18n - docs translations ([#29465](https://github.com/twentyhq/twenty/pull/29465)) by @twenty-pr
- Ship code interpreter sandbox scripts and let E2B sandboxes use a custom template ([#29466](https://github.com/twentyhq/twenty/pull/29466)) by @etiennejouan
- Fix duplicate AI component previews and empty sample data ([#29471](https://github.com/twentyhq/twenty/pull/29471)) by @Weiko
- Discriminate permissions principals by type ([#29475](https://github.com/twentyhq/twenty/pull/29475)) by @charlesBochet
- Connect inbox behavior settings ([#29476](https://github.com/twentyhq/twenty/pull/29476)) by @bosiraphael
- i18n - docs translations ([#29479](https://github.com/twentyhq/twenty/pull/29479)) by @twenty-pr
- Derive repository permissions from the auth context ([#29483](https://github.com/twentyhq/twenty/pull/29483)) by @charlesBochet
- Use provider names on built-in connect cards in app preferences ([#29496](https://github.com/twentyhq/twenty/pull/29496)) by @ehconitin
- i18n - translations ([#29497](https://github.com/twentyhq/twenty/pull/29497)) by @twenty-pr
- Call recorder: add recorder styles for the bot camera tile ([#29498](https://github.com/twentyhq/twenty/pull/29498)) by @ehconitin
- i18n - translations ([#29500](https://github.com/twentyhq/twenty/pull/29500)) by @twenty-pr
- i18n - docs translations ([#29505](https://github.com/twentyhq/twenty/pull/29505)) by @twenty-pr
- Fix AI step QA findings after the inline-config rework ([#29506](https://github.com/twentyhq/twenty/pull/29506)) by @FelixMalfait
- LinkedIn app: cap the conversations a history sync imports ([#29507](https://github.com/twentyhq/twenty/pull/29507)) by @martmull
- LinkedIn app: skip profile lookups that cannot change the outcome ([#29509](https://github.com/twentyhq/twenty/pull/29509)) by @martmull
- Hide the unread divider above the first message ([#29511](https://github.com/twentyhq/twenty/pull/29511)) by @bosiraphael
- Derive permission principals straight from the auth context ([#29514](https://github.com/twentyhq/twenty/pull/29514)) by @charlesBochet
- AI: add effort levels to Claude Haiku 5.5, Sonnet 5.5 and Opus 5.5 ([#29515](https://github.com/twentyhq/twenty/pull/29515)) by @AryaKesharwani
- Publish the affiliate program terms and link them from the application form ([#29520](https://github.com/twentyhq/twenty/pull/29520)) by @StephanieJoly4
- Keep zoom inside full-height front component widgets ([#29521](https://github.com/twentyhq/twenty/pull/29521)) by @bosiraphael
- Require a layer bucket for the Lambda logic function driver ([#29522](https://github.com/twentyhq/twenty/pull/29522)) by @etiennejouan
- i18n - translations ([#29524](https://github.com/twentyhq/twenty/pull/29524)) by @twenty-pr
- LinkedIn app: reply to conversations from Twenty through Unipile ([#29526](https://github.com/twentyhq/twenty/pull/29526)) by @martmull
- Remove viaApplication from the user auth context ([#29527](https://github.com/twentyhq/twenty/pull/29527)) by @charlesBochet
- Simplify permissions utils: one event admission path, share keys in sharing ([#29529](https://github.com/twentyhq/twenty/pull/29529)) by @charlesBochet
- i18n - website translations ([#29530](https://github.com/twentyhq/twenty/pull/29530)) by @twenty-pr
- i18n - translations ([#29531](https://github.com/twentyhq/twenty/pull/29531)) by @twenty-pr
- Require the affiliate main channel URL ([#29532](https://github.com/twentyhq/twenty/pull/29532)) by @StephanieJoly4
- Name the AI run scope AiRunPermissionScope ([#29534](https://github.com/twentyhq/twenty/pull/29534)) by @charlesBochet
- i18n - website translations ([#29535](https://github.com/twentyhq/twenty/pull/29535)) by @twenty-pr
- Call recorder: fill the workspace logo plate ([#29536](https://github.com/twentyhq/twenty/pull/29536)) by @ehconitin
- Remove the IS_PRIVATE_RECORD_ENABLED feature flag ([#29538](https://github.com/twentyhq/twenty/pull/29538)) by @charlesBochet
- i18n - translations ([#29539](https://github.com/twentyhq/twenty/pull/29539)) by @twenty-pr
- Lock property edits on system-managed fields in field settings ([#29540](https://github.com/twentyhq/twenty/pull/29540)) by @charlesBochet
- i18n - docs translations ([#29542](https://github.com/twentyhq/twenty/pull/29542)) by @twenty-pr
- Remove IS_WORKER_FAIRNESS_ENABLED, worker fairness is always on ([#29543](https://github.com/twentyhq/twenty/pull/29543)) by @martmull
- Guard metadata-modules endpoints with AccessPolicyGuard ([#29547](https://github.com/twentyhq/twenty/pull/29547)) by @prastoin
- CODE steps own their source instead of a hidden logic function ([#29548](https://github.com/twentyhq/twenty/pull/29548)) by @FelixMalfait
- i18n - translations ([#29549](https://github.com/twentyhq/twenty/pull/29549)) by @twenty-pr
- Use one side panel footer style everywhere ([#29551](https://github.com/twentyhq/twenty/pull/29551)) by @FelixMalfait
- Simplify AI model selection ([#29553](https://github.com/twentyhq/twenty/pull/29553)) by @bosiraphael
- Add a direct message sharing TODO and use an enum for the conversation type ([#29554](https://github.com/twentyhq/twenty/pull/29554)) by @bosiraphael
- Unify side panel footers ([#29559](https://github.com/twentyhq/twenty/pull/29559)) by @bosiraphael
- LinkedIn app: drop reply code comments, clarify the replies README note ([#29561](https://github.com/twentyhq/twenty/pull/29561)) by @martmull
- Derive repository object permissions from the permissions principal ([#29563](https://github.com/twentyhq/twenty/pull/29563)) by @charlesBochet
- i18n - translations ([#29564](https://github.com/twentyhq/twenty/pull/29564)) by @twenty-pr
- Add NATIVE_PAGE navigation menu items and a /workflows route ([#29567](https://github.com/twentyhq/twenty/pull/29567)) by @FelixMalfait
- Show the junction toggle for custom junction objects ([#29570](https://github.com/twentyhq/twenty/pull/29570)) by @charlesBochet
- Repair application dependency checksums that do not match the stored files ([#29571](https://github.com/twentyhq/twenty/pull/29571)) by @prastoin
- Add @DefineTool tools to the endpoint permission snapshot ([#29573](https://github.com/twentyhq/twenty/pull/29573)) by @prastoin
- Rewrite inbox channel grants without raw SQL ([#29582](https://github.com/twentyhq/twenty/pull/29582)) by @bosiraphael
- Guard core-modules endpoints with AccessPolicyGuard ([#29586](https://github.com/twentyhq/twenty/pull/29586)) by @prastoin
- Resolve permissions principals through one service ([#29591](https://github.com/twentyhq/twenty/pull/29591)) by @charlesBochet
- Evict cached record queries when a field is renamed or deleted ([#29593](https://github.com/twentyhq/twenty/pull/29593)) by @charlesBochet
- Run server integration tests on 24 shards and split the two slowest chat specs ([#29594](https://github.com/twentyhq/twenty/pull/29594)) by @charlesBochet
- Thin out line chart data labels that would overlap ([#29595](https://github.com/twentyhq/twenty/pull/29595)) by @FelixMalfait
- i18n - docs translations ([#29596](https://github.com/twentyhq/twenty/pull/29596)) by @twenty-pr
- Name the role grant on every record the allRecords grant path ([#29602](https://github.com/twentyhq/twenty/pull/29602)) by @charlesBochet
- Stop chat specs from waiting out every snooze between tests ([#29603](https://github.com/twentyhq/twenty/pull/29603)) by @charlesBochet
- Replace the field permission specs with one spec on both APIs ([#29606](https://github.com/twentyhq/twenty/pull/29606)) by @charlesBochet
- Add operations to row level permission predicate groups ([#29611](https://github.com/twentyhq/twenty/pull/29611)) by @charlesBochet
- Remove Onboarding Packs mentions from pricing and FAQ ([#29613](https://github.com/twentyhq/twenty/pull/29613)) by @ijreilly
- Translate component labels with useLingui so they follow locale changes ([#29614](https://github.com/twentyhq/twenty/pull/29614)) by @charlesBochet
- Affiliate program: partner code in billing, clearer attribution rules, country list on the form ([#29615](https://github.com/twentyhq/twenty/pull/29615)) by @StephanieJoly4
- Fetch only what changed-files needs in discover-apps ([#29617](https://github.com/twentyhq/twenty/pull/29617)) by @FelixMalfait
- Delete timeline rows of destroyed messages and calendar events ([#29619](https://github.com/twentyhq/twenty/pull/29619)) by @neo773
- Rename CoreObjectNameSingular to StandardObjectNameSingular ([#29623](https://github.com/twentyhq/twenty/pull/29623)) by @FelixMalfait
- Compute role permissions as all records and row level grants ([#29627](https://github.com/twentyhq/twenty/pull/29627)) by @charlesBochet
- i18n - translations ([#29637](https://github.com/twentyhq/twenty/pull/29637)) by @twenty-pr
- i18n - website translations ([#29641](https://github.com/twentyhq/twenty/pull/29641)) by @twenty-pr
- i18n - translations ([#29642](https://github.com/twentyhq/twenty/pull/29642)) by @twenty-pr
- List MCP tools directly by default ([#29656](https://github.com/twentyhq/twenty/pull/29656)) by @FelixMalfait
- i18n - website translations ([#29657](https://github.com/twentyhq/twenty/pull/29657)) by @twenty-pr
- Make inbox notification badge red ([#29660](https://github.com/twentyhq/twenty/pull/29660)) by @bosiraphael
- Guard src/modules endpoints with AccessPolicyGuard and delete the legacy guards ([#29661](https://github.com/twentyhq/twenty/pull/29661)) by @prastoin
- Add required fields for PDL matches ([#29662](https://github.com/twentyhq/twenty/pull/29662)) by @bosiraphael
- i18n - translations ([#29664](https://github.com/twentyhq/twenty/pull/29664)) by @twenty-pr
- Allow clearing IMAP and SMTP port inputs ([#29665](https://github.com/twentyhq/twenty/pull/29665)) by @neo773
- Center reference chips in AI chat ([#29672](https://github.com/twentyhq/twenty/pull/29672)) by @bosiraphael
- i18n - docs translations ([#29673](https://github.com/twentyhq/twenty/pull/29673)) by @twenty-pr
- Add the field metadata option syncable entity ([#29674](https://github.com/twentyhq/twenty/pull/29674)) by @FelixMalfait
- Add the shared assistant avatar renderer ([#29677](https://github.com/twentyhq/twenty/pull/29677)) by @bosiraphael
- Read records permissions directly on the server ([#29678](https://github.com/twentyhq/twenty/pull/29678)) by @charlesBochet
- Persist workspace assistant identity ([#29679](https://github.com/twentyhq/twenty/pull/29679)) by @bosiraphael
- Move a board card back when the server rejects its update ([#29682](https://github.com/twentyhq/twenty/pull/29682)) by @FelixMalfait
- Expose the current user's records permissions in the nested shape ([#29686](https://github.com/twentyhq/twenty/pull/29686)) by @charlesBochet
- Render workflow enum array inputs as a multiselect ([#29689](https://github.com/twentyhq/twenty/pull/29689)) by @bosiraphael
- Ask for the fields a validation rule needs instead of rejecting the update ([#29691](https://github.com/twentyhq/twenty/pull/29691)) by @FelixMalfait
- Require a workspace member on the campaign send path ([#29694](https://github.com/twentyhq/twenty/pull/29694)) by @prastoin
- i18n - translations ([#29697](https://github.com/twentyhq/twenty/pull/29697)) by @twenty-pr
- i18n - website translations ([#29698](https://github.com/twentyhq/twenty/pull/29698)) by @twenty-pr
- i18n - translations ([#29700](https://github.com/twentyhq/twenty/pull/29700)) by @twenty-pr
- Read the current user's records permissions in the nested shape on the front ([#29701](https://github.com/twentyhq/twenty/pull/29701)) by @charlesBochet
- i18n - translations ([#29705](https://github.com/twentyhq/twenty/pull/29705)) by @twenty-pr
- i18n - website translations ([#29706](https://github.com/twentyhq/twenty/pull/29706)) by @twenty-pr
- Ship the application role target command in 2.56 ([#29708](https://github.com/twentyhq/twenty/pull/29708)) by @charlesBochet
- i18n - docs translations ([#29709](https://github.com/twentyhq/twenty/pull/29709)) by @twenty-pr
- Ask permission questions through PermissionsService ([#29712](https://github.com/twentyhq/twenty/pull/29712)) by @charlesBochet
- i18n - translations ([#29714](https://github.com/twentyhq/twenty/pull/29714)) by @twenty-pr
- Hide select options a validation rule would reject ([#29716](https://github.com/twentyhq/twenty/pull/29716)) by @FelixMalfait
- Tighten security of contributor setup ([#29717](https://github.com/twentyhq/twenty/pull/29717)) by @BOHEUS
- Keep text input errors below the field ([#29721](https://github.com/twentyhq/twenty/pull/29721)) by @bosiraphael
- Remove as unknown casts from specs outside twenty-server ([#29722](https://github.com/twentyhq/twenty/pull/29722)) by @charlesBochet
- i18n - translations ([#29723](https://github.com/twentyhq/twenty/pull/29723)) by @twenty-pr
- Use inbox icon for Conversations record tab ([#29725](https://github.com/twentyhq/twenty/pull/29725)) by @martmull
- Animate assistant avatars ([#29726](https://github.com/twentyhq/twenty/pull/29726)) by @bosiraphael
- Build assistant personalization controls ([#29728](https://github.com/twentyhq/twenty/pull/29728)) by @bosiraphael
- i18n - docs translations ([#29730](https://github.com/twentyhq/twenty/pull/29730)) by @twenty-pr
- Keep the legacy current user object permissions as deprecated fields ([#29732](https://github.com/twentyhq/twenty/pull/29732)) by @charlesBochet
- i18n - translations ([#29734](https://github.com/twentyhq/twenty/pull/29734)) by @twenty-pr
- Read record permission data through record-permission-orm ([#29735](https://github.com/twentyhq/twenty/pull/29735)) by @charlesBochet
- Remove as unknown casts from server database specs ([#29736](https://github.com/twentyhq/twenty/pull/29736)) by @charlesBochet
- Remove as unknown casts from server core and metadata specs ([#29737](https://github.com/twentyhq/twenty/pull/29737)) by @charlesBochet
- Remove as unknown casts from the remaining server specs ([#29738](https://github.com/twentyhq/twenty/pull/29738)) by @charlesBochet
- Move the partner code to a hidden /settings/partner page ([#29739](https://github.com/twentyhq/twenty/pull/29739)) by @etiennejouan
- i18n - translations ([#29747](https://github.com/twentyhq/twenty/pull/29747)) by @twenty-pr
- Escape identifiers in filter where conditions ([#29749](https://github.com/twentyhq/twenty/pull/29749)) by @charlesBochet
- i18n - docs translations ([#29750](https://github.com/twentyhq/twenty/pull/29750)) by @twenty-pr
- Wait for records permissions before opening the metadata gate ([#29751](https://github.com/twentyhq/twenty/pull/29751)) by @charlesBochet
- Set ORGANIZER on CalDAV events so servers send invitations ([#29753](https://github.com/twentyhq/twenty/pull/29753)) by @neo773
- Fix duplicated CalDAV events created from Twenty ([#29754](https://github.com/twentyhq/twenty/pull/29754)) by @neo773
- Scope core workflow reads to the calling application ([#29755](https://github.com/twentyhq/twenty/pull/29755)) by @prastoin
- i18n - website translations ([#29756](https://github.com/twentyhq/twenty/pull/29756)) by @twenty-pr
- i18n - translations ([#29757](https://github.com/twentyhq/twenty/pull/29757)) by @twenty-pr
- i18n - website translations ([#29760](https://github.com/twentyhq/twenty/pull/29760)) by @twenty-pr
- i18n - translations ([#29766](https://github.com/twentyhq/twenty/pull/29766)) by @twenty-pr
## 🐛 Bug fixes
- fix(twenty-shared): reject two-digit years when parsing date-time strings ([#29176](https://github.com/twentyhq/twenty/pull/29176)) by @Abhishek-B-R
- fix(CommonAPI): cap GraphQL find-many page size at QUERY_MAX_RECORDS ([#29546](https://github.com/twentyhq/twenty/pull/29546)) by @etiennejouan
- fix(billing): set Organization monthly fallback price to $52 ([#29658](https://github.com/twentyhq/twenty/pull/29658)) by @etiennejouan
## 🔧 Developer & API
- Sync MCP server tool lists through the MCP SDK and cache them on the entity ([#28835](https://github.com/twentyhq/twenty/pull/28835)) by @abdulrahmancodes
- Make validation rules declarable in the app SDK ([#29283](https://github.com/twentyhq/twenty/pull/29283)) by @ijreilly
- Share access policies between GraphQL, REST and @DefineTool tools ([#29364](https://github.com/twentyhq/twenty/pull/29364)) by @prastoin
- Drain API HTTP requests before flushing recorders and closing Nest ([#29501](https://github.com/twentyhq/twenty/pull/29501)) by @FelixMalfait
- Bound the whole API shutdown when sockets escape HTTP tracking ([#29503](https://github.com/twentyhq/twenty/pull/29503)) by @FelixMalfait
- Write postcard content with ai.generate; mark /rest/ai/generate-text deprecated ([#29525](https://github.com/twentyhq/twenty/pull/29525)) by @FelixMalfait
- Return 403 for REST permission denials and rework the CRUD permission specs ([#29537](https://github.com/twentyhq/twenty/pull/29537)) by @charlesBochet
- Check view access in one place for GraphQL, REST and the view tools ([#29690](https://github.com/twentyhq/twenty/pull/29690)) by @prastoin
- Share the data model read policies between GraphQL, REST and tools ([#29692](https://github.com/twentyhq/twenty/pull/29692)) by @prastoin
- Share the agent access policies between GraphQL and the agent tools ([#29693](https://github.com/twentyhq/twenty/pull/29693)) by @prastoin
<details>
<summary>🏗️ Internal changes (2)</summary>
- docs: align app guides with current CLI behavior ([#29502](https://github.com/twentyhq/twenty/pull/29502)) by @Weiko
- chore(onboarding): remove the welcome animation ([#29680](https://github.com/twentyhq/twenty/pull/29680)) by @etiennejouan
</details>
## 🎉 New contributors
- @Abhishek-B-R made their first contribution in https://github.com/twentyhq/twenty/pull/29176
- @AryaKesharwani made their first contribution in https://github.com/twentyhq/twenty/pull/29515
<details>
<summary>Full changelog (177 PRs)</summary>
- Sync MCP server tool lists through the MCP SDK and cache them on the entity ([#28835](https://github.com/twentyhq/twenty/pull/28835)) by @abdulrahmancodes
- Choose recipients for new inbox chats ([#28925](https://github.com/twentyhq/twenty/pull/28925)) by @bosiraphael
- Apply Ada participation rules ([#28939](https://github.com/twentyhq/twenty/pull/28939)) by @bosiraphael
- Let apps embed websites with microphone and camera access ([#28944](https://github.com/twentyhq/twenty/pull/28944)) by @bosiraphael
- fix(twenty-shared): reject two-digit years when parsing date-time strings ([#29176](https://github.com/twentyhq/twenty/pull/29176)) by @Abhishek-B-R
- feat(filter): add case-sensitive IS/IS_NOT operands for TEXT fields ([#29201](https://github.com/twentyhq/twenty/pull/29201)) by @etiennejouan
- Choose Ada replies from workspace modes ([#29232](https://github.com/twentyhq/twenty/pull/29232)) by @bosiraphael
- Recheck Ada reply rules before running a turn ([#29233](https://github.com/twentyhq/twenty/pull/29233)) by @bosiraphael
- Remove the record creation form feature flag ([#29246](https://github.com/twentyhq/twenty/pull/29246)) by @Weiko
- Make validation rules declarable in the app SDK ([#29283](https://github.com/twentyhq/twenty/pull/29283)) by @ijreilly
- Ensure one direct message thread per member pair ([#29286](https://github.com/twentyhq/twenty/pull/29286)) by @bosiraphael
- feat(billing): add billing arrangement entity and validation ([#29321](https://github.com/twentyhq/twenty/pull/29321)) by @etiennejouan
- Mount AI Overview behind the inbox flag ([#29322](https://github.com/twentyhq/twenty/pull/29322)) by @bosiraphael
- Expose the channel of each timeline thread ([#29324](https://github.com/twentyhq/twenty/pull/29324)) by @martmull
- Show the channel of each conversation in the messages list ([#29325](https://github.com/twentyhq/twenty/pull/29325)) by @martmull
- Render app conversations as chat bubbles ([#29326](https://github.com/twentyhq/twenty/pull/29326)) by @martmull
- Reply to app conversations from the thread ([#29327](https://github.com/twentyhq/twenty/pull/29327)) by @martmull
- Rename the Emails record tab to Messages ([#29343](https://github.com/twentyhq/twenty/pull/29343)) by @martmull
- Share access policies between GraphQL, REST and @DefineTool tools ([#29364](https://github.com/twentyhq/twenty/pull/29364)) by @prastoin
- [BREAKING_CHANGE] Let AI workflow steps run from their own config and permission scope ([#29368](https://github.com/twentyhq/twenty/pull/29368)) by @FelixMalfait
- Bundle tabler icons into twenty-ui's individual build ([#29384](https://github.com/twentyhq/twenty/pull/29384)) by @FelixMalfait
- Add user-scoped Microsoft Teams connection provider ([#29427](https://github.com/twentyhq/twenty/pull/29427)) by @ehconitin
- i18n - translations ([#29430](https://github.com/twentyhq/twenty/pull/29430)) by @twenty-pr
- Add user-scoped Fathom connection provider ([#29433](https://github.com/twentyhq/twenty/pull/29433)) by @ehconitin
- Run app disconnect hooks when a removed member's connections are transferred ([#29435](https://github.com/twentyhq/twenty/pull/29435)) by @ehconitin
- Resolve numeric twenty-ui theme tokens when CSS variables can't be read ([#29436](https://github.com/twentyhq/twenty/pull/29436)) by @Weiko
- Name permissions principals by role: main, limiting and app ([#29452](https://github.com/twentyhq/twenty/pull/29452)) by @charlesBochet
- Warn before a field change turns off validation rules ([#29458](https://github.com/twentyhq/twenty/pull/29458)) by @ijreilly
- Add an application role target kind ([#29463](https://github.com/twentyhq/twenty/pull/29463)) by @prastoin
- i18n - docs translations ([#29465](https://github.com/twentyhq/twenty/pull/29465)) by @twenty-pr
- Ship code interpreter sandbox scripts and let E2B sandboxes use a custom template ([#29466](https://github.com/twentyhq/twenty/pull/29466)) by @etiennejouan
- Fix duplicate AI component previews and empty sample data ([#29471](https://github.com/twentyhq/twenty/pull/29471)) by @Weiko
- chore: bump version to 2.56.0 ([#29473](https://github.com/twentyhq/twenty/pull/29473)) by @twenty-pr
- Discriminate permissions principals by type ([#29475](https://github.com/twentyhq/twenty/pull/29475)) by @charlesBochet
- Connect inbox behavior settings ([#29476](https://github.com/twentyhq/twenty/pull/29476)) by @bosiraphael
- i18n - docs translations ([#29479](https://github.com/twentyhq/twenty/pull/29479)) by @twenty-pr
- Derive repository permissions from the auth context ([#29483](https://github.com/twentyhq/twenty/pull/29483)) by @charlesBochet
- Use provider names on built-in connect cards in app preferences ([#29496](https://github.com/twentyhq/twenty/pull/29496)) by @ehconitin
- i18n - translations ([#29497](https://github.com/twentyhq/twenty/pull/29497)) by @twenty-pr
- Call recorder: add recorder styles for the bot camera tile ([#29498](https://github.com/twentyhq/twenty/pull/29498)) by @ehconitin
- i18n - translations ([#29500](https://github.com/twentyhq/twenty/pull/29500)) by @twenty-pr
- Drain API HTTP requests before flushing recorders and closing Nest ([#29501](https://github.com/twentyhq/twenty/pull/29501)) by @FelixMalfait
- docs: align app guides with current CLI behavior ([#29502](https://github.com/twentyhq/twenty/pull/29502)) by @Weiko
- Bound the whole API shutdown when sockets escape HTTP tracking ([#29503](https://github.com/twentyhq/twenty/pull/29503)) by @FelixMalfait
- i18n - docs translations ([#29505](https://github.com/twentyhq/twenty/pull/29505)) by @twenty-pr
- Fix AI step QA findings after the inline-config rework ([#29506](https://github.com/twentyhq/twenty/pull/29506)) by @FelixMalfait
- LinkedIn app: cap the conversations a history sync imports ([#29507](https://github.com/twentyhq/twenty/pull/29507)) by @martmull
- LinkedIn app: skip profile lookups that cannot change the outcome ([#29509](https://github.com/twentyhq/twenty/pull/29509)) by @martmull
- Hide the unread divider above the first message ([#29511](https://github.com/twentyhq/twenty/pull/29511)) by @bosiraphael
- Derive permission principals straight from the auth context ([#29514](https://github.com/twentyhq/twenty/pull/29514)) by @charlesBochet
- AI: add effort levels to Claude Haiku 5.5, Sonnet 5.5 and Opus 5.5 ([#29515](https://github.com/twentyhq/twenty/pull/29515)) by @AryaKesharwani
- Publish the affiliate program terms and link them from the application form ([#29520](https://github.com/twentyhq/twenty/pull/29520)) by @StephanieJoly4
- Keep zoom inside full-height front component widgets ([#29521](https://github.com/twentyhq/twenty/pull/29521)) by @bosiraphael
- Require a layer bucket for the Lambda logic function driver ([#29522](https://github.com/twentyhq/twenty/pull/29522)) by @etiennejouan
- chore(security): bump follow-redirects to 1.16.2 in the app lockfiles ([#29523](https://github.com/twentyhq/twenty/pull/29523)) by @mabdullahabaid
- i18n - translations ([#29524](https://github.com/twentyhq/twenty/pull/29524)) by @twenty-pr
- Write postcard content with ai.generate; mark /rest/ai/generate-text deprecated ([#29525](https://github.com/twentyhq/twenty/pull/29525)) by @FelixMalfait
- LinkedIn app: reply to conversations from Twenty through Unipile ([#29526](https://github.com/twentyhq/twenty/pull/29526)) by @martmull
- Remove viaApplication from the user auth context ([#29527](https://github.com/twentyhq/twenty/pull/29527)) by @charlesBochet
- chore(security): bump follow-redirects to 1.16.2 in the root and application dependency lockfiles ([#29528](https://github.com/twentyhq/twenty/pull/29528)) by @mabdullahabaid
- Simplify permissions utils: one event admission path, share keys in sharing ([#29529](https://github.com/twentyhq/twenty/pull/29529)) by @charlesBochet
- i18n - website translations ([#29530](https://github.com/twentyhq/twenty/pull/29530)) by @twenty-pr
- i18n - translations ([#29531](https://github.com/twentyhq/twenty/pull/29531)) by @twenty-pr
- Require the affiliate main channel URL ([#29532](https://github.com/twentyhq/twenty/pull/29532)) by @StephanieJoly4
- Name the AI run scope AiRunPermissionScope ([#29534](https://github.com/twentyhq/twenty/pull/29534)) by @charlesBochet
- i18n - website translations ([#29535](https://github.com/twentyhq/twenty/pull/29535)) by @twenty-pr
- Call recorder: fill the workspace logo plate ([#29536](https://github.com/twentyhq/twenty/pull/29536)) by @ehconitin
- Return 403 for REST permission denials and rework the CRUD permission specs ([#29537](https://github.com/twentyhq/twenty/pull/29537)) by @charlesBochet
- Remove the IS_PRIVATE_RECORD_ENABLED feature flag ([#29538](https://github.com/twentyhq/twenty/pull/29538)) by @charlesBochet
- i18n - translations ([#29539](https://github.com/twentyhq/twenty/pull/29539)) by @twenty-pr
- Lock property edits on system-managed fields in field settings ([#29540](https://github.com/twentyhq/twenty/pull/29540)) by @charlesBochet
- i18n - docs translations ([#29542](https://github.com/twentyhq/twenty/pull/29542)) by @twenty-pr
- Remove IS_WORKER_FAIRNESS_ENABLED, worker fairness is always on ([#29543](https://github.com/twentyhq/twenty/pull/29543)) by @martmull
- fix(CommonAPI): cap GraphQL find-many page size at QUERY_MAX_RECORDS ([#29546](https://github.com/twentyhq/twenty/pull/29546)) by @etiennejouan
- Guard metadata-modules endpoints with AccessPolicyGuard ([#29547](https://github.com/twentyhq/twenty/pull/29547)) by @prastoin
- CODE steps own their source instead of a hidden logic function ([#29548](https://github.com/twentyhq/twenty/pull/29548)) by @FelixMalfait
- i18n - translations ([#29549](https://github.com/twentyhq/twenty/pull/29549)) by @twenty-pr
- feat(billing): reject overlapping billing arrangements on insert ([#29550](https://github.com/twentyhq/twenty/pull/29550)) by @etiennejouan
- Use one side panel footer style everywhere ([#29551](https://github.com/twentyhq/twenty/pull/29551)) by @FelixMalfait
- Simplify AI model selection ([#29553](https://github.com/twentyhq/twenty/pull/29553)) by @bosiraphael
- Add a direct message sharing TODO and use an enum for the conversation type ([#29554](https://github.com/twentyhq/twenty/pull/29554)) by @bosiraphael
- Unify side panel footers ([#29559](https://github.com/twentyhq/twenty/pull/29559)) by @bosiraphael
- LinkedIn app: drop reply code comments, clarify the replies README note ([#29561](https://github.com/twentyhq/twenty/pull/29561)) by @martmull
- feat(front): pick the sending account from the Messages widget + button ([#29562](https://github.com/twentyhq/twenty/pull/29562)) by @martmull
- Derive repository object permissions from the permissions principal ([#29563](https://github.com/twentyhq/twenty/pull/29563)) by @charlesBochet
- i18n - translations ([#29564](https://github.com/twentyhq/twenty/pull/29564)) by @twenty-pr
- Add NATIVE_PAGE navigation menu items and a /workflows route ([#29567](https://github.com/twentyhq/twenty/pull/29567)) by @FelixMalfait
- Show the junction toggle for custom junction objects ([#29570](https://github.com/twentyhq/twenty/pull/29570)) by @charlesBochet
- Repair application dependency checksums that do not match the stored files ([#29571](https://github.com/twentyhq/twenty/pull/29571)) by @prastoin
- Add @DefineTool tools to the endpoint permission snapshot ([#29573](https://github.com/twentyhq/twenty/pull/29573)) by @prastoin
- Rewrite inbox channel grants without raw SQL ([#29582](https://github.com/twentyhq/twenty/pull/29582)) by @bosiraphael
- Guard core-modules endpoints with AccessPolicyGuard ([#29586](https://github.com/twentyhq/twenty/pull/29586)) by @prastoin
- Keep the Nx cache in the workspace on CI ([#29587](https://github.com/twentyhq/twenty/pull/29587)) by @charlesBochet
- chore(security): bump happy-dom to 20.14.6 in the root lockfile ([#29588](https://github.com/twentyhq/twenty/pull/29588)) by @mabdullahabaid
- Resolve permissions principals through one service ([#29591](https://github.com/twentyhq/twenty/pull/29591)) by @charlesBochet
- Evict cached record queries when a field is renamed or deleted ([#29593](https://github.com/twentyhq/twenty/pull/29593)) by @charlesBochet
- Run server integration tests on 24 shards and split the two slowest chat specs ([#29594](https://github.com/twentyhq/twenty/pull/29594)) by @charlesBochet
- Thin out line chart data labels that would overlap ([#29595](https://github.com/twentyhq/twenty/pull/29595)) by @FelixMalfait
- i18n - docs translations ([#29596](https://github.com/twentyhq/twenty/pull/29596)) by @twenty-pr
- Name the role grant on every record the allRecords grant path ([#29602](https://github.com/twentyhq/twenty/pull/29602)) by @charlesBochet
- Stop chat specs from waiting out every snooze between tests ([#29603](https://github.com/twentyhq/twenty/pull/29603)) by @charlesBochet
- Replace the field permission specs with one spec on both APIs ([#29606](https://github.com/twentyhq/twenty/pull/29606)) by @charlesBochet
- feat(getting-started): require a payment method to hide Getting started for good ([#29607](https://github.com/twentyhq/twenty/pull/29607)) by @etiennejouan
- Add operations to row level permission predicate groups ([#29611](https://github.com/twentyhq/twenty/pull/29611)) by @charlesBochet
- Remove Onboarding Packs mentions from pricing and FAQ ([#29613](https://github.com/twentyhq/twenty/pull/29613)) by @ijreilly
- Translate component labels with useLingui so they follow locale changes ([#29614](https://github.com/twentyhq/twenty/pull/29614)) by @charlesBochet
- Affiliate program: partner code in billing, clearer attribution rules, country list on the form ([#29615](https://github.com/twentyhq/twenty/pull/29615)) by @StephanieJoly4
- Fetch only what changed-files needs in discover-apps ([#29617](https://github.com/twentyhq/twenty/pull/29617)) by @FelixMalfait
- Delete timeline rows of destroyed messages and calendar events ([#29619](https://github.com/twentyhq/twenty/pull/29619)) by @neo773
- Rename CoreObjectNameSingular to StandardObjectNameSingular ([#29623](https://github.com/twentyhq/twenty/pull/29623)) by @FelixMalfait
- Compute role permissions as all records and row level grants ([#29627](https://github.com/twentyhq/twenty/pull/29627)) by @charlesBochet
- i18n - translations ([#29637](https://github.com/twentyhq/twenty/pull/29637)) by @twenty-pr
- i18n - website translations ([#29641](https://github.com/twentyhq/twenty/pull/29641)) by @twenty-pr
- i18n - translations ([#29642](https://github.com/twentyhq/twenty/pull/29642)) by @twenty-pr
- List MCP tools directly by default ([#29656](https://github.com/twentyhq/twenty/pull/29656)) by @FelixMalfait
- i18n - website translations ([#29657](https://github.com/twentyhq/twenty/pull/29657)) by @twenty-pr
- fix(billing): set Organization monthly fallback price to $52 ([#29658](https://github.com/twentyhq/twenty/pull/29658)) by @etiennejouan
- Make inbox notification badge red ([#29660](https://github.com/twentyhq/twenty/pull/29660)) by @bosiraphael
- Guard src/modules endpoints with AccessPolicyGuard and delete the legacy guards ([#29661](https://github.com/twentyhq/twenty/pull/29661)) by @prastoin
- Add required fields for PDL matches ([#29662](https://github.com/twentyhq/twenty/pull/29662)) by @bosiraphael
- i18n - translations ([#29664](https://github.com/twentyhq/twenty/pull/29664)) by @twenty-pr
- Allow clearing IMAP and SMTP port inputs ([#29665](https://github.com/twentyhq/twenty/pull/29665)) by @neo773
- feat(getting-started): add a completed state to onboarding cards ([#29671](https://github.com/twentyhq/twenty/pull/29671)) by @etiennejouan
- Center reference chips in AI chat ([#29672](https://github.com/twentyhq/twenty/pull/29672)) by @bosiraphael
- i18n - docs translations ([#29673](https://github.com/twentyhq/twenty/pull/29673)) by @twenty-pr
- Add the field metadata option syncable entity ([#29674](https://github.com/twentyhq/twenty/pull/29674)) by @FelixMalfait
- Add the shared assistant avatar renderer ([#29677](https://github.com/twentyhq/twenty/pull/29677)) by @bosiraphael
- Read records permissions directly on the server ([#29678](https://github.com/twentyhq/twenty/pull/29678)) by @charlesBochet
- Persist workspace assistant identity ([#29679](https://github.com/twentyhq/twenty/pull/29679)) by @bosiraphael
- chore(onboarding): remove the welcome animation ([#29680](https://github.com/twentyhq/twenty/pull/29680)) by @etiennejouan
- Move a board card back when the server rejects its update ([#29682](https://github.com/twentyhq/twenty/pull/29682)) by @FelixMalfait
- feat(onboarding): show the invite step only with invite suggestions ([#29684](https://github.com/twentyhq/twenty/pull/29684)) by @etiennejouan
- Expose the current user's records permissions in the nested shape ([#29686](https://github.com/twentyhq/twenty/pull/29686)) by @charlesBochet
- Render workflow enum array inputs as a multiselect ([#29689](https://github.com/twentyhq/twenty/pull/29689)) by @bosiraphael
- Check view access in one place for GraphQL, REST and the view tools ([#29690](https://github.com/twentyhq/twenty/pull/29690)) by @prastoin
- Ask for the fields a validation rule needs instead of rejecting the update ([#29691](https://github.com/twentyhq/twenty/pull/29691)) by @FelixMalfait
- Share the data model read policies between GraphQL, REST and tools ([#29692](https://github.com/twentyhq/twenty/pull/29692)) by @prastoin
- Share the agent access policies between GraphQL and the agent tools ([#29693](https://github.com/twentyhq/twenty/pull/29693)) by @prastoin
- Require a workspace member on the campaign send path ([#29694](https://github.com/twentyhq/twenty/pull/29694)) by @prastoin
- i18n - translations ([#29697](https://github.com/twentyhq/twenty/pull/29697)) by @twenty-pr
- i18n - website translations ([#29698](https://github.com/twentyhq/twenty/pull/29698)) by @twenty-pr
- i18n - translations ([#29700](https://github.com/twentyhq/twenty/pull/29700)) by @twenty-pr
- Read the current user's records permissions in the nested shape on the front ([#29701](https://github.com/twentyhq/twenty/pull/29701)) by @charlesBochet
- i18n - translations ([#29705](https://github.com/twentyhq/twenty/pull/29705)) by @twenty-pr
- i18n - website translations ([#29706](https://github.com/twentyhq/twenty/pull/29706)) by @twenty-pr
- Ship the application role target command in 2.56 ([#29708](https://github.com/twentyhq/twenty/pull/29708)) by @charlesBochet
- i18n - docs translations ([#29709](https://github.com/twentyhq/twenty/pull/29709)) by @twenty-pr
- Ask permission questions through PermissionsService ([#29712](https://github.com/twentyhq/twenty/pull/29712)) by @charlesBochet
- i18n - translations ([#29714](https://github.com/twentyhq/twenty/pull/29714)) by @twenty-pr
- Hide select options a validation rule would reject ([#29716](https://github.com/twentyhq/twenty/pull/29716)) by @FelixMalfait
- Tighten security of contributor setup ([#29717](https://github.com/twentyhq/twenty/pull/29717)) by @BOHEUS
- Keep text input errors below the field ([#29721](https://github.com/twentyhq/twenty/pull/29721)) by @bosiraphael
- Remove as unknown casts from specs outside twenty-server ([#29722](https://github.com/twentyhq/twenty/pull/29722)) by @charlesBochet
- i18n - translations ([#29723](https://github.com/twentyhq/twenty/pull/29723)) by @twenty-pr
- Use inbox icon for Conversations record tab ([#29725](https://github.com/twentyhq/twenty/pull/29725)) by @martmull
- Animate assistant avatars ([#29726](https://github.com/twentyhq/twenty/pull/29726)) by @bosiraphael
- Build assistant personalization controls ([#29728](https://github.com/twentyhq/twenty/pull/29728)) by @bosiraphael
- i18n - docs translations ([#29730](https://github.com/twentyhq/twenty/pull/29730)) by @twenty-pr
- Keep the legacy current user object permissions as deprecated fields ([#29732](https://github.com/twentyhq/twenty/pull/29732)) by @charlesBochet
- i18n - translations ([#29734](https://github.com/twentyhq/twenty/pull/29734)) by @twenty-pr
- Read record permission data through record-permission-orm ([#29735](https://github.com/twentyhq/twenty/pull/29735)) by @charlesBochet
- Remove as unknown casts from server database specs ([#29736](https://github.com/twentyhq/twenty/pull/29736)) by @charlesBochet
- Remove as unknown casts from server core and metadata specs ([#29737](https://github.com/twentyhq/twenty/pull/29737)) by @charlesBochet
- Remove as unknown casts from the remaining server specs ([#29738](https://github.com/twentyhq/twenty/pull/29738)) by @charlesBochet
- Move the partner code to a hidden /settings/partner page ([#29739](https://github.com/twentyhq/twenty/pull/29739)) by @etiennejouan
- i18n - translations ([#29747](https://github.com/twentyhq/twenty/pull/29747)) by @twenty-pr
- Escape identifiers in filter where conditions ([#29749](https://github.com/twentyhq/twenty/pull/29749)) by @charlesBochet
- i18n - docs translations ([#29750](https://github.com/twentyhq/twenty/pull/29750)) by @twenty-pr
- Wait for records permissions before opening the metadata gate ([#29751](https://github.com/twentyhq/twenty/pull/29751)) by @charlesBochet
- Set ORGANIZER on CalDAV events so servers send invitations ([#29753](https://github.com/twentyhq/twenty/pull/29753)) by @neo773
- Fix duplicated CalDAV events created from Twenty ([#29754](https://github.com/twentyhq/twenty/pull/29754)) by @neo773
- Scope core workflow reads to the calling application ([#29755](https://github.com/twentyhq/twenty/pull/29755)) by @prastoin
- i18n - website translations ([#29756](https://github.com/twentyhq/twenty/pull/29756)) by @twenty-pr
- i18n - translations ([#29757](https://github.com/twentyhq/twenty/pull/29757)) by @twenty-pr
- i18n - website translations ([#29760](https://github.com/twentyhq/twenty/pull/29760)) by @twenty-pr
- feat(getting-started): illustrate the mailbox card with the onboarding contacts preview ([#29763](https://github.com/twentyhq/twenty/pull/29763)) by @etiennejouan
- i18n - translations ([#29766](https://github.com/twentyhq/twenty/pull/29766)) by @twenty-pr
</details>
**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.55.0...twenty/v2.56.0