New
- Kortix managed models run on Platinum Inference. The managed model list, prices, limits and reasoning levels come live from Platinum, so a model Platinum adds reaches Kortix without a release. Self-hosted and bring-your-own-key projects can add a Platinum key and call
platinum/<model>directly. - Session logs for every project. The session log is on by default, so every project stores its conversations in it.
- Bring your own S3 for Kortix Capture. An admin can keep an account's recordings in the account's own S3 bucket from Capture → Settings → Storage. Self-hosted Kortix can use an external S3 object store for Capture.
- Session rows say what waits on you. The sidebar shows a question or permission, an open change request, and the sub-agents and sessions a session started.
- Reminders glide between rows, and 30 or more reminders open in the side panel.
- The turn-done toast offers Review for the change request the turn opened.
- Remove a project skill from its card on the Skills page.
- New sandboxes always run on Platinum. Sandbox templates no longer offer Daytona.
- White-label examples: Lumen, a legal AI app on one shared Kortix project with a Team Console, and the Lumen Workspace reskin.
Improved
- Faster LLM gateway admission: each upstream has its own circuit breaker, admission reads run in parallel, and the default model is resolved only when a request needs it.
- Change requests that an agent opens show at turn end. An applied change request refreshes agents and Needs you.
- Pinned sessions sit above the Sessions header.
- Transcripts show while the sandbox is still starting.
- Compaction stays inside the Worked section.
- The model picker never preselects a model whose provider is not connected, and it says what to connect.
- Marketplace add stays on the page, and search keeps its query in the URL.
- Billing shows Plan member usage and the credit reset and expiry dates.
- Command palette search finds "Your first chat with Kortix".
- The session slash menu lists skills again on pi.
- CLI: 17 commands match the API again,
doctorpicks an available model, andsessions rmwithout--projectdeletes exactly the named session or nothing.
Fixed
- Security hardening: hosted APIs no longer trust the legacy Supabase signing secret, a token cannot be minted already expired or outlive the token that minted it, the sandbox daemon refuses symlinks that point outside the workspace, billing state needs
billing.read, account names refuse markup, and deleting an account revokes its credentials. - Trigger runs close when their turn ends, and queued creates link to their run.
- A skill created with the form shows on version 3 projects.
- A channel's model pin is stored again.
- Capture search reads the requested day, routing policy keeps generation defaults, and credit reads follow the account.
- Editing a v2 agent keeps the keys the update cannot carry.
- A missing attachment answers 404 instead of a retry. Five routes stop reporting permanent failures as temporary. A command that timed out keeps its unknown outcome.
- A session mention in a message you just sent keeps its title.
- Incomplete personal accounts are cleaned up when their user is deleted.
- Many smaller fixes and cleanups across the web app, the CLI and the API.
What's Changed
- docs(learnings): gate repository content, never the project record by @markokraemer in #10603
- chore(release): VERSION → 0.14.5 [skip ci] by @github-actions[bot] in #10605
- chore(release): staging VERSION → 0.14.5 [skip ci] by @github-actions[bot] in #10606
- docs(learnings): run the release suite's fast tripwires before every Promote by @DimitrijeGlibic in #10607
- fix(api): return retryable mirror contention (KRTX-2970) by @agent-kortix in #10608
- refactor(lint): decouple UI lint from the web app (KRTX-2973) by @agent-kortix in #10609
- chore(catalog): refresh model seeds by @github-actions[bot] in #10610
- docs(tui): correct allowlist module count (KRTX-2836) by @agent-kortix in #10611
- fix(db): reclaim incomplete personal accounts on auth deletion (KRTX-2135) by @agent-kortix in #10450
- fix(api): revoke credentials on deletion confirmation (KRTX-2919) by @agent-kortix in #10587
- fix(api): a missing attachment object answers 404, not a 503 retry (KRTX-2974) by @Ino-Bagaric in #10612
- fix(web): local dev resolves shaders/react again (/auth answered 500) by @Ino-Bagaric in #10613
- fix(ui): a session mention in a just-sent message keeps its title (KRTX-2858) by @Ino-Bagaric in #10614
- fix(api): a channel's model pin is stored again, and dead code after a return fails lint (KRTX-2987) by @Ino-Bagaric in #10615
- fix(cli): choose an available doctor model (KRTX-2985) by @agent-kortix in #10616
- fix(tools): show ignores an empty items value beside a single item by @sutharjay1 in #10617
- fix(kortixd): the session slash menu lists skills again on pi by @sutharjay1 in #10618
- fix(api): five routes stop calling permanent failures temporary and log the cause (KRTX-2977..2981) by @Ino-Bagaric in #10619
- feat(web): marketplace add stays on the page, search keeps ?q= (KRTX-2993) by @sutharjay1 in #10620
- feat(ui): turn-done toast offers Review for its change request (KRTX-2994) by @sutharjay1 in #10621
- fix(api,sdk,cli): capture search reads day, routing policy keeps generation defaults, credit reads follow account_id (KRTX-2983, KRTX-2988, KRTX-2989) by @Ino-Bagaric in #10622
- fix(cli,api): 17 CLI commands match the API again, and a v2 agent edit keeps keys the PUT cannot carry (KRTX-2990, KRTX-2991, KRTX-2992) by @Ino-Bagaric in #10624
- fix(billing): KRTX-2082 show credit reset and expiry dates by @agent-kortix in #10404
- refactor(mobile): KRTX-2440 split schedule sheets and reuse local types by @agent-kortix in #10581
- fix(web): show Plan member usage (KRTX-1960) by @agent-kortix in #10576
- refactor(web): KRTX-3000 delete unreachable feature modes by @agent-kortix in #10629
- test(cli): sessions rm without --project deletes exactly the named session or nothing (KRTX-2818) by @Ino-Bagaric in #10626
- feat(web): remove a project skill from its card on the Skills page (KRTX-2821) by @Ino-Bagaric in #10630
- fix(web): next dev runs on Turbopack and stops eating 16 GB per server by @sutharjay1 in #10628
- fix(ui): pinned sessions sit above the Sessions header, outside the list by @sutharjay1 in #10623
- docs(git): a base_ref session takes governance from the default branch (KRTX-2868) by @Ino-Bagaric in #10632
- fix(api): a skill created with the form is registered on a kortix_version 3 project, so it surfaces (KRTX-2543) by @Ino-Bagaric in #10633
- fix(ui): the notification host gate reads the project detail from the cache instead of observing it by @Ino-Bagaric in #10634
- fix(web): command palette search finds "Your first chat with Kortix" (KRTX-2476) by @Ino-Bagaric in #10636
- fix(session): show transcripts independently of sandbox readiness (KRTX-3003) by @agent-kortix in #10635
- fix(db): public.resources RLS requires an account match on every verb (KRTX-2779) by @Ino-Bagaric in #10637
- fix(web): drop the frameless play() NotSupportedError rejection from error reports (KRTX-2998) by @Ino-Bagaric in #10638
- feat(ui): session rows say what waits on you and what a session started by @sutharjay1 in #10631
- refactor(marketing): KRTX-3005 dedupe primitives and delete unreachable layer by @agent-kortix in #10639
- fix(triggers): close trigger runs from the turn ledger, link queued creates (KRTX-3007, KRTX-3026) by @sutharjay1 in #10640
- feat(ui): reminders glide between rows, and 30+ reminders open in the side panel by @sutharjay1 in #10625
- fix(ui): agent-opened change requests show at turn end; an applied one refreshes agents and Needs you (KRTX-3009, 3010, 3012, 3019) by @Ino-Bagaric in #10641
- fix(models): a model whose provider is not connected is never preselected; the picker says what to connect (KRTX-3011) by @Ino-Bagaric in #10642
- fix(web): favicon status dot sits flush with the icon corner by @sutharjay1 in #10627
- refactor(web): delete obsolete marketplace helpers (KRTX-3033) by @agent-kortix in #10644
- feat(white-label): Lumen, a legal AI SaaS on one shared Kortix project, and Team Console by @markokraemer in #10493
- fix(api,sandbox): tokens never mint dead or outlive their parent; kortixd refuses symlink escapes by @markokraemer in #10646
- feat(sandbox): customers can no longer choose Daytona; templates show Platinum only by @DimitrijeGlibic in #10647
- fix(session): KRTX-3034 keep compaction inside Worked by @agent-kortix in #10648
- feat(white-label): restore the reskin example as Lumen Workspace (apps/white-label/reskin) by @markokraemer in #10649
- feat(gateway): Platinum Inference is a provider — Kortix managed models are what Platinum offers; self-hosters bring a Platinum key by @markokraemer in #10643
- docs(learnings): Platinum inference cost leak and stream stall (2026-10-21) by @markokraemer in #10650
- refactor(gateway): no managed model id is hardcoded; fallbacks and retired-id moves follow Platinum's lineup by @markokraemer in #10652
- refactor(web): KRTX-2907 clean up five small leftovers by @agent-kortix in #10653
- fix(api): billing state needs billing.read; account names refuse markup (pentest 2026-07) by @markokraemer in #10655
- fix(ui): the Platinum provider shows the Platinum square, not a sparkles placeholder by @markokraemer in #10656
- docs: describe managed inference as Platinum Inference only by @markokraemer in #10657
- chore(secrets): dev and staging on Supabase publishable/secret keys (pentest finding 3, step 1) by @markokraemer in #10658
- chore(secrets): prod API env file on Supabase publishable/secret keys (pentest finding 3, step 2) by @markokraemer in #10659
- docs(learnings): rebuild Vercel prod with deploy-prod's per-deployment env by @markokraemer in #10660
- feat(cli): external S3 object store for self-host Kortix Capture by @markokraemer in #10661
- fix(api): preserve unknown exec outcome after timeout (KRTX-3036) by @agent-kortix in #10662
- feat(capture): per-account storage destination (bring your own S3) — Part A (model + API) by @markokraemer in #10664
- fix(secrets): Supabase legacy-key retirement on staging + hosted APIs stop trusting the HS256 secret (pentest finding 3) by @markokraemer in #10663
- feat(gateway): split /admit latency into its API steps and the gateway↔API round trip by @markokraemer in #10665
- feat(web): Capture Storage settings + efficiency tunables (bring your own S3) — Part B by @markokraemer in #10666
- perf(gateway): circuit breaker per upstream + parallel admission reads by @markokraemer in #10667
- perf(gateway): admission resolves the default model only when the route depends on it by @markokraemer in #10668
- feat(session-log): session_log is on by default for every project by @DimitrijeGlibic in #10669
- fix(release): cover the Capture storage routes and keep reminders below customize by @DimitrijeGlibic in #10670
- chore(gateway): bench harness for load, long streams and 120k prompts (+ loop results) by @markokraemer in #10671
- Promote dev ad3ab8c to staging by @github-actions[bot] in #10672
- fix(ui): routing fallback no longer pre-selects a hardcoded model id by @markokraemer in #10673
- Promote dev 5cd8c74 to staging by @github-actions[bot] in #10675
- fix(deps): clear three CRITICAL CVEs that fail the release scan by @DimitrijeGlibic in #10676
- fix(api): release-suite tests follow the Daytona refusal, session_log default and Platinum config by @DimitrijeGlibic in #10677
- fix(ui): provider tests follow the Platinum Inference copy and managed catalog by @DimitrijeGlibic in #10678
- fix(release): v0.14.5 core-db lane and CodeQL highs by @markokraemer in #10679
- Promote dev be9194f to staging by @github-actions[bot] in #10680
- fix(deps): clear the HIGH CVEs that fail the release Trivy check by @DimitrijeGlibic in #10681
- fix(white-label): reskin e2e setup outlasts a CPU-starved cold build in CI by @DimitrijeGlibic in #10682
- fix(i18n): translate the Capture storage settings and clear the strict audit by @DimitrijeGlibic in #10683
- Promote dev 8556eb7 to staging by @github-actions[bot] in #10684
- Release v0.14.5 — Platinum Inference, session logs for every project, and bring-your-own S3 for Capture by @github-actions[bot] in #10674
Full Changelog: v0.14.4...v0.14.5