github kortix-ai/suna v0.13.41
v0.13.41 — Kortix as an MCP server

latest release: dev-latest
9 hours ago

Kortix as an MCP server, Codex CLI support, reminders, approvals you can answer, and sessions that repair themselves instead of stopping.

New

  • One account-level MCP server at /v1/mcp, bound to your token like the CLI. It exposes sandbox shell and files, skills, and the session list; long commands run as jobs, and connected apps can be listed and revoked. kortix mcp runs the whole CLI as an MCP server, and a Connect MCP menu sets it up.
  • The LLM gateway accepts the OpenAI Responses API, so the Codex CLI works against Kortix.
  • Reminders: schedule prompts into a session, with a Reminders view and a per-project flag.
  • Approvals: the agent describes each gated call, the approver can reply, and approval cards reach Slack and Teams.
  • New projects get a three-step onboarding and a first chat.
  • GitHub projects can be created under personal GitHub accounts, and their sessions start.
  • Sandbox templates can run Docker inside the sandbox.
  • Agents can store secrets they already have, and long setup links load.
  • ChatGPT accounts show when they need reconnection, and a failed ChatGPT turn offers Reconnect or Connect ChatGPT.
  • Saved session history is 1:1 with the live session and on by default, including sub-agents.
  • The mobile app signs in to self-hosted Kortix instances.
  • Slack: a session's Slack thread is bound automatically so replies come back to it, and the agent can remove its own reactions.
  • The CLI saves large connector results as JSON (--out, and MCP results above 16 KB).

Improved

  • A project's fallback model chain runs when a model is unavailable, when a ChatGPT plan or BYOK model fails, and when every pooled account is paused or needs reconnection.
  • The LLM gateway bounds requests per credential.
  • DeepSeek and GLM accept images and a thinking control; model hosting is named accurately.
  • Session connection and run status are accurate across web, mobile and the SDK, without flapping.
  • A session is never parked while its runtime repair is still running, and its model converges when it opens.
  • Sessions move off retired managed models automatically, and the error names the cause.
  • Sharing a session switches it to the project's keys instead of stranding it.
  • Sandbox images carry every runtime asset, and updates move only the chunks that changed.
  • Audit events are ingested and reconciled without blocking requests or scanning whole tables.
  • Sandbox health polls and connector listings answer faster.

Fixed

  • Every prompt file reaches the computer.
  • Every agent picker lists the project's own agent roster.
  • Connector toolkit search returns the same page shape as the unsearched list.
  • A dead credential gets a typed 401, so retrying clients stop.
  • The Firecrawl proxy rejects private and metadata URLs.
  • Values can be copied out of the XLSX and CSV viewers.
  • A pinned runtime that still serves no longer refuses its session.
  • Old saved tool calls show what they kept; an empty session opens on its composer.
  • A stopped session wakes without needing a message.
  • GET /kortix/part in the sandbox requires the same credential as its sibling routes.
  • Teams: the bot token is sent only to stored service URLs, and the sign-in link appears only in one-to-one chats.

What's Changed

  • feat(slack): auto-bind a session's Slack thread so replies come back to it by @markokraemer in #7869
  • chore: repo-wide dead code, asset, and dependency cleanup by @markokraemer in #7867
  • docs(repo): self-merge to main when verified; release gates keep explicit approval by @markokraemer in #7873
  • chore: repo cleanup follow-ups — stale paths, orphan tests, executor-sdk by @markokraemer in #7876
  • feat(cli,web): kortix mcp — the whole CLI as an MCP server + Connect MCP menu by @markokraemer in #7875
  • feat(slack): agent can remove its own reactions — slack unreact by @markokraemer in #7878
  • feat(contributing): script a preview demo account into managed-model access by @markokraemer in #7879
  • chore(release): VERSION → 0.13.41 [skip ci] by @github-actions[bot] in #7883
  • fix(sandbox): gate GET /kortix/part with the same credential check as its siblings by @markokraemer in #7865
  • chore(release): staging VERSION → 0.13.41 [skip ci] by @github-actions[bot] in #7884
  • feat(llm-gateway): OpenAI Responses API ingress — Codex CLI support by @markokraemer in #7880
  • fix(reaper): close row↔VM divergence in every direction, for every box by @markokraemer in #7861
  • feat(mcp): hosted MCP server with OAuth sign-in, behind the per-project mcp flag by @markokraemer in #7881
  • fix(contributing): preview-subscribe refuses live Stripe keys by @markokraemer in #7885
  • ci: stop a superseded preview suite; two browser workers per shard by @markokraemer in #7886
  • fix(worktree): skip the Apps runtime build when go is not installed by @markokraemer in #7898
  • feat(cli): save large connector results as JSON (call --out, MCP spill above 16 KB) by @markokraemer in #7887
  • fix(preview): admit suites on pool and GitHub capacity, stop idle hosts, report only this run by @markokraemer in #7909
  • fix(sandbox): bake every runtime asset into the image, and move only the chunks that changed by @markokraemer in #7877
  • docs(learnings): bound agent tool output that grows with upstream data by @markokraemer in #7917
  • fix(preview): pull immutable images only when missing, wait out Docker Hub limits; GitHub admission at 100/h by @markokraemer in #7931
  • ci(preview): the label deploys and never tests; a superseded run never deploys by @markokraemer in #7892
  • fix(preview): stop preview hosts after 1 h idle, not 3 h by @markokraemer in #7951
  • fix(runtime-convergence): admission refusal replaces the box, never parks it by @markokraemer in #7905
  • fix(preview): create preview hosts with 8 GB, not 16 GB by @markokraemer in #7955
  • fix(sessions): never park a session while its repair is still running by @markokraemer in #7954
  • fix(llm-gateway): re-point sessions off retired managed models, name the cause by @markokraemer in #7953
  • fix(sessions): sharing a session switches it to the project's keys, never strands it by @Ino-Bagaric in #7657
  • feat(sessions): saved history is 1:1 and on by default, sub-agents included by @Ino-Bagaric in #7853
  • fix(web): a share refreshes the session's provider key panel by @Ino-Bagaric in #7958
  • feat(providers): ChatGPT accounts show when they need reconnection by @Ino-Bagaric in #7658
  • fix(sessions): stop parking a session mid-repair, and converge its model on open by @markokraemer in #7957
  • fix(sessions): a re-pointed model pin has to travel on the prompt by @markokraemer in #7959
  • fix(sessions): a PINNED runtime that still serves must not refuse its session by @markokraemer in #7961
  • feat(sessions): failed ChatGPT turns offer Reconnect or Connect ChatGPT by @Ino-Bagaric in #7651
  • fix(sessions): old saved tool calls show what they kept; an empty session opens on its composer by @Ino-Bagaric in #7960
  • fix(sessions): unreachable must say WHICH of its five failures happened by @markokraemer in #7962
  • fix(teams): bot token only to stored service URLs; sign-in link only in one-to-one chats by @Ino-Bagaric in #7963
  • Promote main 267e2d7 to staging by @markokraemer in #7967
  • fix(sessions): every prompt file reaches the computer by @Ino-Bagaric in #7966
  • fix(channels): a failed session start closes its own platform's card, never another's by @Ino-Bagaric in #7965
  • fix(mobile): restore inline transcript link taps (KRTX-562) by @agent-kortix in #7850
  • fix(sessions): stamp the unreachable cause on the row, not only in a log by @markokraemer in #7968
  • fix(worktree): refuse a commit on a foreign branch in a pnpm worktree by @markokraemer in #7973
  • fix(review): remove risk labels from the Review Center by @sutharjay1 in #7978
  • fix(llm-gateway): a project's fallback chain runs when a ChatGPT plan or BYOK model fails by @Ino-Bagaric in #7979
  • fix(sessions): record WHO answered an unreachable, not just the status code by @markokraemer in #7974
  • fix(web): copy values out of the XLSX and CSV viewers by @sutharjay1 in #7977
  • fix(sessions): nest sub-agent sessions under a coordinator on an older page by @sutharjay1 in #7975
  • refactor(kortixd): layer src into app, routes, services and lib, with enforced import boundaries by @DimitrijeGlibic in #7856
  • fix(web): ChatGPT sign-in dialogs show a finishing state instead of an idle Reconnect button by @Ino-Bagaric in #7980
  • fix(sdk): wake stopped session without a message (KRTX-570) by @agent-kortix in #7855
  • fix(web): keep the viewer copy shortcut out of the hardcoded-text audit by @sutharjay1 in #7985
  • fix(preview): capture preview templates at the host's 8 GB by @sutharjay1 in #7971
  • fix(runtime-convergence): admission is always enforced; repair before replace by @markokraemer in #7987
  • ci: a pull request into main runs nothing; the dev box is the pre-merge gate by @markokraemer in #7995
  • fix(gateway): a non-streaming ChatGPT failure keeps its HTTP status by @Ino-Bagaric in #7984
  • feat(mcp): sandbox shell and files, skills, session list; audit as mcp by @markokraemer in #7994
  • fix(sdk,web,mobile): accurate session connection and run status, no flapping by @sutharjay1 in #7976
  • fix(gateway): run the project's chain when every account is paused or needs reconnection, after the wallet gate by @Ino-Bagaric in #7983
  • release(v0.13.41): ChatGPT-plan fallback fixes (#7979, #7983, #7984) by @Ino-Bagaric in #7996
  • fix(mobile): hide OpenCode built-ins in agent picker (KRTX-604) by @agent-kortix in #7888
  • fix(sdk): verify final transcript after in-flight poll (KRTX-450) by @agent-kortix in #7894
  • fix(web): show parked computer as asleep (KRTX-191) by @agent-kortix in #7895
  • refactor(api): simplify secret consumer and delivery mapping (KRTX-220) by @agent-kortix in #7896
  • test(api): pin route-binding envelopes (KRTX-276) by @agent-kortix in #7900
  • test(api): pin relay framing and refusal envelopes (KRTX-287) by @agent-kortix in #7901
  • refactor(api): split hosted connection connect phases (KRTX-294) by @agent-kortix in #7903
  • refactor(api): flatten queued continue delivery phases (KRTX-258) by @agent-kortix in #7904
  • refactor(api): isolate template runtime fingerprinting (KRTX-313) by @agent-kortix in #7907
  • refactor(llm-gateway): split AI SDK request modules (KRTX-341) by @agent-kortix in #7910
  • refactor(web): remove unreachable sub-agent copies (KRTX-371) by @agent-kortix in #7911
  • refactor(api): split GitHub integration by responsibility (KRTX-318) by @agent-kortix in #7912
  • refactor(web): share provider pool editor shell (KRTX-360) by @agent-kortix in #7913
  • fix(sdk): ignore replayed final response chunks (KRTX-493) by @agent-kortix in #7915
  • refactor(web): share transcript export option rows (KRTX-359) by @agent-kortix in #7916
  • refactor(api): split trigger responsibilities (KRTX-298) by @agent-kortix in #7920
  • refactor(web): flatten session override rows (KRTX-361) by @agent-kortix in #7921
  • refactor(sdk): normalize tool card aliases (KRTX-490) by @agent-kortix in #7922
  • refactor(sdk): deduplicate web search source mapping (KRTX-491) by @agent-kortix in #7923
  • refactor(sdk): isolate hydration part reconciliation (KRTX-511) by @agent-kortix in #7927
  • refactor(web): share show action toolbar (KRTX-370) by @agent-kortix in #7928
  • refactor(api): split snapshot ledger and archive publisher (KRTX-305) by @agent-kortix in #7930
  • refactor(api): split auth principal resolvers (KRTX-349) by @agent-kortix in #7933
  • refactor(api): split prompt attachment lifecycle modules (KRTX-323) by @agent-kortix in #7939
  • refactor(api): split snapshot builder concerns (KRTX-311) by @agent-kortix in #7942
  • refactor(api): break sandbox provider registry cycle (KRTX-553) by @agent-kortix in #7943
  • refactor(api): split custom role policy routes (KRTX-547) by @agent-kortix in #7944
  • refactor(api): dispatch create session idempotency conflicts (KRTX-268) by @agent-kortix in #7948
  • fix(connectors): preserve account when chat link finalize retries (KRTX-438) by @agent-kortix in #7950
  • feat(onboarding): open new projects on a first chat instead of auto-sending by @sutharjay1 in #7337
  • revert(runtime-convergence): always-on admission regressed the sweep 8 PASS -> 1 by @markokraemer in #7998
  • ci: test and preview are one-shot explicit opt-ins; a red main names its suspects by @markokraemer in #7997
  • feat(mcp): one account-level MCP server at /v1/mcp, bound to the token like the CLI by @markokraemer in #7999
  • chore(deps): bump bridgecrewio/checkov-action from 12.3119.0 to 12.3125.0 by @dependabot[bot] in #7989
  • chore(deps): bump github/codeql-action from 4.38.1 to 4.38.2 by @dependabot[bot] in #7990
  • chore(deps): bump terraform-linters/setup-tflint from 6.3.0 to 6.3.1 by @dependabot[bot] in #7992
  • chore(deps): bump github/codeql-action/upload-sarif from 4.38.1 to 4.38.2 by @dependabot[bot] in #7993
  • fix(api): warn once per unreadable turn episode (KRTX-544) by @agent-kortix in #7940
  • fix(api): sign manual stop transcript capture as stopper (KRTX-427) by @agent-kortix in #7929
  • fix(api): explain personal GitHub App repository creation refusal (KRTX-232) by @agent-kortix in #7918
  • feat(desktop): hide developer Frontend URL presets in production builds (KRTX-48) by @agent-kortix in #7782
  • fix(api): classify manifest push policy rejection (KRTX-518) by @agent-kortix in #7819
  • test(session): pin host HTML sanitizer outputs (KRTX-366) by @agent-kortix in #7908
  • refactor(api): isolate control snapshot readers (KRTX-219) by @agent-kortix in #7890
  • refactor(web): remove unused provider display helpers (KRTX-569) by @agent-kortix in #7938
  • feat(sandbox): container_runtime templates run Docker with bridge + overlay by @markokraemer in #8001
  • refactor(api): dedupe runtime wake cleanup updates (KRTX-267) by @agent-kortix in #7897
  • refactor(api): split gateway candidate resolution (KRTX-343) by @agent-kortix in #7914
  • refactor(api): share token last-used throttle (KRTX-306) by @agent-kortix in #7902
  • test(web): characterize session chat shell (KRTX-354) by @agent-kortix in #7937
  • refactor(api): split lifecycle command store (KRTX-256) by @agent-kortix in #7899
  • refactor(api): split member and invitation registration (KRTX-546) by @agent-kortix in #7946
  • refactor(api): isolate Platinum discovery and uploads (KRTX-314) by @agent-kortix in #7906
  • refactor(api): split public App proxy policies (KRTX-561) by @agent-kortix in #7945
  • refactor(sandbox): flatten OpenCode asset guards (KRTX-515) by @agent-kortix in #7925
  • refactor(llm-gateway): split server and share request admission (KRTX-344) by @agent-kortix in #7926
  • fix(projects): refuse new-repo create under a personal GitHub account by @sutharjay1 in #7445
  • docs(llm-gateway): restore request-path rationale dropped by the server split by @markokraemer in #8003
  • ci(preview): the preview label deploys only (~7 min); only a dispatch runs --target-full by @markokraemer in #8004
  • fix(sessions): the box owns its identity key — reconcile the row to it by @markokraemer in #8000
  • refactor(api): split session creation modules (KRTX-222) by @agent-kortix in #7936
  • refactor(web): split tool infrastructure by concern (KRTX-369) by @agent-kortix in #7932
  • feat(mcp,oauth): long commands as jobs; connected apps list and revoke by @markokraemer in #8006
  • fix(sdk): every agent picker reads the Kortix project roster by @sutharjay1 in #8007
  • fix(audit): index account_id on the two reconciliation source tables; bound the reconciliation retry loop by @markokraemer in #7970
  • Promote main 278a24c to staging by @markokraemer in #8008
  • feat(secrets): agents store secrets they already have; long setup links load by @markokraemer in #8009
  • fix(db): move the GitHub-installation migrations after the newest merged migration by @markokraemer in #8010
  • fix(mobile): SDK composer lists, self-hosted sign-in, loader, md PDF by @sutharjay1 in #7981
  • fix(deps): raise .deepsec overrides past 17 Trivy findings by @markokraemer in #8011
  • fix(tests): green Tests on main — catalog order, monitor drop accounting, lifecycle races, CAS 409, revenuecat DB leak by @markokraemer in #8005
  • fix(tests): the e2e env reader skips dotenvx ciphertext (every browser journey red since #7981) by @markokraemer in #8013
  • fix(api): copy the SDK from deps so its llm-catalog import resolves in the image by @markokraemer in #8014
  • docs(learnings): a committed env value is ciphertext; helpers treat it as absent by @markokraemer in #8015
  • fix(sandbox): the secret-capabilities prompt tells agents to store a pasted value by @markokraemer in #8016
  • docs(learnings): runtime workspace imports need the deps-stage copy in the API image by @markokraemer in #8017
  • OpenCode decoupling W0: per-harness session flows, OpenCode-name lint ratchet, shared host health by @DimitrijeGlibic in #8002
  • fix(deploy): an ECS rollout succeeds only on the revision it registered by @markokraemer in #8018
  • feat(reminders): session reminders — scheduled prompts into one session by @markokraemer in #8020
  • feat(approvals): agent describes gated calls; approver can reply; resume keeps the session's model by @markokraemer in #8019
  • fix(models): name the US provider, not OpenRouter; restore ZDR/US line by @markokraemer in #8022
  • feat(web): launch film as code + /launch page by @markokraemer in #8023
  • docs(learnings): round a feed price before comparing it to a cap by @markokraemer in #8024
  • fix(web): /presentations 500 on production builds; drop the Claude/Cursor subscription claim by @markokraemer in #8028
  • Promote main 78395d4 (last fully green main) to staging by @markokraemer in #8025
  • feat(channels): approval cards for gated connector calls in Slack and Teams by @markokraemer in #8033
  • fix(reaper): stop logging transient provider throttles as errors (KRTX-617) by @agent-kortix in #8035
  • fix(api): log the title-generate gateway status as upstream_status (KRTX-612) by @agent-kortix in #8034
  • refactor(api): delete dead runtime-wake-fence and inbox-rows exports (KRTX-266) by @agent-kortix in #8032
  • fix(sdk): exclude OpenCode built-in agents from the selectable roster (KRTX-642) by @agent-kortix in #8029
  • feat(web): 'Sovereign' film on real product captures + 'Rent vs own' (16:9, 9:16) by @markokraemer in #8045
  • fix(models): images + thinking control for DeepSeek/GLM, stale-capability converge, US hosting hint by @markokraemer in #8026
  • docs(learnings): curate modalities and reasoning options for managed models by @markokraemer in #8052
  • fix(web): stop the Kortix upgrade upsell on a provider usage limit (KRTX-621) by @agent-kortix in #8037
  • fix(kortixd): stop config-release retries on a dead session token (KRTX-613) by @agent-kortix in #8036
  • perf(connectors): opt catalog summary paths out of action schemas (KRTX-615) by @agent-kortix in #8046
  • perf(api): serve sandbox-health polls from cache while refreshing (KRTX-620) by @agent-kortix in #8044
  • fix(api): log only failed requests at WARN (KRTX-627) by @agent-kortix in #8048
  • fix(kortixd): stop polling runtime-assets manifest with a refused session credential (KRTX-636) by @agent-kortix in #8050
  • fix(api): log an unreachable pre-stop abort as info, not a warn (KRTX-619) by @agent-kortix in #8042
  • refactor(api): split projects/secrets.ts into envelope, grant-policy and consumer modules (KRTX-322) by @agent-kortix in #8062
  • test(api): characterize the preview forwarder and WS upstream resolver (KRTX-327) by @agent-kortix in #8060
  • test(api): enforce the model-picker ↔ resolver parity for pooled secrets (KRTX-431) by @agent-kortix in #8065
  • perf(api): one mirror fetch per session-config read (KRTX-629) by @agent-kortix in #8063
  • fix(api): stop audit ingest running past the 25s request deadline (KRTX-644) by @agent-kortix in #8061
  • refactor(api): dedupe SSE usage settlement into services/llm.ts (KRTX-335) by @agent-kortix in #8057
  • docs(learnings): record the background-retry hot-loop rule from the accounts p95 incident (KRTX-630) by @agent-kortix in #8053
  • fix(web): de-noise digest-less React #419 Suspense bailout from frontend Sentry (KRTX-628) by @agent-kortix in #8049
  • fix(hooks): the .env guard checks its result and uses the pinned dotenvx by @markokraemer in #8074
  • fix(kortixd): tests run with an isolated HOME; the CLI $HOME fallback is Linux-only by @markokraemer in #8080
  • refactor(api): dedupe credit-reservation helpers and flatten tryAuthenticate (KRTX-334) by @agent-kortix in #8072
  • fix(api): turn-end orphan repair requires the reaper's age floor (KRTX-624) by @agent-kortix in #8081
  • fix(db): index provider_events.account_id for audit reconciliation (KRTX-643) by @agent-kortix in #8071
  • refactor(api): route path-form public shares through the shared sandbox forwarder (KRTX-333) by @agent-kortix in #8069
  • fix(kortixd): stop the dead-credential relays on a revoked session token (KRTX-446) by @agent-kortix in #8066
  • fix(llm-gateway): run the fallback chain when a model is unavailable (KRTX-633) by @agent-kortix in #8030
  • fix(api): bound the audit read-path flush barrier (KRTX-631) by @agent-kortix in #8070
  • feat(reminders): Reminders UI + per-project reminders feature flag by @markokraemer in #8073
  • fix: make main Tests green (#8019/#8057 mocks, dead-token breaker probe, SWR clock, launch i18n exemption) by @markokraemer in #8064
  • docs(learnings): packages lane before merging a mocked-module change; breakers need a probe by @markokraemer in #8107
  • fix(db): drop the unused audit_events account/client-source/time index by @markokraemer in #8093
  • docs(skills): route "check back later" to reminders from the agent prompt, onboarding, and Slack by @markokraemer in #8112
  • refactor(api): split loadProjectConfig into a manifest resolver and one resource scanner (KRTX-307) by @agent-kortix in #8097
  • fix(tests): fund MCP-3's team account before it creates a session by @markokraemer in #8099
  • fix(connectors): restore items/cursor wire shape for toolkit search by @markokraemer in #8100
  • fix(tests): RTA-5 compares only box identity fields, not build stamp by @markokraemer in #8101
  • fix(mobile): open a Show tool preview in-session, not the Browser tab (KRTX-602) by @agent-kortix in #8031
  • fix(api): answer POST /internal/gateway/trace without waiting on the audit pool (KRTX-609) by @agent-kortix in #8038
  • refactor(api): dedupe session-lifecycle runtime fetches into one transport (KRTX-265) by @agent-kortix in #8039
  • fix(api): bound the Quick Queue interrupt re-arm loop on an unreachable runtime (KRTX-626) by @agent-kortix in #8040
  • fix(api): return 499 for a client-cancelled llm-gateway proxy request (KRTX-616) by @agent-kortix in #8041
  • perf(proxy): attribute upstream fetch time so slow stages are queryable (KRTX-577) by @agent-kortix in #8067
  • fix(web): filter bare app:/// iOS WebView stack-overflow noise (KRTX-640) by @agent-kortix in #8068
  • fix(web): pointer cursor on every clickable element (KRTX-15) by @agent-kortix in #8077
  • refactor(api): flatten turn-stream kind callback into per-kind handlers (KRTX-280) by @agent-kortix in #8082
  • refactor(api): split projects/triggers.ts into types, manifest-IO and entry modules (KRTX-320) by @agent-kortix in #8083
  • refactor(projects): one Git connection/metadata writer shape (KRTX-302) by @agent-kortix in #8084
  • fix(db): reconcile DB Drift Sentinel gaps (prod enum, dev stray column, guarded NOT NULLs) by @markokraemer in #8012
  • fix(learnings): regenerate MEMORY.md so the index matches entries/ by @markokraemer in #8146
  • fix(tests): green main — learnings index check ignores squash-merge order; one AsyncStorage mock in mobile tests by @markokraemer in #8144
  • refactor(api): split gateway routes into focused route modules (KRTX-291) by @agent-kortix in #8086
  • fix(api): return a typed 401 for a dead credential so retrying clients stop (KRTX-446) by @agent-kortix in #8087
  • refactor(api): split sandbox-env-sync into snapshot, push, propagation and session-push modules (KRTX-300) by @agent-kortix in #8088
  • refactor(api): split projects/agents.ts into parse/grants/crud modules (KRTX-319) by @agent-kortix in #8090
  • test(web): pin dotm variant markup and resolver outputs (KRTX-654) by @agent-kortix in #8092
  • refactor(api): split activateWithCas's transaction body out (KRTX-315) by @agent-kortix in #8094
  • fix(api): reject private and metadata URLs at the Firecrawl proxy (KRTX-648) by @agent-kortix in #8103
  • refactor(api): split commitMultipleFilesToBranch into a commit-writer module (KRTX-308) by @agent-kortix in #8106
  • fix(api): repair main after 5f2ae97 (KRTX-620) by @agent-kortix in #8114
  • fix(kortixd): count every terminal credential 401 toward the dead-token breaker (KRTX-636) by @agent-kortix in #8115
  • refactor(web): extract the sidebar context kernel to sidebar-context.tsx (KRTX-650) by @agent-kortix in #8123
  • feat(api): bound LLM gateway requests per credential (KRTX-664) by @agent-kortix in #8124
  • refactor(web): delete the four dead Field subcomponents (KRTX-660) by @agent-kortix in #8127
  • fix(api): keep Platinum stopping state unconfirmed (KRTX-667) by @agent-kortix in #8129
  • refactor(web): merge LeftArc and RightArc into one ArcSvg (KRTX-658) by @agent-kortix in #8134
  • fix(api): treat a stop-confirm timeout while stopping as a lifecycle transition (KRTX-667) by @agent-kortix in #8135
  • refactor(api): split the session-scope rescope handler into decision helpers (KRTX-281) by @agent-kortix in #8139
  • refactor(web): delete the dead CommandItemHoverCard and CommandKbd (KRTX-657) by @agent-kortix in #8140
  • perf(connectors): stop fetching action schemas the listing discards (KRTX-665) by @agent-kortix in #8141
  • perf(api): serve the maintenance config from the cached platform setting (KRTX-666) by @agent-kortix in #8145
  • refactor(web): delete dead zoom helpers and dialog parts in preview-image (KRTX-662) by @agent-kortix in #8147
  • fix(auth): KRTX-668 revoke logout sessions and test refresh replay by @agent-kortix in #8148
  • fix(mobile): close the remaining tab-store AsyncStorage mock race by @markokraemer in #8151
  • fix(audit): rate-limit the write-contention warning (KRTX-614) by @agent-kortix in #8043
  • perf(api): one audit-ingest statement per relay batch (KRTX-665) by @agent-kortix in #8136
  • refactor(api): flatten turn-stream kind callback into per-kind handlers (KRTX-280) by @agent-kortix in #8119
  • Revert #8148: logout session revocation broke AUTH-1/AUTH-3 on main by @markokraemer in #8153
  • fix(billing): warn once per wallet drain episode, not per overdraft settlement (KRTX-338) by @agent-kortix in #8047
  • fix(api): classify transient Platinum guest renewal failures (KRTX-685) by @agent-kortix in #8156
  • fix(web): pointer cursor on every clickable element (KRTX-15) by @agent-kortix in #8089
  • refactor(api): split secrets.ts create handler and its validation ladder (KRTX-292) by @agent-kortix in #8117
  • fix: green main — config archive race (CodeQL), ECS budget reason, cursor-default comments by @markokraemer in #8159
  • Promote main 42bc3cc (fully green) to staging by @markokraemer in #8160
  • Release v0.13.41 — Kortix as an MCP server by @github-actions[bot] in #7969

Full Changelog: v0.13.40...v0.13.41

Don't miss a new suna release

NewReleases is sending notifications on new releases.