New
- Trigger run history. Every trigger keeps a list of its runs with status, error and end time. You can test-fire a trigger with a payload, replay a past run, and missed cron slots are bounded.
- More credit tiers and larger top-ups. The Free plan now includes 500 credits and the managed models.
- DeepSeek V4.1 Flash now serves the 1017 snapshot on Morph (US region, zero data retention).
- Subprocessor notices. The subprocessor list is published, and owners and admins of paid accounts get a 30-day email notice before a new subprocessor takes effect.
- White-label license. A free, self-serve white-label license is published next to the repository license (
WHITE-LABEL-LICENSE.md). - Customize › Agents lists agents first, with subagents in their own section.
- Kortix Capture: choose an Exclusion or Inclusion policy, categories list what they cover, the cloud policy applies from the first frame, and the app has Restart and Quit.
Improved
- Provider failures recover better: internal continuations, one terminal error row, suggestions you can act on, and a cancel you made yourself no longer shows as a model failure.
- Model-switch errors stay in the conversation history.
- Sign-in and password recovery by email are more reliable. Refused auth emails show an honest message, and the link buttons cool down.
- The CLI resolves the host and the default project the same way everywhere, keeps its identity inside a delegated sandbox, routes help correctly, and reports billing in the same credit units as the wallet.
- Connectors: the sync summary agrees with the list,
policy lsshows connector rules, and the All tab lists the project's own connectors. - API keys: revoked gateway keys are hidden, a create cannot mint twice, and revoked personal keys can be deleted (also from the CLI).
/newshows the plan cap before the first failed create.- Phone layouts on web and mobile have accessible navigation targets.
- Platinum images for US-region projects are built and copied in their region, so the first session after a template rebuild does not wait.
- Sessions start faster: env-sync no longer blocks
/starton the model push and no longer pushes into stopped boxes. - An opened App scrolls at once, and its bar is Refresh, Open, Settings and Close. App releases run on Platinum when it is configured.
- "Open as admin" acts as the project's account.
- Sandboxes clear known-safe caches when their disk fills up.
Fixed
- Shared session start failures retry.
- The auth callback logs provider errors safely.
- Dead public share links show the unavailable page.
- Streaming markdown keeps its blocks around fenced definitions.
- A provision stream that closes mid-way recovers its real result; 502/503 alerts show the real reason.
- App locales are no longer double-prefixed.
- Onboarding promos stay dismissed and no longer stack after you exit the wizard.
- A future key expiry shows as a countdown.
- The agent config and model pins reject an agent name that is not declared.
- LLM inference refuses principals that have no project (
403 project_required). - Subscription plan resolution ignores enterprise metadata hints.
- Many smaller fixes across web, mobile, the CLI, the whitelabel demo, the gateway and the API.
What's Changed
- feat(triggers): run history, test-fire with a payload, replay, and a misfire bound (KRTX-1743) by @sutharjay1 in #10150
- chore(release): VERSION → 0.14.2 [skip ci] by @github-actions[bot] in #10151
- chore(release): staging VERSION → 0.14.2 [skip ci] by @github-actions[bot] in #10152
- fix(snapshots): copy a new Platinum image to the session region before sessions use it by @markokraemer in #10157
- feat(billing): credit tiers and top-ups to $50,000; Free gets 500 credits + managed models by @markokraemer in #10147
- fix(capture): Sign in with Kortix failed: Cloudflare 403s requests without a User-Agent by @markokraemer in #10160
- feat(web): agents first, subagents in their own section on Customize › Agents by @markokraemer in #10161
- feat(capture): Restart and Quit; CI signs in at the real dev-api through Cloudflare; Linux job on a real VM by @markokraemer in #10162
- fix(snapshots): build a us_region project's Platinum image in its region by @kubet in #10163
- feat(capture): Exclusion or Inclusion policy, categories that list what they cover, cloud policy in force from the first frame by @markokraemer in #10168
- perf(platinum): send a region-naming call straight to that region's control plane by @kubet in #10167
- fix(capture): unblock recording after sign-in when the store has no policy; fix the docs build by @markokraemer in #10169
- chore(deps): bump github/codeql-action/upload-sarif from 4.38.2 to 4.38.3 by @dependabot[bot] in #9759
- chore(deps): bump rustls from 0.23.40 to 0.23.46 in /apps/capture by @dependabot[bot] in #9925
- fix(web): the outputs fold says items when the hidden rows are not files (KRTX-1779) by @agent-kortix in #9385
- fix(preview): dead public share links render the unavailable page, not JSON or a sign-in wall (KRTX-1601) by @agent-kortix in #9652
- fix(web): a mid-provision stream close recovers its true result, and 502/503 alerts show the real reason (KRTX-1754) by @agent-kortix in #9817
- fix(web): dismiss onboarding wizard on exit (KRTX-2243) by @agent-kortix in #9856
- KRTX-2283 handle shared session start failures with retry by @agent-kortix in #9859
- fix(tests): recover runner-owned web exits (KRTX-2288) by @agent-kortix in #9868
- fix(api): refuse LLM inference for project-less principals — 403 project_required (KRTX-2295) by @agent-kortix in #9889
- KRTX-2360: isolate bounded and full-code highlighting by @agent-kortix in #9899
- fix(web): drop the frameless wallet provider-disconnected rejection noise (KRTX-2150) by @agent-kortix in #9922
- fix(api): ignore enterprise metadata hints in subscription plan resolution (KRTX-2397) by @agent-kortix in #9972
- fix(web): don't fire the operator-only git-backend repositories call on /new (KRTX-1892) by @agent-kortix in #9997
- fix(web): never rotate the session refresh token in middleware (KRTX-2111) by @agent-kortix in #10030
- fix(web): Enter submits the auth email form during the hydration gap (KRTX-2078) by @agent-kortix in #10044
- fix(cli): hide revoked keys from tokens ls --mine (KRTX-1969) by @agent-kortix in #10046
- fix(KRTX-2573): restore harness-neutral Custom provider presentation by @agent-kortix in #10088
- test(sdk): pin the upgrade-without-database guard on the saved-copy cache (KRTX-2576) by @agent-kortix in #10101
- fix(api): classify orphaned handlers after the request deadline instead of capturing them (KRTX-2583) by @agent-kortix in #10102
- test(web): pin data-turn-continues and the sizeRoom anchor filter (KRTX-2565) by @agent-kortix in #10103
- fix(api): audit contended 503 without disturbing a finalized body (KRTX-2600) by @agent-kortix in #10119
- [KRTX-2394] test(api): usage-session-costs-http stubs its #10113 directory-visibility dependency by @agent-kortix in #10127
- fix(kortixd): act on in-VM rootfs pressure by wiping known-safe caches (KRTX-2593) by @agent-kortix in #10121
- fix(mobile): key the mermaid render cache on the source text, not a hash (KRTX-2462) by @agent-kortix in #10125
- fix(web): strip bare error prefixes and stacked wrappers in stripErrorWrappers (KRTX-2409) by @agent-kortix in #10131
- fix(web): handle rejections of the fire-and-forget device-cache clear (KRTX-2410) by @agent-kortix in #10133
- fix(web): the gone-project screen stops refetching a dead project (KRTX-2436) by @agent-kortix in #10141
- fix(billing): the hub Plan pane shows the wallet only when the plan can fund it (KRTX-2376) by @agent-kortix in #10143
- fix(mobile): stream the save-to-device copy instead of a whole-file heap read (KRTX-2481) by @agent-kortix in #10153
- fix(cli): reject a non-numeric --timeout on channels connect (KRTX-2508) by @agent-kortix in #10154
- fix(compliance): monitor capture-store manifest queue message age (KRTX-2509) by @agent-kortix in #10156
- docs(sdk): correct the entitlement write-path doc comments by @agent-kortix in #10158
- krtx-2671-runtime-lost: stamp the removal intent before erasure removes a parked box by @agent-kortix in #10159
- fix(db): resolve the migration gate's trunk ref from the remote's default branch (KRTX-2532) by @agent-kortix in #10164
- fix(session): show model-switch errors in conversation history (KRTX-2685) by @agent-kortix in #10165
- fix(markdown): preserve streaming blocks around fenced definitions (KRTX-2480) by @agent-kortix in #10166
- fix(web): render a future key expiry as its countdown, not as a fresh stamp by @agent-kortix in #9648
- fix(web): classify the Firefox dead-object external-scope error as browser noise (KRTX-522) by @agent-kortix in #10016
- fix(web): drop the spoofed WebGL getParameter Illegal-invocation noise (KRTX-2465) by @agent-kortix in #10022
- docs(learnings): the PR-evidence Review lines are bare lines; the handoff null assignee needs run_query_or_mutation by @agent-kortix in #10155
- fix(gateway): trace refused requests in usage and logs (KRTX-1749) by @agent-kortix in #9973
- fix(capture): recording resumes right after sign-in when the policy check completes by @markokraemer in #10176
- feat(models): DeepSeek V4.1 Flash serves the 1017 snapshot on Morph (US, ZDR) by @markokraemer in #10177
- fix(web): render each locale's design-system Don't heading from its own clause (KRTX-2281) by @agent-kortix in #9841
- fix(mobile): show PDF library load failures (KRTX-2471) by @agent-kortix in #10171
- fix(whitelabel): respect persisted session sharing (KRTX-2643) by @agent-kortix in #10183
- fix(tests): clean up workflow fixture directories (KRTX-2674) by @agent-kortix in #10184
- docs(api): keep account-only gateway refusals store-only (KRTX-2631) by @agent-kortix in #10179
- fix(whitelabel): retain non-text user message parts (KRTX-2644) by @agent-kortix in #10186
- fix(starter): deny unsupported PTY workdir permission prompts (KRTX-2625) by @agent-kortix in #10180
- fix(manifest): match nonblank schema checks to validator (KRTX-2539) by @agent-kortix in #10172
- fix(web): mark SEO navbar as titlebar owner (KRTX-2282) by @agent-kortix in #9870
- fix(starter): propagate template walk errors (KRTX-2626) by @agent-kortix in #10181
- fix(whitelabel): escape upstream path control bytes (KRTX-2646) by @agent-kortix in #10182
- refactor(tests): share exit-aware git helper (KRTX-2675) by @agent-kortix in #10187
- fix(tokens): delete revoked personal keys from CLI (KRTX-2561) by @agent-kortix in #10188
- fix(web): keep the use-case toc on the section the reader is in (KRTX-2371) by @agent-kortix in #10106
- fix(session): don't present an intentional cancel as a model failure (KRTX-2572) by @agent-kortix in #10109
- KRTX-2645: Guard call-snippet clipboard copy by @agent-kortix in #10189
- fix(infra): use the live staging preview origin (KRTX-2691) by @agent-kortix in #10190
- fix(web): stop double-prefixing app locales (KRTX-2595) by @agent-kortix in #10185
- fix(api): sample pre-stop abort misses as info, keep warn for unexpected failures (KRTX-2724) by @agent-kortix in #10195
- fix(cli): align billing JSON credit units with wallet (KRTX-2717) by @agent-kortix in #10192
- fix(api): env-sync stops pushing into dead boxes and stops blocking /start on the model push (KRTX-2725) by @agent-kortix in #10196
- fix(cli): resolve host and default-project identity consistently (KRTX-2701) by @agent-kortix in #10193
- fix(api): session-list poll can no longer throw a body-disturbed TypeError (KRTX-2736) by @agent-kortix in #10197
- fix(api): tolerate expected stopped-runtime states in transcript mirror and inbox reads (KRTX-2723) by @agent-kortix in #10201
- chore(catalog): refresh model seeds by @github-actions[bot] in #10204
- fix(api): journal and CR-merge contended responses set Retry-After inline (KRTX-2737) by @agent-kortix in #10202
- fix(api): throttle session-gate refusal warns; typed session_token_revoked body (KRTX-2369, KRTX-2728) by @agent-kortix in #10205
- fix(cli): persisted identity state survives the delegated sandbox env (KRTX-2702) by @agent-kortix in #10198
- fix(web): drop CookieYes banner.js consent-banner errors as third-party noise (KRTX-2739) by @agent-kortix in #10208
- fix: api-key lifecycle — hide revoked gateway keys, single-mint create guard, delete revoked personal keys (KRTX-2721) by @agent-kortix in #10209
- refactor(web,sdk): fold dead exports, split mega-components, localize diagram captions (KRTX-1992) by @agent-kortix in #9928
- fix(web): persist onboarding promo dismissals and stop the promo stacking on a wizard exit (KRTX-2715) by @agent-kortix in #10199
- fix(auth): email sign-in and recovery correctness (KRTX-2703) by @agent-kortix in #10194
- fix(web): name the signup confirmation email on the link step (KRTX-2195) by @agent-kortix in #10203
- fix: disclose secret intake delivery scope (KRTX-2411) by @agent-kortix in #10170
- fix(web): show the plan cap on /new before the first failed create (KRTX-2716) by @agent-kortix in #10210
- fix(session): provider failure recovery — internal continuations, one terminal error row, actionable suggestions, silent-turn clock (KRTX-2708) by @agent-kortix in #10213
- fix(api): reject agent config and model pins on an undeclared agent name (KRTX-2711) by @agent-kortix in #10211
- fix(manifest-schema): accept normalized enum values (KRTX-2538) by @agent-kortix in #10173
- fix(api): fail closed on an unknown database result shape in abandonSandboxTurn (KRTX-2771) by @agent-kortix in #10215
- fix(dev): stop owned laptop child processes on exit (KRTX-2690) by @agent-kortix in #10191
- fix(infra): capture-store tags scanner-readable — literal-keyed maps (KRTX-1649) by @agent-kortix in #10217
- test(api): restore the KRTX-470 last-opened detached-stamp enforcer deleted by #10058 by @agent-kortix in #10219
- fix(api): emit build_succeeded once per provider-transition drive (KRTX-2767) by @agent-kortix in #10223
- refactor(sdk): simplify turn + attachment streaming internals (KRTX-2730) by @agent-kortix in #10224
- feat(legal): automated subprocessor notices: list, 30-day email to paid accounts, audit evidence, compliance skill by @markokraemer in #10216
- fix(cli): accurate help routing — leading global flags, help topics, token usage, marketplace hints, policy help (KRTX-2710) by @agent-kortix in #10221
- refactor(tests): split and dedupe the tests-harness seams (KRTX-2666) by @agent-kortix in #10226
- fix(web): open the project shell's account menu on the signed-in identity, title the Settings dialog honestly (KRTX-2718) by @agent-kortix in #10227
- fix(web): delete the dead workspace palette row (KRTX-2587) by @agent-kortix in #10225
- fix(cli): webhook-secret 409 names the scope fix; add output signs the webhook (KRTX-2719) by @agent-kortix in #10220
- fix(web/mobile): accessible navigation targets on phone viewports (KRTX-2714) by @agent-kortix in #10231
- fix(api): lean participant roster and overlapped presence writes (KRTX-2727) by @agent-kortix in #10232
- refactor(mobile): dead surface, splits and dedupes in shared components (KRTX-2732) by @agent-kortix in #10234
- fix(connectors): sync summary agrees with the list, policy ls shows connector rules, All tab lists the project's own connectors (KRTX-2706) by @agent-kortix in #10233
- fix(api): stamp per-sandbox in-flight count on proxied request logs (KRTX-471) by @agent-kortix in #10228
- show refused auth email sends honestly and cool the link buttons down (KRTX-2704) by @agent-kortix in #10206
- feat(brand): kit.css — the UI primitives as portable k-* classes for HTML outside apps/web by @markokraemer in #10236
- feat(brand): kit.css field primitives — k-input, k-field, k-check by @markokraemer in #10239
- fix(tests): green the contract lanes for v0.14.2 by @markokraemer in #10237
- Promote dev 894bcb1 to staging by @github-actions[bot] in #10240
- feat(gateway): spend by source splits out workers (worker_sessions, worker_cost) by @markokraemer in #10241
- docs(license): free white-label license; one requirement: Platinum as exclusive compute by @markokraemer in #10238
- revert: feat(gateway): spend by source splits out workers (#10241) by @markokraemer in #10243
- fix(apps): App releases take Platinum when configured; Convex images move to ghcr.io/convex by @markokraemer in #10244
- fix(web): an opened App scrolls at once; its bar is Refresh, Open, Settings, Close by @markokraemer in #10245
- fix(admin): Open as admin acts as the project's account by @markokraemer in #10246
- fix: release-suite fallout for v0.14.2 (callback log injection, TOK-3, preview anchor) by @markokraemer in #10247
- Promote dev abff586 to staging by @github-actions[bot] in #10248
- fix(iam): act-as may run every agent of the account it acts as by @markokraemer in #10249
- fix(tests): admin-bypass retirement (#10246) and App bar (#10245) fallout by @markokraemer in #10251
- Promote dev c405b5c to staging by @github-actions[bot] in #10252
- Release v0.14.2 — Trigger run history, a bigger Free plan, and steadier sessions by @github-actions[bot] in #10242
Full Changelog: v0.14.1...v0.14.2