github kortix-ai/suna v0.13.5
v0.13.5 — Faster sessions, resilient multimodal runs, and safer previews

latest release: dev-latest
4 hours ago

Sessions

  • Sessions start faster with OpenCode 1.18.19, leaner runtime assets, reusable Git bundles, and guarded image preparation.
  • Existing sessions recover after sleep, runtime loss, dropped streams, and interrupted connections.
  • Transcripts catch up after missed events, render long threads sooner, and load attachment bytes only when needed.
  • Unsent drafts persist per project and session. The composer can reference recent session files from the / menu.
  • Fixed duplicate prompts, stale status snapshots, malformed runtime responses, and inaccessible backend-origin sessions.

Product experience

  • Every sandbox preview port can use its own origin across cloud and self-hosted deployments.
  • ZIP archives can be browsed and extracted in the file viewer.
  • The CLI now covers models, sessions, agents, connectors, triggers, access, billing, reviews, and project settings.
  • Added ranked command-palette results, a resizable sidebar, clearer change indicators, a rebuilt Apps gallery, and a simpler Customize chooser.
  • Retired the experimental voice runtime and its unused product surfaces.

Security and reliability

  • Preview origins enforce trusted CORS, cross-site write protection, read-only shares, immediate revocation, and host-scoped cookies.
  • Sandbox credentials stay confined to their session. Connector-bound secrets receive tighter delivery boundaries.
  • Experimental network-enforced secrets support streaming bodies, Server-Sent Events, large payloads, and credential substitution in authorization and cookie headers.
  • Paid legacy subscriptions pass the wallet floor correctly and receive renewal credits based on actual payments.
  • The LLM gateway handles large image requests without repeated base64 copies and survives overload without process crashes.
  • Gateway and edge failures return structured retryable errors instead of intermediary HTML or invalid compressed bodies.
  • Audit writes no longer block API traffic. Audit reads use bounded barriers under continuous traffic.
  • Added database connection limits, secret-write coalescing, per-project session controls, safer live-turn reaping, and initial-prompt replay protection.

What's Changed

  • Release v0.9.15 — SOC 2 compliance baseline + gated release flow by @github-actions[bot] in #3303
  • Release v0.9.16 — Live-prove auto version-sync by @github-actions[bot] in #3304
  • Release v0.9.17 — Single-leader background workers, contact/demo flow, and build + env fixes by @github-actions[bot] in #3305
  • Release v0.9.18 — Restore the site — fix the production render crash by @github-actions[bot] in #3307
  • Release v0.9.19 — Project memory, runtime feature controls, and a typed API by @github-actions[bot] in #3310
  • Release v0.9.20 — inject kortix llm router into sandbox by @github-actions[bot] in #3312
  • Release v0.9.21 — fix tier fetch by @github-actions[bot] in #3314
  • Release v0.9.22 — show claim button only for legacy users by @github-actions[bot] in #3318
  • Release v0.9.23 — stripe webhook reconciliation by @github-actions[bot] in #3323
  • Release v0.9.24 — Auth, billing & connector fixes by @github-actions[bot] in #3324
  • Release v0.9.25 — windowed migration — latest 25 by default + offset by @github-actions[bot] in #3327
  • Release v0.9.26 — suna migration fix + connector fix by @github-actions[bot] in #3330
  • Release v0.9.27 — og suna migrations by @github-actions[bot] in #3332
  • Release v0.9.28 — pat authentication by @github-actions[bot] in #3334
  • Release v0.9.29 — rehydrate chat on migration by @github-actions[bot] in #3337
  • Release v0.9.30 — Platinum sandbox provider, connectors redesign, and admin provider controls by @github-actions[bot] in #3339
  • Release v0.9.31 — Billing tier fix, smoother account migration, and UI polish by @github-actions[bot] in #3342
  • Release v0.9.32 — Editable connectors, hibernating sandboxes, and sandbox-preview auth fixes by @github-actions[bot] in #3348
  • Release v0.9.33 — Static-token auth for webhook triggers by @github-actions[bot] in #3351
  • Release v0.9.34 — Desktop app, unified channel delivery & reliability fixes by @github-actions[bot] in #3362
  • Release v0.9.35 — Fix fleet-wide 30s API timeouts (DB connection-pool starvation) by @github-actions[bot] in #3368
  • Release v0.9.36 — bake secrets into sandbox by @github-actions[bot] in #3376
  • Release v0.9.37 — Mobile app v2 (account management, files, terminal) + team billing fixes by @github-actions[bot] in #3379
  • Release v0.9.38 — Connector actions fixed across apps by @github-actions[bot] in #3380
  • Release v0.9.39 — Fix phantom shadow account members; GitOps/EKS deploy foundation by @github-actions[bot] in #3393
  • Release v0.9.40 — E2E Kubernetes setup with ArgoCD by @github-actions[bot] in #3397
  • Release v0.9.41 — Release pipeline & infra — internal, no user-facing changes by @github-actions[bot] in #3400
  • Release v0.9.42 — Slack and scheduled sessions are now visible to the whole team by @github-actions[bot] in #3402
  • Release v0.9.43 — CI/CD — traffic-aware canary analysis (internal, no user-facing changes) by @github-actions[bot] in #3407
  • fix(eks): prod → plain rolling Deployment (drop fragile canary) by @lillyboga in #3410
  • Release v0.9.44 — EKS prod: rolling Deployment delivery (canary retired) by @github-actions[bot] in #3413
  • Release v0.9.45 — Add memory_mb to /health by @github-actions[bot] in #3427
  • Release v0.9.46 — Design system refresh and app router cleanup by @github-actions[bot] in #3437
  • Release v0.9.47 — Bring docs back by @github-actions[bot] in #3439
  • Release v0.9.48 — ArgoCD bug in HPAs by @github-actions[bot] in #3450
  • Release v0.9.49 — ChatGPT subscription login, steadier Slack, and a Skills file tree by @github-actions[bot] in #3457
  • Release v0.9.50 — API routing: Cloudflare Worker switch + ECS Fargate hot-standby by @github-actions[bot] in #3458
  • Release v0.9.51 — Reliability: bulletproof ECS hot-standby + managed-git fix by @github-actions[bot] in #3459
  • Release v0.9.52 — Faster, more reliable sessions + PDF/PPTX viewers + security hardening by @github-actions[bot] in #3465
  • Release v0.9.53 — Smoother session loading — chat input no longer jumps by @github-actions[bot] in #3466
  • Release v0.9.54 — Smoother, more reliable session loading by @github-actions[bot] in #3467
  • Release v0.9.55 — Faster, more reliable session start by @github-actions[bot] in #3472
  • Release v0.9.56 — Session reliability, Slack polish, and shareable previews by @github-actions[bot] in #3477
  • Release v0.9.57 — Slack webhook reliability and unified invocation engine by @github-actions[bot] in #3481
  • Release v0.9.58 — Marketing homepage refresh, compare pages, and Cloud pricing update by @github-actions[bot] in #3482
  • Release v0.9.59 — Redeploy by @github-actions[bot] in #3496
  • Release v0.9.60 — More memory headroom so the API stops restarting under load by @github-actions[bot] in #3499
  • Release v0.9.61 — Warm pool fast starts, live first-turn streaming, and project workspace polish by @github-actions[bot] in #3510
  • Release v0.9.62 — Sandbox boot time improvements, UI improvements by @github-actions[bot] in #3511
  • Release v0.9.63 — Instant session shell, per-agent access, and a faster colocated backend by @github-actions[bot] in #3514
  • Release v0.9.64 — Fix warm-pool trigger runtime auth by @github-actions[bot] in #3516
  • Release v0.9.65 — Fix private repo provisioning failures by @github-actions[bot] in #3518
  • Release v0.9.66 — Sandboxes auto-stop reliably + deterministic compute billing by @github-actions[bot] in #3550
  • Release v0.9.67 — Fix sandbox template snapshot builds by @markokraemer in #3561
  • Release v0.9.68 — Session reliability: drain stuck-active cap leak + /sessions 500 resilience + Daytona billing reaper by @github-actions[bot] in #3616
  • ops(prod): complete EKS cutover — restore fleet-wide crons by @markokraemer in #3622
  • Release v0.9.69 — Reliable scheduled triggers by @github-actions[bot] in #3632
  • Release v0.9.70 — Full cron coverage + correct stall detection by @github-actions[bot] in #3637
  • Release v0.9.71 — LLM Gateway: BYOK, managed Kortix models, and live cost observability by @github-actions[bot] in #3641
  • Release v0.9.72 — Gateway EKS deploy in prod pipeline + correct ingress cert by @github-actions[bot] in #3644
  • Release v0.9.73 — Slack channel connector and stability release by @github-actions[bot] in #3686
  • Release v0.9.74 — LLM Gateway: Bedrock-native managed models, BYOK fallback, and streaming reliability by @github-actions[bot] in #3712
  • Release v0.9.75 — Gateway improvements by @github-actions[bot] in #3716
  • Release v0.9.76 — Gateway improvements by @github-actions[bot] in #3720
  • Release v0.9.77 — Faster model responses and a fallback for blocked previews by @github-actions[bot] in #3727
  • revert(prod): roll back FE & BE to v0.9.68 [INCIDENT] by @markokraemer in #3729
  • fix(prod): keep gateway on 0.9.77 (un-wedge Argo; gateway not in 0.9.68 stack) by @markokraemer in #3737
  • Release v0.9.78 — Marketplace runtime, managed gateway defaults, and staging release hardening by @markokraemer in #3859
  • Release v0.9.79 — Production release v0.9.79 by @markokraemer in #3868
  • Release v0.9.80 — Connect Slack and email in place, fix inbound email, and steadier live previews by @github-actions[bot] in #3873
  • Release v0.9.81 — AgentMail email connect error handling by @github-actions[bot] in #3884
  • Release v0.9.82 — GLM 5.2 in the model picker, a cleaner Slack connect flow, and reliability fixes by @github-actions[bot] in #3900
  • Release v0.9.83 — Slack identity and project session reliability by @github-actions[bot] in #3934
  • Release v0.9.84 — Production hotfix: account membership repair by @github-actions[bot] in #3939
  • Release v0.9.85 — Release v0.9.85 — Slack identity and account bootstrap hardening by @github-actions[bot] in #3943
  • Release v0.9.86 — Fix false 'agent switch requires a new session' on new sessions by @github-actions[bot] in #3950
  • Release v0.9.87 — Allow in-session agent switching + wake-race retry + deploy self-heal by @github-actions[bot] in #3957
  • Release v0.9.88 — Guided onboarding, a unified Slack panel, and tool-card fixes by @github-actions[bot] in #3967
  • Release v0.9.89 — Refreshed marketing site, new blog, and default-agent connector fixes by @github-actions[bot] in #3976
  • Release v0.9.90 — Fix the dropped first prompt in new sessions by @github-actions[bot] in #3993
  • Release v0.9.91 — Hotfix gateway Unicode trace logging by @github-actions[bot] in #4018
  • Release v0.9.92 — Sandbox reliability fixes, per-project provider override, and gateway logging fix by @github-actions[bot] in #4023
  • Release v0.9.93 — Reliable LLM completions, plus sandbox and gateway fixes by @github-actions[bot] in #4109
  • Release v0.9.94 — Fix GLM stream failures: pin Z.AI host + trace in-stream upstream errors by @github-actions[bot] in #4149
  • Release v0.9.95 — Turn auto-resume for transient provider errors by @github-actions[bot] in #4154
  • Release v0.9.96 — Fix session-page reconnect storm against stopped sandboxes by @github-actions[bot] in #4161
  • Release v0.9.97 — Per-account session-limit override + session delete/provision race fix by @github-actions[bot] in #4203
  • Release v0.9.98 — Marketplace by default, People Search, SCIM provisioning, and session reliability by @github-actions[bot] in #4263
  • Release v0.9.99 — Project-wide provider keys, marketplace fixes, and sharper project permissions by @github-actions[bot] in #4278
  • Release v0.9.100 — Marketplace 1-click imports, groups and custom roles for every plan, and a sandbox that recovers when a build fails by @github-actions[bot] in #4343
  • Release v0.9.101 — Agents now always answer your first message, plus SSO and gateway fixes by @github-actions[bot] in #4364
  • Release v0.9.102 — slack bind-thread + pending main by @github-actions[bot] in #4392
  • Release v0.9.103 — Staging release: auth, chat input, Slack defaults, and runtime reliability by @github-actions[bot] in #4476
  • Release v0.9.104 — Reliable session uploads and production migration recovery by @github-actions[bot] in #4485
  • Release v0.9.105 — Steadier session switching, email-code sign-in, and a batch of fixes by @github-actions[bot] in #4490
  • Release v0.9.106 — Smoother session open and switch, plus marketing and maintenance-banner polish by @github-actions[bot] in #4498
  • Release v0.9.107 — Idle-stopped sessions come back on their own by @github-actions[bot] in #4511
  • Release v0.9.108 — Idle sessions wake on their own, invitation fix, and quieter UI by @github-actions[bot] in #4519
  • Release v0.10.0 — Self-hosting: one generic Docker deployment, VPS-first by @github-actions[bot] in #4730
  • Release v0.10.1 — Self-host: verified laptop and VPS deployments, guided setup by @github-actions[bot] in #4740
  • Release v0.10.2 — Self-host SSO out of the box, unified sign-in, and safer defaults by @github-actions[bot] in #4749
  • Release v0.10.3 — Self-host hardening, experimental local-docker sandboxes, and an auth refresh fix by @github-actions[bot] in #4774
  • Release v0.10.4 — Restore Kortix managed model availability by @github-actions[bot] in #4790
  • Release v0.10.5 — Restore production EKS gateway origin TLS by @github-actions[bot] in #4796
  • Release v0.10.6 — Restore EKS gateway release parity by @github-actions[bot] in #4802
  • Release v0.10.7 — v0.10.7 by @github-actions[bot] in #4847
  • Release v0.10.8 — Fixes for OpenAI model routing, provider keys, terminals, and toasts by @github-actions[bot] in #4865
  • Release v0.10.9 — Easy panel polish: reliable terminal, browser landing, truthful tool cards by @github-actions[bot] in #4880
  • Release v0.10.9 — Self-host SSO sign-in fix and a Cloudflare Access setup guide by @github-actions[bot] in #4885
  • Release v0.10.10 — Session panel layout fix and inline file previews in chat by @github-actions[bot] in #4889
  • Release v0.10.11 — The LLM Gateway, rebuilt on the Vercel AI SDK and live models.dev — per-model controls, OpenAI/Anthropic APIs, and a full UX overhaul by @github-actions[bot] in #5022
  • revert(prod): roll back api+gateway to v0.10.10 [ROLLBACK] by @github-actions[bot] in #5048
  • Release v0.10.12 — Reliable session starts + re-shipped LLM gateway by @github-actions[bot] in #5073
  • Release v0.10.13 — Codex models fixed, gateway hardening, and a Git-first project flow by @github-actions[bot] in #5134
  • Release v0.10.14 — Session provisioning, sandbox runtime, and release reliability by @github-actions[bot] in #5342
  • Release v0.10.15 — Scheduler reliability and webhook freshness by @github-actions[bot] in #5465
  • Release v0.10.16 — Independent maintenance failover by @github-actions[bot] in #5509
  • chore(release): promote Retry-After gate fix to staging by @markokraemer in #5663
  • chore(release): promote latest main and bounded ke2e gate by @markokraemer in #5670
  • chore(release): include latest Pi runtime fix in staging by @markokraemer in #5673
  • chore(release): final main cutoff for v0.11.0 staging by @markokraemer in #5679
  • chore(release): promote current main to staging by @markokraemer in #5695
  • chore(release): promote current main to staging by @markokraemer in #5703
  • chore(release): promote current main to staging by @markokraemer in #5709
  • chore(release): promote current main to staging by @markokraemer in #5713
  • chore(release): promote current main to staging by @markokraemer in #5719
  • chore(release): promote latest main to staging by @markokraemer in #5720
  • chore(release): promote current main to staging by @markokraemer in #5725
  • chore(release): freeze v0.11.0 source at 3729edc by @markokraemer in #5730
  • chore(release): promote latest main to staging by @markokraemer in #5729
  • Release v0.11.0 — Realtime voice, session rewind, warm sessions, and Marketing Department by @github-actions[bot] in #5732
  • fix(prod): preserve API deployment selector by @markokraemer in #5737
  • fix(release): carry production Supabase guard to staging by @markokraemer in #5750
  • chore(release): promote current main to staging by @markokraemer in #5929
  • chore(release): promote main to staging — db-reset harness fix by @markokraemer in #5934
  • chore(release): promote current main to staging by @markokraemer in #5942
  • Merge main into staging — user menu reorder (#5941) by @sutharjay1 in #5945
  • chore(release): promote main to staging — v0.12.0 gate unblock by @markokraemer in #5950
  • chore(release): promote main to staging — final gate fixes (AUD-5, COVD-1) by @markokraemer in #5954
  • Release v0.12.0 — Audit log, session costs, session scope controls, and a rebuilt kortix.com by @github-actions[bot] in #5955
  • chore(release): promote main to staging by @markokraemer in #5959
  • release(staging): session list rebuild + error boundary copy details by @sutharjay1 in #5990
  • Promote main → staging: v0.12.1 candidate (45 commits since v0.12.0) by @markokraemer in #5991
  • Promote main → staging: shadow-region release-gate fix by @markokraemer in #5994
  • Release v0.12.1 — Connector-aware sessions, project icons, and sandbox reliability by @github-actions[bot] in #5997
  • Targeted staging fix: valid deploy-prod syntax (re-release v0.12.1) by @markokraemer in #6001
  • Release v0.12.1 — Connector-aware sessions, project icons, and sandbox reliability by @github-actions[bot] in #6004
  • chore(release): staging VERSION → 0.12.2 [skip ci] by @github-actions[bot] in #6012
  • hotfix(session): prevent passive reads from waking stopped sandboxes by @markokraemer in #6041
  • release(web): /download close button, and mobile marked coming soon by @sutharjay1 in #6061
  • chore(release): promote main 86d7a63 to staging by @markokraemer in #6064
  • chore(release): refresh staging to main f2f4f84 by @markokraemer in #6066
  • Release v0.12.2 — Runtime reliability, session controls, and infrastructure updates by @github-actions[bot] in #6068
  • chore(release): staging VERSION → 0.12.3 [skip ci] by @github-actions[bot] in #6071
  • fix(web,sdk): keep in-flight sends, tell the truth about tool failures, one code palette (#6058) by @sutharjay1 in #6105
  • fix: slow project page navigation, and upgrade to Next.js 16.2.0 (#6102) by @sutharjay1 in #6107
  • fix(web): give the landing code panels a keyboard tab stop by @sutharjay1 in #6108
  • chore(release): promote main 7fd16e2 to staging by @markokraemer in #6116
  • fix(qa): deflake the staging a11y gate (networkidle → element waits) by @markokraemer in #6117
  • Release v0.12.3 — Sandbox hardening, faster navigation, and honest sessions by @github-actions[bot] in #6118
  • chore(release): staging VERSION → 0.12.4 [skip ci] by @github-actions[bot] in #6121
  • release(staging): /legal/terms → specific Drive file (#6123) by @markokraemer in #6124
  • fix(ke2e): COST-2 must compute the gap-fill count from its own window (staging) by @markokraemer in #6130
  • release(staging): email provider-chain transport (cherry-pick #6139) by @markokraemer in #6140
  • Release v0.12.4 — Email delivery that survives a provider outage by @github-actions[bot] in #6141
  • chore(release): staging VERSION → 0.12.5 [skip ci] by @github-actions[bot] in #6149
  • chore(release): promote main to staging by @markokraemer in #6187
  • chore(release): promote main to staging by @markokraemer in #6191
  • release: promote main c7023f1 to staging by @markokraemer in #6193
  • release: promote main to staging after v0.12.5 gate fix by @markokraemer in #6196
  • Release candidate: refresh staging from main by @markokraemer in #6200
  • Release candidate: promote latest main to staging by @markokraemer in #6203
  • release: refresh staging with current main by @markokraemer in #6211
  • release: refresh staging with current main by @markokraemer in #6217
  • Release candidate: main → staging (v0.12.5) by @markokraemer in #6229
  • Release v0.12.5 — Secret delivery controls, unified connectors, and flat credit plans by @github-actions[bot] in #6188
  • chore(release): staging VERSION → 0.12.6 [skip ci] by @github-actions[bot] in #6238
  • release candidate: main → staging for v0.12.6 by @markokraemer in #6256
  • Promote main (dab7685) to staging by @markokraemer in #6258
  • Release v0.12.6 — Legacy chat restore, billing correctness, and admin consoles by @github-actions[bot] in #6261
  • chore(release): staging VERSION → 0.12.7 [skip ci] by @github-actions[bot] in #6269
  • fix(sandbox): promote agent-bound lifecycle correctness by @markokraemer in #6285
  • Release candidate: main @ d1ed358 → staging for v0.12.7 by @markokraemer in #6331
  • Release v0.12.7 — Agent-bound sandboxes, terminal attach, and feature flags by @github-actions[bot] in #6345
  • chore(release): staging VERSION → 0.12.8 [skip ci] by @github-actions[bot] in #6351
  • Release candidate: main → staging (v0.12.8) by @markokraemer in #6387
  • Release candidate v0.12.8 r2: connector deny-list hardening by @markokraemer in #6391
  • Release v0.12.8 — Entitlement overrides, act-as support sessions, and one-call agent secret grants by @github-actions[bot] in #6389
  • chore(release): staging VERSION → 0.12.9 [skip ci] by @github-actions[bot] in #6400
  • Release candidate: main → staging (v0.12.9) by @markokraemer in #6402
  • Release candidate r2: main → staging (v0.12.9) by @markokraemer in #6405
  • Release candidate r3: main → staging (v0.12.9) by @markokraemer in #6412
  • Release candidate r4: main → staging (v0.12.9) by @markokraemer in #6416
  • Release candidate r5: main → staging (v0.12.9) by @markokraemer in #6419
  • Release candidate r6: main → staging (v0.12.9) by @markokraemer in #6424
  • Release candidate: main → staging (2026-08-18, v0.12.9) by @markokraemer in #6435
  • Release candidate: main → staging (v0.13.0, second attempt) by @markokraemer in #6548
  • Release candidate: main → staging (v0.13.0) + Terraform apply fix (#6549) by @markokraemer in #6550
  • Release candidate: main → staging (v0.13.0) + sharded-gate runtime fixes (#6552) by @markokraemer in #6553
  • Release candidate: main → staging (v0.13.0) + sweep-can't-skip-shards fix (#6556) by @markokraemer in #6557
  • Release candidate: main → staging (v0.13.0) + group-grants Strix fix (#6560) + shard fleet tuning (#6561) by @markokraemer in #6563
  • Release v0.13.0 — Apps goes stable, Monitors lands experimental, and a big session-reliability pass by @github-actions[bot] in #6564
  • chore(release): staging VERSION → 0.13.1 [skip ci] by @github-actions[bot] in #6568
  • chore(release): VERSION → 0.13.1 [skip ci] by @github-actions[bot] in #6569
  • docs(learnings): CIC under a 5s lock_timeout cannot land on live prod (v0.13.0 deploy incident) by @markokraemer in #6570
  • perf(sandbox): warm OpenCode instance in fast image by @Ino-Bagaric in #6571
  • perf(sandbox): precompile fast OpenCode tools by @Ino-Bagaric in #6572
  • infra(selfhost): bake a daily docker-prune timer into the box by @markokraemer in #6573
  • infra(selfhost): drop a deployment name from the prune comment by @markokraemer in #6574
  • perf(sandbox): align fast runtime base with Ubuntu by @Ino-Bagaric in #6575
  • fix(slack): let another bot @-mention Kortix — the gate blocked every bot, not just us by @kubet in #6577
  • fix: every managed model works in every sandbox + session.error renders in place + keyboard scroll intent by @markokraemer in #6576
  • fix(sandbox): disable slower fast boot experiment by @Ino-Bagaric in #6578
  • ci(release-gate): 6 api shards + serial-tail shard, 60-min cap, dry-run dispatch against staging by @markokraemer in #6580
  • test(ke2e): fix tests typecheck break from #6554 (iam.flow.ts:1739) by @markokraemer in #6581
  • test(ke2e): preflight tolerates traffic-degraded gateway, 180s deployed flow budget, no cross-shard shared-state collisions by @markokraemer in #6582
  • test(e2e): harden the recurring deployed-target browser specs; quarantine the non-deterministic ones into a nightly lane by @markokraemer in #6584
  • ci(release-gate): E2E_EXCLUDE_TAGS='@quarantine' on the browser shards (companion to #6584) by @markokraemer in #6587
  • Bound the per-session audit event rate so one runaway turn cannot take the API down by @markokraemer in #6583
  • fix(starter): reflector + reviewer agents run without approval prompts by @markokraemer in #6589
  • fix(api,ke2e): account deletion stops+removes every sandbox, revoked tokens stop authenticating, gc reclaims sessions+tokens by @markokraemer in #6586
  • Give CONCURRENTLY migrations a lock_timeout that can actually land on live prod by @markokraemer in #6588
  • Release candidate: main → staging (v0.13.1): gate-green work by @markokraemer in #6591
  • fix(slack): a bot @-mention still did nothing — the identity gate refuses it, silently by @kubet in #6590
  • feat(connectors): one-click OAuth 2.1 for MCP servers (RFC 9728 + 8414 + 7591 + 8707) by @markokraemer in #6579
  • Canonical RBAC cutover: role_assignments is the only store — legacy tables → views, old engine + parity harnesses deleted by @markokraemer in #6594
  • fix(daemon): managed-model overlay never blocks the spawn; reconcile once before readiness by @markokraemer in #6592
  • fix(sessions): session sharing is the owner's call, not a manager's by @markokraemer in #6593
  • perf(sandbox): arm Platinum secrets during create by @Ino-Bagaric in #6596
  • feat(email): one EMAIL_URL configures every email Kortix sends by @markokraemer in #6585
  • perf(sessions): stop paying two provider round trips to resume a stopped box by @markokraemer in #6595
  • fix(gateway): disable Bun idleTimeout stream-kill + Bedrock request/response fixes by @markokraemer in #6599
  • fix(email): nodemailer 7.0.13 -> 9.0.5 (open advisories, incl. one high) by @markokraemer in #6597
  • test(ke2e): GW-1 tolerates a traffic-degraded gateway (aligns with #6582 preflight) by @markokraemer in #6603
  • Release candidate: main → staging (v0.13.1): RBAC-cutover code + gate round-2 fixes by @markokraemer in #6604
  • docs(runbook): switching dev/staging/prod auth email onto the send-email hook by @markokraemer in #6601
  • fix(db): unblock dev deploys — reconcile retired role_permissions actions before the cutover's catalog-FK VALIDATE (runtime override) by @markokraemer in #6602
  • fix(slack): link-bot documented the one input form Slack cannot send by @kubet in #6606
  • docs(learnings): reconcile a retired constraint value by remapping, never deleting by @markokraemer in #6605
  • docs(runbook): hook-enable PATCH clears custom SMTP; promote-safety proof by @markokraemer in #6608
  • Never render sandbox readiness 503s as errors — waking state + retry across all surfaces by @markokraemer in #6610
  • refactor(gateway): AI-SDK-native /language-model path for lossless opencode passthrough (flag-gated, dormant) by @markokraemer in #6609
  • fix(slack): link-bot should not require owner/admin — it delegates only your own authority by @kubet in #6612
  • infra(staging): API 3×2vCPU/4GiB — the release gate saturates 2×1vCPU tasks by @markokraemer in #6613
  • Release candidate: main → staging (v0.13.1): staging API 3×2vCPU (#6613) by @markokraemer in #6614
  • feat(secrets): exposure/usage model — one enforcement mechanism on all providers by @markokraemer in #6611
  • refactor(gateway): wire API in-process gateway + session env to enable the native path (flag off) by @markokraemer in #6615
  • fix(slack): users.info was sent as JSON, so Slack never saw the user param by @kubet in #6616
  • fix(queue): forwarded prompts cannot strand, Stop cannot leak, bubbles keep one identity by @markokraemer in #6598
  • perf(api): take audit writes and the owner-email fan-out off the request path by @markokraemer in #6618
  • Release candidate: main → staging (v0.13.1): request-path latency fix (#6618) by @markokraemer in #6620
  • perf(ci): dev single-arch + layer cache + fix the frontend-skip by @markokraemer in #6619
  • perf(ci): build staging images natively per arch, with a layer cache by @markokraemer in #6622
  • fix(gateway): re-apply gateway-side provider shaping (codex store:false + 3 more) on the native path by @markokraemer in #6623
  • ci(dev): explicit Deploy Dev action instead of per-push storm by @markokraemer in #6621
  • fix(web): boot-time composer shows the session's real agent; panels survive boot→ready by @markokraemer in #6625
  • deploy-staging: Cloudflare auth failure must not freeze the staging frontend by @markokraemer in #6626
  • ci(dev): auto-deploy latest + cancel-stale (builds are fast now) by @markokraemer in #6627
  • ke2e: never replay a create through an edge-laundered 5xx (fixes all 22 release-gate failures) by @markokraemer in #6628
  • fix(web): boot composer reads the stashed agent pick before /start answers by @markokraemer in #6629
  • fix(gateway): upgrade @ai-sdk/amazon-bedrock 5.0.24→5.0.59 (parse redacted reasoning; fixes GPT-on-Bedrock 502) by @markokraemer in #6630
  • refactor(gateway): make the AI-SDK-native path the default everywhere (verified across all providers) by @markokraemer in #6631
  • Unblock the release browser gate, and stop leaking the Vercel bypass secret by @markokraemer in #6632
  • Promote main to staging: gate flow + browser fixes, fast builds by @markokraemer in #6633
  • gate: 1 api worker per shard — 19 concurrent collapsed the staging write path by @markokraemer in #6634
  • Promote main to staging: gate worker concurrency by @markokraemer in #6635
  • gate: survive a transient 503 at world bootstrap; staging API floor 6 tasks by @markokraemer in #6636
  • Promote main to staging: bootstrap resilience + 6-task floor by @markokraemer in #6637
  • gate: fix the four session residuals, and stop reruns colliding with themselves by @markokraemer in #6638
  • edge: laundered 503 parses as an AI-SDK error; Worker deploy survives a dead credential by @markokraemer in #6639
  • Promote main to staging: edge error shape + session residual fixes by @markokraemer in #6640
  • staging: raise the request deadline to 55s (cross-region DB) by @markokraemer in #6641
  • Promote main to staging: 55s request deadline by @markokraemer in #6642
  • gate: boundary-asserting skips and named quarantines are legitimate --require-all outcomes by @markokraemer in #6643
  • Promote main to staging: skip semantics + SESS-23 quarantine by @markokraemer in #6644
  • gate: a one-step assert-then-skip flow counts as asserted by @markokraemer in #6645
  • Promote main to staging: assert-then-skip step semantics by @markokraemer in #6646
  • IAM-12: poll effective-permission probes through the cross-task IAM cache window by @markokraemer in #6648
  • Promote main to staging: IAM-12 settle poll by @markokraemer in #6649
  • perf(boot): remove fresh-session Git network round trips by @Ino-Bagaric in #6647
  • perf(boot): deliver exact Git delta during sandbox creation by @Ino-Bagaric in #6650
  • docs(boot): record deployed Git timing by @Ino-Bagaric in #6651
  • perf(boot): make Git bundle reuse durable by @Ino-Bagaric in #6652
  • docs(boot): record durable Git cache benchmark by @Ino-Bagaric in #6653
  • Release v0.13.1 — Release gate goes green: sharded, self-cleaning, right-sized staging by @github-actions[bot] in #6654
  • chore(runtime): bump OpenCode 1.17.11 -> 1.18.19 everywhere by @markokraemer in #6655
  • chore(release): staging VERSION → 0.13.2 [skip ci] by @github-actions[bot] in #6659
  • chore(release): VERSION → 0.13.2 [skip ci] by @github-actions[bot] in #6660
  • fix(turns): box-initiated turns get authority; busy roots are never read as terminal by @markokraemer in #6657
  • learnings: three rules from the v0.13.1 release-gate campaign by @markokraemer in #6661
  • fix(session): polish the session UX end to end by @markokraemer in #6663
  • refactor: stop inferring chronology from OpenCode message ids by @markokraemer in #6665
  • fix(turns): turn-begin relay must authenticate as the sandbox, not a PAT by @markokraemer in #6664
  • fix(billing): resolve entitlement from the subscription, not the stored tier by @markokraemer in #6662
  • perf(boot): shrink OpenCode config runtime by @Ino-Bagaric in #6656
  • chore(billing): backfill the renewal credits zero-grant legacy tiers never gave by @markokraemer in #6666
  • perf(boot): bake the generic scaffold checkout by @Ino-Bagaric in #6668
  • fix(billing): teach the entitlement invariant what a renewal now grants by @markokraemer in #6671
  • perf(boot): make starter Git bundles provider-portable by @Ino-Bagaric in #6672
  • chore(billing): reconcile stripe_subscription_status drift before #6662 promotes by @markokraemer in #6669
  • feat(runtime): converge every sandbox onto the API it talks to by @markokraemer in #6673
  • fix(boot): invalidate stale scaffold images by @Ino-Bagaric in #6674
  • fix(runtime-assets): hash the sandbox binaries at startup, not on the request by @markokraemer in #6676
  • docs(boot): record scaffold benchmark by @Ino-Bagaric in #6678
  • feat(secrets): gate egress-enforced delivery behind experimental secrets_egress flag; default to environment by @markokraemer in #6677
  • fix(sdk): sub-agent panels stop throwing 'Invalid session id' + quieter landing hero by @markokraemer in #6680
  • gateway: remove the AI-SDK-native transport — OpenAI-compat only (reliability) by @markokraemer in #6679
  • fix(secrets): relay substitutes handles in Authorization/Cookie (egress works for Bearer auth) by @markokraemer in #6683
  • Serve every sandbox preview on its own origin by @markokraemer in #6681
  • fix(web): sub-agent row hierarchy — one rail per level, agent rows that open by @sutharjay1 in #6682
  • enh(web): landing page hero scenes and marketing rebuild by @sutharjay1 in #6658
  • feat(secrets): stream the relay — no body caps, SSE, truncation sentinel by @markokraemer in #6685
  • fix(boot): the managed-skill overlay no longer counts as the user's changes by @markokraemer in #6684
  • refactor(session): one source of truth for what a session changed + the tracked package.json by @markokraemer in #6687
  • fix(session): a finished turn stays finished by @markokraemer in #6688
  • perf(web): verify the session JWT in-process instead of calling GoTrue on every navigation by @markokraemer in #6690
  • fix(session): a retry is not the end of a turn by @markokraemer in #6691
  • fix(queue): the inbox owns the queue by @markokraemer in #6692
  • perf(sandbox): reduce cold OpenCode startup latency by @Ino-Bagaric in #6694
  • perf(snapshots): materialize Platinum templates before activation by @Ino-Bagaric in #6695
  • Prepare active Platinum images before cold boots by @Ino-Bagaric in #6696
  • fix(slack): an app_mention was answered by whichever project got the callback, not the bot that was mentioned by @kubet in #6689
  • fix(sessions): list and lifecycle answer manager standing from one predicate by @kubet in #6697
  • fix(api): an algorithm the local verifier cannot check is not a bad token by @markokraemer in #6698
  • perf(sandbox): add guarded project-image cold boot by @Ino-Bagaric in #6700
  • fix(api): fail closed on unsafe FAST activation by @Ino-Bagaric in #6703
  • fix(api,selfhost): isolate audit writes + Caddy retry so a slow audit write can't 502 the gateway by @markokraemer in #6702
  • revert(queue): put the queue back the way it was by @markokraemer in #6699
  • fix(web): stop the session boot shell vanishing at handover by @sutharjay1 in #6701
  • fix(edge): accept webhooks without User-Agent by @markokraemer in #6709
  • fix(gateway): bound per-request memory so the LLM path can actually autoscale by @markokraemer in #6708
  • fix(web): restore voice input and subordinate menu styling — main was red by @markokraemer in #6711
  • docs(learnings): a 'tried and reverted' comment is a decision record by @markokraemer in #6704
  • docs(gateway): state the in-flight budget's unit, and pin it with a test by @markokraemer in #6710
  • fix(dev): stop OOM-killing the dev API — 1024 MiB was a quarter of every other environment by @markokraemer in #6705
  • fix(gateway): size the in-flight budget from the container, not from a constant by @markokraemer in #6712
  • docs(learnings): a limit larger than the thing it protects is not a limit by @markokraemer in #6713
  • fix(triggers): stop initial prompt replay loops by @markokraemer in #6716
  • hotfix(webhooks): accept unsigned-agent requests and stop prompt replay by @markokraemer in #6717
  • Release v0.13.2 — Fix production webhook delivery and initial prompt completion by @github-actions[bot] in #6718
  • chore(release): VERSION → 0.13.3 [skip ci] by @github-actions[bot] in #6720
  • chore(release): staging VERSION → 0.13.3 [skip ci] by @github-actions[bot] in #6721
  • fix(reaper): stop killing live turns on a box that is merely transitioning by @markokraemer in #6719
  • fix(platform): storm controls — coalesced env fan-out, secret-write budget, per-project session cap by @kubet in #6715
  • fix(api): bound database connections during rollouts by @markokraemer in #6722
  • fix(prod): bound database connections during rolling deployment by @markokraemer in #6724
  • test(browser): await account render before retry by @markokraemer in #6727
  • fix(release): isolate audit writes from API database pool by @markokraemer in #6728
  • Release v0.13.3 — Bound database connections and isolated audit writes by @github-actions[bot] in #6733
  • fix(preview): make preview origins a MUST on a public domain, never a silent downgrade by @markokraemer in #6732
  • fix(release): bind Vercel runtime version per deployment by @markokraemer in #6735
  • fix(release): bind Vercel runtime version per deployment by @markokraemer in #6736
  • refactor(gateway): bound memory and simplify passthrough by @markokraemer in #6737
  • fix(gateway): wire API proxy to standalone service by @markokraemer in #6738
  • fix(deploy): persist gateway target in ECS revisions by @markokraemer in #6740
  • test(release): prove warm adoption on the target row by @markokraemer in #6739
  • Fix warm-session adoption release assertion by @markokraemer in #6741
  • feat(cli): UI→CLI parity — every operable dashboard action has a kortix command by @markokraemer in #6731
  • feat(composer): persist unsent drafts per project and per session by @sutharjay1 in #6743
  • test(release): require Apps list after enabling flag by @markokraemer in #6747
  • test(release): require Apps list after enabling flag by @markokraemer in #6749
  • fix(session): make runtime recovery single-flight and non-destructive by @markokraemer in #6748
  • fix(worktree): warn at start when another stack is live on the shared DB (worker cross-talk) by @markokraemer in #6752
  • docs(sdk): close runtime recovery progress by @markokraemer in #6754
  • security: enforce the sandbox credential boundary by @markokraemer in #6751
  • fix(cli): replay manifest CAS 409 once; projects ls honors --host/--account by @markokraemer in #6753
  • fix(worktree): tunnel watchdog — rotate a dead quick tunnel and respawn the API with the new KORTIX_URL by @markokraemer in #6755
  • test(release): allow later session activity writes by @markokraemer in #6756
  • docs(learnings): never resolve a merge inside a worktree whose API runs --hot by @markokraemer in #6758
  • test(release): allow later session activity writes by @markokraemer in #6757
  • fix(worktree): run the quick tunnel over HTTP/2, not QUIC by @markokraemer in #6759
  • fix(api): inbox delivery converges the box before every prompt, not only with an opencodeEnv override by @markokraemer in #6761
  • security: enforce the sandbox credential boundary by @markokraemer in #6760
  • Release v0.13.4 — Bound database capacity and reliable production web deploys by @github-actions[bot] in #6746
  • chore(release): VERSION → 0.13.5 [skip ci] by @github-actions[bot] in #6762
  • chore(release): staging VERSION → 0.13.5 [skip ci] by @github-actions[bot] in #6763
  • fix(web): the Apps gallery goes back to 16:9, two across, with a size control by @markokraemer in #6764
  • fix(api,dev): instance-scoped background work on a shared local DB (KORTIX_INSTANCE_ID) by @markokraemer in #6765
  • fix(triggers): validate webhook secret delivery by @markokraemer in #6768
  • fix(web): an App card names the App, not its hostname by @markokraemer in #6767
  • kortixd: standalone compute-node daemon and sandbox runtime by @markokraemer in #6686
  • docs(learnings): a cancelled deploy-dev can advertise a SHA it never promoted by @markokraemer in #6769
  • fix(self-host): expose the public LLM gateway route by @markokraemer in #6770
  • fix(kortixd): connect through deployed WebSocket edge by @markokraemer in #6773
  • fix(web): the model dialog IS the Models page, not a second copy of it by @markokraemer in #6771
  • fix(web): trim the project settings rail, and a floating way back from the account hub by @markokraemer in #6772
  • feat(web): rebuild the Customize index as a chooser by @markokraemer in #6774
  • fix(kortixd): complete reliable sandbox relay rollout by @markokraemer in #6776
  • fix(relay): cross Cloudflare for PTY sockets by @markokraemer in #6777
  • fix(kortixd): disable node-channel compression by @markokraemer in #6778
  • fix(api): wait through Platinum archive restore by @markokraemer in #6779
  • fix(api): converge kortixd after Daytona wake by @markokraemer in #6780
  • fix(api): bootstrap kortixd on legacy sandboxes by @markokraemer in #6781
  • fix(api): restore runtime environment for legacy kortixd by @markokraemer in #6782
  • fix(api): serialize legacy kortixd repair by @markokraemer in #6783
  • fix(api): preserve legacy sandbox entrypoint by @markokraemer in #6784
  • fix(api): protect sandbox PID 1 by @markokraemer in #6785
  • fix(kortixd): adopt legacy sandbox runtime by @markokraemer in #6786
  • revert: restore stable sandbox relay while kortixd stays in worktree by @markokraemer in #6787
  • fix(deploy): complete reviewed kortixd rollback by @markokraemer in #6788
  • fix(sdk,web): a runtime list endpoint never hands back a non-list ('t is not iterable') by @markokraemer in #6790
  • docs(learnings): normalize remote list responses at the SDK seam by @markokraemer in #6791
  • release(staging): backport 5 web changes — sub-agent rows, landing rebuild, sidebar alerts, zip viewer, share view by @sutharjay1 in #6789
  • fix(api,web,sdk): terminal attach wakes a parked sandbox instead of looping on 1006 by @markokraemer in #6792
  • fix(env): default managed git to github for local and dev runs by @markokraemer in #6793
  • docs(learnings): a websocket upgrade must obey the HTTP wake policy by @markokraemer in #6794
  • fix(api): retire code.storage as a provisioning target everywhere by @markokraemer in #6796
  • fix(web): stop path detection from turning a code fence into [object Object] by @markokraemer in #6795
  • fix(deploy): pin MANAGED_GIT_PROVIDER=github in the staging env bundle by @markokraemer in #6799
  • fix(router): accept the session PAT that every built-in tool actually presents by @markokraemer in #6800
  • fix(ci): run dev channel promotions after skipped surfaces by @markokraemer in #6798
  • Fix OpenCode resolution in generated sandbox templates by @markokraemer in #6801
  • fix(session): stop claiming a live session is "waking" before we have looked by @markokraemer in #6802
  • docs(agents): remove the dangling tdd skill and fix stale AGENTS.md facts by @markokraemer in #6803
  • fix(models): a connected ChatGPT subscription can be removed again by @markokraemer in #6804
  • Resolve native OpenCode from the installed pnpm shim by @markokraemer in #6805
  • fix(session,db): a finished turn stays finished; drop the reverted kortixd schema by @markokraemer in #6807
  • fix(session,db): finish the turn-end fix + three defects an audit found by @markokraemer in #6808
  • fix(sdk): a status snapshot may fill a gap, never overwrite the live stream by @markokraemer in #6809
  • perf(session): bound what a long thread retains by @markokraemer in #6810
  • fix(session): a queued prompt asks the inbox whether it survived, not the runtime by @markokraemer in #6811
  • Fix duplicate prompts from CLI new-session chat by @markokraemer in #6812
  • Files: one header row per surface, faster change-request open, calmer review panels by @sutharjay1 in #6813
  • fix(session): the runtime's output is evidence, not an opinion about the runtime by @markokraemer in #6814
  • fix(starter): disable harness reflector by default by @kubet in #6806
  • fix(sdk,session): the transcript comes from the runtime, never from disk by @sutharjay1 in #6819
  • A wait is not a fault: one connection answer for the session view by @markokraemer in #6817
  • fix(api): namespace OpenCode gateway model refs by @markokraemer in #6820
  • Drop a foreign key the schema declared and no database ever had by @markokraemer in #6818
  • The transcript must catch up — five things stopped it by @markokraemer in #6821
  • fix(sandbox): recover missing OpenCode runtime by @markokraemer in #6822
  • fix(ci): preserve frontend channel promotion by @markokraemer in #6823
  • The read is the liveness check — stop the session page waiting on a probe by @markokraemer in #6824
  • The first page is 20 messages, not 50 by @markokraemer in #6825
  • Take over OpenCode's own v1 page handling by @markokraemer in #6826
  • Wait for a sandbox to wake, not for three tries by @markokraemer in #6827
  • A human is not a sandbox: backend-origin sessions open again by @markokraemer in #6828
  • The transcript stops shipping attachment bytes by @markokraemer in #6829
  • Learnings: the 2026-08-24 session-open incident by @markokraemer in #6830
  • One read where there were three, one entry where there were two by @markokraemer in #6832
  • fix(gateway): zero-copy image passthrough, measured memory envelope, image window, framing headers by @markokraemer in #6831
  • Promote main to staging by @markokraemer in #6834
  • perf(session): remove residual page-load contention by @markokraemer in #6836
  • fix(gateway): survive overload instead of dying — no OOM, no lease leak, no 502 by @markokraemer in #6835
  • Bound failed existing-session resume loops by @markokraemer in #6837
  • Fix release gate audit stalls and stale fixtures by @markokraemer in #6838
  • Promote current main to staging by @markokraemer in #6839
  • Release v0.13.5 — Faster sessions, resilient multimodal runs, and safer previews by @github-actions[bot] in #6842

Full Changelog: v0.13.0...v0.13.5

Don't miss a new suna release

NewReleases is sending notifications on new releases.