PricingDocs
Get started

Changelog

October 17, 2026

Apps work again from older CLIs, members see only their own work, and Capture include lists

v0.14.1Latest

New

  • Kortix Capture records only the apps and websites you include: an organization policy plus a per-computer list.
  • kortix.yaml version 3 agents can opt in to the project repository.

Fixed

  • kortix apps works again from CLI versions before 0.14.0. Since 0.14.0 every Apps command from an older CLI answered "Apps is not enabled for this project".
  • A plain member reads and sees only their own work: their own sessions, costs and directory entry. Owners and admins are unchanged.
  • The Usage cost summary no longer fails on a gateway row with an empty provider.
  • A correct two-factor code opens the app at once instead of asking again.
  • Loading older messages keeps you where you were reading.
  • A session's side panel comes back open when you return to the session.
  • Review moves under Customize. Members without the rights see no Review entry and no empty Apps row.
  • The account hub drops the floating "Back to Customize" pill.
  • Connectors drop the "User-managed" badge: a per-person connector shows ✓ or Needs setup.
  • An older agent daemon no longer receives a governance it cannot read.
  • Sales lead emails go out from production only.
  • Connector MCP sync uses a bound project secret, and adding a connector keeps kortix.yaml intact.

Under the hood

  • The session-log backfill keeps its progress in the database, so it resumes when the API leader moves and skips oversized sessions.
  • The retired project.customize.* permissions leave the catalog.
  • Model catalog refresh; staging and dev deploy fixes.

What's Changed

  • chore(release): staging VERSION → 0.14.1 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10099
  • chore(release): VERSION → 0.14.1 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10100
  • fix(config-releases): withhold a governance from an old daemon together with its etag by @markokraemer in https://github.com/kortix-ai/suna/pull/10104
  • Promote dev 98e2a42c46 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10105
  • fix(connectors): drop the "User-managed" badge; per-person connectors show ✓ or Needs setup by @markokraemer in https://github.com/kortix-ai/suna/pull/10108
  • fix(api): session-log backfill resumes across leaders, skips oversized sessions, survives a lease flap by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10107
  • docs(learnings): run a project's own self-checks before merging a layout move by @markokraemer in https://github.com/kortix-ai/suna/pull/10111
  • chore(catalog): refresh model seeds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10112
  • fix(iam): a plain member sees nobody else in the directory by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10113
  • fix(web): a correct two-factor code opens the app at once instead of asking again (KRTX-2641) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10114
  • Promote dev e8bff15d1e to staging by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10115
  • fix(web): loading older messages leaves the reader where they were reading (KRTX-2652) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10116
  • fix(web): the account hub drops the floating Back to Customize pill (KRTX-2653) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10117
  • fix(web): a session's side panel comes back open when you return to it (KRTX-2661) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10118
  • fix(apps): CLIs before v0.14.0 can run kortix apps again by @markokraemer in https://github.com/kortix-ai/suna/pull/10122
  • learnings: keep serving a removed response field while released clients read it by @markokraemer in https://github.com/kortix-ai/suna/pull/10123
  • fix(web): Review moves under Customize; members without rights see no Review or empty Apps row by @markokraemer in https://github.com/kortix-ai/suna/pull/10124
  • Promote dev 007ecc3961 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10126
  • fix(ci): Deploy Staging logs in to Docker Hub before it inspects the staging images by @markokraemer in https://github.com/kortix-ai/suna/pull/10128
  • fix(api): sales lead emails go out from prod only; test runs stop mailing sales by @markokraemer in https://github.com/kortix-ai/suna/pull/10129
  • Promote dev 9a4f5ce733 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10130
  • feat(manifest): kortix_version 3 agents opt in to the project repository by @markokraemer in https://github.com/kortix-ai/suna/pull/10132
  • fix(iam): a plain member reads and sees only their own work; the IAM leaf is the only gate (API, web, mobile) by @markokraemer in https://github.com/kortix-ai/suna/pull/10136
  • fix(ci): dev API sign job installs envsubst before the cosign installer by @markokraemer in https://github.com/kortix-ai/suna/pull/10137
  • feat(capture): record only included apps and websites (org policy + per computer) by @markokraemer in https://github.com/kortix-ai/suna/pull/10134
  • fix(api): Usage cost summary no longer 500s on a gateway row with an empty provider by @markokraemer in https://github.com/kortix-ai/suna/pull/10138
  • fix(tests): four red tests that blocked the v0.14.1 release suite by @markokraemer in https://github.com/kortix-ai/suna/pull/10139
  • Promote dev 46108d5487 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10140
  • docs(learnings): the 2026-10-17 leader-worker outage ended at 12:25:51Z by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10142
  • learnings: guard a third-party action's shell tools on the runner (#10137) by @markokraemer in https://github.com/kortix-ai/suna/pull/10144
  • fix(tests): i18n audit finding and secret-grant manifest bytes block v0.14.1 by @markokraemer in https://github.com/kortix-ai/suna/pull/10146
  • fix(connectors): MCP sync uses a bound project secret; connectors add keeps kortix.yaml intact by @markokraemer in https://github.com/kortix-ai/suna/pull/10145
  • fix(api): release-suite fallout of #10136 (UUID literal, six stale IAM tests) by @markokraemer in https://github.com/kortix-ai/suna/pull/10148
  • Promote dev de0641969c to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10149
  • Release v0.14.1 — Apps work again from older CLIs, plus session and access fixes by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10135

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.14.0...v0.14.1

Read the full release on GitHub
October 16, 2026

Credits plan, Enterprise features, restorable sessions and generative UI

v0.14.0

New

  • One credits plan. Every account is on Free or Credits, with top-ups on either. Balances and usage read in credits everywhere; prices you pay stay in your currency. Raising your plan applies at once; lowering it takes effect at the next renewal, with a preview before you confirm.
  • Enterprise is a feature layer. SSO, SCIM, roles and groups, audit and branding come with an Enterprise license or a self-serve demo. Trials are gone. Admins can now manage billing.
  • Restorable sessions. A deleted session can be restored for 30 days, with Undo on web and kortix sessions restore. A session that lost its computer continues on a new one from its saved conversation, including images and files.
  • Pin and archive sessions to keep your list in order.
  • Generative UI. Agents can answer with visual blocks: cards, comparisons, photo steps, product cards, maps and figures, on web and mobile.
  • Themes. Kortix palettes plus 39 interface themes, with a live preview in the command palette.
  • Kortix Apps are generally available, and open in the session browser. Add any site as an external App by its URL, framed in Kortix. The App detail sheet, menu and connect dialog are rebuilt.
  • Kortix Capture, a desktop recorder for your account, with its own area on the web.
  • MCP servers connect from their URL in one step, with one-click OAuth sign-in. New MCP and Computer settings pages.
  • kortix.yaml version 3 is available as an opt-in: the project registers skills, tools and commands, and each agent enables what it uses. New projects still start on version 2, and nothing upgrades on its own. kortix migrate converts a project when you choose to.
  • Desktop: the Dock and taskbar icon counts finished turns you have not seen, and right-click shows the platform menu.

Improved

  • Toasts and notifications are redesigned and say what happened, under the right session.
  • The Customize and Models pages are redesigned; Slack and Teams have new connect flows.
  • pi sessions: codemode is on by default, images work on the computer, and summaries and compaction are steadier.
  • A session opens on its own model on web and mobile, and returning to a session tab no longer redraws the transcript.
  • A draft keeps its attached files across a session switch and a reload; a typed follow-up keeps Send during a turn.
  • Slash commands sent mid-turn wait for the agent to finish; @file and @agent mentions reach the agent on the first message.
  • A running compaction no longer opens on a blank page; its rows sit with the turn.
  • Project members with limited access see only the Customize tabs they can manage.

Fixed

  • The first renewal after checkout is no longer skipped.
  • Only the person who prompted a run, the owner or a manager can stop it, and everyone sees who stopped it.
  • Another person prompting a private session no longer runs with their own personal accounts.
  • A deleted session's transcript, prompts and config now return not found, like the session.
  • Shared sessions render their messages the same way the session does.
  • An idle computer no longer sticks in starting after an update, and a prompt sent while a config change applies reaches the agent.
  • Large agent configs boot; database connections retry when they never establish.
  • New computer images warm up the agent runtime again, so a fresh session starts faster.
  • Many smaller fixes across web, mobile, desktop, the CLI and connectors.

What's Changed

  • feat(api): a converted session log becomes native at its first journal write (P3.3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9790
  • fix(web): KRTX-1771 show and announce copy feedback by @agent-kortix in https://github.com/kortix-ai/suna/pull/9741
  • fix(gateway): a budget meter shows the spend the gate counts for the budget's own period, and when it resets (KRTX-1725) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9789
  • feat(sessions): a deleted session is restorable for 30 days, with Undo on web and kortix sessions restore (KRTX-1734) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9792
  • fix(auth): default the return sign-in to the email-link path (KRTX-1653) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9773
  • feat(kortixd): the boot restores a session from its log when the native store is missing or behind (P6.4) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9794
  • test(e2e): journey 49 reads the new account back after the API answers by @markokraemer in https://github.com/kortix-ai/suna/pull/9795
  • refactor(web): keep turn bookkeeping exports private (KRTX-1709) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9732
  • feat(sdk): pi sessions read the session log (v2) like OpenCode ones (P5.2d) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9797
  • test(deps): verify the CodeMirror singleton pin holds on dev (KRTX-1650) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9763
  • test(config-releases): CFG-16 expects the snapshot or a git fetch, never the checkout by @markokraemer in https://github.com/kortix-ai/suna/pull/9799
  • feat(web): redesign the Customize pages and the Models page tabs by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9801
  • fix(kortixd): a relaunched daemon reaps the OpenCode a killed daemon left on its port (P2.9) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9802
  • fix(web): dev's test suite is green again (audit route list, 2 hardcoded strings, 5 ja/zh plurals) by @markokraemer in https://github.com/kortix-ai/suna/pull/9803
  • fix(session): the opened "Worked for" fold reads like the agent's narration, one named line per run of work by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9774
  • docs(learnings): strip credentials before an agent saves an API response by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9805
  • test: session-log tests run on v2 data; no web host file imports a v1 session type (P5.7) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9809
  • test(kortixd): adapters declare tested harness versions; a guard fails on an unvetted bump (P6.5) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9810
  • test(config-releases): CFG-16's second release may come from a git fetch too by @markokraemer in https://github.com/kortix-ai/suna/pull/9812
  • fix(api): surface Slack file-download failures and retry transient ones (KRTX-1658) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9787
  • feat(web): a tool from another harness renders by its session-log kind (P5.3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9815
  • fix(auth): persist sign-in email failures (KRTX-1689) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9711
  • KRTX-2199: Keep demo qualifier on failed submission by @agent-kortix in https://github.com/kortix-ai/suna/pull/9710
  • fix(cli): store the sessions new --prompt verbatim; ship the worker contract as initial_context (KRTX-1547) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9618
  • fix(web): the 404 page owns its document title during client-side navigation (KRTX-1767) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9798
  • fix(kortixd): scrape_webpage waits out Firecrawl's timeout envelope; slow scrapes no longer fail at 35s (KRTX-2073) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9816
  • chore(catalog): refresh model seeds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9820
  • fix(members): one offboarding sequence revokes a leaver's computer accounts and pauses their reminders (KRTX-1722) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9793
  • fix(secrets): a stored value Kortix cannot decrypt reads as undecryptable everywhere, with its remedy (KRTX-1719) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9821
  • fix(api): wake retries a host-saturated Platinum start instead of parking the session by @markokraemer in https://github.com/kortix-ai/suna/pull/9823
  • fix(release): promote approves the release PR's own gate run; rerun-once covers an approved attempt 2 by @markokraemer in https://github.com/kortix-ai/suna/pull/9824
  • chore(release): VERSION → 0.13.58 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9826
  • chore(release): staging VERSION → 0.13.58 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9827
  • docs(learnings): watch admin-grant-funded enterprise account balance before zero by @markokraemer in https://github.com/kortix-ai/suna/pull/9829
  • fix(api): suppress the daemon not-ready 503 on the session-abort completion line (KRTX-2277) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9822
  • fix(approvals): Approve and Deny show only to a viewer who can resolve the call; others see who decides (KRTX-1724) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9825
  • fix(self-host): an auto-confirmed email is unproven: no invite claim, SCIM match or add-by-email (KRTX-1715) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9828
  • fix(sessions): a turn cut short by a provider stop or a runtime restart gets its work back exactly once (KRTX-1732) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9830
  • test(e2e): journey 30 seeds ChatGPT logins the local API can decrypt (KRTX-1719) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9833
  • test(e2e): dev green again — journeys follow the provider sheet, named work lines, send-code and undecryptable secrets by @markokraemer in https://github.com/kortix-ai/suna/pull/9832
  • fix(web): sandbox empty-state New opens create mode, not stale edit (KRTX-2176) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9673
  • feat(web): the transcript shows a partial restore, a harness switch, hidden messages and full texts (P5.6) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9835
  • fix(kortixd): pi session log carries reasoning tokens, titles and a child context time; a manual compaction reaches the log at once (P2.10, P2.12) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9836
  • fix(api): memoize the session-list poll ETag — a poll burst no longer queues its own DB ops (KRTX-468) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9506
  • perf(connectors): read the projects and connectors rows once per /call (KRTX-2050) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9482
  • Stopped session no longer dead-ends: the tab wakes it when the human returns by @agent-kortix in https://github.com/kortix-ai/suna/pull/9682
  • fix(web): step-up dialog — add Set up authenticator for members with no second factor by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9838
  • refactor(web): review polish for KRTX-1587 Send now by @agent-kortix in https://github.com/kortix-ai/suna/pull/9677
  • fix(sessions): a session list page holds only sessions its viewer may open, and a delete keeps the list order (KRTX-2316) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9837
  • fix(sessions): a session id is read by id: GET /v1/sessions/:id, and the SDK and mobile use it (KRTX-2316) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9839
  • fix(review): the review counters read GET /review/summary, and the inbox and change-request lists are paged (KRTX-2316) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9842
  • docs(agents): web tsc baseline is 103 errors on dev; the bar is relative to dev by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9844
  • feat(genui): generative UI blocks for agent answers on web and mobile by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9502
  • feat(sessions): remove stateless sessions, boot modes and persistent machines by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9846
  • docs(learnings): keep a withdrawn field in a strict request schema as an inert key by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9847
  • fix(deps): regenerate pnpm-lock.yaml so frozen installs pass again by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9849
  • fix(web): localize the session filter menu's Teams section row (KRTX-2175) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9653
  • feat(api): the retention purge treats an account closure the deletion worker left open as the end of the subscription (D6b) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9850
  • feat(api): the API image runs Bun 1.4.3, the Bun of the test lanes by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9848
  • perf(tests): flows stop waiting on the 60 s git mirror; kortixd tests run 4 at a time by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9852
  • fix(web): refuse read-only SQLite mutations before they execute (KRTX-2229) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9818
  • feat(kortixd): pi drops another model's reasoning from requests and summaries; restore keeps same-model reasoning (P7.3, P7.2) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9855
  • chore: block two competitor names in commits; delete a dead comparison icon by @markokraemer in https://github.com/kortix-ai/suna/pull/9857
  • fix(sdk): session-log types copy carries P7.3's reasoning comment (drift test red on dev) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9858
  • docs(learnings): an api-contract session-log edit runs the SDK session-log tests by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9860
  • feat(session-log): switch preflight reports what a harness switch loses; kortixd keeps harness history across a switch (P7.1) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9862
  • fix(web): a file dropped outside a drop zone no longer replaces the page by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9863
  • fix(sessions): an app restart and a Sessions page reload show the kept session lists at once (KRTX-261) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9864
  • fix(sessions): a session open reads its saved history once, on web and mobile (KRTX-189) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9865
  • fix(kortixd): a release whose bun.lock is older than the image's cache still installs its tool deps by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9869
  • fix(cli): resolve named host identity for accounts (KRTX-2289) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9866
  • feat(manifest): agents..workspace.project_repository decides the session checkout by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9872
  • feat(starter): the starter kortix.yaml shows agents..workspace by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9873
  • perf(config-releases): build each base tip's release on push; pi boots from S3 with no API call by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9874
  • feat(mobile): the mobile session thread renders the session log; SDK block readers and v2 paging order (P5.4) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9875
  • chore(terraform): move the DCF-99 backup plan to eu-west-2; drop the us-west-2 state leftovers by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9871
  • fix(terraform): let the account delete the backup key alias and cancel its deletion by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9876
  • perf(config-releases): one upstream tip check per project per interval, shared by every box by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9880
  • fix(web): /settings/api-keys opens the Personal access keys tab (KRTX-2291) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9878
  • feat(web): ⌘V outside a text field pastes into the composer by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9881
  • fix(apps): volumes tell the truth and a database never splits on scale by @markokraemer in https://github.com/kortix-ai/suna/pull/9883
  • fix(web): account settings and the confirm dialog's default buttons speak the viewer's language (KRTX-2326, KRTX-2327) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9882
  • fix(web,sdk,cli,mobile): session-log P5 follow-ups: sub-agent loads, earlier-messages control, full-text plan, CLI provisional under ext by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9887
  • perf(kortixd): pi loads a release's ./ extensions by native import, not jiti by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9888
  • fix(cli): preserve the origin in logout recovery hints (KRTX-2323) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9879
  • feat(kortixd): pi 1.2.0; summaries drop reasoning upstream, 3 more provider errors retry by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9890
  • feat(llm-gateway): the gateway image runs Bun 1.4.3, the Bun of the test lanes by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9891
  • fix(session-log): answer 429 when another batch holds the session's lock, not a 25 s wait (KRTX-2344) by @markokraemer in https://github.com/kortix-ai/suna/pull/9892
  • docs(learnings): never let a request wait on a lock an abandoned request may hold (KRTX-2344) by @markokraemer in https://github.com/kortix-ai/suna/pull/9893
  • fix(cli): use saved default for unlinked ship (KRTX-2324) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9886
  • fix(pi): a new message dismisses an open question, so no session wedges behind it by @markokraemer in https://github.com/kortix-ai/suna/pull/9900
  • fix(web,sdk): zero the prod frontend Better Stack error groups by @markokraemer in https://github.com/kortix-ai/suna/pull/9901
  • feat(web): link pages on the auth frame, share page redesign, mobile app intro, Terms on /legal, toolbar button groups by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9903
  • fix(api): a compaction marks its /summarize turn durable on both harnesses (P2.11) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9905
  • feat(web): interface themes — Kortix palettes plus 39 terminal themes, product routes only by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9904
  • fix(api): release a trigger session's question at once; nobody can answer it by @markokraemer in https://github.com/kortix-ai/suna/pull/9908
  • fix(config-releases): an agent without the project repository loads its project tools by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9909
  • fix(sdk,web,cli): context modal no longer crashes with 20+ sub-agents; rows load in view; CLI prints failed-call errors by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9910
  • fix(auth): KRTX-2337 return 429 for rate-limited send-code by @agent-kortix in https://github.com/kortix-ai/suna/pull/9885
  • fix(api,kortixd): an idle box no longer sits in starting after a daemon deploy; the tick stops racing its own swap by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9907
  • fix(kortixd): no tool-load warning while no project tree is served; learnings entry for #9909 by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9913
  • feat(kortixd,api): session-log restore keeps tool-input key order, stops context-record growth, and imports OpenCode threads at once (P6 follow-ups) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9917
  • fix(api): a failed regional template copy boots the session in the home region by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9916
  • feat(billing): credits-only — one credits plan from $50, top-up bonus, 5.5% model fee, no legacy plans by @markokraemer in https://github.com/kortix-ai/suna/pull/9814
  • feat(capture): Kortix Capture — account-tenant platform, Capture Intelligence (episodes, workflows, skills), data API, web area, desktop service by @markokraemer in https://github.com/kortix-ai/suna/pull/9008
  • fix(auth): bound reset-link requests and keep send errors visible (KRTX-2251) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9877
  • fix(tests): attest only the source the run started on by @markokraemer in https://github.com/kortix-ai/suna/pull/9931
  • feat(billing): one plan system — Enterprise contracts, dated trials, admins manage billing by @markokraemer in https://github.com/kortix-ai/suna/pull/9930
  • fix(db): backfill-safe sign-off on the billing data migration; migration lint in the packages lane by @markokraemer in https://github.com/kortix-ai/suna/pull/9932
  • fix(sdk): dedupe permission replies and answer the runtime's already-answered 404 (KRTX-2190) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9933
  • fix(api): report ready Automatic sandbox health (KRTX-2346) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9895
  • chore(catalog): refresh model seeds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9936
  • fix(web): resolve workspace document file links against the document's directory (KRTX-2226) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9819
  • fix(web): treat WebKit masked-extension URLs as browser-extension noise (KRTX-1828) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9911
  • test(e2e): journeys close the mobile-app promo and get Enterprise from a trial (dev browser lanes red since #9903 and #9930) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9937
  • fix(web): the SSO edit dialog keeps what the admin typed when the provider refetches (KRTX-2401) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9938
  • fix(web): the sandboxes migrations hint is translated and plural-aware; the debug tools page drops a dead toggle (KRTX-2383, KRTX-2384) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9939
  • fix(web): audit quick filters work in every language, and the secret titles are translated (KRTX-2399, KRTX-2400) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9940
  • fix(connectors): give shellless agents the legacy connector tools (KRTX-2354) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9902
  • fix(gateway): a gateway API key records a used-up shared ChatGPT account (KRTX-2417) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9941
  • fix(web): KRTX-2284 guard stale game-of-life logo loads by @agent-kortix in https://github.com/kortix-ai/suna/pull/9861
  • feat(sessions): pin a session to the top or archive it out of your list (KRTX-2418) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9942
  • fix(teams): drop the "Task complete" title from finished reply cards by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9944
  • fix(sdk,web,api): every sub-agent row in session usage reads its runtime messages; one turn's sub-agents are all saved by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9943
  • fix(web): parseListing trims trailing slashes in linear time; fallback test strips tags without a regex (CodeQL) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9947
  • Promote dev fbc93ddda2 to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9945
  • fix(tests): shard table lists 52-session-pin-archive; drop 3 unused symbols CodeQL flagged by @markokraemer in https://github.com/kortix-ai/suna/pull/9950
  • feat(sessions): continue a lost session on a new computer from its saved conversation (KRTX-2419) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9949
  • Promote dev fbc93ddda2 + CodeQL fix to staging by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9948
  • fix(billing): KRTX-2405 remove Link phone gate from hosted Checkout by @agent-kortix in https://github.com/kortix-ai/suna/pull/9946
  • fix(tests): two release-gate flows hold on deployed staging (SESS-51, SESS-24) by @markokraemer in https://github.com/kortix-ai/suna/pull/9954
  • hotfix(tests): SESS-51 expects the removal-pending 409 only on the local profile by @markokraemer in https://github.com/kortix-ai/suna/pull/9953
  • fix(apps): full-window app previews (KRTX-2357) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9952
  • feat(apps): Apps is generally available — remove the apps feature-flag gate (KRTX-2355) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9934
  • fix(sessions): only the prompter, owner or a manager can stop a run, and everyone sees who stopped it by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9956
  • fix(web): a signed-out session stops rendering protected pages (KRTX-2387) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9955
  • docs(learnings): guard a provider-unreachable flow step on the local target by @markokraemer in https://github.com/kortix-ai/suna/pull/9957
  • feat(web,mobile): redesign toasts, session and trigger notifications by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9961
  • fix(web): Skip for now closes the onboarding wizard, and the mobile app promo waits for onboarding (KRTX-2378, KRTX-2396) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9963
  • fix(worktree): search past busy slots and never reuse a registered slot by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9965
  • fix(tests): repair the two apps/api unit files #9949 turned red (KRTX-2429) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9964
  • feat(web): rebuild the App detail sheet, menu, connect dialog and machines by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9966
  • fix(api): a deleted session's transcript, prompts and config read 404, as the session does (KRTX-2275) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9967
  • feat(pi): codemode on by default; a script's tool calls pass the permission policy by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9958
  • fix(billing): no Most popular badge on the credit tiers by @markokraemer in https://github.com/kortix-ai/suna/pull/9969
  • fix(web): forced billing refreshes debounce per QueryClient and account, so one account no longer cancels another's (KRTX-2414) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9970
  • test(e2e): journey 27 picks the theme from the Appearance combobox (#9904) by @markokraemer in https://github.com/kortix-ai/suna/pull/9971
  • fix(web): session toasts say what happened, under the right session by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9976
  • fix(tests): journeys 40, 34, 30 and 23 follow the shipped session and share behavior by @markokraemer in https://github.com/kortix-ai/suna/pull/9975
  • feat(billing): Enterprise is a feature layer — a trial lends features, not the plan by @markokraemer in https://github.com/kortix-ai/suna/pull/9978
  • fix(kortixd,api): a prompt sent during a config convergence reaches the live OpenCode; a provider-edge refusal is retried by @markokraemer in https://github.com/kortix-ai/suna/pull/9980
  • feat(session-log): the journal stores attachment bytes, so a restore on a fresh box keeps images and files (P2.13) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9977
  • feat(web): Slack and Teams connect heroes, BYO wizards, avatar and checkbox refresh by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9982
  • feat(genui): visual answers with photo steps, product cards, maps, and figures by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9962
  • feat(billing): BYOK fee — first $1,000/month of list-price usage free, then 5% by @markokraemer in https://github.com/kortix-ai/suna/pull/9984
  • feat(api): dev turns session_log_restore on for every project; a deployment default decides it by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9986
  • feat(billing): BYOK fee is an entitlement, on by default, switchable per account by @markokraemer in https://github.com/kortix-ai/suna/pull/9987
  • fix(api,kortixd): a compiled agent config over 128 KiB boots, and no daemon is handed one it cannot hold by @markokraemer in https://github.com/kortix-ai/suna/pull/9988
  • fix(tests,web,mobile): green dev — pricing smoke, spec 26 fee, Capture fixture, i18n audit, codemode coverage by @markokraemer in https://github.com/kortix-ai/suna/pull/9983
  • fix(connectors): classify transient Composio provider failures as a retryable 503 (KRTX-2424) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9991
  • feat(web): MCP and Computer settings pages by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9992
  • fix(web): paste tiles render for blank-line pastes, trim, matched Copy; queued row actions menu by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9993
  • refactor(billing): Enterprise is a feature layer (off | demo | licensed); trials removed by @markokraemer in https://github.com/kortix-ai/suna/pull/9999
  • fix(mobile): sync the Teams mark's fill form with the refreshed web icon (KRTX-2454) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9994
  • feat(manifest): kortix.yaml v3 is canonical: the project registers, each agent enables by @markokraemer in https://github.com/kortix-ai/suna/pull/10000
  • fix(kortixd): an OpenCode v3 session whose agent its ref does not declare runs default_agent by @markokraemer in https://github.com/kortix-ai/suna/pull/10002
  • fix(cli): kortix migrate converts split manifests, folder-only agents and the whole harness folder by @markokraemer in https://github.com/kortix-ai/suna/pull/10003
  • docs(learnings): prove a harness config change in a real session on both harnesses by @markokraemer in https://github.com/kortix-ai/suna/pull/10004
  • feat(billing): credits everywhere for what you hold or spend; instant upgrade, scheduled downgrade with preview; fix skipped first renewal by @markokraemer in https://github.com/kortix-ai/suna/pull/10007
  • fix(web): route the two hardcoded UI strings through the i18n catalog (KRTX-2430) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9974
  • fix(cli): show the gateway URL when minting or listing gateway keys (KRTX-1750) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9990
  • chore(web): align the checkbox disabled cursor reason with the file's own wording (KRTX-2455) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10006
  • test(shared): make the codemode fixture's denied-call error match the sandbox (KRTX-2449) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9989
  • docs(web): anchor the KRTX-2292 iOS WebView stack-overflow fingerprints on the noise rule (KRTX-2292) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9919
  • chore(catalog): refresh model seeds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10011
  • test(sdk): sweep the script family's failure phrasing too (KRTX-2450) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9998
  • perf(api): memoize share-subject + app access-grant reads per request (KRTX-2341) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10001
  • test: attest the green packages lane at dev (KRTX-2456; hero snapshot fix landed via #9974) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9996
  • fix(api): classify an in-flight sandbox state transition as a typed 409, not a 500 (KRTX-2028) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9920
  • fix(llm-gateway): drop gpt-5.5 from the Codex lineup (KRTX-2445) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9981
  • fix(web): map the session-log blob routes in the audit route registry (KRTX-2457) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10005
  • test(apps): pin OR semantics of multi-group App access (KRTX-2352) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9923
  • fix(api): another person prompting a private session no longer runs with their own personal accounts (KRTX-2517) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10012
  • fix(connectors): one Slack entry across install paths (KRTX-2353) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9921
  • fix(api): answer a non-uuid review item id like a miss, not a 500 (KRTX-2442) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10013
  • feat(desktop): count finished turns you have not seen on the Dock and taskbar icon (KRTX-2520) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10015
  • fix(web): stop settings:computer palette row from answering "apps" (KRTX-2475) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10010
  • fix: export the conversation of a sleeping session from its saved copy (KRTX-2525) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10021
  • fix(sdk,web): announce a turn that ends after you leave its session page (KRTX-2524) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10020
  • fix(db): guard postgres.js nextWrite against a socket closed mid-write (KRTX-2511) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10019
  • KRTX-2026: db lane grants session_replication_role to postgres at lane start by @agent-kortix in https://github.com/kortix-ai/suna/pull/10017
  • fix(web): theme picker announces the applied theme, neutral check-your-email copy, German shortcut term, project settings URL (KRTX-2468, KRTX-2516, KRTX-2470, KRTX-2491) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10025
  • fix(db): retry a statement whose connection never established (KRTX-2510) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10023
  • fix(api): purge a project's connector rows when the project is purged (KRTX-1907) by @agent-kortix in https://github.com/kortix-ai/suna/pull/10018
  • feat(web): preview a theme while it is highlighted in the command palette by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10027
  • fix(sdk): returning to a session tab no longer re-reads and redraws the transcript (KRTX-2541) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10028
  • fix(web): hold a slash command sent mid-turn and run it when the agent finishes (KRTX-2464) by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10029
  • feat(web): add the Jellybeans Light theme and keep the user bubble visible on light themes by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10031
  • fix(test): refuse a suite-wide pnpm test on a developer Mac by @markokraemer in https://github.com/kortix-ai/suna/pull/10032
  • fix(web): CSV viewer download uses the viewer's file name (KRTX-2230) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9840
  • fix(manifest): make kortix.yaml v3 opt-in again; new projects start on v2, no v3 upgrade offer by @markokraemer in https://github.com/kortix-ai/suna/pull/10034
  • fix(web): /download/capture never redirects to the internal host; dev serves the dev channel by @markokraemer in https://github.com/kortix-ai/suna/pull/10035
  • fix(web): an unresolved command chip can no longer carry attachments out as a prompt (KRTX-1903) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9995
  • fix(kortixd): pi relays the /summarize turn under its compaction id; the id-less durable rule goes by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10033
  • fix(web): cancel game-of-life resize on unmount (KRTX-2280) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9854
  • fix(web): add an MCP server from its URL in one step, Only you by default (KRTX-2185) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10039
  • fix(llm-gateway): move a stale ChatGPT default off a model ChatGPT refuses by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10040
  • feat(sessions): /workspace on a Platinum volume behind the workspace_volume flag by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10047
  • fix: clear the staging promotion scanners (gitleaks, Trivy, squawk, Checkov, Drata, CodeQL) by @markokraemer in https://github.com/kortix-ai/suna/pull/10042
  • feat(session-log): cap the restore at 24 MiB; over it the box boots with the D3 note alone by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10043
  • fix(web): @file and @agent mentions reach the agent on a chat's first message and in slash commands (KRTX-2553) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10049
  • fix(tests): e2e Enterprise fixture uses the demo; Apps specs drop the retired flag gate by @markokraemer in https://github.com/kortix-ai/suna/pull/10038
  • fix(desktop): right-click shows the platform menu: spelling, edit, link and image (KRTX-2555) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10051
  • fix(kortixd): pi sees images on a box (embedded photon wasm, prompt images inline) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10048
  • test(ci): packages lane 18.5 -> 6.9 min: four parallel lanes, no real-clock waits in unit tests, balanced shards by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10054
  • fix(web): mobile app intro shows the current App Store shot and the official store badges by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10055
  • fix(share): render a shared session's messages as the session does by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10052
  • fix(sessions): web and mobile open a session on its own model by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10056
  • fix(web): a typed follow-up keeps Send during a turn, and one bad file no longer blocks a drop (KRTX-2556, KRTX-2557) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10057
  • Testing reset: one tree, one run — no Tests on push to dev, no attestations, 9 money-path browser specs, 220 low-value test files deleted by @markokraemer in https://github.com/kortix-ai/suna/pull/10058
  • fix(connectors): MCP OAuth sign-in completes (Basic auth sends no body client_id); hide the empty shared account; no 404 toast on remove (KRTX-2185) by @markokraemer in https://github.com/kortix-ai/suna/pull/10053
  • feat(web): open Kortix Apps in the session browser (KRTX-2441) by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10045
  • docs(project): v3 slash commands are declared in kortix.yaml and enabled per agent by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10060
  • fix(web): config fallback chip shows an amber badge, a two-step timeline and the full error by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10062
  • test(api): session-log blob slot tests hold Storage instead of a fixed delay by @markokraemer in https://github.com/kortix-ai/suna/pull/10037
  • fix(sdk): a new session no longer shows under Pinned in the sidebar by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10059
  • fix(web): a draft keeps its attached files across a session switch and a reload by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10064
  • fix(api): a lost session's /start answers from the row instead of re-checking the provider every call (KRTX-2566) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/10066
  • fix(sdk): a compaction inside a turn renders where it happened, not at the bottom by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10067
  • fix: staging gate round 2 — v2 starter fallout of #10034 (image warm-up), i18n order, React Compiler test lint, hot-path capture race by @markokraemer in https://github.com/kortix-ai/suna/pull/10050
  • fix(api): stop re-reporting an already-parked lost runtime on every /start poll by @agent-kortix in https://github.com/kortix-ai/suna/pull/10070
  • fix(web): limited project members see only the Customize tabs they can manage by @sutharjay1 in https://github.com/kortix-ai/suna/pull/10068
  • fix(web): a running compaction no longer opens on a blank page; its rows sit with the turn by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10072
  • revert(tools): remove the MCP-era connector meta-tools; connectors are the kortix CLI only by @markokraemer in https://github.com/kortix-ai/suna/pull/10073
  • ci(capture): sign and notarize the macOS pkg; stable refuses an unsigned one by @markokraemer in https://github.com/kortix-ai/suna/pull/10074
  • Promote dev 802123a7bf to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/10069
  • Test latency: one Promote dispatch, one release suite as the only gate; tsgo, pnpm check, Mac guard, faster CodeQL by @markokraemer in https://github.com/kortix-ai/suna/pull/10075
  • Promote dev c28c0c9726 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10076
  • feat(capture): compile in the update signing public key by @markokraemer in https://github.com/kortix-ai/suna/pull/10077
  • feat(connectors): Install uses the app's own MCP server when sign-in is one click; CLI OAuth callback says Connected (KRTX-2185) by @markokraemer in https://github.com/kortix-ai/suna/pull/10078
  • revert(sessions): remove /workspace on a Platinum volume (#10047) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/10079
  • fix(ci): Promote finds the Deploy Staging run; find_run's optional sha no longer trips set -u by @markokraemer in https://github.com/kortix-ai/suna/pull/10080
  • Promote dev 550441d62f to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10081
  • feat(capture): choose the Kortix API address in the app by @markokraemer in https://github.com/kortix-ai/suna/pull/10082
  • Dev green: fix the last red tests, fake clocks, no quarantine, staging App origin, mcp-sign-in-check audit label by @markokraemer in https://github.com/kortix-ai/suna/pull/10084
  • docs(audit): regenerate the audit action reference (mcp_sign_in.check) by @markokraemer in https://github.com/kortix-ai/suna/pull/10085
  • Promote dev 3771bb37e4 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10086
  • fix(manifest): a v2 manifest with imports keeps skills, commands and extensions out of the merge by @markokraemer in https://github.com/kortix-ai/suna/pull/10087
  • fix(permissions): the most specific rule wins on both harnesses, whatever the key order by @markokraemer in https://github.com/kortix-ai/suna/pull/10089
  • feat(apps): external Apps — add any site by URL, framed in Kortix by @markokraemer in https://github.com/kortix-ai/suna/pull/10090
  • docs(learnings): gate every new manifest key on kortix_version (near-miss #10087) by @markokraemer in https://github.com/kortix-ai/suna/pull/10091
  • fix(tests): billing journey drives the credits tier dropdown, not the retired preset radiogroup by @markokraemer in https://github.com/kortix-ai/suna/pull/10092
  • Promote dev 3619f16275 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10093
  • fix: clear the v0.14.0 release gate — kortixd bundles permission-rules, spec flow-id parse, billing subscribe on the ladder, connector Settings tab scope by @markokraemer in https://github.com/kortix-ai/suna/pull/10094
  • Promote dev 39d8f39cb0 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10095
  • fix(tests): billing journey reads Renews for an active plan and tops up a current preset by @markokraemer in https://github.com/kortix-ai/suna/pull/10096
  • Promote dev 403b502060 to staging by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10097
  • Release v0.14.0 — Credits plan, Enterprise features, restorable sessions and generative UI by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/10083

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.57...v0.14.0

Read the full release on GitHub
October 14, 2026

Big folders in Files, a sidebar you arrange, and redesigned account settings

v0.13.57

New

  • Files handles big folders. A folder with thousands of files loads in pages with Load more, and Find a file now searches file contents as well as names.
  • Arrange your project sidebar. Choose and order the items in the project sidebar. The layout is saved on your account, so it follows you to every browser.
  • Send now on queued messages. Each message waiting in the queue has its own Send now, so you can push one ahead without clearing the rest.
  • Know how long your sandbox stays on. The composer tells you how long the sandbox stays running while you are in the session.
  • Mobile settings drill down into each section, and a mobile invitee lands directly in the project they were invited to.
  • Backend cards show a live preview of their Dashboard tab.
  • Quick Entry on desktop. Start a session from any app with a global shortcut.
  • Spreadsheet previews in the Repo page, read straight from git.
  • Redesigned account settings. Sections are grouped under General, Access and Billing; inviting, granting access, creating tokens and registering apps open in a side sheet next to the page; new avatars.

Improved

  • An agent's question docked on the composer collapses to one line, so it no longer covers the conversation.
  • The reminders calendar stays readable on busy projects.
  • Sidebar, settings and count badges are more consistent across web and mobile.
  • Long Slack turns are no longer stopped at 30 minutes.
  • Sending a prompt is faster: it no longer waits for config updates, environment loading or model catalog repair to finish first.
  • Warm sessions no longer appear in the sidebar list.
  • A session whose agent asked you a question shows Needs you until you answer, and the question closes when the wait ends.
  • A plain member sees only the members and groups they share access with.
  • Web and mobile show only the trigger, review, settings and top-up controls your role allows.
  • A connector whose first sync fails or needs a sign-in opens on its page with the next step ready.
  • Content of a deleted session is now removed 30 days after the deletion, and its files 7 days after that.
  • Groundwork for the new session history: long session texts are stored as attachments, and tool results render from the new session log where it is turned on.
  • Sandboxes and CI run Bun 1.4.3.

Fixed

  • A personal access token can now approve gated connector calls.
  • Changing only the expiry of someone's account access now saves.
  • An App whose machine failed to start recovers on its own the next time it wakes.
  • A failed autosave on repository settings or a workspace rename no longer retries forever.
  • Web Push and the inbox follow the same MFA rule as the rest of your access.
  • On mobile, the drawer closes as soon as you navigate.
  • The Files New menu offers only actions that work, and sharing never suggests yourself.
  • Turning Volumes on never makes an organization stateless, and every server agrees on the Volumes setting right after a change.
  • A pi project's local ./ package loads from the config release and restarts pi when it changes.
  • Malformed account IDs and stray characters in session logs return a clear 4xx error instead of a server error.
  • The composer's stacked layers line up at full width.
  • kortix sessions wait-for exits non-zero when the turn fails, and the CLI prints a preview URL on the host the deployment serves.
  • A prompt sent without an agent runs under the session's agent.
  • An App can give its readers access to the Apps it uses, and the App header shows which App you are in.
  • SSO-only workspaces end the sign-ins they refuse and refuse personal access tokens; mobile sends an SSO-enforced email to SSO.
  • Deleting an account stays blocked when its status check fails.
  • Session screens show their labels in your language.
  • Starting, restarting and repairing a session's box no longer race each other.
  • Apps with volumes deploy without naming a provider, and account commands follow the project link.
  • Logging out of the CLI keeps the registered host, and kortix connectors confirms a revocation before it reports success.
  • Volumes and Stateless sessions are per-project settings.
  • Mobile session lists keep loading past empty pages, and the audit log's Session filter accepts a pasted id.
  • The agent tunnel records that it is offline even when it is stopped right after starting.

Behind the scenes

  • Every merge to dev now runs the full test suite, and releases promote only a tested commit.
  • Database migrations commit one file at a time, which removes the deadlock that stalled the v0.13.54 deploy.
  • Each Terraform environment keeps its state in its own region, and the security alert hub moved to eu-west-2.
  • Unused infrastructure stacks were removed.
  • Security fixes from an external penetration test, and row-level security on every internal table.
  • Staging now runs on the same infrastructure shape as production, so release checks see what production sees.

What's Changed

  • docs(learnings): a per-build provider template needs a bounded reaper, not a predecessor prune by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9617
  • fix(cli): sessions wait-for exits non-zero on a failed turn (KRTX-1560) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9616
  • feat(api): session-log text over 256 kB lives in session-attachments (P2.3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9622
  • fix(db): migrate up commits each migration file on its own (v0.13.54 prod deploy deadlock) by @markokraemer in https://github.com/kortix-ai/suna/pull/9627
  • feat(web): tool renderers read session-log blocks; the SDK serves a fromV1 view when v2 is off (P5.1) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9628
  • test(e2e): journey 23 reads the proposed account name at Continue by @markokraemer in https://github.com/kortix-ai/suna/pull/9629
  • fix(boot-mode): Volumes on never makes an organization stateless by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9621
  • fix(files): New menu offers only what works; sharing never lists yourself by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9630
  • fix(web): close the mobile drawer when the navigation commits (KRTX-1591) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9623
  • feat(api): name pool-queue saturation on the slow completion line (KRTX-1571) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9633
  • fix(volumes): every API instance agrees on the Volumes policy right after a flip by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9635
  • refactor(api): split http-broker.ts into errors, substitution, gate and transport (KRTX-1594) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9631
  • fix(infra): prod API keeps the live 200%/100% rolling overlap; AWS refuses maximum_percent <= 100 with AZ rebalancing on by @markokraemer in https://github.com/kortix-ai/suna/pull/9636
  • refactor(channels): split install-store into per-platform install modules (KRTX-1593) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9638
  • chore(release): staging VERSION → 0.13.57 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9640
  • chore(release): VERSION → 0.13.57 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9641
  • chore(catalog): refresh model seeds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9642
  • test(api): seed the volumes policy row the drive routes read fresh (KRTX-2165) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9643
  • test(web): pin the drawer docs link's deliberate document load (KRTX-1592) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9632
  • test(api): interleave the session-log-blobs perf reads so both p50s share machine conditions (KRTX-2158) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9639
  • refactor(api): flatten openUpstream into framing, write and response helpers (KRTX-1597) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9647
  • fix(notifications): Web Push and the inbox follow the access MFA rule; super admins pass it (KRTX-1742) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9650
  • fix(session-log): live puts keep each open call's v1 residual; kortixd puts on a tool status or metadata-key change (P4.7) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9658
  • feat(api): the transcript capture also writes the session log for a box without a journal (P2.7) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9659
  • fix(web): load the en catalog from the app bundle, no network round-trip (KRTX-1614) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9654
  • fix(api): split missing-header and non-Bearer-scheme 401s (KRTX-2168) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9651
  • fix(api): the journal marker needs content; the v1 window serves the mirror when the log is behind it (P2.7b) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9661
  • fix(web): failed autosave no longer refires forever on repo settings and workspace rename (KRTX-2156) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9657
  • fix(apps): a machine whose box failed to start is recovered in place on wake by @markokraemer in https://github.com/kortix-ai/suna/pull/9663
  • chore(infra): remove the destroyed us-west-2 dev and staging stacks by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9664
  • feat(session): collapse the docked agent question to one line (KRTX-2182) by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9666
  • fix(web): composer stack layers are full width and square under a visible strip by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9669
  • feat(web): per-row Send now on queued chat messages (KRTX-1587) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9662
  • feat(web): customizable project sidebar nav by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9671
  • fix(api): sanitize lone UTF-16 surrogates out of session-log journal batches; malformed account ids answer 4xx, never 500 (KRTX-211) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9670
  • feat(web): a backend card shows its Dashboard tab's live preview by @markokraemer in https://github.com/kortix-ai/suna/pull/9672
  • feat(sessions): the composer says how long the sandbox stays on while you are here (KRTX-1729) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9674
  • chore(infra): remove the abandoned us-east-2 prod shadow by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9675
  • feat(api): retention purge for the session log, the v1 mirror and session-attachments (P2.8) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9676
  • feat(web): calm the reminders calendar on busy projects by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9667
  • feat(files): big folders load in pages with Load more, and Find a file searches contents (KRTX-1723) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9678
  • fix(web): remove the confetti from the project home heading by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9679
  • chore(infra): move the security alert hub from us-west-2 to eu-west-2 by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9680
  • fix(api): long Slack turns are no longer aborted at 30 minutes by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9681
  • fix(pi): a ./ pi package loads from the config release and restarts pi when it changes by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9684
  • feat(infra): eu-west-2 Terraform state bucket (step 1 of the per-region state move) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9685
  • feat(web): sidebar, settings and count polish; settings drill-down on mobile by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9687
  • feat(invites): a mobile invitee lands in the invited project, and every host lands through one SDK rule (KRTX-1731) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9688
  • fix(web): the sidebar layout is saved on the account, not only in the browser by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9689
  • feat(infra): every Terraform root keeps its state in its own region (step 2 of the per-region state move) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9693
  • chore(infra): commit the state-move scripts; the release flow runs them once for staging and prod by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9696
  • feat(sdk): block turn layer over the session log; fromV1 live mode keeps an in-context reply with an open call streaming (P5.2b) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9697
  • fix(dev): repair dev — revert #9654 (journey 34), Files journey 42 paging, transcript-capture timeout by @markokraemer in https://github.com/kortix-ai/suna/pull/9699
  • Release latency: test every dev merge, promote green SHAs, trustworthy gate, safer deploys by @markokraemer in https://github.com/kortix-ai/suna/pull/9626
  • fix(web): persist expiry-only account access edits (KRTX-2187) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9698
  • Merge staging back into dev so promotions fast-forward; agent-tunnel SIGTERM race by @markokraemer in https://github.com/kortix-ai/suna/pull/9702
  • fix(api): let a personal PAT resolve gated connector-call approvals (KRTX-1921) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9700
  • fix(infra): deny-old-keys backs up into a fresh temp dir (CodeQL high on #9703); release skill: promotions against squash-only dev by @markokraemer in https://github.com/kortix-ai/suna/pull/9705
  • fix(web): Sessions surfaces read their labels from the i18n catalog (KRTX-2188) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9692
  • chore(catalog): refresh model seeds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9708
  • fix(cli): print the preview URL on the host the deployment serves (KRTX-1909) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9704
  • fix(sso): SSO-only ends the sign-ins it refuses, a PAT is refused, and mobile sends an enforced email to SSO (KRTX-1716) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9709
  • fix(web): the delete-account gate fails closed on a failed status check (KRTX-2177) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9691
  • fix(worktree): bridge fresh sandbox launch environment (KRTX-2189) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9707
  • fix(api): store NUL and lone-surrogate strings in the session log (KRTX-2178) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9690
  • Promote dev ec3f312e12 to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9706
  • feat(api): session-log restore claim for a fresh box (P6.1) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9714
  • fix(api): warm sessions stay out of the visible sidebar list by @agent-kortix in https://github.com/kortix-ai/suna/pull/9695
  • fix(kortixd): pi tool parts name the model's call id, so v2 live puts keep their call_id at turn end (P4.8) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9717
  • fix(api): the restore route answers on the API image's Bun 1.2 (P6.1 fix-forward) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9720
  • feat(web): the action panel, the context modal and the turn rows read session-log blocks (P5.2) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9721
  • fix(files): Repo page previews spreadsheets from git; runtime errors drop the opencode-sdk label by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9722
  • feat(api): backfill worker that gives mirror-only sessions their session log (P3.1) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9725
  • feat(infra): us-east-1 Terraform state bucket for the vps-demo root by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9727
  • feat(kortixd): pi restore step writes a session log into pi's native store (P6.2) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9729
  • perf(sessions): a prompt no longer waits for config convergence, env resolve, pi catalog repair or CLI /start by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9730
  • feat(api): session-log backfill infers pi from the root id, validates every log, counts round-trip mismatches (P3.2) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9731
  • fix(api): the sandbox-proxy trigger-session override asks the canonical action (KRTX-1619) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9726
  • feat(worktree): --db gives a worktree its own database in the primary Supabase by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9734
  • fix(session-log): the view comparison ignores tool-input key order by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9736
  • perf(tests): pnpm test runs only what the diff affects and reuses green lane groups by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9735
  • feat(kortixd): OpenCode restore step writes a session log into opencode.db (P6.3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9739
  • fix(tests): the attestation's scratch index keeps git's racy-entry check by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9740
  • fix(apps): a reader an App admits gets tokens for the Apps it uses (via_app_id); the App header shows the App by @markokraemer in https://github.com/kortix-ai/suna/pull/9742
  • feat(desktop): Quick Entry — start a session from any app with a global shortcut by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9649
  • fix(api,sdk): a prompt without an agent runs under the session's agent; sdk credentialHeader, quiet session-sync, readonly useChatTurns by @markokraemer in https://github.com/kortix-ai/suna/pull/9744
  • Promote dev 5c4b381706 to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9747
  • fix(security): close the 2026-10-13 pentest findings at the origin by @markokraemer in https://github.com/kortix-ai/suna/pull/9749
  • test(web): a chat-identity connect retries after the MFA step-up (KRTX-940) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9748
  • feat(web): the transcript and session chat render session-log block turns (P5.2c) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9751
  • fix(cli): KRTX-1761 keep registered host on logout by @agent-kortix in https://github.com/kortix-ai/suna/pull/9737
  • feat(account-hub): account settings redesign, Avatar v2, hub split sheet by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9750
  • fix(api): one owner per box start — restart waits out a live wake, repair claims its run, Platinum start joins in-flight starts by @markokraemer in https://github.com/kortix-ai/suna/pull/9752
  • fix(connectors): a first sync that fails or needs a sign-in lands on the connector page with the next step open (KRTX-2185) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9753
  • fix(infra): empty the dev and staging VPC default security groups (Drata test 233) by @markokraemer in https://github.com/kortix-ai/suna/pull/9756
  • chore(tests): drop the pre-push test attestation gate; the author picks the tests by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9758
  • Staging runs like prod (no Spot), the gate reruns itself, the edge retries a dropped GET; SESS-18 test fix by @markokraemer in https://github.com/kortix-ai/suna/pull/9764
  • fix(api): commit-push names the upstream failure by @markokraemer in https://github.com/kortix-ai/suna/pull/9765
  • fix(feature-flags): Volumes and Stateless sessions are per-project flags, not organization-wide by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9755
  • feat(cli,tui): sessions log reads the session log; CLI, TUI and whitelabel render session-log blocks (P5.5) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9767
  • fix(boot): config and workspace providers boot independently; boot timeline reports config only by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9770
  • fix(sessions): mobile lists read past empty pages, and the audit Session filter searches and takes a pasted id (KRTX-1727) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9769
  • feat(iam): a plain member sees only the members and groups they share access with by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9771
  • fix(apps,cli): Apps with volumes deploy on Platinum without --provider; account commands follow the project link; App copy says machine by @markokraemer in https://github.com/kortix-ai/suna/pull/9775
  • chore(secrets): rotate the Platinum API keys by @markokraemer in https://github.com/kortix-ai/suna/pull/9776
  • fix(api): GET …/log serves a session-bound PAT under the transcript route's gate by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9778
  • fix(sessions): a stored question closes when the wait ends, and a waiting session reads Needs you on web and mobile (KRTX-1739) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9772
  • fix(permissions): web and mobile offer only the trigger, review, settings and top-up controls the API allows (KRTX-1720) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9779
  • fix(dev): account-hub i18n audit and journey 22 after #9750 by @markokraemer in https://github.com/kortix-ai/suna/pull/9780
  • fix(db): close stored agent questions the KRTX-1739 rules prove stale (KRTX-1739) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9781
  • test(e2e): journey 27 follows the #9750 hub titlebar (no search button) by @markokraemer in https://github.com/kortix-ai/suna/pull/9783
  • fix(cli): verify connector revocation before reporting success (KRTX-1664) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9712
  • feat(admin): remove the Boot modes page by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9784
  • fix(web): linear trailing-slash trim and caret-ANSI strip (CodeQL ReDoS) by @markokraemer in https://github.com/kortix-ai/suna/pull/9786
  • Promote dev d888f389ea to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9791
  • Hotfix: v0.13.57 release-gate tests (CFG-16, journey 49) by @markokraemer in https://github.com/kortix-ai/suna/pull/9806
  • Hotfix: v0.13.57 release-gate test CFG-16 step 2 by @markokraemer in https://github.com/kortix-ai/suna/pull/9813
  • Release v0.13.57 — Big folders in Files, a sidebar you arrange, and redesigned account settings by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9715

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.56...v0.13.57

Read the full release on GitHub
October 12, 2026

Tools on every harness, one-step MCP install, and billing alerts for owners

v0.13.56

New

  • Tools run on both harnesses. A tool is one module that OpenCode and pi both run. Declare a project's own tools under tools: in kortix.yaml, and limit which agents see them with agents.<name>.tools.
  • The Kortix tools are listed in kortix.yaml. web_search, image_search, scrape_webpage, memory and show appear as kortix:<name>. Delete a line to remove that tool. kortix tools ls lists a project's tools, and kortix tools eject <name> copies one into the project so you can change it.
  • One-step MCP install. Installing an MCP app goes straight to the server's sign-in, and a connector you authorize with your own account loads its tools. The app and connector pages are redesigned.
  • Every connector account picks its audience. Install adds the connector to the project. Add account then asks for a name and Who can use it: only you, everyone in the project, or specific people, groups or agents.
  • Connect MCP in the project sidebar opens the MCP connect dialog.
  • Connector calls from code. Apps and scripts can call a project's connectors through @kortix/sdk, with typed handles and a stable result.
  • Reminders page. A calendar (day, week, month) and a list with bulk pause, resume and remove. Reminders is beta: enable Reminders under Settings → Feature flags.
  • App event triggers (beta). Run an agent when something happens in a connected app, such as a new email or an opened pull request. Every app that publishes events is listed, and you can browse its events before you connect it. Enable App event triggers under Settings → Feature flags.
  • Notification center (beta). Kortix tells the right person when a session needs them: an in-app inbox, Web Push and email. Off by default: enable Notification Center under Settings → Feature flags.
  • Billing alerts for owners. Owners get an email when the wallet runs out, and when a declined card turns auto top-up off. The Billing pane says why auto top-up is off. A member who runs out of credits can ask the owners from the product. Budget managers get an email at 80% and 100% of an LLM gateway budget.
  • kortix feedback "<message>" files a bug, an idea or a friction report from a terminal or from inside a session.

Improved

  • Streaming replies appear word by word, at the pace they arrive, on web and mobile.
  • A long paste (more than 1,000 characters or 10 lines) becomes a "Pasted text" tile on web and mobile.
  • Every prompt a person did not type, from a reminder, a trigger, another session or Slack, shows a source pill above a plain message.
  • The server owns session state and sends it on one stream, so open tabs stop polling for it.
  • Config releases run for every project. What merges to the base branch reaches new sessions, and a large repository no longer loses its config release.
  • A sandbox sleeps sooner: a turn that waits on a person stops keeping it awake, and an open tab keeps it awake only while someone uses it.
  • pi (experimental) loads the project's root AGENTS.md, runs the agent you pick for a prompt, and can take back an unread steer or a queued prompt.
  • Agents in a session use the kortix CLI for connectors; the in-sandbox kortix-connectors MCP server is removed. kortix connectors connect --label names the new account.
  • The hosted MCP server at api.kortix.com/v1/mcp is the one Kortix MCP server. The docs-only server at kortix.com/mcp is retired, and list_projects answers an empty list on an account with no projects.
  • File listings show folders with more than 1,000 files, with search on web and mobile.
  • The invite page names the project and the role. After you accept an invite or switch accounts, you land in that account.
  • Mobile: New session opens project home with the composer focused. Sessions draw tables on a full grid, hide thinking, and keep a floating composer.
  • CLI: sessions ls and sessions status --json show each session's model. triggers info shows the webhook signing scheme with a sample. approvals ls prints the decision link. projects info --json includes the project ID.
  • Session start, connector calls, cost summaries and the Reminders page use fewer database reads.
  • A session with many images or binary files loads them a few at a time instead of all at once.
  • Your computer shows the access the agent on that computer really has, in the browser and in the desktop app. Narrowing access applies at once from anywhere; widening it asks on the computer.
  • 30 API routes that no client calls answer 410 Gone.
  • The subprocessor list adds six vendors.
  • A finished turn folds its work into one Worked for row. The answer and any cards the agent showed stay visible below it.
  • A question from the agent docks onto the composer as one surface, with previous/next and a confirm step that links back to each answer.
  • The docs at kortix.com/docs are rewritten: 31 pages, with Git as a core page.
  • Mobile asks you to update when the installed app is older than the minimum version the API sets.
  • When you mention files on your own machine, the agent offers to connect your computer.

Fixed

  • A Stop wins over a session that is still opening and over its queued prompts.
  • A session whose sandbox provider is at capacity retries the start by itself, with backoff, instead of waiting for Restart.
  • Queued prompts go out at the turn boundary and survive a busy queue. Only a queued prompt's author can edit, send or retry it, and an idle send shows as active, not queued.
  • A session keeps its history when its runtime changes, a degraded transcript copy no longer serves a partial history, and a shorter read never deletes saved messages; only a rewind removes them.
  • A reload paints the conversation this device kept without placeholder rows first, a streamed message settles when its turn ends, and a session whose sandbox lost its state keeps the conversation this device saved.
  • Session boot: sandbox.on_boot runs again after a session resumes, the boot finds its config when a pin file is missing, a failed environment build no longer breaks the boot, and a sandbox falls back to 4 GiB of memory when no size is set.
  • A failed sub-agent run can be retried in its own thread.
  • Sessions: a failed-turn notice clears after you edit and resend, the turn outcome footer is back, the restart offer on a stuck boot follows the session's state, the session list pages correctly, and other tabs learn when a turn finishes.
  • The composer waits for the model list during boot, and a new free account can send with the default model.
  • The connector-connected notice joins the prompt queue and reaches the running turn.
  • Triggers: a cron trigger fires at most once a minute, every webhook delivery runs exactly once, a failed fire is recorded on the trigger, the list says when a trigger runs next, a fire waits when the account has no usable model, and a manual or webhook fire the account cannot pay for answers 402 with the reason instead of a server error.
  • Saving a connector credential is atomic, a Slack undo call is bounded by the call deadline, and a crash in the marketplace dialog stays inside the dialog.
  • The email channel shows on the channels page, and the inbox of a deleted account tells the sender once per thread.
  • Change requests: large change requests show their changed files, a blank diff says why, and the side-by-side toggle works on one-sided diffs.
  • Binary file previews work again, and links to a session's files open instead of showing [blocked].
  • Computer use on a connected computer works for every tool and survives restarts and app updates. The CLI and the desktop app run as one runtime.
  • Sign-in: a magic link works when the browser drops a cookie, a sign-in no longer bounces back to the sign-in page, and a sign-in or sign-up that stalls ends with an error you can retry. On mobile, SSO sign-in completes and the login stays until you sign out.
  • The onboarding wizard opens on an account's first project, owners see the create-project screen on /projects, and the account menu has a Settings row.
  • After a deploy, a page that loads stale code reloads once instead of breaking.
  • Account deletion works when a session sandbox exists, never deletes an operator's login, and works on self-host.
  • A push to GitHub that the remote rejects with a 500 is retried, and an expired checkout link answers with a clear not-found.
  • Trigger and top-up controls show only to people who may use them, and the project config lists every registered agent.
  • Translations and accessible names for icon buttons and the preview toggle.
  • /download has its site navigation again, and /blog serves the blog.
  • CLI: agents ls lists the project's agents, ship and in-sandbox host selection use the right credentials, the CLI token list hides session tokens, reminders ls shows the prompt text, and triggers fire reports the real outcome.
  • Self-host: doctor fails when sign-up is open and unconfirmed, self-host status --json prints clean JSON, the CLI refuses to rotate API_KEY_SECRET and POSTGRES_PASSWORD, and /v1/setup/status no longer stalls the API while it checks Docker.
  • Mobile: streaming turns stay stable, change requests anchor to their turn, the composer stays above the keyboard, and web links open in the in-app browser.
  • The Add account dialog that Install opens proposes a name that is still free.
  • @kortix/agent-tunnel connect and the CLI's sandbox port proxy connect under Bun again.
  • The sidebar toggle tells screen readers whether the sidebar is open.
  • The Providers tab no longer shows the Kortix-managed provider as connected when it serves no models.
  • CLI: kortix providers subcommands reject unknown flags instead of ignoring them.

Security

  • SSO is enforced at the API for every credential. Sign-up without a browser follows the sign-up policy and SSO-only domains. The admin allowlist never matches an SSO identity, and a personal account cannot set up SAML.
  • Offboarding stops what a member left behind: computer calls, reminders, pushes and group memberships. A deleted account closes every side route, account erasure removes stopped sandboxes, session files and managed repos, and deleting a project deletes its managed git repo.
  • A session push reaches only people who may still open the project, and a signed-out device stops getting pushes.
  • kortix secrets unset revokes every outstanding setup link for that secret.
  • /userinfo rejects tokens of a deactivated OAuth client.
  • A trigger with no agent runs with the permissions of the agent its run uses.
  • A single-label egress wildcard matches exactly one subdomain label.
  • The public installer verifies the release checksum.
  • Pinning a session's runtime on the turn stream requires the session's own sandbox credential.
  • Dependency updates for HIGH CVEs (gRPC, golang.org/x/net, sharp, the MCP SDK, undici and others), and the sandbox daemon and release scripts create temporary files owner-only.

Not yet offered in Settings

  • Apps hosting (static sites served without a sandbox, and server Apps on releases, machines and volumes, with a Convex backend as a template), project Files with per-folder access, session boot modes with persistent machines, and organization-wide Volumes and Stateless sessions sit behind switches only Kortix can turn on and are not offered in Settings yet.

Behind the scenes

  • CI runs on GitHub-hosted runners, and database indexes, connection pooling, audit storage and infrastructure checks are tightened.
  • Groundwork for a durable session log, off for every project.

What's Changed

  • test(e2e): journey 23 asserts the toolkit search wire contract; connect POST only when sent by @markokraemer in https://github.com/kortix-ai/suna/pull/9314
  • chore(release): VERSION → 0.13.53 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9316
  • fix(api): let a session's own credential open its own session (KRTX-1688) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9235
  • fix(audit): make the reconciliation dedupe probe an index condition (KRTX-618) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9238
  • fix(cli): explain a foreign env session instead of a bare Not found in reminders (KRTX-1686) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9219
  • fix(web): recover the settings panel's stale-deploy chunk with one reload (KRTX-1616) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9222
  • fix(cli): keep self-host status JSON output clean (KRTX-1325) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8876
  • fix(cli): include the project id in projects info --json (KRTX-1659) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9240
  • fix(models): serve the platform default to free tier so a fresh account can send (KRTX-1067) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8983
  • fix(api): refuse agent sessions on the project sandbox-provider pin (KRTX-1681) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9212
  • fix(cli): print the /approve decision link in approvals ls rows (KRTX-1669) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9246
  • fix(web): recover /auth from a stale client bundle after a deploy (KRTX-1685) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9248
  • fix(web): owners see the create-project empty state on first /projects (KRTX-1700) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9250
  • refactor(api): move the fast-boot bundle out of commits.ts and dedupe the diff parser (KRTX-1512) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9218
  • feat(cli): expose the session's resolved model in sessions ls/status --json (KRTX-1695) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9251
  • fix(projects): delete the managed git repo with its project (KRTX-1692) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9252
  • fix(web): the stuck-boot restart offer follows the lifecycle verdict (KRTX-1671) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9286
  • fix(api): account deletion never deletes an operator's login, and works on self-host (KRTX-1713) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9323
  • fix(api): write runtimeSessionId on the migrated-session insert (KRTX-1536) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9288
  • test(infra): make the unit suites hermetic on a Kortix worker sandbox (KRTX-1320) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8949
  • fix(api): require the session sandbox credential for the turn-stream runtime_session pin (KRTX-1607) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9290
  • perf(api): one grouped scan per window for the cost summary (KRTX-1605) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9300
  • fix(web): restore the turn-outcome footer render the session-chat split dropped (KRTX-1622) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9303
  • fix(cli): report the real trigger fire outcome (KRTX-1504) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9289
  • fix(api): stage the opencode config through its dependency-tree filter (KRTX-1535) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9313
  • fix(supabase): use the current refresh-token rotation config key (KRTX-1656) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9317
  • fix(api): a single-label egress wildcard matches exactly one subdomain label (KRTX-1654) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9321
  • fix(api): list every registered agent from the project config summary (KRTX-1586) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9296
  • fix(sessions): only a queued prompt's author edits, sends or retries it (KRTX-1712) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9325
  • fix(sdk): retry an errored no-data query with capped backoff so pages self-heal (KRTX-1632) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9318
  • fix(api): dispatch queued prompts at the turn boundary, not after the whole run (KRTX-1684) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9319
  • docs(kortix-release): edge-key rollout checklist by @markokraemer in https://github.com/kortix-ai/suna/pull/9327
  • fix(cli): refuse to rotate API_KEY_SECRET and POSTGRES_PASSWORD (KRTX-1719) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9328
  • fix(api): warn once per unreachable spell past its ride-out budget (KRTX-696) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9228
  • fix(ci): pin third-party CI actions to SHAs in credential-holding workflows (KRTX-1711) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9281
  • fix(sessions): queued-prompt writes survive the drain's admission claim (KRTX-1712) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9330
  • chore(deps): bump bridgecrewio/checkov-action from 12.3125.0 to 12.3128.0 by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/9180
  • chore(deps): bump terraform-linters/setup-tflint from 6.3.1 to 6.3.2 by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/9181
  • chore(deps): bump anchore/sbom-action from 0.24.2 to 0.24.3 by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/9182
  • fix(api): the admin allowlist never matches an SSO identity; no SAML on a personal account (KRTX-1715) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9331
  • fix(cli): verify the downloaded release checksum in the public installer (KRTX-1652) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9322
  • fix(web): the side-by-side toggle switches one-sided diffs too (KRTX-1691) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9287
  • fix(api): make transcript-mirror strings storable as jsonb (KRTX-1701) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9253
  • feat(cli): put the webhook signing scheme and sample in triggers info (KRTX-1666) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9249
  • fix(cli): show the reminder prompt text in reminders ls (KRTX-1524) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9243
  • fix(api): retry and de-noise a GitHub receive-pack 500 push rejection (KRTX-1683) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9226
  • fix(billing): map Stripe's no-such-checkout-session to the typed 404 (KRTX-1682) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9223
  • fix(web): reload once on a stale-deploy chunk-load error (KRTX-1613) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9213
  • fix(cli): resolve ship from workspace host credentials (KRTX-1258) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8865
  • fix(web): hold the composer model gate during session boot (KRTX-1667) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9244
  • fix(web): hide the seeded harness reflector from the Triggers list (KRTX-1299) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8921
  • fix(files): byte-accurate project reads restore binary previews (KRTX-1677) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9247
  • fix(api,cli): hide session-minted tokens from the project CLI token list (KRTX-1193) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8926
  • fix(web): put a Settings row in the account menu on /projects and /new (KRTX-1327) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8925
  • feat(billing): cap the scheduled deletion sweep at 25 per tick and add ACCOUNT_DELETION_SWEEP_PAUSED by @markokraemer in https://github.com/kortix-ai/suna/pull/9332
  • test(api): make the audit partition suites independent of the migration week (KRTX-1633) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9283
  • fix(api): ask the in-place recovery gate before a background pass condemns a runtime (KRTX-208) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9036
  • test(web): preserve reporting of unknown input-stream failures (KRTX-984) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8725
  • perf(db): cover the per-session gateway rollup with one index (KRTX-1311) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9012
  • fix(ci): branch-deletion teardown no longer hits the 10000-row Platinum listing cap by @markokraemer in https://github.com/kortix-ai/suna/pull/9334
  • perf(db): index the runtime-wake fence candidates on kortix.session_sandboxes (KRTX-1308) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9292
  • feat(web): full-screen MFA step-up and split-layout MCP connect modal by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9335
  • fix(infra): Terraform stops resetting reconciler-owned unhealthy-hosts alarm dimensions by @markokraemer in https://github.com/kortix-ai/suna/pull/9336
  • fix(iam): enforce SSO only at the API for every credential (KRTX-1716) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9338
  • fix(billing): account deletion fails with HTTP 500 for any account with an established session box by @markokraemer in https://github.com/kortix-ai/suna/pull/9337
  • fix(web): restore the original phone screenshots on the /download mobile card by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9339
  • fix(slack): run the agent in a channel thread only when someone tags it by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9333
  • fix(mobile): call eas update:view without --non-interactive in the OTA publish by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9342
  • fix(session): render an idle send as an active prompt, not a queued one by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9191
  • fix(projects): a deleted workspace closes its side doors (KRTX-1714) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9344
  • test: remove disposable containers with their volumes (docker rm -f -v) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9345
  • fix(triggers): run every webhook delivery exactly once (KRTX-1735) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9347
  • feat(sessions): R5 session truth — the server owns session state, one stream, no polls by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9312
  • fix(platinum): list running boxes with state=running across all regions by @markokraemer in https://github.com/kortix-ai/suna/pull/9346
  • fix(iam): offboarding stops what a member left behind: computer calls, reminders, pushes, groups (KRTX-1722) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9349
  • fix(db): re-time session_changed_notify after migrations dev already ran; shell-quote 1.11.0 by @markokraemer in https://github.com/kortix-ai/suna/pull/9351
  • feat(web): Slack messages render as a source pill over a plain bubble by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9350
  • fix(daemon): never restore the LLM proxy URL across a daemon restart by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9348
  • fix(config-releases): honor export-ignore outside the agent config dir (KRTX-1728) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9355
  • fix(sdk): an idle tab stops reading the transcript every 30 s; pre-push refuses an out-of-order migration by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9356
  • fix(files): list every folder past 1,000 files, and search on web and mobile (KRTX-1723) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9359
  • chore(dev-env): add KORTIX_INTERNAL_EDGE_KEY (encrypted) by @markokraemer in https://github.com/kortix-ai/suna/pull/9363
  • fix(billing): clear legacy NO ACTION references to the auth user before deleting the login by @markokraemer in https://github.com/kortix-ai/suna/pull/9365
  • fix(sessions): an open tab keeps the computer awake only while a person uses it (KRTX-1729) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9366
  • fix(triggers): a cron trigger fires at most once a minute (KRTX-1721) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9368
  • feat(session): one source pill for every non-typed prompt, web and mobile by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9369
  • fix(sessions): an empty page with a cursor is not an empty list (KRTX-1727) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9370
  • fix(cli): honor an explicit in-sandbox hosts use selection; keep env-over-stored default (KRTX-1705) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9352
  • fix(web): trigger and top-up controls follow the leaf their route asserts (KRTX-1720) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9371
  • fix(web): after an invite accept or an account switch, land in that account (KRTX-1731) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9372
  • Mobile session: aligned tables, hidden thinking, and a floating composer by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9358
  • fix(session): clear a stale failed-turn row after the message is edited and resent by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9361
  • test: drive the SSO-required dialog in a browser (KRTX-1716) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9374
  • fix(triggers): a failed manual or webhook fire is recorded; the listing says when a trigger runs next (KRTX-1743) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9375
  • fix(web): open workspace file links instead of rendering [blocked] by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9376
  • test: run and attest the packages lane inside a factory sandbox (KRTX-1400) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9353
  • fix(mobile): stabilize streaming turns, anchor change requests per turn, keep the composer above the keyboard by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9357
  • feat(connectors): typed connector calls from code — call contract, SDK handles, codegen by @markokraemer in https://github.com/kortix-ai/suna/pull/9381
  • fix(mobile): keep the login until the user signs out by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9378
  • feat(accounts): signed signup webhook for the sales factory (inert until SIGNUP_WEBHOOK_URL is set) by @markokraemer in https://github.com/kortix-ai/suna/pull/9382
  • fix(api): one canonical default sandbox spec, memory fallback 4 GiB (KRTX-1534) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9367
  • chore(mobile): 1.4.4, dev builds next to the store app, manual production OTA ships prod by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9383
  • fix(sandbox): entrypoint repairs /etc/hosts to 0644 before the privilege drop (KRTX-1814) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9340
  • fix(web): keep the session on GoTrue's no_authorization 401 (KRTX-1693) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9377
  • fix(infra): make audit-archive tags Drata-readable (KRTX-1649) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9341
  • fix(api): audit ingest writes small batches the 25s budget reserve refused (KRTX-229) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9379
  • refactor(api,sdk): R6 deletions — 30 dead routes retired with 410, Suna migration chain, dead exports, mock-DB tests, pi worker table by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9360
  • fix(web): always name ToolActionBar icon buttons (KRTX-1757) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9373
  • feat(apps): production Apps hosting — static sites without VMs, always-on server Apps, shared images, retention by @markokraemer in https://github.com/kortix-ai/suna/pull/9388
  • feat(triggers): app event triggers — run an agent when something happens in a connected app (Composio first, provider-agnostic) by @markokraemer in https://github.com/kortix-ai/suna/pull/9390
  • fix(web): serve the real blog at /blog when KORTIX_BLOG_ORIGIN is unset (KRTX-1766) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9395
  • fix(web): guard useFileHistory's retry against non-string error messages (KRTX-1781) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9394
  • fix(api): return a JSON array from list_projects on an empty account (KRTX-1783) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9393
  • test(flows): GH-8 cli-token list step fails when the minted token is missing (KRTX-1800) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9397
  • feat(invites): the invite page names the project and role; sign out and come back to the invite (KRTX-1731) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9398
  • fix(email): a deleted workspace's inbox tells the sender, once per thread (KRTX-1714) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9399
  • perf(db): cover the account+time cost aggregates with an INCLUDE index (KRTX-1769) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9386
  • fix(push): a signed-out device stops getting push notifications (KRTX-1722) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9400
  • feat(billing): auto top-up says why it turned off, and emails the owners when a declined card does it (KRTX-1718) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9402
  • feat(billing): Ask an owner — a member out of credits emails the owners (KRTX-1718) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9404
  • feat(gateway): email the budget managers at 80% and 100% of a gateway budget (KRTX-1718) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9405
  • fix(web): signal finished turns to tabs watching from elsewhere (KRTX-1795) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9401
  • feat(billing): email the owners when the wallet reaches $0 (KRTX-1718) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9406
  • fix(sessions): cap what presence alone keeps a box awake, whatever the client reports (KRTX-1729) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9408
  • fix(triggers): a connection finished outside Kortix goes live by itself; connect-finalize --owner project by @markokraemer in https://github.com/kortix-ai/suna/pull/9392
  • feat(tools): harness-agnostic tools, kortix.yaml tools: and per-agent tool access by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9410
  • fix(connectors): kortix-connectors MCP off by default; kortix connectors connect --label by @markokraemer in https://github.com/kortix-ai/suna/pull/9412
  • fix(runtime): R7 — pi retract, per-prompt agent on pi, session list without a timer, /pty refusal by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9391
  • feat(triggers): app event triggers name the connector profile and, optionally, the shared account by @markokraemer in https://github.com/kortix-ai/suna/pull/9413
  • refactor(connectors): remove the in-sandbox kortix-connectors MCP; agents use the kortix CLI by @markokraemer in https://github.com/kortix-ai/suna/pull/9414
  • fix(web): give /download its site nav and brand link back (KRTX-1792) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9407
  • test(secrets): delete the box-less sandbox rows the secrets flows insert by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9415
  • fix(triggers): status text names the app for slug-named connectors; learnings: secrets go in the deployed env bundle by @markokraemer in https://github.com/kortix-ai/suna/pull/9416
  • feat(backends): Kortix Backends — self-hosted Convex with Kortix sign-in, ops and agent skills by @markokraemer in https://github.com/kortix-ai/suna/pull/9264
  • feat(pi): load the project's root AGENTS.md into the system prompt by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9411
  • fix(sessions): a turn that waits on a person stops renewing its box (KRTX-1739) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9418
  • fix(apps-router): forward a User-Agent when the client sends none by @markokraemer in https://github.com/kortix-ai/suna/pull/9419
  • feat(session): long pastes become a "Pasted text" tile on web and mobile by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9380
  • fix(web): align the preview modal's source-toggle aria-pressed with the file header (KRTX-1778) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9409
  • feat(web,mobile): smooth streaming replies, word by word by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9420
  • fix(web): show the Email channel on the channels page (KRTX-1801) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9403
  • fix(web): translate the command-attachment refuse description (KRTX-1710) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9387
  • fix(self-host): doctor fails on open unconfirmed sign-up; bootstrap-owner needs the host key (KRTX-1715) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9421
  • refactor(mcp): one Kortix MCP server — remove kortix.com/mcp + WebMCP; fix dev's #9380 tests by @markokraemer in https://github.com/kortix-ai/suna/pull/9422
  • feat(triggers): see every app event at a glance; the event source is an adapter type (source: composio) by @markokraemer in https://github.com/kortix-ai/suna/pull/9425
  • feat(config-releases): build a release from the checkout or the project snapshot, so the 32 MiB archive cap no longer drops a session's config by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9424
  • fix(cli): an app event error from its connector or source names the connector fix; TRG-18 race by @markokraemer in https://github.com/kortix-ai/suna/pull/9426
  • learnings: run pnpm test:verify before merging into dev by @markokraemer in https://github.com/kortix-ai/suna/pull/9428
  • fix(config-releases): a box with no base pin builds an archive-less release from its checkout at boot by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9429
  • feat(tools): list the Kortix tools in kortix.yaml as kortix:; kortix tools ls/eject by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9427
  • fix(ci): read each env blob from its own region, not the us-west-2 default by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9430
  • docs(infra): the audit archive is a record, not a cache; copy it before a region switch by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9431
  • fix(db): scope user_roles RLS policies to their JWT roles (KRTX-1166) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9433
  • fix(accounts): erasure removes parked boxes, session files and managed repos (KRTX-1734) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9435
  • fix(push): a session push reaches only people who may still open the project (KRTX-1722) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9436
  • fix(triggers): a failed app-event or monitor fire is recorded on the trigger (KRTX-1743) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9438
  • fix(triggers): a trigger with no agent is authorized as the agent its run uses (KRTX-1720) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9439
  • fix(auth): headless sign-up follows the sign-up policy and SSO-only domains (KRTX-1716) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9440
  • refactor(mobile): split 1k files, dedupe shared UI, delete dead code (KRTX-1292) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9441
  • fix(session): subagent retry — reopenable thread + task_id-aware recovery prompt (KRTX-1746) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9362
  • refactor(web): reuse the shared bounded background-worker parser (KRTX-1756) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9364
  • feat(notifications): notify the right person on any surface: inbox, Web Push, email (KRTX-1742) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9446
  • feat(config-releases): config releases run for every project — remove the config_releases flag by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9432
  • feat(legal): add Hivelocity, OpenCode Zen, Morph, Plain, Pipedream and Expo to the subprocessor list by @markokraemer in https://github.com/kortix-ai/suna/pull/9451
  • feat(web): Connect MCP row in the project sidebar, official MCP icon by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9454
  • refactor(kortixd): split config-provider and workspace-provider, share through lib/ by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9455
  • chore(mobile): upgrade to Expo SDK 57 (React Native 0.86.3), version 1.5.0 by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9458
  • feat(mobile): New session focuses the project home composer by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9457
  • feat(notifications): KRTX-1742 behind the notification_center flag, off by default by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9459
  • feat(triggers): every app with events, browse before connecting, one clean trigger UI, and the event_triggers feature flag by @markokraemer in https://github.com/kortix-ai/suna/pull/9461
  • feat(apps): Backends become Apps of kind convex — capabilities, project issuer, bindings, agnostic SDK by @markokraemer in https://github.com/kortix-ai/suna/pull/9463
  • fix(notifications): flag-on edge cases, presence parity and copy for notification_center (KRTX-1742) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9464
  • ci: read the CI, preview and prod env blobs off us-west-2; fix the raw reader #9430 missed by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9467
  • fix(web): Next 16.4 with turbopackGc, so the dev cache stops filling the disk by @markokraemer in https://github.com/kortix-ai/suna/pull/9466
  • perf(api): one joined session+sandbox read per /start tick (KRTX-2018) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9465
  • chore(release): VERSION → 0.13.54 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9474
  • chore(release): staging VERSION → 0.13.54 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9475
  • fix(db): wrap public.credit_ledger RLS auth.role() in an initplan scalar subquery (KRTX-1138) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9434
  • ci: run every job on free GitHub-hosted runners; remove Blacksmith by @markokraemer in https://github.com/kortix-ai/suna/pull/9453
  • fix(review): show why a file's diff body is blank and stop shipping silent empty patches (KRTX-2010) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9468
  • fix(apps): budget only for on-demand Apps, access-filtered list, renewing App sessions by @markokraemer in https://github.com/kortix-ai/suna/pull/9476
  • fix(triggers): gate the fire when the account has no usable model (KRTX-1505) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9477
  • fix(apps): settle provider state-change conflicts on App stop (KRTX-2027) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9478
  • fix(db): fold the boot schema probe into the request pool; raise DEFAULT_DB_POOL_MAX 5→6 (KRTX-2020) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9442
  • feat(api,cli): POST /v1/feedback and a kortix feedback CLI command (KRTX-1646) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9389
  • perf(connectors): one /call spends a bounded set of statements (KRTX-2017) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9452
  • fix(proxy): surface the upstream's own 5xx reason in the logs; consolidate dispatch (KRTX-2073) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9479
  • fix(sandbox): honor the KORTIX_PT_ENV_PATH seam in reloadSessionEnv (KRTX-2039) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9481
  • fix(kortixd): fail cursor transcript reads on a degraded mirror (KRTX-2040) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9480
  • fix(cli): list the project's agents in agents ls (KRTX-1525) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9470
  • fix(review): render changed-file contents for large change requests (KRTX-2010) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9460
  • feat(drives): project Files with per-folder access, mounted and synced into sessions by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9472
  • feat(sessions): ephemeral boxes, persistent machines and release boot artifacts, behind one Volumes switch per org by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9473
  • fix(connectors): bound the Slack misfire-undo POST by the call deadline (KRTX-2062) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9483
  • fix(api): make upsertConnectionCredential a single atomic ON CONFLICT write (KRTX-2061) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9485
  • fix(api): unset revokes a secret's outstanding intake links (KRTX-2056) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9484
  • fix(marketplace): contain add-to-project dialog mount crashes to the dialog (KRTX-1950) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9448
  • feat(connectors): one-step MCP install, member-authorized tool catalogs, redesigned app and connector pages by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9449
  • fix(web): restore the post-signup onboarding wizard on the account's first project (KRTX-2092) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9492
  • fix(web): preview session drive files through the drive API by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9493
  • fix(api): /start retries a transient provision failure instead of replaying it by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9489
  • fix(billing): lock the legacy per-seat migration and route its writes through applyStripeSync (KRTX-2089) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9488
  • fix(api): env-build rejection can no longer escape the session boot paths unhandled (KRTX-2064) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9494
  • fix(sessions): a user Stop wins over in-flight opens and queued prompts by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9495
  • fix(sandbox): rerun project boot hooks after resume by @markokraemer in https://github.com/kortix-ai/suna/pull/9496
  • fix(connectors): Install adds the project profile; each account picks its audience by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9497
  • fix(sessions): persistent machine Reset keeps chat; runtime assets never serve a stale digest by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9491
  • fix(mobile): finish SSO sign-in through the web handoff (KRTX-2052) by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9490
  • fix(web): magic-link sign-in survives a dropped action Set-Cookie (KRTX-2095) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9498
  • feat(web): rebuild the Reminders page with a calendar, bulk actions, and a List table by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9499
  • fix(connectors): the connector-connected notice joins the prompt queue and steers into the running turn by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9504
  • test: pin SESS-48's exhausted-reason contract and #9499's ICU-sensitive label test (KRTX-2112) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9503
  • fix(api): attribute the boot-window 503 and stop paging it as a route 5xx (KRTX-397) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9500
  • fix(api): /userinfo rejects tokens of deactivated OAuth clients (KRTX-2107) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9505
  • fix(edge): drop the request body on GET/HEAD in the api-router worker (KRTX-2081) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9501
  • fix(release): clear the staging gate for the release after v0.13.53 by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9510
  • fix(api): keep the old root's transcript rows when the runtime root changes by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9513
  • fix(computer): desktop control works for every tool, survives restarts and app updates; CLI and desktop app are one runtime by @markokraemer in https://github.com/kortix-ai/suna/pull/9507
  • feat(api-contract): add the kortix.session/2 session-log module (minor 1) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9509
  • fix(sandbox): resolve the OpenCode boot root from the claimed pin when the pin file is missing by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9515
  • fix(release): clear the second staging gate round for the release after v0.13.53 by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9519
  • feat(api-contract): freeze the session-log minor 1 additions and add a shape snapshot by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9517
  • KRTX-532: batch the project-reminders session-visibility fan-out (64→~6 db statements/request) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9437
  • fix(auth): bound every sign-up/sign-in submit and make it retryable (KRTX-2072) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9487
  • fix(sdk): keep saved transcript rows on an empty runtime read (P0.4) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9526
  • fix(api): /v1/setup /status no longer blocks the event loop probing docker (KRTX-2108) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9525
  • fix(infra): pin prod API rolling overlap to 100% to fund the next DB pool raise (KRTX-586) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9518
  • feat(apps): Apps on the Fly.io model — releases, machines, volumes; convex becomes a template by @markokraemer in https://github.com/kortix-ai/suna/pull/9527
  • test: clear the third staging gate round (stop-wins race, SDK poll-deadline flake) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9528
  • Promote dev 7825eae424 to staging by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9523
  • feat(sandbox): session-log port and journal in kortixd (P2.4) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9530
  • feat(computers): the agent CLI is the one control surface; Kortix relays access, the app and web render it by @markokraemer in https://github.com/kortix-ai/suna/pull/9532
  • fix(api): image copies manifest-schema's node_modules (dev API boot crash after #9527); restore i18n key order by @markokraemer in https://github.com/kortix-ai/suna/pull/9533
  • fix(sdk): bound concurrent binary file reads; ship the provision timeline (KRTX-471) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9516
  • fix(cli): kortix apps launch keeps kortix.yaml byte-identical outside the new blocks by @markokraemer in https://github.com/kortix-ai/suna/pull/9535
  • feat(apps): machines get KORTIX_USES_URL_ so a server App can call an App it uses by @markokraemer in https://github.com/kortix-ai/suna/pull/9537
  • fix(triggers): one event-lock holder per process, so the connector sweep cannot deadlock the pool by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9541
  • fix(cli): apps launch reads kortix.yaml once; hover-store tests poll for settled timers by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9543
  • refactor(sdk): make the mobile warm-session pool an SDK adapter (KRTX-703) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9538
  • fix(api): isolate concurrent session refusal contexts (KRTX-2133) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9539
  • Promote dev 4987f193b3 to staging by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9544
  • test: J36 asserts the visible session filter; drop unused test code CodeQL flagged by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9545
  • fix(api): bound disk-quota Daytona REST fetches (KRTX-2132) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9540
  • fix: an unpayable trigger fire answers 402; a deleted project's gone screen stays; gate flows hold on a deployed target by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9548
  • refactor(web): delete the host model flattener; the SDK is its only definition (KRTX-455) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9536
  • test: the Platinum sizing invariant gets its own 120 s budget; drop no-effect expressions CodeQL flagged by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9551
  • Promote dev 96df3af6da to staging by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9549
  • fix(api): the transcript capture never deletes because a read is shorter; only a recorded rewind does (P0.3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9555
  • fix(worktree): run the repo's pinned supabase CLI for every worktree call by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9554
  • fix(mobile): open every web link in the in-app browser by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9550
  • feat(api-contract): fromV1 and toV1 between the v1 mirror and the session log (P1.3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9556
  • feat(db): session_log tables for kortix.session/2 (P2.1) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9557
  • test: gate round 10 — @local-only journeys stay off deployed lanes; flows wait out per-process caches by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9559
  • fix(api-contract): session-log v1 typechecks under kortixd's flags; the packages lane runs kortixd's tsc by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9561
  • feat(mobile): minimum-version gate driven by the API (P4.6) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9562
  • feat(api-contract): modelView and oracle normalizers for the session log (P1.4) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9564
  • feat(sandbox): pi session-log export adapter (P2.5) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9565
  • feat(sdk): session-log types vendored from api-contract with a drift guard (P1.5) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9568
  • test(api): Anthropic-transport resolver tests run on a fixture catalog; the daily catalog refresh goes green by @markokraemer in https://github.com/kortix-ai/suna/pull/9572
  • chore(catalog): refresh model seeds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9573
  • feat(sandbox): OpenCode session-log export adapter (P2.6) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9574
  • fix(sdk): the Bedrock heal test asserts the invokable-profile intent, not one day's catalog by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9575
  • Promote dev 9bbf745af7 to staging by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9570
  • ci(tests-browser-nightly): read the deployed staging SHA before the target preflight by @markokraemer in https://github.com/kortix-ai/suna/pull/9578
  • feat(api): session-log journal ingest and manifest routes (P2.2) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9579
  • feat(apps): display config, a signed-in Convex dashboard tab, CSP policy-list fix by @markokraemer in https://github.com/kortix-ai/suna/pull/9581
  • fix(web): the Add account dialog that Install opens proposes a free name by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9583
  • test(web): the content-timestamp check tolerates the squash commit that carries the manifest by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9585
  • feat(sandbox): log.* events on the runtime stream behind schema=v2, capability session.log.v2 (P4.3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9586
  • feat(session): fold a settled turn's work into one "Worked for" row by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9558
  • feat(api): hidden project flag session_log (P4.1) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9587
  • fix(agent-tunnel, cli): Bun WebSockets name themselves, so Cloudflare lets them through; the probe keeps its verdict by @markokraemer in https://github.com/kortix-ai/suna/pull/9576
  • fix(web): KRTX-1581 make sidebar toggle state-aware for assistive tech by @agent-kortix in https://github.com/kortix-ai/suna/pull/9566
  • ci(db-drift): compare prod only with migrations its ledger applied; ignore runtime audit partitions by @markokraemer in https://github.com/kortix-ai/suna/pull/9577
  • docs: rewrite /docs from scratch — 31 pages, Git as a core Develop page by @markokraemer in https://github.com/kortix-ai/suna/pull/9588
  • feat(session): dock the agent question onto the composer as one surface by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9589
  • Hotfix: the Add account dialog that Install opens proposes a free name (#9583) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9591
  • feat(api): session reads over the session log behind the session_log flag (P4.2) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9596
  • test(e2e): repair the five quarantined journeys against the current UI and provider contract by @markokraemer in https://github.com/kortix-ai/suna/pull/9597
  • refactor(api): split provider-transition-store into routing and activation modules (KRTX-1528) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9590
  • feat(apps): previews stay loaded across the project; clean Convex template; apps// layout by @markokraemer in https://github.com/kortix-ai/suna/pull/9599
  • Release v0.13.54 — Tools on every harness, one-step MCP install, and billing alerts for owners by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9598
  • ci: fix the v0.13.54 staging gate (gitleaks docs placeholders, journeys 27 + 34) and run package quality once per Tests run by @markokraemer in https://github.com/kortix-ai/suna/pull/9601
  • fix(cli): reject unknown flags on providers subcommands (KRTX-1541) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9600
  • docs(skills): the agent offers to connect the user's computer when they mention local files by @markokraemer in https://github.com/kortix-ai/suna/pull/9602
  • feat(sandbox): live-turn puts on the v2 session-log stream (P4.3b) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9608
  • feat(apps): a Convex App is the project's backend, not 'db' by @markokraemer in https://github.com/kortix-ai/suna/pull/9607
  • feat(feature-flags): Volumes and Stateless sessions as operator-only organization flags by @allenabraham999 in https://github.com/kortix-ai/suna/pull/9592
  • feat(api): log.* events on the session stream behind schema=v2, converted for old daemons (P4.4) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9610
  • fix(web, cli): a pooled App preview stays loading until it loads; apps launch writes with wx; journey 34 sub-agent fold by @markokraemer in https://github.com/kortix-ai/suna/pull/9611
  • feat(sdk): session-log store, selectors and v2 negotiation (P4.5) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9612
  • fix(web): providers tab no longer claims the managed provider when zero models are served (KRTX-1482) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9605
  • test(e2e): journey 19 reads the organization origin label (#9592) by @markokraemer in https://github.com/kortix-ai/suna/pull/9619
  • Promote dev ab602abbed to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9620
  • Release v0.13.55 — Tools on every harness, one-step MCP install, and billing alerts for owners by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9625
  • Hotfix: prod API keeps the live 200%/100% ECS rollout so Deploy Prod's Terraform applies (v0.13.55) by @markokraemer in https://github.com/kortix-ai/suna/pull/9634
  • Release v0.13.56 — Tools on every harness, one-step MCP install, and billing alerts for owners by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9637

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.53...v0.13.56

Read the full release on GitHub
October 9, 2026

Full-screen MFA step-up, quieter Slack threads, and a security fix

v0.13.53

New

  • Two-factor step-up opens full screen, and the MCP connect dialog uses a split layout with the details beside the form.

Fixed

  • Slack: in a channel thread, the agent runs only when someone tags it.
  • The /download page shows the original phone screenshots on the mobile card again.
  • Mobile over-the-air publishing no longer fails on the update lookup step.

Security

  • Updated the shell-quote dependency to 1.11.0 (CVE-2026-102422).

What's Changed

  • chore(release): staging VERSION → 0.13.53 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9315
  • Hotfix to staging: Slack tag-only threads, MFA step-up modal, /download screenshots, OTA publish by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9354
  • test(release-gate): fix five release-gate test races and drifts against staging by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9445
  • test(release-gate): fix the second round of staging release-gate failures by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9450
  • test(release-gate): fix the round-3 staging gate failures by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9456
  • test(release-gate): fix the round-4 staging gate failures by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9462
  • test(release-gate): journey 27 steer on a deployed box by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9469
  • Release v0.13.53 — Full-screen MFA step-up, quieter Slack threads, and a security fix by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9443

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.52...v0.13.53

Release on GitHub
October 7, 2026

Steer a running turn, live queue state, and spend by source

v0.13.52

New

  • Steer a running turn. A message sent with Enter while the agent works reaches the running turn at its next step, and the turn does not stop. The message waits above the composer as "Read at next step". Cmd/Ctrl+Enter still queues a message for after the turn, and a queued message has a "Stop and send" action. The CLI has kortix sessions chat --steer.
  • Live queue state. The queue above the composer updates from the session stream instead of a once-a-second poll.
  • Spend by source. LLM credit usage shows which trigger, member or caller spent it.
  • Trigger templates can use cron.scheduled_date and cron.scheduled_hour.
  • CLI: kortix validate warns about large repositories, and kortix ship runs it first.
  • New skill form: a skill can be created from a form without a model.
  • The new-project handoff shows each provisioning step as it happens.

Improved

  • A ChatGPT connection that reached its plan limit is tried again after 15 minutes, and its owner can retry it at once.
  • pi compacts the conversation at a token budget instead of at the model's full window.
  • A sandbox that cannot start because the provider's storage quota is full says so.
  • A slow session restore shows as waiting, not as stalled or failed.
  • A scheduled account deletion now runs when it is due. It removes the account's data and login, cancels the subscription and stops the sandboxes.
  • Members no longer see Restart, Stop or Delete on sessions they cannot control. A manually fired trigger is labeled as manual.

Fixed

  • YAML and JSON files preview again.
  • A 401 makes every app fetch a fresh token.
  • Usage metering closes gaps where a stream could go unbilled, and refunds are clawed back correctly.
  • Monthly renewals keep credit balances to the full four decimals.
  • An "Only you" secret stays private when its holder's role or group changes.
  • Only live account tokens are listed, and a 401 from a revoked token names it.
  • Security hardening: tenant isolation for invites, usage and setup links, agent app preview isolation, MFA step-up, and sandbox proxy access checks.
  • The API finishes in-flight work on shutdown and retries webhooks until they are acknowledged.
  • CLI fixes for projects link --host, approvals ls and change requests.
  • Slack and Teams file downloads stay inside the project.
  • An approval request sends one notification, not one per server.
  • A change to who can use a secret or a connected account applies on every server at once.

What's Changed

  • refactor(api): R4 API layers — explicit routes, services free of HTTP, workers/, iam read models by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9200
  • feat(infra): prepare dev and staging to leave us-west-2 (region consolidation, phase 0) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9201
  • fix(web): members are not offered session Restart, Stop or Delete they cannot use by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9211
  • refactor(api): break the project-snapshot barrel import cycles (KRTX-1598) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9140
  • fix(tunnel): parse the rpc body with the shared tolerant parser (KRTX-1569) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9139
  • fix(web): one CodeMirror state/view/lezer copy, so yaml and json files preview again by @markokraemer in https://github.com/kortix-ai/suna/pull/9217
  • fix(cli): resolve one principal for the change-request commands (KRTX-1486) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9102
  • fix(cli): show approvals ls action ids with one connector prefix (KRTX-1668) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9215
  • fix(api): name the real manifest file in the oauth1 auth rejection (KRTX-1558) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9137
  • fix(cli): projects link --host authenticates with the named host's stored key (KRTX-1673) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9220
  • feat(web): show the streamed provisioning steps on /new's handoff (KRTX-1543) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9216
  • chore(release): VERSION → 0.13.52 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9234
  • chore(release): staging VERSION → 0.13.52 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9233
  • fix(api): a held prompt no longer loops the drain, and a shutdown hands its claims back by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9229
  • fix(api): an "Only you" secret stays closed when its holder is promoted, removed or its group deleted by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9231
  • fix(web): label a manual trigger fire as manual in the sessions list (KRTX-1676) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9224
  • fix(sessions): a full sandbox-provider storage quota says so instead of "could not start. Try again" by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9236
  • refactor(api): split sandbox env transport, flatten monitors and access casts (KRTX-1499) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9101
  • feat(infra): switch dev to its us-east-2 stack (region consolidation, phase 2) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9230
  • fix(api): normalize x-forwarded-proto in the public-share origin (KRTX-1570) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9138
  • feat(triggers): cron.scheduled_date and cron.scheduled_hour template fields by @markokraemer in https://github.com/kortix-ai/suna/pull/9239
  • feat(gateway): spend by source — which trigger, member or caller spent LLM credits by @markokraemer in https://github.com/kortix-ai/suna/pull/9242
  • fix(billing): execute scheduled account deletions from a leader-elected worker (KRTX-1260) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8993
  • fix(pi): compact at a token budget, not at the model window by @markokraemer in https://github.com/kortix-ai/suna/pull/9245
  • fix(api,cli): name the revoked account token in the dead-credential 401 (KRTX-1564) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9227
  • feat(skills): give the skill New flow a no-model form path (KRTX-1537) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9232
  • fix(api): list only live account tokens (KRTX-1675) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9221
  • feat(api): R9 prompt queue — one state definition, NOTIFY-driven drain, restart-safe dedupe, every sender through the queue by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9255
  • feat(infra): switch staging to its eu-west-2 stack (region consolidation) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9254
  • fix(gateway): re-try a ChatGPT connection 15 min after a plan limit; owner retry now by @markokraemer in https://github.com/kortix-ai/suna/pull/9257
  • docs(learnings): give every provider cooldown a short re-try by @markokraemer in https://github.com/kortix-ai/suna/pull/9259
  • feat(cli): kortix validate warns on large repositories; kortix ship runs validate by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9261
  • fix(sdk): a 401 forces a fresh token in every host; raw SDK fetches go through send() by @markokraemer in https://github.com/kortix-ai/suna/pull/9262
  • feat(sessions): steer a running turn (R10) + queue state from the session stream by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9260
  • fix(billing): metering integrity — no free streams, refund clawback, fail-closed gate by @markokraemer in https://github.com/kortix-ai/suna/pull/9265
  • fix(sandbox-proxy): canonical gate path, project-level access, edge and egress hardening by @markokraemer in https://github.com/kortix-ai/suna/pull/9258
  • fix(ci): point workflows at the dev trunk; main no longer exists by @markokraemer in https://github.com/kortix-ai/suna/pull/9268
  • fix(web): isolate agent app previews; MFA step-up, demo-request and shell hardening by @markokraemer in https://github.com/kortix-ai/suna/pull/9267
  • fix(api): drain on SIGTERM, ack-or-retry webhooks, fence the leader lease, bound worker state by @markokraemer in https://github.com/kortix-ai/suna/pull/9271
  • fix(authz): tenant-isolation hardening (invites, usage, gateway edge, setup links, impersonation) by @markokraemer in https://github.com/kortix-ai/suna/pull/9272
  • fix(runtime): a keep-alive poll never undoes a stop; release dedupe claims; bound the runtime streams by @markokraemer in https://github.com/kortix-ai/suna/pull/9273
  • fix(ci): trust the dev branch in the Terraform apply gate after the main → dev rename by @markokraemer in https://github.com/kortix-ai/suna/pull/9274
  • fix(ci): prod deploy role scoped to the prod environment, trunk rename main->dev, fail-closed gates (audit 09) by @markokraemer in https://github.com/kortix-ai/suna/pull/9276
  • fix(web): a slow restore is a waiting state, not a stall or an error by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9266
  • fix(billing): scheduled account deletion deletes data and auth user, claims atomically, retries failed steps by @markokraemer in https://github.com/kortix-ai/suna/pull/9277
  • fix(release): unblock the v0.13.52 staging gate by @markokraemer in https://github.com/kortix-ai/suna/pull/9270
  • docs(billing): correct the deletion-guard comment about auth-user deletes by @markokraemer in https://github.com/kortix-ai/suna/pull/9279
  • perf(db): index trigger session lookups by (project, slug, key) by @markokraemer in https://github.com/kortix-ai/suna/pull/9282
  • fix(release): v0.13.52 gate round 2 — deletion snapshot, stale suppression, learnings index by @markokraemer in https://github.com/kortix-ai/suna/pull/9280
  • Promote dev 938fe72de5 to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9285
  • fix(channels): confine Slack and Teams file downloads to the project; no sync needed (KRTX-933) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9291
  • fix(ci): staging web reads its Vercel credentials from us-west-2 by @markokraemer in https://github.com/kortix-ai/suna/pull/9293
  • fix(web): a small avatar holds one initial at its own size (KRTX-1047) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9295
  • Promote dev 0ccced22cd to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9294
  • docs(learnings): rename the trunk only together with every workflow, test and hook that names it by @markokraemer in https://github.com/kortix-ai/suna/pull/9298
  • fix(web): pin the "Sending" label under a sent message so it never slides by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9297
  • fix(ci): staging verify reads the Vercel bypass from us-west-2 by @markokraemer in https://github.com/kortix-ai/suna/pull/9301
  • fix(api): one permission push per request id across every API replica; AUD-6 polls its delivery by @markokraemer in https://github.com/kortix-ai/suna/pull/9304
  • test(e2e): IAM-40 waits out the IAM cache window; IAM-27 asserts the exact cap only on one replica by @markokraemer in https://github.com/kortix-ai/suna/pull/9305
  • test(e2e): accounts flow passes a defined userId to the member delete by @markokraemer in https://github.com/kortix-ai/suna/pull/9306
  • fix(iam): never cache secret and connection grants; SEC-AUD flows run on deployed targets by @markokraemer in https://github.com/kortix-ai/suna/pull/9307
  • test(flows): CONN-29 polls the widen past the object-grant cache TTL by @markokraemer in https://github.com/kortix-ai/suna/pull/9308
  • chore: dead-code sweep (-18.9k lines, 7 web deps) by @markokraemer in https://github.com/kortix-ai/suna/pull/9310
  • test(e2e): journeys 23, 27 and 38 follow staging's real behavior (v0.13.52 gate) by @markokraemer in https://github.com/kortix-ai/suna/pull/9309
  • Promote dev a44ba90fb0 to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9311
  • Release v0.13.52 — Steer a running turn, live queue state, and spend by source by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9302

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.51...v0.13.52

Read the full release on GitHub
October 6, 2026

See the model behind each answer, pi 1.0, and config releases that follow your repository

v0.13.51

New

  • See the model behind each answer. A session shows which model answered and what the answer cost.
  • pi 1.0. The pi harness is on pi 1.0. It brings compaction and slash commands, and pi now runs only inside the sandbox.
  • Config releases follow your repository. A release is a checkout of the base branch with the repository's own layout. An unbuildable or quarantined tip no longer drops a session's configuration without notice.
  • Security settings: a redesigned authenticator-app enrollment, and a list of every signed-in device. Signing a device out stops its access at once.
  • Viewers: the session file and App viewers show an address bar. App previews show calmer loading and build states, and hover cards name running ports and links as well as files.
  • Mobile: an updated app, with JavaScript changes now delivered as over-the-air updates. It adds channel cards for Slack and Teams prompts and one progress indicator per running turn. The Files row opens the Files page, and the project's Apps are listed.
  • Downloads: the desktop installer has a drag-to-install window, and /download links to the App Store and Google Play listings.
  • The website describes Kortix as the open-source AI Operating System.

Improved

  • When a ChatGPT usage limit is reached, the gateway falls back to the project's model chain and says when the limit resets.
  • A failed sandbox template build names its cause.
  • Adding a member by email is faster.
  • Sandbox shells no longer write core dumps.

Fixed

  • Editing a sent prompt keeps its attachments, and so does editing a prompt queued while the session boots.
  • A manual trigger run no longer fails when it races a new session that creates the same agent identity.
  • Relative OpenCode instructions read from the release, not from the workspace.
  • The demo booking confirmation stays open until you close it.
  • The Kortix web app is patched against three new vulnerabilities in its dependencies.

What's Changed

  • chore(secrets): rotate the dev/staging web gate password by @markokraemer in https://github.com/kortix-ai/suna/pull/9151
  • brand+seo: Kortix, the open-source AI Operating System (soft rebrand, SEO/GEO pass, AI OS pillar page) by @markokraemer in https://github.com/kortix-ai/suna/pull/9152
  • fix(api): a concurrent agent service account create re-reads the winner instead of failing by @markokraemer in https://github.com/kortix-ai/suna/pull/9155
  • chore(release): staging VERSION → 0.13.51 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9156
  • chore(release): VERSION → 0.13.51 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9157
  • perf(db): plan legacy user role auth calls once (KRTX-1150) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8880
  • fix(db): scope the legacy public.credit_usage policies to their roles (KRTX-1164) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8927
  • fix(db): drop the legacy public.agents select policy flagged by the supabase advisor (KRTX-1158) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9065
  • fix(db): wrap public.resources RLS auth.uid() in an initplan (KRTX-1147) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9066
  • fix(db): wrap user_memories RLS auth.uid() in initplan form (KRTX-1149) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9069
  • perf(db): dedupe legacy credit purchase RLS policies (KRTX-1163) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9075
  • test(db): point the credit_usage policy-roles test at the renamed migration by @markokraemer in https://github.com/kortix-ai/suna/pull/9158
  • refactor(api): split the config-releases builder seam, stop wasted archive builds (KRTX-1595) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9141
  • test(db): point the credit_purchases single-policy test at the renamed migration by @markokraemer in https://github.com/kortix-ai/suna/pull/9159
  • fix(db): scope the legacy audit_log policies to their JWT roles (KRTX-1159) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9082
  • fix(db): wrap the legacy auth.role() policy on renewal_processing (KRTX-1146) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9086
  • test(kortixd): write the first five monitor lines in one write by @markokraemer in https://github.com/kortix-ai/suna/pull/9160
  • test: fail when code names a migration file that does not exist by @markokraemer in https://github.com/kortix-ai/suna/pull/9161
  • fix(db): wrap project_select_policy auth.uid() in an initplan (KRTX-1144) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9090
  • test(db): give the credit_purchases single-policy suite its own probe role by @markokraemer in https://github.com/kortix-ai/suna/pull/9162
  • test: skip the migration-reference guard's own fixtures by @markokraemer in https://github.com/kortix-ai/suna/pull/9163
  • fix(db): wrap public.audit_log RLS auth calls in initplan scalar subqueries (KRTX-1134) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9104
  • fix(db): defuse the armed legacy account-deletion cascade (KRTX-1517) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9108
  • fix(db): give agent_templates_backup a surrogate primary key (KRTX-1169) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9113
  • perf(db): drop the unused profiles_email_idx on kortix_yolo.profiles (KRTX-1217) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8935
  • chore(secrets): rotate leaked Betterstack credentials + web-gate verifier learning by @markokraemer in https://github.com/kortix-ai/suna/pull/9165
  • feat(mobile): channel cards for current Slack and Teams prompts, one shared parser by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9168
  • fix(session): keep attachments when editing a sent prompt by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8961
  • fix(web): plain session header menu items, use Copy icon by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9169
  • feat(web): address-pill header for the session file and app viewers by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9171
  • feat(mobile): ship JS/TS as OTA updates from CI, guarded by the native fingerprint by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8767
  • fix(gateway): a ChatGPT usage limit falls back to the project chain and says when it resets by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9172
  • fix(api): add-member email lookup uses the auth.users index (request_deadline on staging) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9173
  • fix(gateway): round the ChatGPT usage-limit reset wait by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9174
  • fix(mobile): compare OTA native code only against builds of the current app id by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9175
  • fix(sandbox): no core dumps in sandbox shells; a crash dump carries the agent env by @markokraemer in https://github.com/kortix-ai/suna/pull/9177
  • feat(mobile): one shimmer per running turn, Files row opens the Files page (KRTX-1638, KRTX-1636) by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9176
  • feat(web): show hover card names running ports and links, not only files by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9178
  • fix(web): demo booking keeps its confirmation open and closes only on request by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9179
  • feat(kortixd): pi 1.0.0, compaction and slash commands on pi by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8738
  • fix(mobile): list the project's Apps instead of always showing "No apps yet" by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9183
  • fix(kortixd): pi 1.0.3 + daemon bun.lock, so the API image builds again by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9186
  • feat(web): redesign authenticator app enrollment in Security settings by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9185
  • fix(config-releases): an unbuildable or quarantined tip never silently drops a session's config by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9187
  • feat(web): list every signed-in device in Settings > Security by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9184
  • feat(desktop): drag-to-install DMG window with a dithered background by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9190
  • fix(auth): a signed-out device's bearer stops working at once; label the device routes by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9193
  • fix(mobile): scroll the drawer nav pills with the session list by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9192
  • feat(web): calm preview states: load line page, dot-matrix while building, debug harness by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9188
  • refactor(pi): remove the pi_worker split and the compiled-boot pipeline; pi runs only in the sandbox by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9189
  • fix(desktop): show the DMG background on macOS 26 by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9194
  • Promote selected main commits (through 2010294429) to staging by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9195
  • feat(config-releases): a release is a checkout of the base branch, with the repository's own layout by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9197
  • fix(snapshots): a failed Platinum template build names its cause by @kubet in https://github.com/kortix-ai/suna/pull/9198
  • fix(config-releases): relative OpenCode instructions read the release, not /workspace by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/9199
  • feat(session): show the model that answered and what it cost by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8759
  • feat(web): link the App Store and Google Play listings on /download by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9202
  • fix(web): Edit on a message queued during boot keeps its files by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/9204
  • Promote e4d68df3df (store links on /download) to staging by @sutharjay1 in https://github.com/kortix-ai/suna/pull/9203
  • fix(deps): seroval 1.6.3 and source-map-js 1.2.2 for three new CVEs by @markokraemer in https://github.com/kortix-ai/suna/pull/9207
  • Promote main 34c9f9d94f to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9210
  • Release v0.13.51 — See the model behind each answer, pi 1.0, and config releases that follow your repository by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9196

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.50...v0.13.51

Read the full release on GitHub
October 4, 2026

Fork a conversation, cancel from billing, and one permission per topic

v0.13.50

New

  • Fork a conversation. A session's conversation offers a Fork action, so you can branch from any point.
  • Cancel a subscription from the billing pane.
  • One permission per topic. The broad project.customize.* permissions are replaced by project.settings.write, project.sandbox.write, and project.model.read/.write. Agent changes use project.agent.write. Every role keeps exactly what it had. Project members can now open Agents and Triggers read-only.

Improved

  • Sign-in: an existing account opens on the password form, and the email link is one click away. After you enroll in two-factor authentication, sign-in asks for the code. A magic link still completes when its verifier cookie is lost. A failed server sign-out is reported on the sign-in page.
  • Security settings list the devices that are signed in.
  • Account deletion: "Delete immediately" deletes the account, and the dialog reads as a choice.
  • Creating a project lands you on the project page.
  • The session key panel says whose keys a session reaches, and why a key is not available.
  • Connectors: Computers appear under Connected only after a machine is paired, and connector notes display the same way on every surface.
  • The audit log: reconciliation catches up on accounts with very large histories.
  • The API returns 400 for a malformed account id, and a marketplace install fails clearly when no model can serve its import.
  • Database health: more RLS policies evaluate the signed-in user once per query, and legacy tables gain primary keys and missing indexes.

Fixed

  • The CLI:
    • sessions log and chat show the real stop or failure reason.
    • Trigger schedule updates keep their time zone.
    • Policy conditions keep their operators.
    • --json output and session listings stay stable.
    • projects rm --purge reports "Purged".
    • Project-scoped commands reach projects that have no session.
    • The empty models state points to providers.
  • Mobile:
    • Question answers can be retried until they are accepted.
    • Mermaid diagrams render.
    • Teams mentions are stripped from session titles.
    • Diff stats keep literal escapes.
    • App previews refresh their credentials when opened.
  • Desktop: "Allow all" adds Kortix to the macOS Screen Recording list.
  • A warm session that has not been prompted reads as starting, not running.
  • The sandbox agent's dependencies are patched against two undici vulnerabilities.
  • Customize tabs appear immediately, and only the page body waits for permissions.

What's Changed

  • fix(customize): paint the tab bar on the first frame; gate only the page body by @markokraemer in https://github.com/kortix-ai/suna/pull/9042
  • fix(api): list stopped sessions the runtime row does not confirm (KRTX-1452) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9020
  • fix(cli): preserve trigger timezone on schedule updates (KRTX-1338) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8869
  • fix(audit): bound each reconciliation pass by source rows, so heavy accounts converge by @markokraemer in https://github.com/kortix-ai/suna/pull/9049
  • refactor(iam): one permission per topic — retire project.customize.* by @markokraemer in https://github.com/kortix-ai/suna/pull/9050
  • fix(mobile): preserve literal newline escapes in diff stats (KRTX-1265) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8860
  • perf(db): omit unused sandbox export ordering (KRTX-1074) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8867
  • test: add the e2e pilot and testing assessment by @markokraemer in https://github.com/kortix-ai/suna/pull/9052
  • test(flows): APP-7 accepts a released image when a deployed target finishes the build first by @markokraemer in https://github.com/kortix-ai/suna/pull/9056
  • chore(release): VERSION → 0.13.50 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9060
  • chore(release): staging VERSION → 0.13.50 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9061
  • refactor(sdk): move the mobile sandbox-image runtime into @kortix/sdk (KRTX-1065) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8779
  • fix(api): bound the session-config mirror wait and prove freshness per read (KRTX-818) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9048
  • feat: Kortix is the open-source AI Operating System — rename everywhere + AI OS marketing site by @markokraemer in https://github.com/kortix-ai/suna/pull/9068
  • fix(mobile): strip Teams mentions from session titles (KRTX-1266) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8863
  • perf(db): cache legacy threads RLS identity (KRTX-1148) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8879
  • perf(db): index the parked-runtime verification sweep on kortix.session_sandboxes (KRTX-1307) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8995
  • fix(web): render the signed-in device list on /settings/security (KRTX-1392) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9018
  • test(api): pin the forwarded-prompt sweep to its partial index (KRTX-1303) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9010
  • fix(mobile): render Mermaid show items as diagrams (KRTX-1267) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8866
  • feat(billing): add a cancel subscription control to the billing pane (KRTX-1316) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9043
  • test(lanes): make the packages test lane hermetic on a platform sandbox (KRTX-1409) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9011
  • fix(api): report not_open when the strand re-queue's guarded update matches nothing (KRTX-1469) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9022
  • fix(tests): pin one gateway internal token across local stack halves (KRTX-1433) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9025
  • fix(mobile): refresh preview credentials on opening (KRTX-1247) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8857
  • fix(connectors): list Computers under Connected only once a machine is paired (KRTX-1492) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9073
  • perf(db): index chat_pending_auth_messages.project_id for its projects FK (KRTX-1097) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9055
  • fix(migration): give the smoke storage-object query an explicit psql separator (KRTX-1457) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9015
  • fix(cli): report Purged when projects rm --purge hard-deletes (KRTX-1487) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9092
  • fix(tests): catalog the real steps of every harnessFlow id and its -pi twin (KRTX-1434) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9000
  • refactor(dev): extract warm_frontend_routes, fix empty-array crash on bash 3.2 (KRTX-1456) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9014
  • fix(api): treat an integrations.sh surface 404 as an empty record (KRTX-1442) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9004
  • fix(agent-tunnel): resume the tunnel lease through the drift-safe service resume (KRTX-1389) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9007
  • fix(cli): reject explicit roles for everyone grants (KRTX-1337) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8871
  • fix(cli): surface the real stop reason in sessions log and chat (KRTX-1257) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8894
  • fix(web): the Delete account dialog reads as a choice, not a done state (KRTX-1403) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9076
  • perf(db): clear the auth_rls_initplan advisor finding on public.webhook_events (KRTX-1151) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9083
  • fix(db): add primary key to legacy workflow backup (KRTX-1170) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8886
  • refactor(cli): compress MCP execution, root dispatch and picker lifecycle (KRTX-1341) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8915
  • refactor(cli): split the CLI mega-modules and delete their dead duplicated surface (KRTX-1334) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8982
  • fix(api): publish the real value sets for merged-literal OpenAPI enums (KRTX-1490) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9032
  • fix(api): delete the account for real on delete-immediately (KRTX-1402) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9033
  • refactor(api,sdk): one contract — typed handlers, true spec, SDK drift test, daemon callbacks (R3) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8954
  • chore(deps): bump pypdf from 6.16.1 to 6.19.0 in /packages/starter/templates/general-knowledge-worker/skills/presentations/scripts by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/8644
  • chore(deps): bump ip-address from 10.7.0 to 10.7.2 in /.deepsec by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/8513
  • chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/7991
  • chore(deps): bump go.opentelemetry.io/otel/sdk/log from 0.19.0 to 0.21.0 in /apps/kortix-app-runtime/caddy by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/8299
  • fix(web): keep the dev gate off the auth callback routes (KRTX-1467) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9062
  • fix(api): bound the sandbox env memo on the skip path (KRTX-1501) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9084
  • fix(api): refuse foreign credential shapes in validateSecretKey with a precise error, not a doomed probe (KRTX-1414) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9097
  • fix(cli): preserve session listing across flag spellings (KRTX-1323) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8875
  • fix(cli): preserve JSON output for session reload (KRTX-1326) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8877
  • fix(web): give the account-hub audit tab a page heading (KRTX-1423) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9115
  • fix(web): default existing-account sign-in to the password form (KRTX-1346) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9103
  • fix(cli): let project-scoped commands reach a non-session project (KRTX-1437) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9110
  • fix(dev): make the tunnel skip paths startable (KRTX-1455) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9003
  • fix(web): drop the timed-out extension window-message noise (KRTX-1459) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9112
  • fix(sessions): the key panel and its refusal say whose keys a session reaches, and why not by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8192
  • fix(cli): dispatch channels after parsing flags (KRTX-1335) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8873
  • fix(cli): document the built-in dev host as https in hosts --help (KRTX-1262) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9109
  • fix(cli): make the empty models state point at providers, not an empty ls (KRTX-1538) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9118
  • test(cli): pin the sandbox env-file path for projects use --host (KRTX-1429) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9116
  • fix(api): return 400 for a malformed account_id on account-scoped routes (KRTX-1421) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9114
  • fix(api): report an unprompted warm session shell as starting, not running (KRTX-1466) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9100
  • test(cli): pin --host token routing under the ambient session principal (KRTX-1404) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9077
  • fix(cli): preserve operators in policy condition values (KRTX-1324) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8874
  • fix(cli): show the real failure reason for a failed turn in sessions log and chat (KRTX-1463) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9111
  • fix(api): refuse a marketplace install whose import turn has no servable model (KRTX-1540) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9094
  • fix(shared): parse the connector notes block on every surface (KRTX-1383) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9081
  • fix(tests): keep the packages lane green on loaded worker sandboxes (KRTX-1479) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9074
  • fix(web): reach the too-long name message for typed input on /new (KRTX-1424) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9067
  • fix(worker): retry worker RPC only on transport failures, never on error text (KRTX-1388) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9030
  • fix(mobile): keep question answers retryable until accepted (KRTX-1246) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8870
  • fix(web): surface an unconfirmed server sign-out on /auth (KRTX-1393) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9078
  • feat(web): offer a Fork action on session conversations (KRTX-1474) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9041
  • fix(web): land on the project page after Create project (KRTX-1419) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9028
  • fix(web): a fresh magic-link sign-in completes its PKCE exchange after a lost verifier cookie (KRTX-1412) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9034
  • fix(web): enforce the TOTP challenge after enrollment (KRTX-1386) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9029
  • chore(deps): bump hono from 4.13.5 to 4.13.7 by @dependabot[bot] in https://github.com/kortix-ai/suna/pull/8563
  • refactor(api): dedupe agent governance, git auth and compute accrual copies (KRTX-1498) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9085
  • refactor(web): simplify IAM contracts, capability model and audit filters (KRTX-1056) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8919
  • refactor(web,sdk): delete dead component layers and centralize connector setup (KRTX-1012) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8829
  • refactor(whitelabel-demo): dedupe shared paths, split fat components (KRTX-1418) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9091
  • fix(db): re-date the agent_workflows_backup migrations after dev's applied set by @markokraemer in https://github.com/kortix-ai/suna/pull/9125
  • fix: v0.13.50 gate — sandbox-agent lockfile, undici 8.10.2, documented sudo in the sandbox image by @markokraemer in https://github.com/kortix-ai/suna/pull/9127
  • fix(deps): sync the daemon's standalone bun.lock with the hono bump by @markokraemer in https://github.com/kortix-ai/suna/pull/9128
  • perf(db): add a primary key to basejump.config (KRTX-1167) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9089
  • fix(web): mark the AI OS hero art decorative; journey 01 takes #9103's explicit link choice by @markokraemer in https://github.com/kortix-ai/suna/pull/9129
  • Revert otel/sdk/log 0.21 bump in the Caddy runtime (breaks the API image build) by @markokraemer in https://github.com/kortix-ai/suna/pull/9130
  • fix(db): consolidate legacy deletion request policies (KRTX-1155) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8884
  • perf(db): add a primary key to agents_backup_cleanup_20250729 (KRTX-1171) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9106
  • fix(db): consolidate public.referrals RLS policies to one permissive policy per action (KRTX-1165) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9107
  • fix: v0.13.50 gate — CLI export, linear Teams mention strip, starter snapshot, SDK timer containment by @markokraemer in https://github.com/kortix-ai/suna/pull/9132
  • fix(security): email only Medium+ GuardDuty findings by @markokraemer in https://github.com/kortix-ai/suna/pull/9133
  • fix(security): keep GuardDuty detectors at SIX_HOURS publishing by @markokraemer in https://github.com/kortix-ai/suna/pull/9135
  • docs(learnings): change Terraform-owned AWS config only in Terraform by @markokraemer in https://github.com/kortix-ai/suna/pull/9136
  • revert: AI OS rename + marketing site (#9068), back to the prod site by @markokraemer in https://github.com/kortix-ai/suna/pull/9142
  • fix(security): document Trivy exceptions for sandbox sudo and two unfixed CVEs by @markokraemer in https://github.com/kortix-ai/suna/pull/9145
  • fix(desktop): Allow all adds Kortix to the Screen Recording list by @markokraemer in https://github.com/kortix-ai/suna/pull/9147
  • fix(security): refuse crash dumps and files over 20 MB in pre-commit and pre-push by @markokraemer in https://github.com/kortix-ai/suna/pull/9149
  • test(sdk): end each fake-timer act() scope on real timers in the poll-deadline test by @markokraemer in https://github.com/kortix-ai/suna/pull/9148
  • Promote main ecd96ff736 to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9150
  • Release v0.13.50 — Fork a conversation, cancel from billing, and one permission per topic by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9153

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.49...v0.13.50

Read the full release on GitHub
October 4, 2026

Permissions decide for agents, and an agent grants only what it holds

v0.13.49

New

  • Permissions decide, for agents as for people. An agent that holds a permission can do the work end to end. kortix_permissions: all, "*", and any list that contains "*" mean the same thing. With all, an agent can also manage project members and delete the project. Creating credentials stays with people.
  • An agent can grant only what it holds. When an agent edits an agent's permissions, connectors, secrets, or Apps, it can add only what it holds itself. This applies through every route, change request, and push. An agent that does not hold every grant opens a change request instead of pushing the default branch directly.
  • One authorization path. Every agent with a kortix_permissions grant acts as itself, in every project. The per-project switch back to the authority of the person who started it is gone.
  • One bad permission entry no longer empties an agent. An entry Kortix cannot grant is skipped, and the rest of the agent's grant stays. kortix validate still reports it.
  • The Meta agent is platform-owned. It runs read-only and appears first in the agent picker.
  • No more active-session limits. Billing is the only limit on how many sessions run at once.
  • The blog is served from its own app at /blog.

Improved

  • A change-request merge that edits agents, triggers, or default_agent needs the same permission as the direct route.
  • The download links (/download/macos, /windows, /linux) fall back to the releases page after 3 seconds if GitHub does not answer.
  • Deleting a sign-in removes the accounts that only that person belonged to, and revokes all of that person's credentials.
  • The manager's session inventory no longer lists deleted warm drafts.

Fixed

  • kortix validate rejects invalid arguments.
  • The sandbox's /turn request is read correctly before streaming starts.
  • The mobile stop icon honors its size.
  • The infrastructure audit checks network ACL admin ports separately for IPv4 and IPv6.

What's Changed

  • chore: remove 4 unused symbols CodeQL flagged on the v0.13.48 promotion by @markokraemer in https://github.com/kortix-ai/suna/pull/8981
  • chore(secrets): track EXPO_ACCESS_TOKEN (Expo push) across all envs by @markokraemer in https://github.com/kortix-ai/suna/pull/8984
  • feat(web): serve /blog from the standalone blog app by @ArtemShatokhin in https://github.com/kortix-ai/suna/pull/8964
  • chore(release): staging VERSION → 0.13.49 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8986
  • chore(release): VERSION → 0.13.49 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8987
  • fix(cli): reject invalid validate arguments (KRTX-1339) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8881
  • fix(test): one attestation file per PR so merges stop conflicting by @markokraemer in https://github.com/kortix-ai/suna/pull/8991
  • fix(infra): audit NACL admin ports per address family (KRTX-1458) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8997
  • fix(worker): parse the /turn body before the SSE headers (KRTX-1387) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8996
  • fix(sandbox): pin the meta image pnpm install to the checksum-verified artifact (KRTX-1384) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8994
  • fix(tests): compare RTA-6's applied-nothing check on identity fields only (KRTX-1426) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8992
  • fix(tests): make the packages lane green in worker sandboxes (KRTX-1411) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8988
  • fix(mobile): honor StopIcon size prop (KRTX-1293) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8862
  • fix(test): verify accepts packages skipped-sandbox-image, matching the merge gate by @markokraemer in https://github.com/kortix-ai/suna/pull/9001
  • feat(iam): permissions decide for agents as for people; "*" means all by @markokraemer in https://github.com/kortix-ai/suna/pull/9002
  • feat(meta): platform-owned Meta agent on pi, read-only, elevated in the picker by @markokraemer in https://github.com/kortix-ai/suna/pull/9017
  • feat(sessions): remove every active-session limit; billing is the only gate by @markokraemer in https://github.com/kortix-ai/suna/pull/9019
  • fix(release): v0.13.49 gate — Drata resource names, download fetch timeout, deployed-target flows by @markokraemer in https://github.com/kortix-ai/suna/pull/9021
  • fix(db): reclaim orphaned accounts when an auth user is deleted (KRTX-1300) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9006
  • fix(api): drop soft-deleted warm drafts from the manager session inventory (KRTX-1298) by @agent-kortix in https://github.com/kortix-ai/suna/pull/9013
  • fix(iam): an agent grants only what it holds by @markokraemer in https://github.com/kortix-ai/suna/pull/9035
  • fix: main green for v0.13.49 — Meta agent platform type, i18n banner, SSO test anchor owner by @markokraemer in https://github.com/kortix-ai/suna/pull/9037
  • refactor(iam): one authorization path — delete the agent_principal flag by @markokraemer in https://github.com/kortix-ai/suna/pull/9027
  • test(shared): Meta sandbox guide assertions match #9017's heading and wording by @markokraemer in https://github.com/kortix-ai/suna/pull/9039
  • Promote main a0aa08778d to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/9040
  • Release v0.13.49 — Permissions decide for agents, and an agent grants only what it holds by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/9044

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.48...v0.13.49

Release on GitHub
October 3, 2026

Your computer on the web, a rebuilt audit log, and editable queued prompts

v0.13.48

New

  • Your computer, on the web. Each physical computer appears once, even after you re-pair it. Computer Use runs inside the Kortix desktop app, and it asks for every macOS permission right after you connect. Pairings with no hardware id that stay silent for 30 days are removed.
  • Edit a queued prompt in place. The prompt queue sits in its own card above the composer.
  • Review Center has its own page. You approve requests in a modal on the approve page.
  • Channel bindings live in one dialog, with one tab per platform and a settings dialog for each binding. Teams bindings read "Team › Channel" and include the thread title.
  • Shared sessions show who sent each message, with an avatar per sender.
  • Marketplace redesign: one card per item, a file tree in the sidebar, and related skills.
  • A new /developers page. Its "copy prompt command" output now pastes safely into any POSIX shell.
  • One-day personal API keys. You can create a key that expires after one day.
  • Apps on mobile: a new Apps tab in the project drawer.
  • Show files name the file in a hover card.

Improved

  • Audit log, rebuilt. Events are written to weekly partitions with time-ordered ids, without the per-session lock that slowed ingestion. Noise rows (missing-secret probes, a login event per request) are gone. Weeks older than 90 days move to S3 under Object Lock, and exports read archived weeks too.
  • The agent harness: Kortix tools run on both supported harnesses, and the web, CLI, and mobile clients render from the Kortix session contract.
  • Slack: messages name people and channels instead of showing ids, and plan steps render channels natively. Agent history and thread reads name each author. Slack shows its own logo everywhere.
  • Connectors: discovery tries managed connectors first, with explicit API and MCP sources. Discovery still works when a spec source cannot load.
  • Sandbox file uploads send 8 MiB requests, so a 1 MiB file uploads in about 2 s instead of 20 s.
  • Sessions honor US compute placement and reuse warm sessions. Warm sessions you are billed for stay visible in the session list. You can switch agents in a started session, and the locked agent picker explains why it is locked.
  • Each sandbox sends its calls to its own regional control plane.
  • Database health: RLS policies evaluate the signed-in user once per query, duplicate indexes are dropped, foreign keys are indexed, and unused legacy tables are removed.
  • Apps: deleting an App deletes its deployment images, and you can delete a single deployment.
  • Invite emails name the invited address.

Fixed

  • A session whose turn ends with a terminal error now parks, instead of staying busy.
  • The CLI: --host and named-host project context route to the right host, browser login uses the target host, and --json output carries no human notices. accounts current --json exits 1 when no account is active, projects use reports errors instead of crashing, and tokens rm with a malformed id returns 400.
  • Credit balances read the same on the CLI and the web, and a free account sees its balance on Plan.
  • Sign-in keeps the details of an email sign-in failure. Rate-limit errors show guidance instead of raw text, and account deletion ends active sessions at once.
  • The web: the command palette finds active projects, the selected language persists, the account hub opens from deep links, connected-account settings open again, and settings rows stack on narrow screens. The Apps card shows its live preview again.
  • Video: unsupported fullscreen and blocked autoplay no longer raise errors.
  • Mobile: the composer detects mention and command triggers at the caret, not only at the end of the text.
  • Marketplace installs report failures instead of exiting silently.

What's Changed

  • feat(session): participants endpoint and per-message sender avatars for shared sessions by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8493
  • feat(computers): "Your computer" on the web; re-pairing says "already connected" by @markokraemer in https://github.com/kortix-ai/suna/pull/8660
  • fix(auth): end sessions after immediate account deletion (KRTX-951) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8640
  • feat(desktop): Computer Use runs inside Kortix; macOS grants go to Kortix, asked at once by @markokraemer in https://github.com/kortix-ai/suna/pull/8678
  • test(kortixd): wait for the note's content, not for the file (W5 E4 race) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8651
  • refactor(web): one toast surface, delete lib/toast wrapper by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8682
  • refactor(sdk): separate facade, transport and working decisions (KRTX-916) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8577
  • fix(web): guard unsupported video fullscreen API (KRTX-942) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8621
  • chore(api): revert archived wake budget extension (KRTX-440) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8662
  • chore(api): revert slow chunk read diagnostics (KRTX-797) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8663
  • refactor(sdk): revert audit query builder deduplication (KRTX-413) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8664
  • chore(api): revert resource-grant timing instrumentation (KRTX-821) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8665
  • chore(api): revert proxy failure log enrichment (KRTX-811) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8666
  • refactor(mobile): revert session action flow extraction (KRTX-774) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8668
  • chore(api): revert account-key session start denial (KRTX-426) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8669
  • chore(api): revert config deadline stage attribution (KRTX-818) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8670
  • refactor(web): revert sidebar menu extraction (KRTX-651) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8671
  • chore(api): revert Platinum reaper throttle classification (KRTX-345) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8672
  • refactor(api): revert preview helper extraction (KRTX-328) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8673
  • chore(api): revert secrets read timing instrumentation (KRTX-819) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8674
  • chore(web): revert dead connector hook deletion (KRTX-709) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8676
  • feat(computers): setup on the spot: every macOS permission asked right after connecting by @markokraemer in https://github.com/kortix-ai/suna/pull/8687
  • fix(web): persist selected language in browser session (KRTX-950) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8680
  • fix(sessions): honor US compute placement and warm reuse by @kubet in https://github.com/kortix-ai/suna/pull/8653
  • fix(web): restore connected account settings destination (KRTX-961) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8683
  • refactor(search): share runtime ranking and delete host shims (KRTX-394) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8684
  • refactor(api): compress shared middleware and value projections (KRTX-960) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8685
  • fix(web): include active projects in palette search (KRTX-964) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8686
  • revert(messaging): take agents-message-people out of main, keep message authors by @markokraemer in https://github.com/kortix-ai/suna/pull/8659
  • chore(release): VERSION → 0.13.48 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8691
  • chore(release): staging VERSION → 0.13.48 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8692
  • feat(computers): one entry per physical computer; older connections apart by @markokraemer in https://github.com/kortix-ai/suna/pull/8697
  • feat(capture): Kortix Capture — 24/7 screen capture per user, searchable by people and agents by @markokraemer in https://github.com/kortix-ai/suna/pull/8698
  • fix(main): packages lane red — 4 capture audit labels untranslated in 8 locales, capture sweeper unclassified by @markokraemer in https://github.com/kortix-ai/suna/pull/8700
  • feat(computers): remove pairings without a hardware id after 30 silent days by @markokraemer in https://github.com/kortix-ai/suna/pull/8701
  • feat: OpenCode decoupling W6 — clients on the Kortix contract (web renders from SDK kinds, neutral CLI/TUI seam, mobile on @kortix/sdk) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8699
  • fix(db): drop three audit_events indexes no read path uses (22 GB) by @markokraemer in https://github.com/kortix-ai/suna/pull/8703
  • infra(capture): allow the dev capture bucket to be destroyed (step 1 of removing Kortix Capture from main) by @markokraemer in https://github.com/kortix-ai/suna/pull/8704
  • revert(capture): remove Kortix Capture from main by @markokraemer in https://github.com/kortix-ai/suna/pull/8705
  • fix(audit): stop writing noise rows — missing-secret probes, per-request login, self-audit by @markokraemer in https://github.com/kortix-ai/suna/pull/8706
  • chore: restore 13 wrongly reverted PRs (merge-gate revert cascade, 2026-10-01) by @markokraemer in https://github.com/kortix-ai/suna/pull/8702
  • fix(audit): the git proxy's legacy-token fallback is a probe by @markokraemer in https://github.com/kortix-ai/suna/pull/8711
  • refactor(web): consolidate connector setup concerns (KRTX-966) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8689
  • fix(auth): retain email sign-in failure details (KRTX-958) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8712
  • fix(connectors): managed-first discovery with explicit API/MCP sources (KRTX-885) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8713
  • feat(audit): new audit_events rows get a time-ordered UUIDv7 event_id (1/5) by @markokraemer in https://github.com/kortix-ai/suna/pull/8708
  • feat(audit): remove the per-session lock and hash chain from audit ingestion (2/5) by @markokraemer in https://github.com/kortix-ai/suna/pull/8710
  • feat(audit): weekly range partitions for audit_events, swapped in without moving rows (3/5) by @markokraemer in https://github.com/kortix-ai/suna/pull/8715
  • feat(infra): audit-archive S3 bucket with Object Lock for audit_events by @markokraemer in https://github.com/kortix-ai/suna/pull/8709
  • feat(audit): archive weeks older than 90 days to S3 under Object Lock and drop their partitions (4/5) by @markokraemer in https://github.com/kortix-ai/suna/pull/8716
  • feat(audit): export reads archived audit weeks from S3; retention docs and viewer note (5/5) by @markokraemer in https://github.com/kortix-ai/suna/pull/8717
  • chore(env): dev runs the audit archive (mirror of kortix-dev-env) by @markokraemer in https://github.com/kortix-ai/suna/pull/8718
  • refactor(web): unify Drive row interactions and remove unused paths (KRTX-986) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8720
  • fix(web): reject failed careers application responses (KRTX-979) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8721
  • refactor(web): compress file renderer lifecycles (KRTX-983) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8723
  • refactor(markdown): share fenced-code language aliases (KRTX-992) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8724
  • refactor(web): unify marketing tree and boundary renderers (KRTX-980) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8726
  • refactor(web): unify tab lists and diagram zoom (KRTX-1008) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8727
  • fix(api): invalidate archived-project secret intake (KRTX-991) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8728
  • refactor(shared): own CLI and TUI host storage (KRTX-993) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8729
  • fix(slack): show channel and people names instead of ids by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8730
  • feat(slack): name each author in agent history and thread reads by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8731
  • fix(email): invite names the invited address and clears SpamAssassin's image-only window by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8732
  • feat(web): edit each channel binding in a settings dialog by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8733
  • feat: OpenCode decoupling W7 — Kortix tools on pi, system skills and docs describe both harnesses by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8714
  • perf(mobile): stop the waking-session freeze, cut re-renders, render markdown images by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8468
  • fix(slack): plan steps name people as text and render channels natively by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8735
  • feat(web): rebuild the /developers page by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8736
  • fix(apps): delete releases App deployment images; delete one deployment by @kubet in https://github.com/kortix-ai/suna/pull/8734
  • feat(web): show the prompt queue as its own card above the composer by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8737
  • feat(web): channel bindings in one dialog with a tab per platform by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8739
  • fix(platinum): call each sandbox's own control plane, not the home one by @kubet in https://github.com/kortix-ai/suna/pull/8740
  • fix(connectors): Connectors API Discover is off by default again (hotfix) by @markokraemer in https://github.com/kortix-ai/suna/pull/8741
  • fix(teams): name channel bindings Team › Channel, with the thread title by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8744
  • fix(dev): build the default image and make it resident in US before the API rolls by @kubet in https://github.com/kortix-ai/suna/pull/8743
  • fix(config-releases): the meta coordinator runs its own governance-only release by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8745
  • fix(web): Slack's own logo on session channel cards, not pink by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8749
  • perf(mobile): remove render and animation hot paths before store release by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8747
  • fix(web,mobile): Slack's own logo everywhere: connector detail and mobile by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8757
  • fix(cli): accounts current --json exits 1 when no account is active (KRTX-1044) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8752
  • fix(cli): reject missing named-host project context (KRTX-1042) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8758
  • feat(sessions): edit a queued prompt in place by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8753
  • fix(web): make the locked session agent picker read inert with a why tooltip by @agent-kortix in https://github.com/kortix-ai/suna/pull/8748
  • fix(settings): render the account hub on deep links (KRTX-1050) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8762
  • fix(computer): honor empty-directory deletion contract (KRTX-1057) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8764
  • refactor(web): share factory across circular dotm variants (KRTX-656) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8558
  • fix(connectors): expose computer discovery RPCs (KRTX-1055) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8766
  • perf(api,sdk): R1 hot path: fewer statements, sleeps and git calls between a prompt and the harness by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8765
  • feat(web): Review Center as its own page, approvals in the approve-page modal by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8761
  • fix(api): the latency bench's restart guard is local-only; R1 numbers on dev by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8770
  • fix(files): upload sandbox files in 8 MiB requests, not 64 KiB round trips (1 MiB: 20 s → 2 s) by @kubet in https://github.com/kortix-ai/suna/pull/8768
  • fix(sandbox): a box registers every model it is told to use; the gateway decides what is served by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8772
  • fix(billing): show free account balance on Plan (KRTX-1060) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8769
  • fix: make main green: SQL guard, queued-prompt e2e, and the four failures it was hiding by @kubet in https://github.com/kortix-ai/suna/pull/8771
  • fix(web): replace raw auth rate-limit errors with guidance (KRTX-1049) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8763
  • refactor(web): delete unreachable hooks (KRTX-1063) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8773
  • fix(runtime): no relaunch on first open of a swapped template; direct regional creates by @kubet in https://github.com/kortix-ai/suna/pull/8775
  • fix(cli): align human credit output with web units (KRTX-1054) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8776
  • fix: main green — page heading on standalone project pages; two stale tests by @kubet in https://github.com/kortix-ai/suna/pull/8778
  • refactor(sdk): centralize provider admin state (KRTX-1014) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8777
  • perf(proxy): /v1/p reads the token row once and overlaps the sandbox row with auth by @kubet in https://github.com/kortix-ai/suna/pull/8774
  • perf(snapshots): exact-name Platinum template lookups; reap the predecessor off the session path by @kubet in https://github.com/kortix-ai/suna/pull/8780
  • fix(cli): route projects use --host to the named host (KRTX-1041) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8750
  • perf(db): drop duplicate index on basejump.account_user (KRTX-1078) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8782
  • perf(db): index the account_tokens foreign keys (KRTX-1091) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8788
  • fix(db): drop duplicate index idx_agents_account_non_suna (KRTX-1083) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8783
  • perf(db): index the basejump.account_user account_id foreign key (KRTX-1085) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8786
  • fix(api): park a session whose turn ends with a terminal error (KRTX-1046) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8755
  • refactor(web): delete unreachable analytics, desktop and notification paths (KRTX-1059) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8791
  • fix(cli): state the one-way disable semantics in the tokens help (KRTX-1070) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8784
  • fix(db): index the app_deployment_events runtime foreign key (KRTX-1092) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8805
  • perf(db): prepared connections plan every execution for its own parameters by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8839
  • fix(db): index the unindexed basejump.invitations foreign keys (KRTX-1087) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8817
  • fix(billing): name the session in sandbox compute ledger debits (KRTX-1069) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8813
  • fix(db): index the granted_by FK on the legacy public.user_roles (KRTX-1124) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8831
  • fix(db): index the legacy public.credit_ledger created_by FK (KRTX-1122) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8807
  • fix(db): evaluate auth.uid() once in the checkout_clicks RLS policy (KRTX-1135) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8810
  • fix(db): wrap public.api_keys RLS auth.uid() in an initplan (KRTX-1133) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8824
  • fix(db): wrap legacy credit_accounts RLS auth calls in subqueries (KRTX-1136) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8827
  • ci: stop burning Actions minutes on every push to main by @markokraemer in https://github.com/kortix-ai/suna/pull/8844
  • perf(db): add covering indexes for the unindexed foreign keys on public.agent_versions (KRTX-1121) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8801
  • perf(api): resolve the admin accounts search users-first (KRTX-1127) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8832
  • chore(api,sdk): refactor plan R0 guard rails by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8294
  • fix(db): rebuild the basejump.accounts owner policy as an initplan (KRTX-1129) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8815
  • fix(db): wrap legacy public deletion-request policies for the RLS init plan (KRTX-1130) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8819
  • fix(db): wrap auth.uid() in the agent_runs select policy (KRTX-1131) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8821
  • fix(api): turn-ledger savepoint log carries the error in the message by @agent-kortix in https://github.com/kortix-ai/suna/pull/8845
  • fix(db): wrap legacy public.credit_usage RLS policy auth calls in InitPlan subqueries (KRTX-1140) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8814
  • fix(db): drop the legacy basejump account_user select policy (KRTX-1128) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8793
  • fix(db): re-date pending concurrent migrations to unblock dev (KRTX-1083) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8838
  • feat(test): local test attestation gate by @markokraemer in https://github.com/kortix-ai/suna/pull/8850
  • perf(db): index the account_secret_resources.project_id foreign key (KRTX-1090) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8833
  • perf(db): index the basejump.accounts foreign keys (KRTX-1086) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8851
  • fix(mobile): remove inactive sandbox switch shortcut (KRTX-898) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8561
  • fix(cli): keep human notices off the machine stream for --json (KRTX-1043) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8751
  • fix(api): keep billed warm sessions visible in the project session list (KRTX-1068) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8835
  • fix(api): rate-limit the dead-credential 401 warn line (KRTX-1039) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8754
  • fix(api): degrade connector auth discovery when a spec source cannot be loaded (KRTX-1038) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8756
  • fix(marketplace): surface install failures instead of silent exit 0 (KRTX-1045) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8781
  • fix(sdk): never retry a 4xx in the picker and tunnel query retry policies (KRTX-1040) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8837
  • refactor(web): compress public route helpers (KRTX-989) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8722
  • fix(db): re-date the invitations FK index migration after the ordering violation (KRTX-1087) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8846
  • fix(db): remove broken agent_runs_select_policy_initplan migration (unblocks deploys) by @markokraemer in https://github.com/kortix-ai/suna/pull/8852
  • docs(learnings): a migration naming a nonexistent column blocks every dev deploy by @markokraemer in https://github.com/kortix-ai/suna/pull/8853
  • fix(api): R2 reliability with 3 replicas — no per-process state, no swallowed writes, no sleeps by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8848
  • fix(db): the local migration lint refuses a migration dated before main's newest by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8932
  • fix(cli): drop the per-subcommand --help promise from projects group help (KRTX-1261) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8888
  • feat(iam): offer one-day personal key expiry (KRTX-936) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8606
  • fix(web): stack settings rows below sm so help text stays readable (KRTX-1313) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8909
  • fix(api): answer 400 for a malformed token id in tokens rm (KRTX-1330) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8892
  • fix(cli): parse projects use error responses instead of crashing (KRTX-1192) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8891
  • fix(web): show the full Linux download size on narrow viewports (KRTX-1291) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8903
  • fix(mobile): detect composer triggers at the caret (KRTX-1248) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8856
  • fix(cli): route browser login through target host (KRTX-1255) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8864
  • refactor(web): delete unused apps-web exports, badge and rail item (KRTX-909) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8900
  • fix(cli): scope account defaults to explicit host (KRTX-1336) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8868
  • fix(cli): scope cloud E2E token rename/cleanup to the minted row (KRTX-1342) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8887
  • refactor(web): drop the dead email-code action the link flow replaced (KRTX-1332) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8889
  • refactor(web): separate Apps concerns and remove unreachable code (KRTX-977) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8719
  • feat(web): marketplace redesign — one card, sidebar file tree, related skills by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8945
  • fix(deps): devalue 5.9.3; ignore unreachable node-forge CVE-2026-85393 by @markokraemer in https://github.com/kortix-ai/suna/pull/8951
  • fix(test): key attestation to the PR diff so unrelated main-merges don't invalidate it by @markokraemer in https://github.com/kortix-ai/suna/pull/8952
  • refactor(web): compress project workflows and remove obsolete onboarding code (KRTX-1010) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8760
  • fix(session): keep agent switching available in a started session (KRTX-1290) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8943
  • fix(web): handle play() rejections and drop the autoplay NotAllowedError noise (KRTX-1333) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8946
  • feat(mobile): an Apps tab in the project drawer (KRTX-1286) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8947
  • perf(db): drop the unused indexes on kortix.access_requests (KRTX-1174) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8893
  • fix(db): consolidate legacy credit account select policies (KRTX-1160) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8885
  • perf(db): scope legacy credit ledger policies by role (KRTX-1162) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8882
  • perf(db): cache legacy credit purchase RLS auth calls (KRTX-1139) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8878
  • perf(db): drop invalid duplicate messages index (KRTX-1084) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8859
  • chore(db): retire the dead legacy public.credit_balance table (KRTX-1137) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8849
  • fix: clear staging gate #8950 — CodeQL highs + web tests by @markokraemer in https://github.com/kortix-ai/suna/pull/8957
  • fix(db): drop the legacy file_uploads table (KRTX-1142) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8842
  • perf(db): wrap message_select_policy auth.uid() calls in initplans (KRTX-1143) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8840
  • feat(web): name show files in a hover card, drop the file-name row by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8958
  • perf(db): index the public.credit_usage message_id foreign key (KRTX-1123) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8812
  • refactor(db): drop the duplicate account_memberships unique index (KRTX-1082) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8785
  • fix(web): /developers copies the prompt command with POSIX single quotes by @markokraemer in https://github.com/kortix-ai/suna/pull/8962
  • fix: core lane for staging #8960 — credit_purchases RLS qualification, stale shiki php diff by @markokraemer in https://github.com/kortix-ai/suna/pull/8963
  • fix(web): apps card shows the live preview again (journey 18) by @markokraemer in https://github.com/kortix-ai/suna/pull/8965
  • fix(db): re-date out-of-order public_credit_usage_message_id_index (unblock dev) by @markokraemer in https://github.com/kortix-ai/suna/pull/8967
  • fix(db): re-point account_secret_grants FK before dropping the duplicate membership index by @markokraemer in https://github.com/kortix-ai/suna/pull/8969
  • fix(db): snapshot companion for the duplicate account_memberships index drop by @markokraemer in https://github.com/kortix-ai/suna/pull/8970
  • fix(db): re-date 8 migrations that sort before dev's applied set by @markokraemer in https://github.com/kortix-ai/suna/pull/8971
  • fix: clear CodeQL highs on staging PR #8968 by @markokraemer in https://github.com/kortix-ai/suna/pull/8972
  • fix(web): journey 18 modal steps match the product by @markokraemer in https://github.com/kortix-ai/suna/pull/8973
  • ci(tests): the core lane installs Chromium too by @markokraemer in https://github.com/kortix-ai/suna/pull/8974
  • fix(api): stamp created_at when a warm session is adopted by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8953
  • fix(release): unblock dev deploy and the v0.13.48 staging gate by @markokraemer in https://github.com/kortix-ai/suna/pull/8976
  • Promote main 1cf6d6ed0c to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/8977
  • Release v0.13.48 — Your computer on the web, a rebuilt audit log, and editable queued prompts by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8746

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.47...v0.13.48

Read the full release on GitHub
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
Next

Run your whole company from one repo you own.

Start with one job and grow from there.

Get started

Product

  • Agent Computer
  • Company as Code
  • Connectors
  • Automations
  • Channels
  • Agents & Skills
  • Security
  • Self-hosted
  • Enterprise
  • Pricing
  • Download

Solutions

  • Sales
  • Marketing
  • Engineering
  • Product
  • Finance
  • People
  • IT
  • Data Science

Developers

  • Documentation
  • AI Operating System
  • CLI
  • SDK
  • Quickstart
  • For developers
  • Marketplace
  • GitHub

Company

  • About
  • Careers
  • Blog
  • Changelog
  • Use Cases
  • Brand

Connect

  • X
  • LinkedIn
  • Discord
  • Status
  • Support
  • Terms
  • Privacy
©2026 Kortix