Security
- Mobile discards sign-ins that finish after a server change, preventing the previous server's session credentials from reaching the new server. Offline sign-out now retries session revocation when connectivity returns; Android also suppresses bot notifications while signed out. On iOS, old notification previews can still appear until revocation reaches the server.
- Credentials passed in local MCP server launch arguments are hidden from tool output, errors and run history, including authorization flags, numeric secret values and passwords in URLs.
- Incus computers explicitly start as an unprivileged user, including custom images without a declared user. Remote command working directories stay within the bot workspace, and team-chat attachment names are sanitized before entering bot context.
- Computer helpers no longer load Python code from the bot-writable home directory or inherit the control token when starting commands, protecting saved logins and payment details.
- The desktop computer viewer can no longer read the host clipboard. Copying from the bot's computer to the host clipboard is disabled; pasting into it remains available.
- Calls ask for voice consent before recording audio for hosted transcription, including calls without a greeting.
- Bot edits to pages shared by link now follow approval rules and show the proposed changes before publishing them. Never ask still saves without a prompt.
- Hardened bot email authentication and send limits, encrypted existing inbox content when content encryption is enabled, and prevented untrusted attachments from replacing existing files. Deactivated owners no longer receive bot email.
- Purchase approval recognizes payment-card forms that also request a security code or expiry. Account imports refuse temporary-file symlinks, and background helpers cannot bypass their read-only tools through connector name collisions.
- Auto Review only accepts a single complete, valid verdict; malformed or ambiguous replies ask the owner instead of allowing the action. Oversized chat messages are refused, and future-dated group roster updates cannot prevent later membership removals.
- Bounded third-party response reads to prevent unbounded memory use, and updated image and JavaScript dependencies for security fixes, including apt CVE-2026-109518.
Added
- Invite people into a Space to share bots, chats, memory, routines and its computer. Each member has their own unread state, notifications, connected accounts and billing. Browser logins on the shared computer are visible to everyone in the Space (Spaces).
- Bots can hand read-only research to background helpers and keep chatting while it runs. Results return to the chat, and each helper's card has its own Stop control (bots and chats).
- Snooze a chat until later, then bring it back to the inbox.
- On iOS, a Live Activity shows working bots and those waiting for an answer on the Lock Screen and Dynamic Island. This needs the new app build.
- Dictate into the mobile message box, review the text, and send it (voice and calls).
- Create and edit routines, including email triggers, and edit or delete bot memory and shared notes on iOS and Android (routines).
- Give bots their own email addresses, receive and search their inboxes, send email from chat, and start routines from incoming mail (bot email).
- Set a spending limit for purchases bots make, review recent payments, and see order items on purchase approval cards (computer).
- Speech connections can select a speech model, saved logins show their site icons, and open-egress Docker computers can reach IPv6-only sites with IPv4 fallback (voice, computer).
- Connected MCP servers can show interactive apps in chat. Bots can also use optional deployment-funded paid data services for read-only lookups, with approval and credit accounting (integrations).
- Create bots from ready-made templates, and choose Messages under Replies to keep working notes with tool steps while showing deliberate messages and the final answer in chat (bots and chats).
- Bots can find files shared earlier in chat, send files to each other by path, read large files in line ranges, and look up the tool work behind earlier replies. Finished generated videos arrive automatically.
- Self-hosters can provision and deactivate accounts through SCIM, and theme web and desktop colors, fonts and corners with
RAKAZO_THEME(accounts, themes). - Mobile gains optional haptic feedback and an App Store update link in Settings. Haptics need the new app build.
Changed
- Desktop opens Cloud sign-in on first launch. Change server on sign-in and the app menu still open server setup.
- The iOS inbox uses a native list with swipe and long-press actions. Mobile bot creation asks for a name and appearance, and inbox rows identify bots waiting for you.
- Artifacts focuses on files bots made; settings, routines and connection states are simpler to scan. Web translations now cover previously untranslated strings.
- New credit purchases and monthly plans top out at $200, while existing larger plans retain their credits and renewals. Credit checkout requests bank authentication. The Max own-key plan is now $99 monthly or $79 per month billed yearly; existing subscriptions retain their price.
- Bot-to-bot turns no longer each trigger a notification. Running routines show their name, and stopping one leaves a note the bot can read.
- Desktop-managed local stacks allow private model and connector endpoints. Docker deployments can reach host-local model and speech servers through loopback addresses when private endpoints are enabled (local models).
Fixed
- Reading web pages with very large numbers of HTML elements no longer freezes unrelated sign-ins, page loads and chat runs. Oversized pages use simpler text extraction, which may include navigation.
- Rejected personal access tokens open model connection recovery, and unavailable hosted models offer another model instead of showing a generic server error.
- Mobile drafts and unsent attachments survive chat changes, rejected sessions and cache cleanup. Failed dictated sends retain their words without duplication, and near-silent recordings are discarded before transcription.
- Sending, stopping, streaming and answering cards are more reliable while other chat operations are running. Background command output reaches the next model request, and loop detection stops equivalent repeated tool calls.
- Android avoids a native memory-sampling launch crash, and long mobile messages and streamed replies cause fewer layout stalls.
- Calls can be answered while bot lists load, stay with their original Space, stop on sign-out, and no longer compete with chat read-aloud. Android long-press menus and notification content work reliably.
- Computer screens reconnect through restarts, large workspaces finish saving, and oversized backups no longer prevent sleep. Unresponsive computer, storage and encryption services no longer leave requests hanging indefinitely.
- Interrupted model streams retry, backup models use their own thinking settings, and compatible model and MCP connections honor configured proxies. Settings retain edits across saves and reconnects.
- Connecting an MCP server whose OAuth requests many permissions no longer fails with "MCP URL exceeds 2048 characters". Native OIDC sign-in accepts authorization URLs that previously failed validation.
- Billing actions stay with the Space shown in the window; paid own-key plans receive their computer hours regardless of model funding, and interrupted credit holds settle automatically.
- Account exports containing nested ZIP files or files beginning with zero bytes import correctly. Account and Space deletion recover from interruptions without accepting new work during deletion.
- Pinned installs download their Compose files from the chosen release. Updates remove replaced unused images, migrations run before deployment, and volume startup avoids needlessly changing ownership of every file.
- OpenAPI tools retain parameter descriptions, GraphQL tools preserve explicit null inputs, and paused routines ignore webhook deliveries.
Self-host upgrade notes
- Source installs now require Node.js 24.15 or newer on the 24.x line, or Node.js 26+, and pnpm 12.18. Published images include compatible runtimes. Run migrations before restarting the API and worker (upgrading).
- Update computer images to receive helper isolation, purchase safeguards and image security fixes. Mobile native changes, including the SDK upgrade and Live Activities, require new store builds; an over-the-air update cannot deliver them.
- Incus-backed computers require Incus 6.11 or newer. Docker computers adopt their owner's time zone and language; existing computers are replaced on their next start, preserving home files and browser profiles but closing running apps.
- Production Compose database memory defaults target an 8 GB host. Smaller hosts should set
POSTGRES_MEMORY_LIMIT,POSTGRES_SHARED_BUFFERSandPOSTGRES_EFFECTIVE_CACHE_SIZEfor their capacity; the published-images Compose setup is unchanged. - Computer provider settings are hidden by default. Set
COMPUTER_SETTINGS_ENABLED=trueto edit them; saved connections continue working (computer providers). - Docker loopback model and speech URLs now refer to the Docker host. Private endpoints still require
MCP_ALLOW_PRIVATE_ENDPOINT; on Linux, the service must listen on an address reachable from the Docker bridge (models). - Bot outbound mail needs the sending-domain DNS configuration and
EMAIL_*settings on the worker as well as the API.INBOUND_EMAIL_RELAY_ARC_DOMAINoptionally trusts a configured relay's sealed authentication results (bot email). - Deactivating an account removes its memberships in other people's Spaces, transfers its work to the Space owner and pauses its routines. Reactivating the account does not restore those memberships (accounts).
- Reimport existing GraphQL sources to regenerate schemas with nullable inputs. Optional paid services use
PAID_SERVICES_PROVIDER,PAID_SERVICES_API_KEYandPAID_SERVICES_BASE_URL; without managed credits, usage charges the operator's service account (integrations).
What's Changed
- fix(web): do not lose edits or show Saved during a settings save by @zicochaos in #3403
- Tell a bot woken early by an eval that it is the follow-up's due time by @elie222 in #3376
- fix(adapters): read the routine prompt under the claim with the model by @zicochaos in #3405
- fix(transcript): anchor Load earlier on the first visible row by @zicochaos in #3408
- fix(mobile): skip only the unreadable files of an attachment pick by @zicochaos in #3412
- ci: typecheck web and desktop E2E code, fix type drift by @zicochaos in #3410
- test: remove the plugin-upgrade migration test that runs in no path by @zicochaos in #3414
- Deliver finished videos to the chat without the bot polling by @elie222 in #3380
- Let bots find and read files shared earlier in a chat by @elie222 in #3396
- Edit and delete bot memory and shared notes on iOS and Android by @elie222 in #3386
- Add a skill for cutting visual noise from screens by @elie222 in #3362
- Create and edit routines on iOS and Android by @elie222 in #3353
- Move credits below the main pricing plans by @elie222 in #3381
- ci: hash every workspace package the mobile app resolves in the APK cache key by @zicochaos in #3417
- Let a computer sleep when its files are too large to back up by @elie222 in #3418
- fix(composer): keep a reply picked while an older send is in flight by @zicochaos in #3422
- Link recoverable errors to shared troubleshooting guides by @elie222 in #3419
- Let the desktop app change its server from sign in by @elie222 in #3423
- Open long-press row menus on Android by @elie222 in #3400
- Upload Android R8 mappings so native crash reports stay readable by @elie222 in #3420
- Stop paused routines from waking the bot on webhooks by @alexurpi in #3425
- desktop: bound each readiness probe by the remaining deadline by @zicochaos in #3432
- fix(db): give thread-lock run transactions an explicit budget by @zicochaos in #3437
- Submit a new organization from the keyboard in the Android flow by @elie222 in #3435
- fix(transcript): drop the quote pill when its selection nodes are replaced by @zicochaos in #3434
- feat(sandbox): give open-egress computer networks IPv6 with an IPv4 fallback by @zicochaos in #3440
- fix(screen): reconnect the viewer quietly through every screen restart by @zicochaos in #3442
- fix(adapters): split long group replies into ordered outbox parts by @zicochaos in #3444
- fix(composer): dedupe attachment uploads across send retries by @zicochaos in #3447
- test(bot-secrets): wait out the lease-release window after run continuations by @zicochaos in #3449
- Stop a sampled memory check from crashing Android at launch by @elie222 in #3401
- fix(adapters): send the dictation language to ElevenLabs transcription by @zicochaos in #3454
- test(supervisor): give the focus-or-launch Python checks a minute on a loaded runner by @zicochaos in #3458
- fix(adapters): set the Incus start command's uid and gid on the instance by @zicochaos in #3463
- fix(adapters): take the conversation lock when the DM mirror writes outbox rows by @zicochaos in #3465
- Check a routine request before asking for approval by @ald3b in #3466
- fix(composer): clear a re-picked reply once its send lands by @zicochaos in #3470
- fix(mobile): remember the left Space when the organization list read fails by @zicochaos in #3472
- supervisor: fail the opt-in IPv6 Docker check without a daemon or image by @zicochaos in #3475
- fix(billing): expire every emulator checkout kind on cancel by @zicochaos in #3477
- fix(mobile): keep the last bot within its account, server and Space by @zicochaos in #3480
- fix(db): re-check the default avatar set inside the bot update transaction by @zicochaos in #3482
- fix(mobile): hang up a call on the session before signing out by @zicochaos in #3490
- fix(api): ignore group rosters older than the newest one processed by @zicochaos in #3486
- fix(mobile): keep composer drafts in documents, not the cache by @zicochaos in #3492
- fix(voice): keep self-hosted edits typed while a reconnect is in flight by @zicochaos in #3494
- fix(mobile): keep push registered when account deletion fails by @zicochaos in #3500
- test(core): give the page-links linearity check a bound a loaded runner meets by @zicochaos in #3504
- feat(adapters): let read_file read a large file in line ranges by @zicochaos in #3508
- fix(mobile): end the call clip when the recorder reports no level by @zicochaos in #3502
- fix(mobile): settle overlapping attachment reads against the live draft by @zicochaos in #3510
- fix(mobile): answer native calls from bots outside the active organization by @elie222 in #3511
- test(adapters): wait for the device revoke security event by @zicochaos in #3506
- fix: finish stalled organization deletions with one leased attempt at a time by @zicochaos in #3513
- docs: describe scoped pull request CI checks by @yxr-2025 in #3514
- fix(mobile): keep an outgoing call on the Space it started in by @zicochaos in #3519
- fix(mobile): stop read-aloud when the selected Space changes by @zicochaos in #3523
- fix(evals): price every model call at its own model's rates by @zicochaos in #3521
- fix(evals): keep the tool budget checked while a group trial waits by @zicochaos in #3525
- fix(db): extend the thread-lock budget to sends, reactions and takeover by @zicochaos in #3527
- test(web): stop disk-warning teardown hanging on stranded route handlers by @zicochaos in #3529
- fix(billing): scope the own-key trial to the owner and consume it once by @zicochaos in #3531
- test(web): end two specs' route teardown without waiting on handlers that never settle by @zicochaos in #3533
- fix(web): point billing settings at the space they opened for by @zicochaos in #3537
- fix(web): report a failed log out from the plan choice as a log-out failure by @zicochaos in #3539
- ci: count every Dockerfile change for the full package gate by @zicochaos in #3542
- fix(testkit): keep the mobile screenshot CLI from migrating the developer's database by @zicochaos in #3544
- Bump Expo SDK 57 patch versions by @elie222 in #3555
- fix(adapters): give the adapters' thread-lock transactions an explicit budget by @rjdotdev in #3549
- fix: bound third-party provider response reads by @rjdotdev in #3551
- fix(adapters): bound Kubernetes pod deletion by @rjdotdev in #3550
- fix(composer): treat a routines-only send as sent once the server takes it by @zicochaos in #3557
- Name apps instead of the vendor in tool steps by @elie222 in #3546
- fix(messaging): never settle a group roster at a future time by @zicochaos in #3569
- fix(logging): load the Axiom and Sentry SDKs only when a sink is configured by @zicochaos in #3548
- ci: typecheck ui-tokens and desktop scripts, fix type drift by @rjdotdev in #3554
- fix(mobile): explain a stalled passwordless account deletion by @elie222 in #3540
- test(testkit): cover a migration URL the shell already exported by @zicochaos in #3572
- fix(db): give the remaining thread-lock transactions an explicit budget by @rjdotdev in #3574
- Shorten the credits plan title to "Credits" by @elie222 in #3545
- ci: start Web E2E with the first jobs and merge its reports without installing by @zozo123 in #3573
- Default OpenRouter to Claude Haiku 5.5 by @elie222 in #3576
- test(adapters): check vault ciphertext for whole plaintext pieces by @zicochaos in #3571
- fix(ios): report verification failures from shortcuts, not "open a chat" by @zicochaos in #3566
- fix(mobile): keep unsent messages when the server rejects the session by @zicochaos in #3562
- feat: let bots send files to each other by path by @elie222 in #3575
- test(web): expect no composer error after an accepted routines-only send by @zicochaos in #3577
- Coordinate model sign-in token refreshes across instances by @rjdotdev in #3372
- fix(mobile): start mentioned routines only with the accepted message by @rjdotdev in #3553
- Run Linux CI jobs on GitHub runners again by @elie222 in #3579
- Say computers are off in plain words, and link setup help instead of .env steps by @rjdotdev in #3317
- Let an identity provider add and remove accounts over SCIM by @elie222 in #3406
- Free a computer when its update stops without finishing by @rjdotdev in #3393
- Ask for a model before making the first bot on mobile by @rjdotdev in #3319
- Add a spending limit for payments bots make by @elie222 in #3428
- test(mobile): step the clock before opening the routine detail after a list read by @zicochaos in #3582
- Show MCP server apps in chat by @elie222 in #3438
- fix(mobile): keep unsent attachments when leaving a chat by @zicochaos in #3588
- Update Pi to 1.5.0 so current models like DeepSeek V4.1 Flash 1017 can be picked by @jzelez in #3586
- fix(mobile): keep cache drafts until every draft reached documents by @zicochaos in #3590
- fix(mobile): let the stream answer a call while the roster still loads by @zicochaos in #3599
- fix: send E2B traffic token on screen and terminal sessions by @hphproton in #3595
- fix(billing): coordinate checkouts with organization deletion by @zicochaos in #3597
- fix(web): fit the billing plan dropdown to its rows by @elie222 in #3601
- fix(web): re-enable the plan choice after checkout opens outside by @zicochaos in #3603
- fix(adapters): retain OpenAPI parameter descriptions by @yxr-2025 in #3604
- Fix interrupted home storage migration exit status by @elie222 in #3611
- Preserve commas in quoted skill metadata array items by @yxr-2025 in #3626
- Release Serenity rate-limit response bodies by @yxr-2025 in #3631
- Add on-demand PR previews that sleep when nobody is visiting by @elie222 in #3616
- Serve pnpm dev to your Tailscale devices when RAKAZO_DEV_TAILNET is set by @elie222 in #3612
- Stop the model before saving a loop-guard stop by @zicochaos in #3635
- fix(adapters): run backup models at their own thinking level by @Quack6765 in #3633
- fix: make tool loop detection independent of JSON field order by @yxr-2025 in #3644
- fix(connectors): release rejected OpenAPI response bodies by @yxr-2025 in #3643
- feat(web): let self-hosters theme colors and fonts with RAKAZO_THEME by @elie222 in #3636
- fix(web): open the chat from its own finished-run notification by @zicochaos in #3646
- fix(models): read each connection once when listing models for a role by @zicochaos in #3648
- fix(secrets): derive each stored secret's key once per process by @zicochaos in #3650
- ci: cut PR wall clock past the E2E shard floor by @elie222 in #3654
- fix(worker): keep recovery scans running while housekeeping waits by @zicochaos in #3653
- fix(graphql): preserve nullable input values by @yxr-2025 in #3656
- ci: run the www screenshots and the macOS file-handle tests when those files change by @zicochaos in #3660
- feat(mcp): make discovery tool and page limits configurable by @chesneynyffels in #3658
- Show the order's items on the pay approval card by @elie222 in #3593
- List the payments bots made under the spending limit by @elie222 in #3591
- test(desktop): stop desktop E2E reading closed windows and spending timeouts by @zicochaos in #3665
- fix(web): close the gaps in self-hosted instance themes by @elie222 in #3663
- Close SMTP transport after graceful drain by @yxr-2025 in #3517
- fix(storage): stop waiting forever on an object store that stops answering by @zicochaos in #3670
- fix(adapters): stop waiting on a KMS that stops answering by @zicochaos in #3662
- refactor(web): use the radius scale for corners that already match it by @elie222 in #3671
- Add opt-in worktree environment setup by @elie222 in #3637
- feat(web): let a self-hosted theme set the corner size by @elie222 in #3672
- Hide computer provider settings unless the deployment enables them by @elie222 in #3600
- Declare the worktree setup action in t3.json by @elie222 in #3673
- Lower the Max plan to $99 a month by @elie222 in #3675
- ci: run small affected unit test sets on one shard by @elie222 in #3677
- test(adapters): stop the many-tags home save test timing out by @elie222 in #3679
- Upgrade apt in the images for CVE-2026-109518 by @elie222 in #3678
- Add sign-up buttons and a clearer bot computer row to the plan comparison by @elie222 in #3676
- Keep browser_navigate working when a page loads a huge data: URL by @elie222 in #3135
- Show a question's options on iOS instead of empty pills by @ald3b in #3468
- ci: cut install and build floor across PR jobs by @zozo123 in #3623
- Filter Artifacts to the files bots made by @rjdotdev in #3320
- Add New bot to each space's menu in the mobile inbox by @ald3b in #3584
- Complete Chinese UI translations and self-hosting guides by @earsonlau in #3176
- feat(web): link Integrations search to the MCP server search by @ModularTheGod in #3515
- Add subtle mobile haptics with a device setting by @raxon in #3341
- refactor(web): size all text from one type scale by @elie222 in #3680
- fix(adapters): honor HTTP(S)_PROXY/NO_PROXY in remote MCP fetch by @DeryFerd in #3183
- Don't offer Always allow on approvals that ask every time by @ald3b in #3467
- Fix remaining font sizes outside the shared web type scale by @elie222 in #3682
- Fix premature integrations configuration and empty states by @elie222 in #3641
- Show clear app connection states on web and mobile by @rjdotdev in #3366
- Clarify Honcho memory read and write behavior by @elie222 in #3686
- feat(mobile): show model row actions in a visible native menu by @altoglobal-gif in #3272
- Submit Android store releases from the mobile workflow by @elie222 in #3688
- Retry App Review without rebuilding mobile releases by @elie222 in #3692
- fix(api): keep account exports readable for files that start with zero bytes by @maxperala in #3694
- Share a space with other people by @elie222 in #1935
- Find pending App Review drafts across all pages by @elie222 in #3697
- fix: require opt-in for Computer settings tab by @elie222 in #3698
- Speed up preview wakes with suspend and cached setup by @elie222 in #3691
- Redesign the Artifacts header and empty state by @elie222 in #3689
- Name Biome as the formatter in AGENTS.md by @elie222 in #3699
- fix(models): read each model secret once per catalog request by @zicochaos in #3702
- Lock a group before its thread when reacting or clearing a group chat by @zicochaos in #3705
- Shrink the iOS chat composer back to one line after sending by @ald3b in #3583
- Use the selected app language for Android call notifications by @raxon in #3338
- Respect language weights in authentication emails by @yxr-2025 in #3610
- fix(web): show saved connection values after a voice reconnect by @zicochaos in #3606
- fix(ui): use logical spacing and alignment in the new page surfaces by @zicochaos in #3427
- Don't take a membership or ID card number for a payment card by @raaneem in #3397
- fix(mobile): keep an active call's audio from chat read-aloud by @zicochaos in #3496
- Mobile: use native controls for passwordless account deletion by @zicochaos in #3318
- feat(voice): let a speech connection choose its speech model by @zicochaos in #3455
- fix(mobile): retry an outbox send onto disk once the disk answers by @zicochaos in #3488
- fix(web): keep dictated words and their nonce when a send fails by @zicochaos in #3484
- Drop unused VAPID keys from the example environment file by @elie222 in #3707
- Give bots an email address that starts their routines by @elie222 in #3592
- Name the routine a bot is running and note when one is stopped by @Quack6765 in #3213
- fix(pages): keep week calendar columns aligned by @yxr-2025 in #3580
- fix(mobile): ask before sign-out or a server change deletes unsent messages by @zicochaos in #3399
- Let people turn off the spoken greeting on mobile calls by @rjdotdev in #3215
- Take a deactivated person out of other people's shared spaces by @elie222 in #3700
- fix(mobile): answer a pending native call without waiting for the roster by @zicochaos in #3733
- fix(billing): stop every bot run failing at setup by @elie222 in #3735
- Label new issues by type, size and priority by @elie222 in #3250
- feat(www): add /x, /twitter, /github and /discord shortlinks by @elie222 in #3736
- Document pages, organizations, the ticket board and other recent features by @elie222 in #3690
- fix(lark): deliver inbound images as attachments by @KKandLL-Forever in #3741
- Let pnpm dev start inside a secrets manager's run command by @elie222 in #3727
- feat: let ask_user carry the content being decided about by @zicochaos in #3361
- fix: update desktop computer unavailable message to include instructions to turn on "Let bots use this computer" by @awhite0030 in #3744
- Read an Auto Review verdict only from a single complete reply by @elie222 in #3738
- Mobile: drop a sign-in that finishes after a server change by @elie222 in #3739
- Add a messages reply mode for bots by @elie222 in #3174
- fix(billing): read model access by space and user only by @elie222 in #3730
- Tell the owner when their own email to a bot can't be verified by @elie222 in #3666
- Add and manage email triggers in the mobile routine editor by @elie222 in #3674
- fix(web): copy chat text on plain HTTP and offer manual copying by @zicochaos in #3343
- fix(adapters): record zero usage for provider-rejected calls by @AdityaxDeore in #3751
- fix(api): import account exports containing nested zip files by @AdityaxDeore in #3754
- Save every email to a bot's inbox and let the bot read it by @elie222 in #3684
- Fix native OIDC authorization proxy validation by @KieranBeals in #3755
- Get a bot's email address from chat, its settings, or the Vault by @elie222 in #3685
- Let a bot send email from its own address by @elie222 in #3687
- Fix Qodo review findings on nested-zip account import by @AdityaxDeore in #3756
- fix(mobile): tolerate URL suffixes and rotated tokens in screen page check by @awhite0030 in #3759
- fix(mcp): give OAuth authorization URLs their own length limit by @ofir09 in #3761
- fix(desktop): let the computer screen copy to the host clipboard by @cedricziel in #3762
- Let update_bot treat repeated current values as no change by @smiling689 in #3766
- Use adaptive thinking for known Claude ids on compatible Anthropic endpoints by @smiling689 in #3767
- Send no effort for off when a gateway refuses an effort without listing any by @smiling689 in #3769
- Show each bot's model and thinking level in list_fleet by @smiling689 in #3768
- Let the history tools take the arguments models actually send by @elie222 in #3770
- Tighten update_bot's repeated-value check from review by @smiling689 in #3772
- Match "invalid reasoning effort" and keep the effort match inside one clause by @smiling689 in #3774
- Name the model default-following bots run in list_fleet by @smiling689 in #3773
- Fix flaky shared-spaces e2e sign-up step by @elie222 in #3731
- fix(adapters): bound each AWS KMS call with a deadline by @zicochaos in #3778
- fix(mobile): hold a share import to the attachment limit by @zicochaos in #3787
- fix(mobile): match a last bot saved without a Space only while none is selected by @zicochaos in #3791
- Keep billing actions on the organization the window shows by @zicochaos in #3781
- fix(mobile): keep unsent messages when SSO reauthentication returns the same account by @zicochaos in #3785
- ci: run the file handle path test in the native jobs by @zicochaos in #3793
- Keep the open chat when a message jump finishes late by @zicochaos in #3783
- fix(testkit): migrate the iOS screenshot database, not an inherited one by @zicochaos in #3795
- Sanitize team-chat attachment names through one shared helper by @elie222 in #3708
- ci: hash and select typecheck for cross-package imports by @zicochaos in #3803
- ci: run tests whose inputs the package graph cannot see by @zicochaos in #3801
- Give the remaining thread-locking writes the thread-lock transaction budget by @zicochaos in #3809
- Drop repeated history queries before the five-term cap by @smiling689 in #3779
- fix(billing): keep the own-key trial hold on the session that is open by @zicochaos in #3811
- Keep a dictation queued behind a failed send with that send's words by @zicochaos in #3820
- Map command cwd onto the workspace through one shared helper by @elie222 in #3715
- fix(mobile): answer a pending native call before showing other ringing calls by @zicochaos in #3824
- Share Prisma error-code checks from @rakazo/db by @elie222 in #3714
- Keep a dictation being transcribed when the chat changes by @zicochaos in #3822
- Add bot templates: ready-made bots that start paused by @elie222 in #3567
- Load optional sandbox and messaging SDKs only when configured by @elie222 in #3713
- fix(messaging): send a chat-app run's interim messages as they are posted by @smiling689 in #3825
- fix(adapters): treat a bot's own id in update_bot as its own settings by @smiling689 in #3827
- feat(adapters): list a bot's routines from every chat in group runs by @smiling689 in #3830
- fix(models): match hyphenated version ids like claude-sonnet-5-5 by @smiling689 in #3828
- fix(mobile): stop the native ring of a call shown after the app became active by @zicochaos in #3839
- Update the pickers when a draft is rewritten from elsewhere by @zicochaos in #3834
- Keep integration vendor names out of API routes and health by @elie222 in #3712
- Color the send button like the bot's user bubbles by @thiemcun169 in #3753
- Hand over account deletion claims and refuse a parallel attempt by @zicochaos in #3836
- Mobile: retry the sign-out revocation offline, drop pushes without a session, keep another device's push registration by @zicochaos in #3293
- Tidy the settings: quieter Models tab, clearer page order and subtitles by @elie222 in #3703
- Keep a page's close button clear of the macOS window controls, and close it without a flash by @thiemcun169 in #3752
- Share heartbeat and session re-check across live streams by @elie222 in #3719
- Share one stored-preference primitive across web settings by @elie222 in #3710
- Share the model connection form between settings and onboarding by @elie222 in #3721
- fix(computer): retry a transient error downloading agent-browser by @zicochaos in #3629
- fix(mobile): requeue a share whose read settles during a warm link by @zicochaos in #3789
- Ask before saving to a page shared by link by @elie222 in #3728
- Share one ConfirmDialog across web confirmations by @elie222 in #3716
- Pick approval rules from a list and explain each mode by @elie222 in #3706
- Redact credentials passed as MCP server launch arguments by @elie222 in #3740
- Fix case-sensitive MIME checks for generated images and videos by @yxr-2025 in #3642
- Accept comments after skill YAML block scalar headers by @yxr-2025 in #3621
- Fix benchmark cleanup after a child exits on a signal by @yxr-2025 in #3625
- Say on the approval card when a webhook made an Always allow tool ask by @rjdotdev in #3216
- Report a saved voice setting as saved when the reload after it fails by @zicochaos in #3813
- fix(evals): check the group tool budget once more after the drain by @zicochaos in #3797
- fix(web): keep an active call's audio from other bots' read-aloud by @zicochaos in #3347
- Refuse new work in a Space that is being deleted by @zicochaos in #3832
- fix(voice): offer standard voices when a non-Kokoro speech server has no voice list by @cedricziel in #3763
- fix(voice): ignore near-silent recordings before transcription by @codewith-aditya in #3162
- Serve MCP source presets from the server by @elie222 in #3718
- Fix main's web typecheck and Polish catalog by @elie222 in #3847
- Use the shared settings group on mobile chat settings by @elie222 in #3711
- fix(chat-ui): keep a streamed table's state when text before it changes by @elie222 in #3848
- Keep the fork deploy authorization failure from waking pr-digest by @elie222 in #3842
- Share duplicated web and mobile helpers through core by @elie222 in #3720
- Show each chat once in Recent by @elie222 in #3841
- Share one thread event reducer between web and mobile by @elie222 in #3723
- fix: offer Upgrade when a computer runs out of hours by @elie222 in #3737
- Drive model routing ids from the catalog by @elie222 in #3722
- Refuse new work cleanly on every path into a Space being deleted by @zicochaos in #3850
- Offer hosted compatible endpoints from the catalog by @elie222 in #3725
- Say used credits are not refunded by @elie222 in #3853
- Upgrade pnpm to 12.18.0 by @elie222 in #3852
- Show a neutral error when the computer provider account cannot start computers by @elie222 in #3899
- test: gate every vendor SDK the server bundles load on demand by @zicochaos in #3807
- Keep the Railway image's apt script executable on any upload by @VarunSharma13 in #3907
- Stop dev startup when the configured database is unavailable by @schultzp2020 in #3910
- Keep publication test dependencies isolated by @schultzp2020 in #3913
- test(core): run desktop-runtime lifecycle tests on Linux only by @DeryFerd in #3915
- feat(voice): let providers list voices for one language by @DeryFerd in #3916
- fix(contracts): bound threads.send chat text at 100k characters by @DeryFerd in #3914
- Fix flaky shared-page approval check in the pages e2e test by @elie222 in #3900
- Move the chart catalog and plot guide out of the plot renderer by @elie222 in #3854
- Move the connector registry out of the Composio connector by @elie222 in #3855
- Use SectionHeading for settings section headings by @elie222 in #3857
- Move the inbox's data loading into hooks by @elie222 in #3858
- Build trusted origins with one function by @elie222 in #3859
- Take advisory locks through one helper by @elie222 in #3862
- Move the computer screen's boot into a hook by @elie222 in #3863
- Add size variants to DialogContent for large overlays by @elie222 in #3865
- Share the signed-in check between authed and board procedures by @elie222 in #3866
- Rename the bot panel's SettingsGroup to BotPanelGroup by @elie222 in #3867
- Move pi-runtime history and gate/queue helpers out of pi-runtime by @elie222 in #3868
- Split the routine editor into draft logic, list, and trigger sections by @elie222 in #3869
- Split ask, takeover, steering, and streaming out of db's events.ts by @elie222 in #3870
- Split the model connection screen into a sign-in hook and form components by @elie222 in #3872
- Split snapshot, reactions, stop, and read state out of thread-target.ts by @elie222 in #3876
- Split the integrations screen into components by @elie222 in #3878
- Move page-kit words into one file per language by @elie222 in #3879
- Share OAuth refresh-failure handling and MCP tool mapping by @elie222 in #3880
- Split run claim, model start and attempt cleanup out of continueRun by @elie222 in #3881
- Split page-kit dataviz into modules by chart family by @elie222 in #3882
- Split the native markdown renderer into modules by @elie222 in #3885
- Split the sandbox supervisor into modules by @elie222 in #3890
- Move team chat ambient judging and reply delivery out of the bridge by @elie222 in #3891
- Share sandbox adapter helpers copied across providers by @elie222 in #3893
- Split the desktop main process into window, setup, and menu modules by @elie222 in #3895
- Load the mobile skills screen through rpcQuery by @elie222 in #3875
- Load the mobile memory screen through rpcQuery by @elie222 in #3877
- Load the mobile approval rules screen through rpcQuery by @elie222 in #3886
- Load the mobile Space settings overrides through rpcQuery by @elie222 in #3888
- Answer what the bot is waiting on during a mobile call by @elie222 in #3726
- Split MCP, model, billing, and computer schemas out of contracts' domain.ts by @elie222 in #3861
- Screenshot web UI changes on pull requests automatically by @elie222 in #3901
- Share run helpers copied across the executor by @elie222 in #3871
- Move messaging startup and RPC error handling out of the API's app.ts by @elie222 in #3884
- Move the MCP server form into its own component by @elie222 in #3860
- Tell Team Computer bots where shared/ is from a shell command by @elie222 in #3918
- Split model secret parsing and credential refresh out of pi-oauth by @elie222 in #3864
- Split bot settings into one component per settings group by @elie222 in #3887
- Split onboarding into model and first-bot step components by @elie222 in #3874
- Split onboarding, capabilities, computer control, and connection flows out of route files by @elie222 in #3894
- Split the mobile API client into focused modules by @elie222 in #3898
- Split the agent import into a source-reading hook and a plan view by @elie222 in #3889
- Build the run runtime once for the API and the worker by @elie222 in #3883
- Let a bot hand longer work to a background helper and stay free, with Stop on the helper's card by @rjdotdev in #3101
- Split the integrations overlay into views and shared connection state by @elie222 in #3897
- Split the composer's file drop, triggers, and toolbar out of its body by @elie222 in #3892
- Move the shell's palette, space, and teaching callbacks into hooks by @elie222 in #3896
- Stop pnpm reinstalling dependencies before exec and run by @elie222 in #3917
- Hand a finished background command's output to the next model request by @rinseaid in #3921
- Open workspace files in the screen's browser on provider desktops by @rinseaid in #3922
- Commit attach_file's message with its artifact row by @rinseaid in #3923
- Translate every web string that still showed in English by @elie222 in #3919
- Offer Google Chrome as a computer image browser by @zicochaos in #3925
- Add a translate skill so agents can fill missing translations by @elie222 in #3920
- Start computers in their owner's time zone and language by @zicochaos in #3927
- Give attach_file's message write the thread-lock transaction budget by @rinseaid in #3928
- fix(installer): download Compose files from the pinned release by @tc3oliver in #3932
- fix(installer): read the tag the way Compose does by @tc3oliver in #3933
- Read the new page when a purchase check starts mid-navigation by @zicochaos in #3942
- fix(android): prevent blank notifications when bots pin each other by @awhite0030 in #3943
- fix: support extended model timeouts and disabled idle watchdog by @jayd609 in #3228
- Keep the bot screen on view while control switches by @zicochaos in #3948
- docs: add concise Thai guides by @charinthink in #3953
- Keep translation catalogs out of feature pull requests by @elie222 in #3717
- Fix the translation catalog workflow so GitHub accepts it by @elie222 in #3956
- Mobile: drop a sign-in that finishes while a server switch is still saving by @elie222 in #3955
- Redact MCP launch arguments under *_auth names and numeric named keys by @elie222 in #3954
- Stop notifying for every agent-to-agent turn by @elie222 in #3957
- Stop reporting chunks that did not load and aborted space-switch transitions by @elie222 in #3958
- Open the web app when the browser blocks local storage by @elie222 in #3959
- Report push and error-tunnel failures once by @elie222 in #3962
- Log computer provider outages as warnings and classify two more provider refusals by @elie222 in #3963
- Run migrations on every deploy, not only when Compose finishes listing services first by @elie222 in #3964
- Log which fields an RPC response got wrong when output validation fails by @elie222 in #3967
- Stop flagging a resumed run as stuck in the queue by @elie222 in #3968
- Retry a model stream the provider reports as interrupted by @elie222 in #3969
- Show why a routine's webhook key cannot be set instead of failing silently by @elie222 in #3960
- Hide catalog apps that have no way to sign in by @elie222 in #3961
- Treat the preview-link comment as status chrome in pr-digest by @elie222 in #3973
- End live streams when their request aborts, before re-checking the session by @elie222 in #3966
- Answer a repeated account deletion with a conflict and drop the auth log echo by @elie222 in #3970
- Answer a provider's sign-in outage as a retryable 503 without an error report by @elie222 in #3971
- Answer 402 when starting a plan early leaves the card uncharged by @elie222 in #3965
- Give each member of a shared space their own unread state and notifications by @elie222 in #3902
- Register OAuth clients with a method the server accepts by @Bwtaggart in #3975
- Give inbox chats in every space the iPhone long-press menu by @elie222 in #3977
- Archive iOS chats with a full swipe, also from the activity view by @elie222 in #3976
- Fix Cloudflare Workers AI free-tier connection by @awhite0030 in #3980
- Open Rakazo Cloud on the desktop app's first launch by @elie222 in #3984
- Stop reporting model failures the user fixes as server errors by @elie222 in #3985
- Show a paid-plan model refusal as an access denial, not a credit limit by @elie222 in #3986
- Show bots at work on the iOS Lock Screen and Dynamic Island by @elie222 in #3981
- Stop blaming the model provider for Rakazo's own run failures by @elie222 in #3987
- Say why computer hours ran out and link to billing by @elie222 in #3988
- Give a paid own-key subscription its computer hours whatever funds its models by @elie222 in #3990
- Offer an App Store update from Settings when a newer native version is out by @elie222 in #3989
- fix(web): clear macOS traffic lights for Close page and Open navigation by @charinthink in #3974
- Put the split-view chat list buttons on Liquid Glass by @elie222 in #3992
- Snooze a chat until later by @elie222 in #3979
- Tune production Postgres memory for an 8 GB host by @elie222 in #3991
- Fix open security review findings by @elie222 in #3994
- Check credit balances against the journal in one read per page by @elie222 in #3996
- Append chat events in one statement so streaming stops holding the thread lock by @elie222 in #3995
- Attach the append-event rejection expectations before releasing the lock by @zicochaos in #3999
- Settle interrupted model credit holds without manual review by @elie222 in #3993
- Translate new web strings by @elie222 in #4000
- Judge a smaller backup on the context its own policy would send by @rinseaid in #4002
- Limit the issue-triage agent's file reads to the checkout by @elie222 in #4010
- Point bots to files when a message to another bot is too long by @rjdotdev in #4013
- Show a computer image's own menu entries on every Team screen by @rjdotdev in #4014
- Send sharper bot avatars in phone notifications by @rjdotdev in #4015
- docs(patches): document why each override exists and when it can go by @DeryFerd in #4016
- Wait longer before returning a paused shell command unless it shows a sign-in code by @rjdotdev in #4022
- Draw sharper sender avatars in phone notifications by @colherdesopa in #4024
- Show a login's site icon on login cards and in the vault by @elie222 in #4025
- Save large computer workspaces by archiving them in the background by @elie222 in #4026
- Clear the sidebar's top fade when a collapsed list stops scrolling by @elie222 in #4028
- Create preview databases as UTF-8 by @elie222 in #4031
- Show only activity in the sidebar's activity view by @elie222 in #4030
- Only fix wrong ownership when data-init starts the app by @rjdotdev in #4012
- refactor(computer): keep provider screen sizes in the adapters package by @DeryFerd in #4019
- Keep a retried account deletion handing over a Space it owned elsewhere by @rjdotdev in #4020
- Say which setting allows private model and connector endpoints by @rjdotdev in #4023
- Consider ui-tokens and logging changes for mobile OTA updates by @rjdotdev in #4021
- Define product behavior separately from vision by @elie222 in #3983
- feat(api): trust extra auth origins from RAKAZO_EXTRA_AUTH_ORIGINS by @Alexdiazc in #4027
- Pass RAKAZO_ALLOWED_HOSTS to the web service in compose by @alexxanderdiaz in #4036
- Refresh the README with screenshots and a shorter intro by @elie222 in #4011
- Ship a slimmer app image by @elie222 in #4038
- Drop the beta line from the README by @elie222 in #4039
- Give up on a computer start the provider does not answer within two minutes by @elie222 in #4040
- Ship rg, fd, file and sqlite3 in the bot computer by @zicochaos in #4043
- Keep native iOS lists clear of the iPhone Duo side status bar by @elie222 in #4045
- Mark inbox rows for bots waiting on you by @elie222 in #4049
- Keep Expo and dev tooling out of the server image by @elie222 in #4041
- Let bots use paid data services on the deployment's account by @elie222 in #3681
- Show the iOS inbox as one native list by @elie222 in #4048
- Ask for a new bot's name and look on mobile, as on web by @elie222 in #4047
- Treat a refused email recipient as an expected failure by @elie222 in #4057
- Retry bot folder removal when a remote computer saves meanwhile by @elie222 in #4056
- Stop reporting a user's own model endpoint rejecting a request as a server error by @elie222 in #4058
- Give bot deletion the thread-lock transaction budget by @elie222 in #4059
- Treat a cancelled account export download as an abort, not a failure by @elie222 in #4060
- Retry a paused computer turn quietly while its tool is offline by @elie222 in #4061
- Tidy the routine editor and list by @elie222 in #4055
- Send an API key to a deployment-local model server that requires one by @nicolaeser in #4071
- Reserve more bot email names and their lookalikes by @elie222 in #4062
- Verify email from Microsoft 365 senders by @elie222 in #4063
- Let the desktop stack reach model servers on the same computer by @elie222 in #4075
- Stop long chat messages from freezing the mobile app by @elie222 in #4082
- Keep the screen tag on mobile crash and hang reports by @elie222 in #4080
- Report what grew when the desktop renderer runs out of memory by @elie222 in #4081
- Remove replaced images after a successful install-images update by @Quack6765 in #4090
- Reach a localhost model server from Rakazo running in Docker by @elie222 in #4086
- Update compatible dependencies and move React to 19.2.9 by @elie222 in #4073
- Upgrade the computer SDK and keep retries in the lifecycle by @elie222 in #4077
- chore: upgrade graphile-worker to 0.18.0 by @elie222 in #4088
- Update @composio/core to 0.28.0 by @elie222 in #4092
- Upgrade electron-builder to 26.18.1 and drop the app-builder-lib patch by @elie222 in #4074
- Update @boxd-sh/sdk to 0.3.0 by @elie222 in #4094
- Require Node 24.15, move Lingui to 6.12 and the site to the latest Astro by @elie222 in #4076
- chore: upgrade Vitest to 5 by @elie222 in #4097
- Update mppx to 0.17.5 by @elie222 in #4096
- Upgrade the mobile app to Expo SDK 58 by @elie222 in #4079
- Upgrade OpenTelemetry to api 1.10 and the 3.x trace SDK by @elie222 in #4091
- chore: upgrade Biome to 2.6.6 by @elie222 in #4089
- fix(adapters): send public model endpoint traffic through the configured proxy by @elie222 in #4033
- Hide marketplace plugins whose connector works only in the catalog's own app by @elie222 in #4032
- Let a bot remember the tool steps it took in earlier replies by @elie222 in #4034
- chore: share notification avatar encoding pipeline by @elie222 in #4087
- Let the bot find and trust its earlier tool work by @elie222 in #4050
- Keep unsigned thinking when the run transcript is rebuilt by @ald3b in #4105
- Index replies that used tools so the bot can check for them across chats by @elie222 in #4101
- Start the computer's Python helpers isolated by @ald3b in #4106
- test(evals): emulate mail, files and notes as connected MCP servers by @elie222 in #4102
- fix(daytona): enable native page browser and secure autofill by @Minoo7 in #4107
- Cap model credits at $200 by @elie222 in #4109
- Show a retired monthly credit amount in billing settings by @elie222 in #4110
- Ask the card's bank to confirm every credit purchase by @elie222 in #4111
- Rejects a React hook called at the top level of a page by @kaufmanjo in #4113
- Translate new web strings by @elie222 in #4120
- Open catalog PRs with the dependency-updates token by @elie222 in #4126
- Dictate into the mobile composer by @elie222 in #4100
- Fix the weekly model catalog bump's typecheck by @elie222 in #4128
- Let issue triage run for issues from users without write access by @elie222 in #4127
- Fix the nightly web E2E tests that fail every night by @elie222 in #4129
- Raise fast-uri to its patched release by @elie222 in #4132
- Answer 404 when a stopped computer's file is gone by @elie222 in #4134
- Let the weekly dependency agent reach its checkout by @elie222 in #4131
- Stop web_fetch from freezing the server on element-heavy pages by @elie222 in #4137
- Show a pasted personal access token and a degraded hosted model as the user's to fix by @elie222 in #4135
- Align the marketing header nav with the wordmark and drop Blog from it by @elie222 in #4141
- Start the live status card on devices that did not send by @bricelb in #4124
- Sync Chinese documentation and UI terminology by @earsonlau in #4143
- Release v0.9.0 by @elie222 in #4140
New Contributors
- @zozo123 made their first contribution in #3573
- @chesneynyffels made their first contribution in #3658
- @ModularTheGod made their first contribution in #3515
- @maxperala made their first contribution in #3694
- @KKandLL-Forever made their first contribution in #3741
- @AdityaxDeore made their first contribution in #3751
- @KieranBeals made their first contribution in #3755
- @cedricziel made their first contribution in #3762
- @smiling689 made their first contribution in #3766
- @thiemcun169 made their first contribution in #3753
- @VarunSharma13 made their first contribution in #3907
- @schultzp2020 made their first contribution in #3910
- @jayd609 made their first contribution in #3228
- @charinthink made their first contribution in #3953
- @Bwtaggart made their first contribution in #3975
- @colherdesopa made their first contribution in #4024
- @Alexdiazc made their first contribution in #4027
- @alexxanderdiaz made their first contribution in #4036
- @nicolaeser made their first contribution in #4071
- @Minoo7 made their first contribution in #4107
- @kaufmanjo made their first contribution in #4113
Full Changelog: v0.8.0...v0.9.0