github kortix-ai/suna v0.13.45
v0.13.45 — Session labels, a redesigned approval flow, and long sessions that compact instead of failing.

latest releases: dev-latest, desktop-dev-latest
3 hours ago

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 stopping while 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 .md model 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

Don't miss a new suna release

NewReleases is sending notifications on new releases.