Session labels, a redesigned approval flow, and long sessions that compact instead of failing.
New
- Sessions carry writable labels and metadata across the API, SDK, CLI, MCP and web, and the session list filters by label.
- Redesigned approval, preview and install consent screens.
- A split "Connect your computer" dialog with one-click CLI copy.
- Recent session views stay open across project navigation; the command palette finds sessions by ID.
- The desktop app copies the current session URL from the Go menu and reports sanitized crash telemetry.
- Push notifications route by browser presence: a session open in a tab does not also push.
- Project-bound agents get their own cost rollups.
kortix apps access --viewer, and the CLI lints manifest wiring references.- The pi harness loads repository-native Pi configuration and supports config releases.
- Each agent's OpenCode plugins load in isolation.
- Sign in to OpenCode Go with your OpenCode account from a sign-in card, instead of pasting a key; each provider now has its own key name.
- Connector discovery is on by default for every project.
- Choose who can use a secret's value: only you, everyone, or chosen people and groups.
- Manifest v3: agents boot from
kortix.yaml.
Improved
- Managed models can write up to 65,536 output tokens; the ChatGPT lineup and provider defaults come from live data.
- A session whose sandbox lacks the model a turn asks for is repaired, for any provider.
- Audit reconciliation is incremental, which cuts database load.
- Session pages prefetch on intent, and a revived stream rehydrates the transcript.
- Long managed sessions compact instead of failing at the model's context window; new sessions boot with the current managed context limit.
- The session scope view reads the cached repository instead of waiting for a git fetch.
- Stop answers within the request deadline and reports
stoppingwhile the sandbox finishes shutting down. - Creating a project retries the first push while GitHub finishes creating the repository, instead of rolling back.
- Agent config from the base branch reaches a session on reload, even without config releases.
- A session restored from an archived sandbox gets up to 12 minutes to wake instead of failing at 8.
- Mobile queues prompts in the server inbox, and a turn that ended while the stream was down goes idle.
- New users land on the project selector.
- Neutral runtime names across the API, SDK and CLI (OpenCode decoupling).
Security
- Dependency updates close a critical Next.js vulnerability and eight high-severity ones (axios, undici, fast-uri, js-yaml, brace-expansion, @xmldom/xmldom, path-to-regexp, @grpc/grpc-js).
Fixed
- A malformed access request answers 400 instead of 500.
- Reminder trigger sessions open themselves, with atomic caps.
- App viewer tokens no longer fail with 401 after an access-policy save, and no longer appear in App logs.
- Account API keys are refused before session daemon access; the session token acts as the person who starts each turn.
- Slack replies to a bound session return to the thread they came from; Slack writes stay inside the calling project's channels and threads; an unavailable model stops before a Slack thread starts.
- Listing or sharing connectors, or disconnecting a computer, no longer fails with 500 on a database deadlock.
- An agent cannot be switched while its session is running; overlapping turns keep the running state.
- A failed secret save keeps the form's contents.
- Sessions on a sandbox owned by another API instance refuse prompts instead of racing it.
- Agent
.mdmodel references resolve through the Kortix provider in gateway mode.
What's Changed
- fix(sandbox): agent .md model refs resolve through the kortix provider in gateway mode by @Ino-Bagaric in #8358
- fix(connectors): keep Slack writes out of other projects' channels and threads by @Ino-Bagaric in #8359
- fix(api): refuse prompts and warm sessions for sandboxes another API instance owns by @sutharjay1 in #8354
- feat(mobile): render connect links as cards and keep their connected state by @sutharjay1 in #8370
- fix(api): lock tunnel rows when attaching computers on connector list (23503) by @markokraemer in #8383
- fix(connectors): one key-share lock in the shared computer attach; the share route stops answering 500 by @Ino-Bagaric in #8396
- feat: OpenCode decoupling W3 — kortixd speaks Kortix (neutral wire, one host relay, closed health block, runtime capabilities) by @DimitrijeGlibic in #8306
- fix(sdk): closing frames no longer count as session activity by @sutharjay1 in #8357
- fix(web): drive session loader restarts through the canonical hook (KRTX-456) by @agent-kortix in #8091
- fix(web): clarify queued chat delivery states (KRTX-494) by @agent-kortix in #8164
- fix(mobile): lighter inline code chip, surface-colored Kortix tile in the connector handshake by @sutharjay1 in #8414
- fix(sdk): keep first session stream connected (KRTX-432) by @agent-kortix in #8165
- feat(usage): grant project-bound agents their own cost rollups (KRTX-204) by @agent-kortix in #8167
- feat(sessions): route push by browser presence (KRTX-588) by @agent-kortix in #8227
- fix(web): find sessions by ID in command palette (KRTX-794) by @agent-kortix in #8268
- fix(session): prevent switching agents in running sessions (KRTX-805) by @agent-kortix in #8288
- feat(desktop): copy the current session URL from the Go menu (KRTX-801) by @agent-kortix in #8307
- feat(web): add browser dictation to chat composer (KRTX-830) by @agent-kortix in #8325
- feat(web): retain recent session views across project navigation (KRTX-838) by @agent-kortix in #8335
- refactor(sdk): add pure workspace search core (KRTX-391) by @agent-kortix in #8344
- feat(tests): add Platinum workload benchmark (KRTX-465) by @agent-kortix in #8360
- fix(api): reject unregistered runtime agents (KRTX-175) by @agent-kortix in #8361
- fix(sandbox): warn on harness MCP declarations (KRTX-182) by @agent-kortix in #8362
- docs(daemon): guide config change requests through source checkout (KRTX-173) by @agent-kortix in #8363
- test(api): pin source checkout change-request round-trip (KRTX-170) by @agent-kortix in #8365
- feat(cli): lint manifest wiring references (KRTX-174) by @agent-kortix in #8367
- feat(pi): load repository-native Pi configuration (KRTX-166) by @agent-kortix in #8368
- fix(api): detect speculative warm sessions from actual marker (KRTX-177) by @agent-kortix in #8369
- perf(api): measure prompt queue delivery latency (KRTX-179) by @agent-kortix in #8371
- refactor(web): register session tools at app entry (KRTX-485) by @agent-kortix in #8373
- feat(sdk): retain catalog free flag in flattened models (KRTX-453) by @agent-kortix in #8375
- refactor(sdk): split IAM client by concern (KRTX-411) by @agent-kortix in #8376
- refactor(mobile): register tools at mount points (KRTX-737) by @agent-kortix in #8377
- refactor(mobile): extract AutoContinue from composer (KRTX-766) by @agent-kortix in #8378
- refactor(mobile): extract drawer row clusters (KRTX-767) by @agent-kortix in #8381
- refactor(mobile): split mention search and decisions (KRTX-776) by @agent-kortix in #8384
- refactor(web): extract session raw-message explorer (KRTX-730) by @agent-kortix in #8385
- docs(cli): connect public docs to live system skills (KRTX-105) by @agent-kortix in #8387
- docs(worker): evaluate durable object session runtime (KRTX-183) by @agent-kortix in #8388
- refactor(sdk): flatten findSessionAttachments into per-part extractors (KRTX-416) by @agent-kortix in #8389
- refactor(sdk): dedupe backend-base URL normalizers onto platformApiBase (KRTX-414) by @agent-kortix in #8390
- fix(session): preserve running state across overlapping turns (KRTX-260) by @agent-kortix in #8391
- refactor(mobile): split tool renderers and share disclosure state (KRTX-752) by @agent-kortix in #8392
- refactor(mobile): delete dead prop modes from CompactionMarker and TurnActions (KRTX-751) by @agent-kortix in #8393
- refactor(sdk): dedupe the required-connector canonicalizer into one shared module (KRTX-412) by @agent-kortix in #8394
- test(sdk): characterize the retired endpoint shims before removal (KRTX-418) by @agent-kortix in #8395
- refactor(sdk): collapse getAccountState and getAccountStateMinimal onto one reader (KRTX-415) by @agent-kortix in #8399
- refactor(mobile): delete the redundant morph_edit tool alias (KRTX-740) by @agent-kortix in #8400
- test(mobile): pin ToolPartRenderer dispatch with render tests (KRTX-734) by @agent-kortix in #8401
- refactor(mobile): dedupe tab history activation in the tab store (KRTX-800) by @agent-kortix in #8402
- fix(web): gate project creation on effective permission (KRTX-223) by @agent-kortix in #8404
- fix(web): align the segmented tab chip with its tab on every edge by @sutharjay1 in #8419
- fix(mobile): a turn that ended while the stream was down goes idle by @sutharjay1 in #8415
- fix(web): show OpenCode Go branding in model selector (KRTX-781) by @agent-kortix in #8238
- feat(desktop): capture sanitized crash telemetry (KRTX-829) by @agent-kortix in #8326
- docs(network): define egress policy gateway design (KRTX-259) by @agent-kortix in #8364
- fix(db): repair main after f2cd037 — regenerate session_presence_leases after the migrations it predated by @Ino-Bagaric in #8428
- refactor(mobile): import the sdk detectLocalhostUrls in sandbox previews (KRTX-772) by @agent-kortix in #8407
- refactor(mobile): one shared close-then slot replaces four sheet copies (KRTX-770) by @agent-kortix in #8408
- refactor(mobile): delete the dead activity-step inline row (KRTX-738) by @agent-kortix in #8409
- refactor(mobile): move show file-type icons to the tool-icons leaf, delete dead exports (KRTX-743) by @agent-kortix in #8410
- refactor(api): slim the secret-relay route sleeve (KRTX-290) by @agent-kortix in #8411
- test(session): pin host vs SDK flattenModels drift with characterization tests (KRTX-452) by @agent-kortix in #8412
- refactor(mobile): extract the shared composer status pill (KRTX-773) by @agent-kortix in #8413
- refactor(web): delete unused presentation renderer helpers (KRTX-596) by @agent-kortix in #8416
- refactor(web): reuse preview policy for file classification (KRTX-401) by @agent-kortix in #8418
- fix(connectors): classify invalid Linear GraphQL as caller errors (KRTX-678) by @agent-kortix in #8420
- fix(sandbox): repair main after b5b0800 — resolve zod in the standalone daemon build; ignore synthetic test tokens in gitleaks by @Ino-Bagaric in #8432
- test(pools): pin warm-session pool semantics before the SDK core move (KRTX-700) by @agent-kortix in #8425
- fix(slack): stop unavailable model before starting a thread (KRTX-433) by @agent-kortix in #8417
- chore(release): VERSION → 0.13.45 [skip ci] by @github-actions[bot] in #8440
- chore(release): staging VERSION → 0.13.45 [skip ci] by @github-actions[bot] in #8441
- refactor(web): extract file content state from renderer (KRTX-399) by @agent-kortix in #8422
- feat(web): redesign the approval, preview and install consent screens by @sutharjay1 in #8421
- fix(mobile): move queued prompts to server inbox (KRTX-262) by @agent-kortix in #8372
- refactor(web): dedupe the marketing code panels into one shared module (KRTX-590) by @agent-kortix in #8423
- Hotfix to staging (v0.13.45): agent .md model refs resolve through the kortix provider by @Ino-Bagaric in #8438
- refactor(api): extract project access read model (KRTX-293) by @agent-kortix in #8424
- refactor(api): reuse the GitHub installation GET handler for both routes (KRTX-863) by @agent-kortix in #8427
- test(mobile): pin SessionPage scroll, queue and composer behavior (KRTX-757) by @agent-kortix in #8430
- refactor(api): move the preview response and header helpers into preview-response.ts (KRTX-328) by @agent-kortix in #8431
- test(web): characterize session tool dispatch and child modal (KRTX-484) by @agent-kortix in #8433
- fix(api): repair main after 1b179a7 (KRTX-204) by @agent-kortix in #8434
- revert: fix(api): reject unregistered runtime agents (KRTX-175) by @agent-kortix in #8435
- fix(api): repair main after e6325c2 (KRTX-805) by @agent-kortix in #8436
- fix(api): repair main after f2cd037 (KRTX-588) by @agent-kortix in #8437
- fix(web): new users land on the project selector, never forced into /new by @markokraemer in #8461
- refactor(mobile): extract useProjectStack and useProjectHomeSend from ProjectScreen (KRTX-764) by @agent-kortix in #8439
- fix(connectors): support label-only PATCH for connections (KRTX-163) by @agent-kortix in #8443
- fix(api): reject out-of-range transcript timestamps (KRTX-461) by @agent-kortix in #8444
- chore(web): measure ECS latency before canonical cutover (KRTX-184) by @agent-kortix in #8445
- fix(api): gate US sandbox placement on colocated data plane (KRTX-178) by @agent-kortix in #8446
- feat(web): re-cut the README showcase from the September captures (KRTX-831) by @agent-kortix in #8447
- refactor(billing): share customer compute rate card (KRTX-195) by @agent-kortix in #8450
- feat(config): isolate OpenCode plugin entrypoints per agent (KRTX-168) by @agent-kortix in #8452
- refactor(api): split access.ts into quota, visibility, identity and access modules (KRTX-301) by @agent-kortix in #8453
- fix(workspace): default declared agents to restricted workspace (KRTX-165) by @agent-kortix in #8454
- refactor(api): split shared.ts session-open orchestration into focused modules (KRTX-274) by @agent-kortix in #8456
- feat(sessions): writable labels + metadata across API, SDK, CLI, MCP and web (KRTX-783) by @agent-kortix in #8249
- fix(sessions): a label-filtered flat list returns only labeled sessions (KRTX-783) by @markokraemer in #8469
- refactor(web): delete write-only SSH dialog store and its orphaned palette handler (KRTX-723) by @agent-kortix in #8448
- docs(learnings): a list filter must gate rows appended after the query by @markokraemer in #8472
- fix(api): repair main after ea78f4f (KRTX-204) by @agent-kortix in #8457
- fix(sdk): repair main after 42bcc3c (KRTX-452) by @agent-kortix in #8458
- fix(api): repair main after c8cfb17 (KRTX-805) by @agent-kortix in #8459
- fix(slack): repair main after 4ce44de (KRTX-433) by @agent-kortix in #8460
- refactor(api): split sandbox-turn-lifecycle, cut over the legacy activeTurn arm (KRTX-255) by @agent-kortix in #8462
- fix(api): log transcript capture SQLSTATE without query parameters (KRTX-747) by @agent-kortix in #8463
- fix(api): expose slow resource-grant read stages (KRTX-821) by @agent-kortix in #8464
- refactor(web): extract composer render components (KRTX-374) by @agent-kortix in #8465
- fix(sdk): identify failed project secret POST transport (KRTX-466) by @agent-kortix in #8467
- chore(secrets): per-env OpenCode Zen key in api env profiles by @markokraemer in #8479
- fix(api): the session token acts as the person who starts each turn by @DimitrijeGlibic in #8478
- feat: OpenCode decoupling W4 — neutral API and SDK names (readiness, contract fields, SDK aliases, DB fields in code, CLI and copy) by @DimitrijeGlibic in #8466
- fix(sessions): reload brings the base branch agent config into a session without config releases by @Ino-Bagaric in #8482
- fix(db): repair main after 699dadc — project_usage_read sorts after the migrations already applied by @Ino-Bagaric in #8483
- fix(api): classify Platinum reaper write throttle as transient (KRTX-345) by @agent-kortix in #8470
- fix(connectors): repair main after ada1948 (KRTX-163) by @agent-kortix in #8471
- refactor(api): centralize session route binding sleeves (KRTX-277) by @agent-kortix in #8473
- fix(api): deny account keys before session daemon access (KRTX-426) by @agent-kortix in #8474
- fix(api): retain implicit audit on failed explicit write (KRTX-104) by @agent-kortix in #8476
- refactor(mobile): reuse SDK session health probe (KRTX-771) by @agent-kortix in #8480
- fix(cli): repair split-manifest wiring fixtures (KRTX-174) by @agent-kortix in #8481
- fix(apps): App viewer tokens stop 401ing after an access-policy save, and stop leaking into App logs by @markokraemer in #8486
- fix(sessions): the reload's config-dir sync judges only the files base changed by @Ino-Bagaric in #8487
- feat(cli): kortix apps access --viewer; agent skills teach acting as the viewer by @markokraemer in #8488
- docs(learnings): regenerate the index (duplicate line from a merge) by @markokraemer in #8489
- chore(tools): configure per-agent built-in tool availability (KRTX-169) by @agent-kortix in #8366
- refactor(mobile): remove legacy expanded tool bodies (KRTX-735) by @agent-kortix in #8379
- refactor(mobile): share connector handoff shell (KRTX-769) by @agent-kortix in #8380
- refactor(mobile): extract session delete and compact flows (KRTX-774) by @agent-kortix in #8382
- refactor(mobile): split user message parser and share card shell (KRTX-739) by @agent-kortix in #8386
- refactor(kortixd): split runtime asset swap reporting (KRTX-530) by @agent-kortix in #8397
- refactor(web): type session context providers and parts (KRTX-731) by @agent-kortix in #8403
- refactor(mobile): delete the dead chain-of-thought reporting machinery (KRTX-775) by @agent-kortix in #8405
- fix(web): preserve secret form after failed save (KRTX-462) by @agent-kortix in #8484
- feat(web): split "Connect your computer" modal with beams art, one-click CLI copy by @sutharjay1 in #8491
- fix(gateway): long managed sessions compact instead of failing at the context window by @Ino-Bagaric in #8490
- fix(infra): redirect dev web HTTP to HTTPS (KRTX-437) by @agent-kortix in #8494
- refactor(mobile): consolidate tool row ambient context (KRTX-736) by @agent-kortix in #8495
- chore(api): measure slow runtime chunk reads (KRTX-797) by @agent-kortix in #8496
- fix(tests): green main core lane — stale flows, specs, suites and workflow secrets by @markokraemer in #8497
- fix(api): green main packages lane for kortix-api unit suite by @markokraemer in #8500
- fix: green main — kortixd runtime-assets W3 regression, specs 26 and 27 by @markokraemer in #8499
- fix(api): retry managed repo seed push with backoff while the new repo is not reachable over git by @markokraemer in #8501
- fix(api): answer Stop inside the request deadline with a truthful 'stopping' state by @markokraemer in #8502
- feat(pi): config releases on the pi harness by @DimitrijeGlibic in #8451
- fix(sandbox): new sessions boot OpenCode with the current managed context limit by @Ino-Bagaric in #8505
- refactor(web): move turn rendering out of session-chat.tsx (KRTX-355) by @agent-kortix in #8492
- fix(infra): drop the dev web HTTP listener — Drata 8008 blocks staging (reverts #8494) by @markokraemer in #8506
- fix(tests): stat the CLI through a handle in runtime-assets test (CodeQL js/file-system-race) by @markokraemer in #8507
- Promote main 79159fb to staging (v0.13.45) by @markokraemer in #8503
- fix(mobile): green the mobile test lane (queue, health, tool registration, light tokens) by @markokraemer in #8508
- fix(deps): clear Trivy HIGH/CRITICAL CVEs blocking staging promotion by @markokraemer in #8509
- feat(manifest): declare non-enforcing agent egress policy (KRTX-878) by @agent-kortix in #8510
- Promote main 9d8b824 to staging (v0.13.45) by @markokraemer in #8512
- refactor(web): extract warm-or-create session job (KRTX-704) by @agent-kortix in #8504
- chore(secrets): drop AWS_IAM_USER_ARN for deleted dotenv IAM users by @markokraemer in #8514
- fix(web): ignore anonymous auth refresh noise (KRTX-876) by @agent-kortix in #8485
- fix(web): green the web unit suite (32 failures) by @markokraemer in #8515
- fix(api): attribute session config deadline stages (KRTX-818) by @agent-kortix in #8511
- fix(api): time slow secrets reads by dependency stage (KRTX-819) by @agent-kortix in #8516
- fix(api): attribute sandbox proxy failures in logs (KRTX-811) by @agent-kortix in #8517
- fix(api): allow slow archived restores to finish (KRTX-440) by @agent-kortix in #8518
- feat(connectors): enable direct discovery by default (KRTX-885) by @agent-kortix in #8519
- feat(llm): Sign in with OpenCode for OpenCode Go; one key name per provider by @markokraemer in #8520
- fix(tunnel): unpair locks connector rows before the machine row (40P01) by @markokraemer in #8524
- fix(web): golden case for the anonymous auth refresh noise rule (#8485) by @markokraemer in #8525
- fix(slack): route bound session replies to originating thread (KRTX-886) by @agent-kortix in #8522
- fix(api): serve GET session scope from the warm git mirror by @markokraemer in #8527
- fix(web): keep shared session avatars legible (KRTX-888) by @agent-kortix in #8526
- Promote main ad46bf4 to staging (v0.13.45) by @markokraemer in #8523
- fix(web): align session sidebar pagination control (KRTX-890) by @agent-kortix in #8528
- revert(web): remove composer dictation (KRTX-830) by @markokraemer in #8530
- fix(web): show saved profile name in account menu (KRTX-893) by @agent-kortix in #8529
- revert(web): remove composer dictation (KRTX-830) → staging by @markokraemer in #8531
- Promote main bf78fe8 to staging (v0.13.45) by @markokraemer in #8532
- feat(secrets): who can use a secret value — only you, everyone, or people and groups by @markokraemer in #8533
- fix(gateway): send OpenCode Zen a strict OpenAI chat body by @markokraemer in #8534
- feat(web): OpenCode Go sign-in card like ChatGPT's by @markokraemer in #8535
- fix(reminders): trigger sessions open themselves, atomic caps, 366d horizon by @markokraemer in #8536
- docs(learnings): apply merged dev Terraform deletions by hand the same hour by @markokraemer in #8537
- fix(api): request-access answers 400, not 500, for a body it could not parse by @markokraemer in #8538
- fix(secrets): a pre-on_behalf_of session token resolves by the mint rule by @markokraemer in #8539
- fix(web): prefetch session destinations on intent (KRTX-779) by @agent-kortix in #8233
- fix(sdk): rehydrate transcript after parked stream revival (KRTX-832) by @agent-kortix in #8327
- feat(config): boot v3 agents from kortix.yaml (KRTX-167) by @agent-kortix in #8406
- fix(models): serve the ChatGPT lineup and provider defaults from live data by @markokraemer in #8541
- fix(api): OpenCode sign-in polls at the provider's interval by @markokraemer in #8543
- fix(models): let managed models write 65,536 output tokens by @markokraemer in #8542
- revert: declared agents keep the project checkout by default (#8454) by @markokraemer in #8548
- perf(audit): incremental reconciliation with a per-account high-water mark by @markokraemer in #8547
- fix(api): repair main after 510b569 (KRTX-167) by @agent-kortix in #8545
- fix(tests): unused @ts-expect-error on AgentBlockV2.mode after #8406 (TS2578) by @markokraemer in #8552
- refactor(web): extract sidebar menu primitives (KRTX-651) by @agent-kortix in #8155
- fix(sessions): repair a box that lacks the model a turn asks for, any provider by @markokraemer in #8554
- fix(tests): far-future expiry in the connector link info fixture by @markokraemer in #8555
- Promote main a00772e to staging (v0.13.45) by @markokraemer in #8549
- v0.13.45 — Session labels, a redesigned approval flow, and long sessions that compact instead of failing. by @github-actions[bot] in #8455
Full Changelog: v0.13.44...v0.13.45