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