New
- Fork a conversation. A session's conversation offers a Fork action, so you can branch from any point.
- Cancel a subscription from the billing pane.
- One permission per topic. The broad
project.customize.*permissions are replaced byproject.settings.write,project.sandbox.write, andproject.model.read/.write. Agent changes useproject.agent.write. Every role keeps exactly what it had. Project members can now open Agents and Triggers read-only.
Improved
- Sign-in: an existing account opens on the password form, and the email link is one click away. After you enroll in two-factor authentication, sign-in asks for the code. A magic link still completes when its verifier cookie is lost. A failed server sign-out is reported on the sign-in page.
- Security settings list the devices that are signed in.
- Account deletion: "Delete immediately" deletes the account, and the dialog reads as a choice.
- Creating a project lands you on the project page.
- The session key panel says whose keys a session reaches, and why a key is not available.
- Connectors: Computers appear under Connected only after a machine is paired, and connector notes display the same way on every surface.
- The audit log: reconciliation catches up on accounts with very large histories.
- The API returns 400 for a malformed account id, and a marketplace install fails clearly when no model can serve its import.
- Database health: more RLS policies evaluate the signed-in user once per query, and legacy tables gain primary keys and missing indexes.
Fixed
- The CLI:
sessions logandchatshow the real stop or failure reason.- Trigger schedule updates keep their time zone.
- Policy conditions keep their operators.
--jsonoutput and session listings stay stable.projects rm --purgereports "Purged".- Project-scoped commands reach projects that have no session.
- The empty models state points to providers.
- Mobile:
- Question answers can be retried until they are accepted.
- Mermaid diagrams render.
- Teams mentions are stripped from session titles.
- Diff stats keep literal escapes.
- App previews refresh their credentials when opened.
- Desktop: "Allow all" adds Kortix to the macOS Screen Recording list.
- A warm session that has not been prompted reads as starting, not running.
- The sandbox agent's dependencies are patched against two
undicivulnerabilities. - Customize tabs appear immediately, and only the page body waits for permissions.
What's Changed
- fix(customize): paint the tab bar on the first frame; gate only the page body by @markokraemer in #9042
- fix(api): list stopped sessions the runtime row does not confirm (KRTX-1452) by @agent-kortix in #9020
- fix(cli): preserve trigger timezone on schedule updates (KRTX-1338) by @agent-kortix in #8869
- fix(audit): bound each reconciliation pass by source rows, so heavy accounts converge by @markokraemer in #9049
- refactor(iam): one permission per topic — retire project.customize.* by @markokraemer in #9050
- fix(mobile): preserve literal newline escapes in diff stats (KRTX-1265) by @agent-kortix in #8860
- perf(db): omit unused sandbox export ordering (KRTX-1074) by @agent-kortix in #8867
- test: add the e2e pilot and testing assessment by @markokraemer in #9052
- test(flows): APP-7 accepts a released image when a deployed target finishes the build first by @markokraemer in #9056
- chore(release): VERSION → 0.13.50 [skip ci] by @github-actions[bot] in #9060
- chore(release): staging VERSION → 0.13.50 [skip ci] by @github-actions[bot] in #9061
- refactor(sdk): move the mobile sandbox-image runtime into @kortix/sdk (KRTX-1065) by @agent-kortix in #8779
- fix(api): bound the session-config mirror wait and prove freshness per read (KRTX-818) by @agent-kortix in #9048
- feat: Kortix is the open-source AI Operating System — rename everywhere + AI OS marketing site by @markokraemer in #9068
- fix(mobile): strip Teams mentions from session titles (KRTX-1266) by @agent-kortix in #8863
- perf(db): cache legacy threads RLS identity (KRTX-1148) by @agent-kortix in #8879
- perf(db): index the parked-runtime verification sweep on kortix.session_sandboxes (KRTX-1307) by @agent-kortix in #8995
- fix(web): render the signed-in device list on /settings/security (KRTX-1392) by @agent-kortix in #9018
- test(api): pin the forwarded-prompt sweep to its partial index (KRTX-1303) by @agent-kortix in #9010
- fix(mobile): render Mermaid show items as diagrams (KRTX-1267) by @agent-kortix in #8866
- feat(billing): add a cancel subscription control to the billing pane (KRTX-1316) by @agent-kortix in #9043
- test(lanes): make the packages test lane hermetic on a platform sandbox (KRTX-1409) by @agent-kortix in #9011
- fix(api): report not_open when the strand re-queue's guarded update matches nothing (KRTX-1469) by @agent-kortix in #9022
- fix(tests): pin one gateway internal token across local stack halves (KRTX-1433) by @agent-kortix in #9025
- fix(mobile): refresh preview credentials on opening (KRTX-1247) by @agent-kortix in #8857
- fix(connectors): list Computers under Connected only once a machine is paired (KRTX-1492) by @agent-kortix in #9073
- perf(db): index chat_pending_auth_messages.project_id for its projects FK (KRTX-1097) by @agent-kortix in #9055
- fix(migration): give the smoke storage-object query an explicit psql separator (KRTX-1457) by @agent-kortix in #9015
- fix(cli): report Purged when projects rm --purge hard-deletes (KRTX-1487) by @agent-kortix in #9092
- fix(tests): catalog the real steps of every harnessFlow id and its -pi twin (KRTX-1434) by @agent-kortix in #9000
- refactor(dev): extract warm_frontend_routes, fix empty-array crash on bash 3.2 (KRTX-1456) by @agent-kortix in #9014
- fix(api): treat an integrations.sh surface 404 as an empty record (KRTX-1442) by @agent-kortix in #9004
- fix(agent-tunnel): resume the tunnel lease through the drift-safe service resume (KRTX-1389) by @agent-kortix in #9007
- fix(cli): reject explicit roles for everyone grants (KRTX-1337) by @agent-kortix in #8871
- fix(cli): surface the real stop reason in sessions log and chat (KRTX-1257) by @agent-kortix in #8894
- fix(web): the Delete account dialog reads as a choice, not a done state (KRTX-1403) by @agent-kortix in #9076
- perf(db): clear the auth_rls_initplan advisor finding on public.webhook_events (KRTX-1151) by @agent-kortix in #9083
- fix(db): add primary key to legacy workflow backup (KRTX-1170) by @agent-kortix in #8886
- refactor(cli): compress MCP execution, root dispatch and picker lifecycle (KRTX-1341) by @agent-kortix in #8915
- refactor(cli): split the CLI mega-modules and delete their dead duplicated surface (KRTX-1334) by @agent-kortix in #8982
- fix(api): publish the real value sets for merged-literal OpenAPI enums (KRTX-1490) by @agent-kortix in #9032
- fix(api): delete the account for real on delete-immediately (KRTX-1402) by @agent-kortix in #9033
- refactor(api,sdk): one contract — typed handlers, true spec, SDK drift test, daemon callbacks (R3) by @DimitrijeGlibic in #8954
- chore(deps): bump pypdf from 6.16.1 to 6.19.0 in /packages/starter/templates/general-knowledge-worker/skills/presentations/scripts by @dependabot[bot] in #8644
- chore(deps): bump ip-address from 10.7.0 to 10.7.2 in /.deepsec by @dependabot[bot] in #8513
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #7991
- chore(deps): bump go.opentelemetry.io/otel/sdk/log from 0.19.0 to 0.21.0 in /apps/kortix-app-runtime/caddy by @dependabot[bot] in #8299
- fix(web): keep the dev gate off the auth callback routes (KRTX-1467) by @agent-kortix in #9062
- fix(api): bound the sandbox env memo on the skip path (KRTX-1501) by @agent-kortix in #9084
- fix(api): refuse foreign credential shapes in validateSecretKey with a precise error, not a doomed probe (KRTX-1414) by @agent-kortix in #9097
- fix(cli): preserve session listing across flag spellings (KRTX-1323) by @agent-kortix in #8875
- fix(cli): preserve JSON output for session reload (KRTX-1326) by @agent-kortix in #8877
- fix(web): give the account-hub audit tab a page heading (KRTX-1423) by @agent-kortix in #9115
- fix(web): default existing-account sign-in to the password form (KRTX-1346) by @agent-kortix in #9103
- fix(cli): let project-scoped commands reach a non-session project (KRTX-1437) by @agent-kortix in #9110
- fix(dev): make the tunnel skip paths startable (KRTX-1455) by @agent-kortix in #9003
- fix(web): drop the timed-out extension window-message noise (KRTX-1459) by @agent-kortix in #9112
- fix(sessions): the key panel and its refusal say whose keys a session reaches, and why not by @Ino-Bagaric in #8192
- fix(cli): dispatch channels after parsing flags (KRTX-1335) by @agent-kortix in #8873
- fix(cli): document the built-in dev host as https in hosts --help (KRTX-1262) by @agent-kortix in #9109
- fix(cli): make the empty models state point at providers, not an empty ls (KRTX-1538) by @agent-kortix in #9118
- test(cli): pin the sandbox env-file path for projects use --host (KRTX-1429) by @agent-kortix in #9116
- fix(api): return 400 for a malformed account_id on account-scoped routes (KRTX-1421) by @agent-kortix in #9114
- fix(api): report an unprompted warm session shell as starting, not running (KRTX-1466) by @agent-kortix in #9100
- test(cli): pin --host token routing under the ambient session principal (KRTX-1404) by @agent-kortix in #9077
- fix(cli): preserve operators in policy condition values (KRTX-1324) by @agent-kortix in #8874
- fix(cli): show the real failure reason for a failed turn in sessions log and chat (KRTX-1463) by @agent-kortix in #9111
- fix(api): refuse a marketplace install whose import turn has no servable model (KRTX-1540) by @agent-kortix in #9094
- fix(shared): parse the connector notes block on every surface (KRTX-1383) by @agent-kortix in #9081
- fix(tests): keep the packages lane green on loaded worker sandboxes (KRTX-1479) by @agent-kortix in #9074
- fix(web): reach the too-long name message for typed input on /new (KRTX-1424) by @agent-kortix in #9067
- fix(worker): retry worker RPC only on transport failures, never on error text (KRTX-1388) by @agent-kortix in #9030
- fix(mobile): keep question answers retryable until accepted (KRTX-1246) by @agent-kortix in #8870
- fix(web): surface an unconfirmed server sign-out on /auth (KRTX-1393) by @agent-kortix in #9078
- feat(web): offer a Fork action on session conversations (KRTX-1474) by @agent-kortix in #9041
- fix(web): land on the project page after Create project (KRTX-1419) by @agent-kortix in #9028
- fix(web): a fresh magic-link sign-in completes its PKCE exchange after a lost verifier cookie (KRTX-1412) by @agent-kortix in #9034
- fix(web): enforce the TOTP challenge after enrollment (KRTX-1386) by @agent-kortix in #9029
- chore(deps): bump hono from 4.13.5 to 4.13.7 by @dependabot[bot] in #8563
- refactor(api): dedupe agent governance, git auth and compute accrual copies (KRTX-1498) by @agent-kortix in #9085
- refactor(web): simplify IAM contracts, capability model and audit filters (KRTX-1056) by @agent-kortix in #8919
- refactor(web,sdk): delete dead component layers and centralize connector setup (KRTX-1012) by @agent-kortix in #8829
- refactor(whitelabel-demo): dedupe shared paths, split fat components (KRTX-1418) by @agent-kortix in #9091
- fix(db): re-date the agent_workflows_backup migrations after dev's applied set by @markokraemer in #9125
- fix: v0.13.50 gate — sandbox-agent lockfile, undici 8.10.2, documented sudo in the sandbox image by @markokraemer in #9127
- fix(deps): sync the daemon's standalone bun.lock with the hono bump by @markokraemer in #9128
- perf(db): add a primary key to basejump.config (KRTX-1167) by @agent-kortix in #9089
- fix(web): mark the AI OS hero art decorative; journey 01 takes #9103's explicit link choice by @markokraemer in #9129
- Revert otel/sdk/log 0.21 bump in the Caddy runtime (breaks the API image build) by @markokraemer in #9130
- fix(db): consolidate legacy deletion request policies (KRTX-1155) by @agent-kortix in #8884
- perf(db): add a primary key to agents_backup_cleanup_20250729 (KRTX-1171) by @agent-kortix in #9106
- fix(db): consolidate public.referrals RLS policies to one permissive policy per action (KRTX-1165) by @agent-kortix in #9107
- fix: v0.13.50 gate — CLI export, linear Teams mention strip, starter snapshot, SDK timer containment by @markokraemer in #9132
- fix(security): email only Medium+ GuardDuty findings by @markokraemer in #9133
- fix(security): keep GuardDuty detectors at SIX_HOURS publishing by @markokraemer in #9135
- docs(learnings): change Terraform-owned AWS config only in Terraform by @markokraemer in #9136
- revert: AI OS rename + marketing site (#9068), back to the prod site by @markokraemer in #9142
- fix(security): document Trivy exceptions for sandbox sudo and two unfixed CVEs by @markokraemer in #9145
- fix(desktop): Allow all adds Kortix to the Screen Recording list by @markokraemer in #9147
- fix(security): refuse crash dumps and files over 20 MB in pre-commit and pre-push by @markokraemer in #9149
- test(sdk): end each fake-timer act() scope on real timers in the poll-deadline test by @markokraemer in #9148
- Promote main ecd96ff to staging by @markokraemer in #9150
- Release v0.13.50 — Fork a conversation, cancel from billing, and one permission per topic by @github-actions[bot] in #9153
Full Changelog: v0.13.49...v0.13.50