PricingDocs
Get started

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
  • Release history
  • Use Cases
  • Brand

Connect

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

Release history

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

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

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

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

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

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

October 1, 2026

Microsoft Teams for every project, secrets you can share with an agent, failed-trigger alerts, and immediate sign-out

v0.13.47

Microsoft Teams for every project, secrets you can share with an agent, failed-trigger alerts, and immediate sign-out

New

  • Microsoft Teams is on for every project. There is no feature flag to turn on: connect Teams from the project's Connectors → Channels page. A tenant admin consents once, or the project brings its own bot. A project that connected Teams while it was a flag keeps its install. @kortix/sdk keeps teams as a deprecated flag key that always reports enabled. (#8601, #8603)

  • What Kortix says to one person in Teams stays with that person. In a channel or group chat, only that person sees:

    • the prompt to connect an account or request access, with the connect button right in the thread;
    • command replies;
    • why a message did not run;
    • approval requests and decisions.

    Teams marks these "Only you can see this message", as Slack does. The shared "Working on it…" card appears only when the message can run. (#8609)

  • Kortix shows when your Teams app is out of date. When your organization's Teams catalog has an older Kortix app, the Channels page and kortix channels status say so and name the two steps: a Teams admin publishes the update, then a team owner updates the app in each team where Teams offers it. A Teams thread that the agent may not read now comes back with who fixes it, instead of Microsoft's error alone. The Teams app moves to version 1.6.1. (#8624)

  • A failing trigger is no longer silent. When a trigger's run fails, the Schedule page shows the trigger as failed with the reason, and the account owner gets one push when a failure streak starts, not one per fire. The next run that finishes clears it. A reused session that grew too large to compact is retired, so the next fire starts a fresh one. (#8586, #8588)

  • Human Messaging reaches every agent surface (projects with the Human Messaging feature on). Agents in sessions, Slack, Teams and the hosted MCP server know how to ask a person and answer back, and the mobile app groups what people asked you under "Asked you". An ask from a session runs the asking session's own agent. (#8622, #8623)

  • Share a secret or a connector account with an agent. "Who can use it" now offers agents next to people and groups. A value shared with an agent reaches every session of that agent, triggers and schedules included; running the agent stays gated by its own access. A secret link can keep the value to the person who asked. kortix secrets share --agent <name> does the same from the CLI. (#8635, #8638)

  • Approve or deny a connector call from the Review Center header, next to Back, as for a change request. Deny takes an optional note that reaches the agent. Long parameter values collapse behind Show more. (#8641)

  • An agent's ask names the agent, not the session title, in "Asked you" (Human Messaging projects). With the Human Messaging feature off, it no longer appears anywhere. (#8626, #8637)

Security

  • Sharing a session cannot leak a personal value. Making a session project-visible or creating a public share is refused (409 PERSONAL_SECRET_REQUIRES_PRIVATE_SESSION) while the session holds a value shared only with its owner. (#8635)
  • Permissions follow the capability. A rule on bash also covers the terminal tools, websearch covers web and image search, and webfetch covers page scraping. Unknown tools fail closed. (#8553)

Fixed

  • Slack and Teams sign-in links open again. Since 2026-09-24 the link to connect a chat account answered "page not found". (#8611)
  • Accounts that require MFA work after the code is verified. Linking Slack or Teams, and some API routes such as connectors, asked for the second factor again even after it passed. Connecting a chat account now continues by itself after the code. (#8611) Members' sessions in such an account now reach shared provider keys, including a ChatGPT login shared with the project, and changing a shared key still needs the second factor. (#8618, #8620)
  • A Slack or Teams conversation runs the model it shows. A message without a /model change could run on the model of an earlier message instead of the conversation's model. (#8618)
  • Signup asks you to open the emailed link. The confirmation screen no longer asks for a six-digit code that the email does not contain. (#8608)
  • Signing out takes effect on every route at once. A logged-out, banned or revoked access token is rejected everywhere. Before, it stayed valid until it expired, up to an hour, on routes outside the account session check. (#8594)
  • Migrated sessions start again. A session moved from the previous platform could hold a sign-in token that the move had revoked, and never finished starting. Opening it now restores that one token, only for the session's own box. (#8636)
  • Audit ingestion wastes fewer retries. After a database timeout, a retry sends half the rows instead of the same statement again, and a small batch gives up after one try. (#8599)
  • Email connections survive a failed inbox listing. When the inbox listing failed, Kortix treated it as an empty list and removed the project's email connections. It now keeps them and reports the error. (#8607)
  • The bring-your-own Teams webhook answers 404, not 503, for a project that has no bot of its own. (#8603)
  • The Kortix icon is the same everywhere again. The favicon, app icons and home-screen icon all show the light tile with the dark mark, in light and dark mode. (#8647)
  • Translated pages are translated again. Blog titles and descriptions, SEO descriptions, the site description and the open-source headline show in all eight non-English languages. The brand kit had left them in English. (#8587)

Behind the scenes

  • Sandbox boot is split into session setup, prompt delivery and turn relays, with no change in behavior (#8600); its boot-order guards follow the moved code (#8627). The SDK's server entrypoint no longer imports itself in a cycle (#8591).
  • Test repairs for mobile, the CLI and self-hosted Supabase, and the Stop flow (#8575, #8578, #8584, #8590). A flaky kortixd test resets its shared cooldown (#8598). A synthetic test token no longer trips the secret scanner (#8614, #8616). Learnings entries on translating changed copy and on Teams app updates (#8593, #8624).
  • The runtime protocol is Kortix-owned: transcripts are versioned as kortix.transcript.v1, both agent harnesses serve Kortix turn routes, and @kortix/sdk no longer depends on @opencode-ai/sdk. (#8553)
  • SDK and host refactors with no change in behavior (#8246, #8398, #8449, #8581, #8632), billing provider handlers split out (#8628), an engineers IAM group for MFA-gated day-to-day AWS access (#8633), and release-gate fixes (#8643, #8645, #8646, #8648, #8650, #8652). Message ids now use the platform's secure random source. (#8646, #8648)
  • One migration: a nullable run_failing_since column on trigger runtime state (#8588).

Release source: staging 40de384e4f517dacea723221cb430ef45ffe8b00 (promotion #8642; supersedes the earlier candidate 4defc4c213).

What's Changed

  • fix(mobile): repair main after 5ac201f (KRTX-899) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8578
  • fix(cli,tests): repair main after f605a96 (KRTX-910) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8584
  • feat(triggers): a failed trigger run shows on the trigger and pushes the account owner by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8586
  • fix(triggers): a failed run stays failed across later fires and pushes once per streak by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8588
  • fix(web): repair main after 7e5e373 — localize the brand-kit copy, fix the tone assertion by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8587
  • test(flows): accept the /stop "stopping" answer and wait for the stop to land by @markokraemer in https://github.com/kortix-ai/suna/pull/8590
  • docs(learnings): changed English copy needs a new hashed key in every catalog by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8593
  • fix(auth): reject logged-out ES256 access tokens on every route by @markokraemer in https://github.com/kortix-ai/suna/pull/8594
  • chore(release): staging VERSION → 0.13.47 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8596
  • chore(release): VERSION → 0.13.47 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8597
  • fix(kortixd): reset the reconcile cooldown before the refresh convergence rows by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8598
  • fix(audit): never re-send an identical audit ingest statement after a timeout by @markokraemer in https://github.com/kortix-ai/suna/pull/8599
  • Promote main 13a995e7aa to staging by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8595
  • feat(teams): Microsoft Teams is on for every project — graduate the teams flag by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8601
  • fix(teams): the bring-your-own webhook answers 404 for a project with no bot of its own by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8603
  • fix(mobile): repair main after f256929 (KRTX-398) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8575
  • Promote main c259040683 to staging by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8604
  • fix(teams): what the bot says to one person in a channel or group chat only that person sees by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8609
  • fix(channels): chat sign-in links open and complete by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8611
  • test(web): a synthetic sign-in token that gitleaks does not flag by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8614
  • chore(security): ignore the reviewed synthetic sign-in token in 127d878b9b by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8616
  • fix(auth): align signup prompt with email link (KRTX-937) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8608
  • fix(channels): a channel turn runs the model Kortix shows; MFA accounts reach shared keys by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8618
  • refactor(sandbox): separate session and relay from boot (KRTX-930) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8600
  • fix(secrets): a caller's own key changes keep their MFA level by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8620
  • feat(messaging): teach every agent surface to message people; mobile Asked you by @markokraemer in https://github.com/kortix-ai/suna/pull/8622
  • fix(sessions): an ask from a session runs the asking session's agent by @markokraemer in https://github.com/kortix-ai/suna/pull/8623
  • refactor(sdk): remove server entrypoint back edges (KRTX-927) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8591
  • fix(teams): show a tenant's outdated Teams app and say who updates it by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8624
  • fix(api): preserve email connections when install listing fails (KRTX-935) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8607
  • test(kortixd): repair main after 986ffa6 (KRTX-930) by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8627
  • docs(learnings): moving a function breaks the source guards that read its old file by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8630
  • feat(messaging): human_messaging off = invisible everywhere; pi honours noReply; asks name their asker by @markokraemer in https://github.com/kortix-ai/suna/pull/8626
  • Promote main 022eb6f264 to staging by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8629
  • refactor(sdk): dedupe the audit querystring builder across audit and host-boundary (KRTX-413) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8398
  • refactor(sdk): share workspace search core and prepare injected client (KRTX-392) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8449
  • refactor(sdk): split event dispatch and stream hydration (KRTX-921) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8581
  • feat(iam): engineers group for MFA-gated PowerUser access by @markokraemer in https://github.com/kortix-ai/suna/pull/8633
  • refactor(sdk): move gateway query hooks behind web shim (KRTX-716) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8246
  • feat(secrets): agents as principals, session-share guard, secret-link audience by @markokraemer in https://github.com/kortix-ai/suna/pull/8635
  • fix(sessions): a box's own superseded session token heals on start instead of locking the session out by @markokraemer in https://github.com/kortix-ai/suna/pull/8636
  • refactor(billing): separate provider handlers and wallet orchestration (KRTX-944) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8628
  • feat(messaging): an agent's ask names the agent, not the session title by @markokraemer in https://github.com/kortix-ai/suna/pull/8637
  • fix(secrets): agent object grants never activate an agent; agent values at first boot; link values are fresh by @markokraemer in https://github.com/kortix-ai/suna/pull/8638
  • docs(learnings): an object grant never activates an agent service account by @markokraemer in https://github.com/kortix-ai/suna/pull/8639
  • refactor(search): use shared workspace search client in hosts (KRTX-393) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8632
  • feat(review-center): approval decides from the header; long parameter values collapse by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8641
  • fix: green main — heal module import, billing-gate mock, agent-identities query key by @markokraemer in https://github.com/kortix-ai/suna/pull/8643
  • feat: OpenCode decoupling W5 — Kortix-owned contract (kortix.transcript.v1 emitted by pi, Kortix turn verbs, @kortix/sdk without @opencode-ai/sdk) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8553
  • fix: clear the staging gate — CodeQL ReDoS + fs race, journey 23 label by @markokraemer in https://github.com/kortix-ai/suna/pull/8645
  • fix(sdk): clear CodeQL high alerts — crypto id suffix, no backtracking slash trim by @markokraemer in https://github.com/kortix-ai/suna/pull/8646
  • fix(web): every app icon and favicon renders the favicon.svg art by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8647
  • fix(sdk): wire message id tail defaults to crypto random by @markokraemer in https://github.com/kortix-ai/suna/pull/8648
  • test(kortixd): wait for the note file, not just a running tool (W5 E4 race) by @markokraemer in https://github.com/kortix-ai/suna/pull/8650
  • test(web): give flag-gated session surfaces a query client (human_messaging, #8626) by @markokraemer in https://github.com/kortix-ai/suna/pull/8652
  • fix(audit): the project agent-identities route gets its own audit action by @markokraemer in https://github.com/kortix-ai/suna/pull/8654
  • fix(sdk): unbiased crypto tail for wire message ids by @markokraemer in https://github.com/kortix-ai/suna/pull/8655
  • fix(email): never relay mail to reserved test domains by @markokraemer in https://github.com/kortix-ai/suna/pull/8656
  • test(agent-tunnel): keep the runner's AGENT_TUNNEL_HOME out of the CLI tests by @markokraemer in https://github.com/kortix-ai/suna/pull/8657
  • refactor(slack): separate thread routing and session launch (KRTX-939) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8613
  • test(api): notification emails go to a relayable recipient domain by @markokraemer in https://github.com/kortix-ai/suna/pull/8658
  • Promote main 1bf48b514c to staging by @markokraemer in https://github.com/kortix-ai/suna/pull/8642
  • Release v0.13.47 — Microsoft Teams for every project, secrets you can share with an agent, failed-trigger alerts, and immediate sign-out by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8605

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

October 1, 2026

An agent permission fix, refresh-token replay protection, prompt authorship, and agents that can ask people (behind a flag).

v0.13.46

An agent permission fix, refresh-token replay protection, prompt authorship, and agents that can ask people (behind a flag).

New

  • Every prompt records who wrote it, and the transcript shows the author.
  • Agents can ask a person a question or start a group conversation with people, behind the human_messaging project flag (off by default).

Security

  • An agent whose policy denies bash or edit can no longer open a shell through the terminal tools or write files through the memory tool.
  • A refresh token cannot be replayed, and logging out revokes the session.

Fixed

  • Chat stays available while a connector waits for approval.
  • The advanced panel preference keeps the panels you open.
  • The cost explorer shows a loading state until usage arrives.
  • Mobile renders model reasoning as a thinking row.
  • Deleting an account no longer reports its sandboxes as lost work.
  • A conversation with people is named at a word boundary.

What's Changed

  • refactor(web): consolidate square dot matrix scaffolds (KRTX-655) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8158
  • fix(web): show cost explorer loading state until usage arrives (KRTX-791) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8351
  • fix(api): park test no longer leaks a session-worker process per run by @markokraemer in https://github.com/kortix-ai/suna/pull/8557
  • refactor(web): extract sidebar panel components (KRTX-652) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8556
  • fix(mobile): render reasoning as a thinking row (KRTX-896) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8540
  • fix(web): keep chat available during connector approval (KRTX-911) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8562
  • fix(web): preserve advanced-preference panel opens (KRTX-398) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8162
  • feat(sessions): agents message people — asks, group chats, message authors (human_messaging) by @markokraemer in https://github.com/kortix-ai/suna/pull/8560
  • fix(web): repair main after 0e82ff4 (KRTX-398) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8564
  • fix(tests): mode-gate test sets the panel mode through patchPreferences (#8162) by @markokraemer in https://github.com/kortix-ai/suna/pull/8566
  • chore(release): staging VERSION → 0.13.46 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8568
  • chore(release): VERSION → 0.13.46 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8569
  • feat(brand): one agentic brand kit — router, verbal + visual rules, visual-system.json generates the tokens — and every surface on it by @markokraemer in https://github.com/kortix-ai/suna/pull/8567
  • fix(sessions): name a conversation with people at a word boundary by @markokraemer in https://github.com/kortix-ai/suna/pull/8570
  • feat(brand): close fresh-agent QA round 3 gaps; deck captions follow claims.md by @markokraemer in https://github.com/kortix-ai/suna/pull/8571
  • fix(docs): quote the docs index description; test docs frontmatter YAML by @markokraemer in https://github.com/kortix-ai/suna/pull/8572
  • docs(learnings): quote docs frontmatter values that contain a colon by @markokraemer in https://github.com/kortix-ai/suna/pull/8573
  • Promote main da2c3cbef6 to staging (v0.13.46) by @markokraemer in https://github.com/kortix-ai/suna/pull/8565
  • refactor(composer): unify navigation and context usage (KRTX-899) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8544
  • fix(auth): prevent refresh replay and revoke logout session (KRTX-910) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8559
  • refactor(email): share consumer domain classification (KRTX-918) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8576
  • fix(api): Kortix-initiated sandbox removal is not a runtime.lost error by @markokraemer in https://github.com/kortix-ai/suna/pull/8580
  • fix(tests): repair main after f605a96 (KRTX-910) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8579
  • fix(agents): a denied bash or edit also denies pty_* and memory (RUN-10) by @markokraemer in https://github.com/kortix-ai/suna/pull/8582
  • Promote main 5f7b0bd047 to staging (v0.13.46, security fix) by @markokraemer in https://github.com/kortix-ai/suna/pull/8583
  • v0.13.46 — An agent permission fix, refresh-token replay protection, prompt authorship, and agents that can ask people (behind a flag). by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8574

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.45...v0.13.46

October 1, 2026

Session labels, a redesigned approval flow, and long sessions that compact instead of failing.

v0.13.45

Session labels, a redesigned approval flow, and long sessions that compact instead of failing.

New

  • Sessions carry writable labels and metadata across the API, SDK, CLI, MCP and web, and the session list filters by label.
  • Redesigned approval, preview and install consent screens.
  • A split "Connect your computer" dialog with one-click CLI copy.
  • Recent session views stay open across project navigation; the command palette finds sessions by ID.
  • The desktop app copies the current session URL from the Go menu and reports sanitized crash telemetry.
  • Push notifications route by browser presence: a session open in a tab does not also push.
  • Project-bound agents get their own cost rollups.
  • kortix apps access --viewer, and the CLI lints manifest wiring references.
  • The pi harness loads repository-native Pi configuration and supports config releases.
  • Each agent's OpenCode plugins load in isolation.
  • Sign in to OpenCode Go with your OpenCode account from a sign-in card, instead of pasting a key; each provider now has its own key name.
  • Connector discovery is on by default for every project.
  • Choose who can use a secret's value: only you, everyone, or chosen people and groups.
  • Manifest v3: agents boot from kortix.yaml.

Improved

  • Managed models can write up to 65,536 output tokens; the ChatGPT lineup and provider defaults come from live data.
  • A session whose sandbox lacks the model a turn asks for is repaired, for any provider.
  • Audit reconciliation is incremental, which cuts database load.
  • Session pages prefetch on intent, and a revived stream rehydrates the transcript.
  • Long managed sessions compact instead of failing at the model's context window; new sessions boot with the current managed context limit.
  • The session scope view reads the cached repository instead of waiting for a git fetch.
  • Stop answers within the request deadline and reports stopping while the sandbox finishes shutting down.
  • Creating a project retries the first push while GitHub finishes creating the repository, instead of rolling back.
  • Agent config from the base branch reaches a session on reload, even without config releases.
  • A session restored from an archived sandbox gets up to 12 minutes to wake instead of failing at 8.
  • Mobile queues prompts in the server inbox, and a turn that ended while the stream was down goes idle.
  • New users land on the project selector.
  • Neutral runtime names across the API, SDK and CLI (OpenCode decoupling).

Security

  • Dependency updates close a critical Next.js vulnerability and eight high-severity ones (axios, undici, fast-uri, js-yaml, brace-expansion, @xmldom/xmldom, path-to-regexp, @grpc/grpc-js).

Fixed

  • A malformed access request answers 400 instead of 500.
  • Reminder trigger sessions open themselves, with atomic caps.
  • App viewer tokens no longer fail with 401 after an access-policy save, and no longer appear in App logs.
  • Account API keys are refused before session daemon access; the session token acts as the person who starts each turn.
  • Slack replies to a bound session return to the thread they came from; Slack writes stay inside the calling project's channels and threads; an unavailable model stops before a Slack thread starts.
  • Listing or sharing connectors, or disconnecting a computer, no longer fails with 500 on a database deadlock.
  • An agent cannot be switched while its session is running; overlapping turns keep the running state.
  • A failed secret save keeps the form's contents.
  • Sessions on a sandbox owned by another API instance refuse prompts instead of racing it.
  • Agent .md model references resolve through the Kortix provider in gateway mode.

What's Changed

  • fix(sandbox): agent .md model refs resolve through the kortix provider in gateway mode by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8358
  • fix(connectors): keep Slack writes out of other projects' channels and threads by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8359
  • fix(api): refuse prompts and warm sessions for sandboxes another API instance owns by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8354
  • feat(mobile): render connect links as cards and keep their connected state by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8370
  • fix(api): lock tunnel rows when attaching computers on connector list (23503) by @markokraemer in https://github.com/kortix-ai/suna/pull/8383
  • fix(connectors): one key-share lock in the shared computer attach; the share route stops answering 500 by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8396
  • feat: OpenCode decoupling W3 — kortixd speaks Kortix (neutral wire, one host relay, closed health block, runtime capabilities) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8306
  • fix(sdk): closing frames no longer count as session activity by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8357
  • fix(web): drive session loader restarts through the canonical hook (KRTX-456) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8091
  • fix(web): clarify queued chat delivery states (KRTX-494) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8164
  • fix(mobile): lighter inline code chip, surface-colored Kortix tile in the connector handshake by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8414
  • fix(sdk): keep first session stream connected (KRTX-432) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8165
  • feat(usage): grant project-bound agents their own cost rollups (KRTX-204) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8167
  • feat(sessions): route push by browser presence (KRTX-588) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8227
  • fix(web): find sessions by ID in command palette (KRTX-794) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8268
  • fix(session): prevent switching agents in running sessions (KRTX-805) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8288
  • feat(desktop): copy the current session URL from the Go menu (KRTX-801) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8307
  • feat(web): add browser dictation to chat composer (KRTX-830) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8325
  • feat(web): retain recent session views across project navigation (KRTX-838) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8335
  • refactor(sdk): add pure workspace search core (KRTX-391) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8344
  • feat(tests): add Platinum workload benchmark (KRTX-465) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8360
  • fix(api): reject unregistered runtime agents (KRTX-175) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8361
  • fix(sandbox): warn on harness MCP declarations (KRTX-182) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8362
  • docs(daemon): guide config change requests through source checkout (KRTX-173) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8363
  • test(api): pin source checkout change-request round-trip (KRTX-170) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8365
  • feat(cli): lint manifest wiring references (KRTX-174) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8367
  • feat(pi): load repository-native Pi configuration (KRTX-166) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8368
  • fix(api): detect speculative warm sessions from actual marker (KRTX-177) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8369
  • perf(api): measure prompt queue delivery latency (KRTX-179) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8371
  • refactor(web): register session tools at app entry (KRTX-485) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8373
  • feat(sdk): retain catalog free flag in flattened models (KRTX-453) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8375
  • refactor(sdk): split IAM client by concern (KRTX-411) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8376
  • refactor(mobile): register tools at mount points (KRTX-737) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8377
  • refactor(mobile): extract AutoContinue from composer (KRTX-766) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8378
  • refactor(mobile): extract drawer row clusters (KRTX-767) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8381
  • refactor(mobile): split mention search and decisions (KRTX-776) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8384
  • refactor(web): extract session raw-message explorer (KRTX-730) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8385
  • docs(cli): connect public docs to live system skills (KRTX-105) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8387
  • docs(worker): evaluate durable object session runtime (KRTX-183) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8388
  • refactor(sdk): flatten findSessionAttachments into per-part extractors (KRTX-416) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8389
  • refactor(sdk): dedupe backend-base URL normalizers onto platformApiBase (KRTX-414) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8390
  • fix(session): preserve running state across overlapping turns (KRTX-260) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8391
  • refactor(mobile): split tool renderers and share disclosure state (KRTX-752) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8392
  • refactor(mobile): delete dead prop modes from CompactionMarker and TurnActions (KRTX-751) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8393
  • refactor(sdk): dedupe the required-connector canonicalizer into one shared module (KRTX-412) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8394
  • test(sdk): characterize the retired endpoint shims before removal (KRTX-418) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8395
  • refactor(sdk): collapse getAccountState and getAccountStateMinimal onto one reader (KRTX-415) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8399
  • refactor(mobile): delete the redundant morph_edit tool alias (KRTX-740) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8400
  • test(mobile): pin ToolPartRenderer dispatch with render tests (KRTX-734) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8401
  • refactor(mobile): dedupe tab history activation in the tab store (KRTX-800) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8402
  • fix(web): gate project creation on effective permission (KRTX-223) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8404
  • fix(web): align the segmented tab chip with its tab on every edge by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8419
  • fix(mobile): a turn that ended while the stream was down goes idle by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8415
  • fix(web): show OpenCode Go branding in model selector (KRTX-781) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8238
  • feat(desktop): capture sanitized crash telemetry (KRTX-829) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8326
  • docs(network): define egress policy gateway design (KRTX-259) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8364
  • fix(db): repair main after f2cd037a7a — regenerate session_presence_leases after the migrations it predated by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8428
  • refactor(mobile): import the sdk detectLocalhostUrls in sandbox previews (KRTX-772) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8407
  • refactor(mobile): one shared close-then slot replaces four sheet copies (KRTX-770) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8408
  • refactor(mobile): delete the dead activity-step inline row (KRTX-738) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8409
  • refactor(mobile): move show file-type icons to the tool-icons leaf, delete dead exports (KRTX-743) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8410
  • refactor(api): slim the secret-relay route sleeve (KRTX-290) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8411
  • test(session): pin host vs SDK flattenModels drift with characterization tests (KRTX-452) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8412
  • refactor(mobile): extract the shared composer status pill (KRTX-773) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8413
  • refactor(web): delete unused presentation renderer helpers (KRTX-596) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8416
  • refactor(web): reuse preview policy for file classification (KRTX-401) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8418
  • fix(connectors): classify invalid Linear GraphQL as caller errors (KRTX-678) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8420
  • fix(sandbox): repair main after b5b080023b — resolve zod in the standalone daemon build; ignore synthetic test tokens in gitleaks by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8432
  • test(pools): pin warm-session pool semantics before the SDK core move (KRTX-700) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8425
  • fix(slack): stop unavailable model before starting a thread (KRTX-433) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8417
  • chore(release): VERSION → 0.13.45 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8440
  • chore(release): staging VERSION → 0.13.45 [skip ci] by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8441
  • refactor(web): extract file content state from renderer (KRTX-399) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8422
  • feat(web): redesign the approval, preview and install consent screens by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8421
  • fix(mobile): move queued prompts to server inbox (KRTX-262) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8372
  • refactor(web): dedupe the marketing code panels into one shared module (KRTX-590) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8423
  • Hotfix to staging (v0.13.45): agent .md model refs resolve through the kortix provider by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8438
  • refactor(api): extract project access read model (KRTX-293) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8424
  • refactor(api): reuse the GitHub installation GET handler for both routes (KRTX-863) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8427
  • test(mobile): pin SessionPage scroll, queue and composer behavior (KRTX-757) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8430
  • refactor(api): move the preview response and header helpers into preview-response.ts (KRTX-328) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8431
  • test(web): characterize session tool dispatch and child modal (KRTX-484) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8433
  • fix(api): repair main after 1b179a7 (KRTX-204) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8434
  • revert: fix(api): reject unregistered runtime agents (KRTX-175) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8435
  • fix(api): repair main after e6325c2 (KRTX-805) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8436
  • fix(api): repair main after f2cd037 (KRTX-588) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8437
  • fix(web): new users land on the project selector, never forced into /new by @markokraemer in https://github.com/kortix-ai/suna/pull/8461
  • refactor(mobile): extract useProjectStack and useProjectHomeSend from ProjectScreen (KRTX-764) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8439
  • fix(connectors): support label-only PATCH for connections (KRTX-163) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8443
  • fix(api): reject out-of-range transcript timestamps (KRTX-461) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8444
  • chore(web): measure ECS latency before canonical cutover (KRTX-184) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8445
  • fix(api): gate US sandbox placement on colocated data plane (KRTX-178) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8446
  • feat(web): re-cut the README showcase from the September captures (KRTX-831) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8447
  • refactor(billing): share customer compute rate card (KRTX-195) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8450
  • feat(config): isolate OpenCode plugin entrypoints per agent (KRTX-168) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8452
  • refactor(api): split access.ts into quota, visibility, identity and access modules (KRTX-301) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8453
  • fix(workspace): default declared agents to restricted workspace (KRTX-165) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8454
  • refactor(api): split shared.ts session-open orchestration into focused modules (KRTX-274) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8456
  • feat(sessions): writable labels + metadata across API, SDK, CLI, MCP and web (KRTX-783) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8249
  • fix(sessions): a label-filtered flat list returns only labeled sessions (KRTX-783) by @markokraemer in https://github.com/kortix-ai/suna/pull/8469
  • refactor(web): delete write-only SSH dialog store and its orphaned palette handler (KRTX-723) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8448
  • docs(learnings): a list filter must gate rows appended after the query by @markokraemer in https://github.com/kortix-ai/suna/pull/8472
  • fix(api): repair main after ea78f4f (KRTX-204) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8457
  • fix(sdk): repair main after 42bcc3c (KRTX-452) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8458
  • fix(api): repair main after c8cfb17 (KRTX-805) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8459
  • fix(slack): repair main after 4ce44de (KRTX-433) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8460
  • refactor(api): split sandbox-turn-lifecycle, cut over the legacy activeTurn arm (KRTX-255) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8462
  • fix(api): log transcript capture SQLSTATE without query parameters (KRTX-747) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8463
  • fix(api): expose slow resource-grant read stages (KRTX-821) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8464
  • refactor(web): extract composer render components (KRTX-374) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8465
  • fix(sdk): identify failed project secret POST transport (KRTX-466) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8467
  • chore(secrets): per-env OpenCode Zen key in api env profiles by @markokraemer in https://github.com/kortix-ai/suna/pull/8479
  • fix(api): the session token acts as the person who starts each turn by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8478
  • feat: OpenCode decoupling W4 — neutral API and SDK names (readiness, contract fields, SDK aliases, DB fields in code, CLI and copy) by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8466
  • fix(sessions): reload brings the base branch agent config into a session without config releases by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8482
  • fix(db): repair main after 699dadc38a — project_usage_read sorts after the migrations already applied by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8483
  • fix(api): classify Platinum reaper write throttle as transient (KRTX-345) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8470
  • fix(connectors): repair main after ada1948 (KRTX-163) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8471
  • refactor(api): centralize session route binding sleeves (KRTX-277) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8473
  • fix(api): deny account keys before session daemon access (KRTX-426) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8474
  • fix(api): retain implicit audit on failed explicit write (KRTX-104) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8476
  • refactor(mobile): reuse SDK session health probe (KRTX-771) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8480
  • fix(cli): repair split-manifest wiring fixtures (KRTX-174) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8481
  • fix(apps): App viewer tokens stop 401ing after an access-policy save, and stop leaking into App logs by @markokraemer in https://github.com/kortix-ai/suna/pull/8486
  • fix(sessions): the reload's config-dir sync judges only the files base changed by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8487
  • feat(cli): kortix apps access --viewer; agent skills teach acting as the viewer by @markokraemer in https://github.com/kortix-ai/suna/pull/8488
  • docs(learnings): regenerate the index (duplicate line from a merge) by @markokraemer in https://github.com/kortix-ai/suna/pull/8489
  • chore(tools): configure per-agent built-in tool availability (KRTX-169) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8366
  • refactor(mobile): remove legacy expanded tool bodies (KRTX-735) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8379
  • refactor(mobile): share connector handoff shell (KRTX-769) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8380
  • refactor(mobile): extract session delete and compact flows (KRTX-774) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8382
  • refactor(mobile): split user message parser and share card shell (KRTX-739) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8386
  • refactor(kortixd): split runtime asset swap reporting (KRTX-530) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8397
  • refactor(web): type session context providers and parts (KRTX-731) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8403
  • refactor(mobile): delete the dead chain-of-thought reporting machinery (KRTX-775) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8405
  • fix(web): preserve secret form after failed save (KRTX-462) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8484
  • feat(web): split "Connect your computer" modal with beams art, one-click CLI copy by @sutharjay1 in https://github.com/kortix-ai/suna/pull/8491
  • fix(gateway): long managed sessions compact instead of failing at the context window by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8490
  • fix(infra): redirect dev web HTTP to HTTPS (KRTX-437) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8494
  • refactor(mobile): consolidate tool row ambient context (KRTX-736) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8495
  • chore(api): measure slow runtime chunk reads (KRTX-797) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8496
  • fix(tests): green main core lane — stale flows, specs, suites and workflow secrets by @markokraemer in https://github.com/kortix-ai/suna/pull/8497
  • fix(api): green main packages lane for kortix-api unit suite by @markokraemer in https://github.com/kortix-ai/suna/pull/8500
  • fix: green main — kortixd runtime-assets W3 regression, specs 26 and 27 by @markokraemer in https://github.com/kortix-ai/suna/pull/8499
  • fix(api): retry managed repo seed push with backoff while the new repo is not reachable over git by @markokraemer in https://github.com/kortix-ai/suna/pull/8501
  • fix(api): answer Stop inside the request deadline with a truthful 'stopping' state by @markokraemer in https://github.com/kortix-ai/suna/pull/8502
  • feat(pi): config releases on the pi harness by @DimitrijeGlibic in https://github.com/kortix-ai/suna/pull/8451
  • fix(sandbox): new sessions boot OpenCode with the current managed context limit by @Ino-Bagaric in https://github.com/kortix-ai/suna/pull/8505
  • refactor(web): move turn rendering out of session-chat.tsx (KRTX-355) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8492
  • fix(infra): drop the dev web HTTP listener — Drata 8008 blocks staging (reverts #8494) by @markokraemer in https://github.com/kortix-ai/suna/pull/8506
  • fix(tests): stat the CLI through a handle in runtime-assets test (CodeQL js/file-system-race) by @markokraemer in https://github.com/kortix-ai/suna/pull/8507
  • Promote main 79159fba39 to staging (v0.13.45) by @markokraemer in https://github.com/kortix-ai/suna/pull/8503
  • fix(mobile): green the mobile test lane (queue, health, tool registration, light tokens) by @markokraemer in https://github.com/kortix-ai/suna/pull/8508
  • fix(deps): clear Trivy HIGH/CRITICAL CVEs blocking staging promotion by @markokraemer in https://github.com/kortix-ai/suna/pull/8509
  • feat(manifest): declare non-enforcing agent egress policy (KRTX-878) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8510
  • Promote main 9d8b8245d1 to staging (v0.13.45) by @markokraemer in https://github.com/kortix-ai/suna/pull/8512
  • refactor(web): extract warm-or-create session job (KRTX-704) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8504
  • chore(secrets): drop AWS_IAM_USER_ARN for deleted dotenv IAM users by @markokraemer in https://github.com/kortix-ai/suna/pull/8514
  • fix(web): ignore anonymous auth refresh noise (KRTX-876) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8485
  • fix(web): green the web unit suite (32 failures) by @markokraemer in https://github.com/kortix-ai/suna/pull/8515
  • fix(api): attribute session config deadline stages (KRTX-818) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8511
  • fix(api): time slow secrets reads by dependency stage (KRTX-819) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8516
  • fix(api): attribute sandbox proxy failures in logs (KRTX-811) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8517
  • fix(api): allow slow archived restores to finish (KRTX-440) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8518
  • feat(connectors): enable direct discovery by default (KRTX-885) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8519
  • feat(llm): Sign in with OpenCode for OpenCode Go; one key name per provider by @markokraemer in https://github.com/kortix-ai/suna/pull/8520
  • fix(tunnel): unpair locks connector rows before the machine row (40P01) by @markokraemer in https://github.com/kortix-ai/suna/pull/8524
  • fix(web): golden case for the anonymous auth refresh noise rule (#8485) by @markokraemer in https://github.com/kortix-ai/suna/pull/8525
  • fix(slack): route bound session replies to originating thread (KRTX-886) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8522
  • fix(api): serve GET session scope from the warm git mirror by @markokraemer in https://github.com/kortix-ai/suna/pull/8527
  • fix(web): keep shared session avatars legible (KRTX-888) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8526
  • Promote main ad46bf44b4 to staging (v0.13.45) by @markokraemer in https://github.com/kortix-ai/suna/pull/8523
  • fix(web): align session sidebar pagination control (KRTX-890) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8528
  • revert(web): remove composer dictation (KRTX-830) by @markokraemer in https://github.com/kortix-ai/suna/pull/8530
  • fix(web): show saved profile name in account menu (KRTX-893) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8529
  • revert(web): remove composer dictation (KRTX-830) → staging by @markokraemer in https://github.com/kortix-ai/suna/pull/8531
  • Promote main bf78fe8895 to staging (v0.13.45) by @markokraemer in https://github.com/kortix-ai/suna/pull/8532
  • feat(secrets): who can use a secret value — only you, everyone, or people and groups by @markokraemer in https://github.com/kortix-ai/suna/pull/8533
  • fix(gateway): send OpenCode Zen a strict OpenAI chat body by @markokraemer in https://github.com/kortix-ai/suna/pull/8534
  • feat(web): OpenCode Go sign-in card like ChatGPT's by @markokraemer in https://github.com/kortix-ai/suna/pull/8535
  • fix(reminders): trigger sessions open themselves, atomic caps, 366d horizon by @markokraemer in https://github.com/kortix-ai/suna/pull/8536
  • docs(learnings): apply merged dev Terraform deletions by hand the same hour by @markokraemer in https://github.com/kortix-ai/suna/pull/8537
  • fix(api): request-access answers 400, not 500, for a body it could not parse by @markokraemer in https://github.com/kortix-ai/suna/pull/8538
  • fix(secrets): a pre-on_behalf_of session token resolves by the mint rule by @markokraemer in https://github.com/kortix-ai/suna/pull/8539
  • fix(web): prefetch session destinations on intent (KRTX-779) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8233
  • fix(sdk): rehydrate transcript after parked stream revival (KRTX-832) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8327
  • feat(config): boot v3 agents from kortix.yaml (KRTX-167) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8406
  • fix(models): serve the ChatGPT lineup and provider defaults from live data by @markokraemer in https://github.com/kortix-ai/suna/pull/8541
  • fix(api): OpenCode sign-in polls at the provider's interval by @markokraemer in https://github.com/kortix-ai/suna/pull/8543
  • fix(models): let managed models write 65,536 output tokens by @markokraemer in https://github.com/kortix-ai/suna/pull/8542
  • revert: declared agents keep the project checkout by default (#8454) by @markokraemer in https://github.com/kortix-ai/suna/pull/8548
  • perf(audit): incremental reconciliation with a per-account high-water mark by @markokraemer in https://github.com/kortix-ai/suna/pull/8547
  • fix(api): repair main after 510b569 (KRTX-167) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8545
  • fix(tests): unused @ts-expect-error on AgentBlockV2.mode after #8406 (TS2578) by @markokraemer in https://github.com/kortix-ai/suna/pull/8552
  • refactor(web): extract sidebar menu primitives (KRTX-651) by @agent-kortix in https://github.com/kortix-ai/suna/pull/8155
  • fix(sessions): repair a box that lacks the model a turn asks for, any provider by @markokraemer in https://github.com/kortix-ai/suna/pull/8554
  • fix(tests): far-future expiry in the connector link info fixture by @markokraemer in https://github.com/kortix-ai/suna/pull/8555
  • Promote main a00772e042 to staging (v0.13.45) by @markokraemer in https://github.com/kortix-ai/suna/pull/8549
  • v0.13.45 — Session labels, a redesigned approval flow, and long sessions that compact instead of failing. by @github-actions[bot] in https://github.com/kortix-ai/suna/pull/8455

Full Changelog: https://github.com/kortix-ai/suna/compare/v0.13.44...v0.13.45

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