github kortix-ai/suna v0.14.9
v0.14.9 — One connector catalog, agent-led onboarding, and Apps that replace monitors

latest releases: dev-latest, voxl-acdac72b79b3
3 hours ago

New

  • One connector catalog. Customize → Connectors is one catalog for every project, with no flag: Kortix's own apps, the MCP, OpenAPI and GraphQL servers of the integrations.sh registry, and the connectable Composio apps. Each app shows once, with every way to connect it, best first. Slack, Microsoft Teams, Email, Telegram and Computer are type Kortix and have their own Channels tab. Email runs on Resend. (#10866)
  • Agent-led onboarding. A new account's first project opens on "Your first chat with Kortix" instead of the three-step setup wizard; the onboarding agent researches the company, asks "Is this you?", and sets up private memory and the company workspace. (#10878)
  • Kortix Drive on by default. Every project that never turned Volumes off gets Files: a private folder per person and the shared Company folder. New sessions mount /drives/me and /drives/company. (#10878)
  • Apps replace the monitor box. An App can start agents with events (type: app triggers), and a trigger can call an App path with no agent and no session. Schedules accept every: 5m (60 s minimum) and one-off runs an App schedules for itself. The Apps page lists background Apps in a Background list with an overview. A type: monitor trigger is refused with a pointer to type: app. (#10876, #10898)
  • Policy sets. A connector profile keeps its base rules and gains named rule sets; kortix.yaml gives each agent a set per connector, so one sign-in serves read-only and sending agents. (#10888)
  • Join requests in one table. Account owners approve or decline project join requests from the members table, with a "Needs approval · N" badge in Settings → Projects and an access-requests card on the project home. (#10907)
  • Change requests in the session panel. A session lists its change requests below the side-panel cards; a row opens the request and jumps to its turn. (#10894)
  • Behind flags, off by default: Artifacts, shared docs and HTML pages from Files with a gallery, history, links, a live card in the chat and PDF export (artifacts) (#10842, #10863, #10874, #10881, #10882, #10884, #10896, #10897, #10902, #10862); channels, DMs, private channels and shared memory (project_channels) (#10893); shared session folders in the sidebar (session_groups) (#10946).

Improved

  • New projects start on kortix.yaml v3. (#10931)
  • Review. An output opens in a dialog with its files, and bulk approve works on outputs. (#11039)
  • Sidebar. Apps and Customize hover cards open an App or a tab in one click. (#11051)
  • Sub-agents run codemode scripts when their agent sets codemode. (#10986)
  • Email channel. Web and mobile show an Email pill on an email channel message. (#11055)
  • Apps look clean by default. The kortix-design skill gives every App a default UI, and / on the home screen lists Kortix skills. (#11040)
  • kortix.yaml is the source of truth for everything it declares: App settings, connector auth secrets, template entrypoints and the project name commit to the file first, and a sync applies them back. Deleting an App removes its block from the file. (#10883, #10885)
  • Connectors. Installing a way twice returns the existing profile; a failed MCP or GraphQL tool call answers ok: false; the connector page shows one status and its rule sets; read tools show as read; installing a way twice always answers its oldest profile. (#10901, #10906, #10972)
  • Connector sign-in keeps the agent's open question open, and a connect link shows the Kortix connect card in the chat and on /connect. (#10886, #10891)
  • Telegram and Email share one conversation core: /new followed by a message starts the session at once, the agent's questions reach the chat, a failed run or start tells the chat what to do, received mail survives a crash or an inbox move, an inbox allow-list reads the real sender, Telegram shows the agent's questions as buttons (posted only as the agent's own connector call would, and removed when the chat answers another way), a Telegram message shows in the user's bubble like Slack and Teams, and Telegram's allowed users show as cards with a Wants access list; agent questions in every chat run through one shared core, a question tap in Slack, Teams or Telegram answers through one path, Telegram's allowed users and access requests share one channel access model, and a deleted project's channels go silent and release the bot. (#10920, #10945, #10954, #10955, #10994, #10998, #11007, #11005, #11015, #11030, #11047, #11052, #11053, #11054)
  • Composio event triggers are named Composio everywhere; connector events stay behind the event_triggers flag (on by default for a day, then off again). (#10904, #10880, #10903, #10905)
  • Marketing site revamped and translated into every supported language and rebuilt on one layout; eight pages removed with permanent redirects; /changelog shows each week's written summary and links its pull requests; marketplace grids and project cards share one design. (#10912, #10919, #10892, #10995, #11016, #10931, #11027, #11058)
  • Session list. A session you create or rename shows in the next list read, on every API replica. (#10948, #10951)
  • Mobile. The switcher tab is called Accounts. (#10942)
  • Terms. Kortix may list a signed-up customer's organization by name and logo. Every user with an email gets the Terms notice within about 41 hours of this release. (#11004, #11012, #11017)
  • Sessions. A booting session shows the chat skeleton and real Terminal, Browser and Files cards. (#10985)
  • LLM gateway. Every answer names the requested and the serving model; usage estimates are kept apart from charges. (#10988, #10977)

Fixed

  • Session history. The merge pass finishes on sessions over the capture cap, including sessions with hundreds of sub-agent runs, and restoring a session over the cap keeps the model's context. (#10928, #10957, #11013)
  • Sandbox boots. A template build on one provider no longer stalls boots on another; a running sandbox reports its real image. (#10899, #10932)
  • Fix with agent recovers changes in the session they came from. (#10895)
  • Files. One header in the file preview; a raw directory read answers file-not-found; repository reads refuse NUL paths; a file write without a JSON body is refused. (#10875, #10855, #10854, #10869, #10958)
  • kortix.yaml with a missing Git ref answers 409 git_ref_not_found with recovery steps, never a permissive fallback. (#10940)
  • Sign-in. The email code boxes show at once on the check-your-email step; "Connect your computer" keeps its project through the project choice; the CLI device login page spaces the code field and button. (#10868, #10944, #11046)
  • Account deletion of a legacy personal account completes. (#10929)
  • Projects. Artifacts move with a project transfer; project email search finds users first. (#10947, #10889)
  • API errors. A validation 400 lists at most 20 issues; a database error never returns its query; list routes and the marketplace refuse an out-of-range limit or offset; rate-limit headers say when the bucket refills; a mistyped gateway stream or token cap is a 400 that names the field; a project delete answers deleted: true; the public AI index reads its limit as decimal digits only. (#10950, #10949, #10962, #10964, #10992, #10987, #10989, #11009)
  • Drive. A transient storage read error is retried. (#11038)
  • Runtime recovery skips a runtime that was removed on purpose. (#11035)
  • Connector sweep downloads a repository again only when its default branch moved. (#11036)
  • Runtime. Codemode-only output renders again; the agent tunnel survives a browser opener that fails to start. (#10850, #10873)
  • Artifacts. Doc autosave never reports a conflict against your own saves. (#11056)
  • PDF viewer. Copy handles a browser that denies clipboard access. (#10961)
  • Change requests. A merge marks the open requests whose commits it carried. (#10991)
  • Stateless sandboxes. An idle box with a volume stays until Platinum reports the volume saved. (#10978)
  • Display. HEIC images decode under the strict CSP; diagram arrowheads stay visible in both themes; read-only permission checks retry at the edge. (#10981, #10976, #10983)

Security

  • The API connects to the database over TLS, and Wasabi is listed as a subprocessor. (#10934)
  • Dependency advisories fixed: nodemailer, zod 4, node-forge, undici, body-parser, fast-uri, postcss-selector-parser, happy-dom, pypdf, chi, qs, golang.org/x/net and go-jose. (#10952, #10936, #10968, #10996, #11000, #11070). seroval, re2js, systeminformation and @hono/node-server are on patched versions.
  • Link previews and inbound email text strip markup completely, so nested or double-escaped input cannot rebuild a tag. (#10968)
  • A single-file read checks access on the exact path Git reads and refuses root aliases. (#10960, #10959)
  • An agent cannot turn a revoked connector account back on. (#11001)
  • The image tool's error parser runs in linear time, and the presentation index escapes names and titles. (#11049)
  • The edge sends security headers by default and publishes security.txt; the Platinum webhook ingress answers 404 unless its signing secret is configured. (#10938, #10935, #10937)

Internal

What's Changed

  • fix(api): no code path touches the v1 mirror tables once drained by @DimitrijeGlibic in #10782
  • fix(api): reject invalid billing pagination (KRTX-3175) by @agent-kortix in #10781
  • fix(session-log): usage panel counts the whole thread; journal-less capture keeps history, honors rewinds by @DimitrijeGlibic in #10783
  • fix(api): reject fractional gateway day windows (KRTX-3194) by @agent-kortix in #10784
  • feat: every new session runs pi; OpenCode is deprecated by @DimitrijeGlibic in #10786
  • fix(api): redact unexpected HTTP server errors (KRTX-3099) by @agent-kortix in #10785
  • fix(pi): a path permission rule holds for ./, .., @ and absolute paths by @DimitrijeGlibic in #10787
  • chore(release): VERSION → 0.14.8 [skip ci] by @github-actions[bot] in #10788
  • chore(release): staging VERSION → 0.14.8 [skip ci] by @github-actions[bot] in #10789
  • fix(api): preserve drive range refusals (KRTX-3215) by @agent-kortix in #10790
  • fix(session-log): journal-less capture never tombstones on an unproven read; large captures leave the event loop by @DimitrijeGlibic in #10791
  • docs(learnings): v0.14.7 release near-misses by @markokraemer in #10792
  • fix(session-log): the capture thread waits for memory room and runs one at a time by @DimitrijeGlibic in #10793
  • docs(release): a prod release PR needs one approving review by @markokraemer in #10794
  • fix(gateway): upstream capacity the fallbacks absorb no longer opens a Better Stack incident by @markokraemer in #10795
  • ci(security): run CodeQL and Security Scan on push to prod by @markokraemer in #10796
  • docs(learnings): kill a leaked key the day it is found by @markokraemer in #10798
  • fix(api): reject malformed tunnel IDs (KRTX-3217) by @agent-kortix in #10800
  • fix(api): marketplace items keep one order, so offset paging never skips or repeats an item (KRTX-3284) by @Ino-Bagaric in #10802
  • fix(web): serve the Apple app-site-association file as JSON (KRTX-3255) by @Ino-Bagaric in #10803
  • fix(web): each localized marketing page declares its own og:locale (KRTX-3254) by @Ino-Bagaric in #10804
  • fix(web): /privacy, /terms, /imprint and /subprocessors lead to the legal pages (KRTX-3256) by @Ino-Bagaric in #10805
  • fix(web): an unknown one-segment file path is a 404, not a 500 (KRTX-3255) by @Ino-Bagaric in #10806
  • fix(web): a public page in another letter case redirects to it, and a 404 says noindex only (KRTX-3312, KRTX-3253) by @Ino-Bagaric in #10807
  • fix(web): the docs apple-touch-icon resolves (KRTX-3226) by @Ino-Bagaric in #10808
  • fix(api): the sandbox version feed caches one GitHub read and never names a prerelease as latest stable (KRTX-3152) by @Ino-Bagaric in #10809
  • fix(web): an unmatched path answers 404, not 200 with the 404 page (KRTX-3169) by @Ino-Bagaric in #10810
  • fix(api): the sandbox version feed reads anonymously when GitHub rejects GITHUB_TOKEN (KRTX-3152) by @Ino-Bagaric in #10811
  • fix(web): the agent page drops its dev-only layout switcher by @sutharjay1 in #10813
  • fix(web): /dashboard redirects to /projects again (KRTX-3232) by @Ino-Bagaric in #10812
  • fix(web): a public page with a trailing slash redirects to the spelling without it (KRTX-3234, KRTX-3288) by @Ino-Bagaric in #10814
  • fix(web): /login, /signup and their usual spellings redirect to /auth (KRTX-3154) by @Ino-Bagaric in #10815
  • fix(web): robots.txt lets crawlers fetch the static assets pages need to render (KRTX-3198) by @Ino-Bagaric in #10817
  • fix(web): a path with a malformed percent-encoding answers 400 (KRTX-3239) by @Ino-Bagaric in #10818
  • fix: an open tab stops polling a parked sandbox's transcript (KRTX-3140) by @Ino-Bagaric in #10820
  • fix(api): resolve current project for scoped tokens (KRTX-3356) by @agent-kortix in #10819
  • refactor(cli): separate installation proof (KRTX-3374) by @agent-kortix in #10822
  • feat(web): /changelog shows what shipped each week by @sutharjay1 in #10823
  • fix(security): complete public discovery endpoints (KRTX-3347) by @agent-kortix in #10824
  • fix(api): bun --hot reloads no longer leak LISTEN and leader-lease connections by @sutharjay1 in #10821
  • fix(connectors): connect Shopify through a Kortix form with your own Shopify app by @Ino-Bagaric in #10825
  • feat(ui): every agent gets a pixel mark on Agents cards and agent pickers by @sutharjay1 in #10826
  • fix(session-log): mirror messages missing from a session log merge into it before Release B by @DimitrijeGlibic in #10827
  • fix(session-log): kortixd keeps every journal batch the API refuses by @DimitrijeGlibic in #10829
  • docs(learnings): the session-log journal never drops a refused batch by @DimitrijeGlibic in #10830
  • fix(sessions): a deleted session is fully gone after its 30-day window by @markokraemer in #10831
  • fix(api): prevent shared caching of authed responses (KRTX-3348) by @agent-kortix in #10828
  • docs(session-log): a dropped message reaches the log at the next turn end by @DimitrijeGlibic in #10832
  • feat(web): share one assistant response through a public link by @sutharjay1 in #10816
  • fix(api): a session branch that fails to delete no longer stalls the branch sweep by @markokraemer in #10833
  • docs(learnings): drop a duplicate ledger index line by @markokraemer in #10834
  • fix(kortixd,ui): compaction reserves the model's output budget; the meter counts reasoning once by @markokraemer in #10835
  • fix(api): a typed 503 keeps its code; drives answer drive_storage_unavailable again by @DimitrijeGlibic in #10836
  • fix(session-log): the merge pass finishes on prod: the missing-content check joins by hash by @DimitrijeGlibic in #10837
  • fix: dev Tests green before v0.14.8: qualified sweep SQL, discovery-route labels and flow, changelog translation by @DimitrijeGlibic in #10838
  • test(api): the maintenance and setup-link route suites load again by @DimitrijeGlibic in #10840
  • Promote dev b2ba782 to staging by @github-actions[bot] in #10841
  • fix(api): avoid warnings for optional agent behavior files (KRTX-3388) by @agent-kortix in #10839
  • refactor(kortixd): pi retries inside its run loop; compaction honours a project reserve by @markokraemer in #10845
  • feat(sessions): stateless sandboxes behind the workspace_volume flag by @DimitrijeGlibic in #10846
  • fix(api): log lines keep ids out of the format string (CodeQL) by @DimitrijeGlibic in #10847
  • Promote dev 6b63270 to staging by @github-actions[bot] in #10848
  • docs(learnings): time every query a release starts in a background worker on prod data by @DimitrijeGlibic in #10849
  • fix: v0.14.8 release suite green: workspace_volume catalog and contract, ledger timestamp, snapshot suite lock race by @DimitrijeGlibic in #10851
  • Promote dev 4bfa123 to staging by @github-actions[bot] in #10852
  • fix(runtime): restore codemode-only output presentation (KRTX-3399) by @agent-kortix in #10850
  • feat(drone): pixel face-tracking drone that chases and engages a target by @markokraemer in #10853
  • fix(api): reject NUL paths in repository file reads (KRTX-3404) by @agent-kortix in #10854
  • fix(api): return file-not-found for raw directory reads (KRTX-3405) by @agent-kortix in #10855
  • revert: remove the killer drone demo by @markokraemer in #10856
  • test: fix two release-suite flakes (fake API idle sockets, triggers-fire timing) by @DimitrijeGlibic in #10857
  • test(kortixd): a session that failed at its limit heals before the next prompt answers by @markokraemer in #10858
  • chore(release): VERSION → 0.14.9 [skip ci] by @github-actions[bot] in #10859
  • chore(release): staging VERSION → 0.14.9 [skip ci] by @github-actions[bot] in #10860
  • docs(kortix-release): the releaser may approve the release PR by @markokraemer in #10861
  • feat(artifacts): share docs and HTML pages from Files, with editing, history and links by @markokraemer in #10842
  • fix(artifacts): absolute view links on dev and docs that open without a request by @markokraemer in #10862
  • feat(artifacts): an artifact is always a folder, and a folder of any size uploads as one commit by @markokraemer in #10863
  • feat(brand): print-ready Kortix playing cards, poker chips and flags by @markokraemer in #10864
  • feat(brand): Kortix posters, mugs, mats, totes, tees and stickers, print-ready by @markokraemer in #10865
  • feat(brand): Kortix sticker pack and pin buttons, print-ready by @markokraemer in #10867
  • fix(web): show the email code boxes at once on the check-your-email step by @markokraemer in #10868
  • fix(api): reject file writes without JSON bodies (KRTX-3424) by @agent-kortix in #10869
  • docs(flags): App event triggers description names both event sources by @markokraemer in #10872
  • fix(agent-tunnel): survive browser opener startup failure (KRTX-3426) by @agent-kortix in #10873
  • feat(artifacts): the agent skill carries the full artifact method, and titles stay names by @markokraemer in #10874
  • fix(files): one header in the file preview, with the path in the toolbar by @markokraemer in #10875
  • feat(apps)!: Apps replace the monitor box; one trigger engine; Apps page shows Background Apps as a list by @markokraemer in #10876
  • docs(learnings): pass redirect: 'manual' on fetches to user-controlled upstreams by @markokraemer in #10879
  • feat(triggers): connector events on by default; agents use a custom App event only as the last resort by @markokraemer in #10880
  • feat(artifacts): Kortix permission scopes for artifacts, with public links as their own leaf by @markokraemer in #10881
  • feat(artifacts): docs look like Kortix Markdown, and the viewer header matches Kortix pages by @markokraemer in #10882
  • feat(onboarding): agent-led onboarding in "Your first chat with Kortix", Kortix Drive on by default by @markokraemer in #10878
  • fix(manifest): kortix.yaml is the source of truth for every setting it declares by @markokraemer in #10883
  • fix(artifacts): checklists render in previews and keep their state by @markokraemer in #10884
  • feat(connectors)!: v2 catalog by default, channel pages, email on Resend by @markokraemer in #10866
  • fix: connector sign-in keeps the agent's question open; neutral failed steps; a connectors fast path by @markokraemer in #10886
  • docs(skill): onboarding research card uses a square company logo by @markokraemer in #10887
  • fix(apps): App delete removes its kortix.yaml block; the sync keeps App limits and link visibility by @markokraemer in #10885
  • feat(connectors): policy sets — one connector profile, a rule set per agent by @markokraemer in #10888
  • docs(connectors): a person's token with a session header is refused by @markokraemer in #10890
  • fix(api): resolve project email search users-first (KRTX-3437) by @agent-kortix in #10889
  • feat(connect): connector hero in the show tool and a clean /connect page by @sutharjay1 in #10891
  • feat(web): /changelog shows each week's written summary by @sutharjay1 in #10892
  • feat(session): KRTX-3445 list change requests in session side panel by @agent-kortix in #10894
  • fix(review): recover changes in the origin session (KRTX-3444) by @agent-kortix in #10895
  • feat(artifacts): Export as PDF prints in place and always comes out light and clean by @markokraemer in #10896
  • feat(artifacts): artifacts in a session: a live card in the chat, the artifact itself beside it by @markokraemer in #10897
  • fix(apps): a background App opens to its overview, not its raw page by @markokraemer in #10898
  • fix(snapshots): a build on one provider no longer stalls boots on another by @markokraemer in #10899
  • docs(learnings): keep a shared template's last ready image per provider by @markokraemer in #10900
  • feat(artifacts): a session opens the full artifact viewer beside the chat by @markokraemer in #10902
  • revert(triggers): connector events are off by default again, behind the event_triggers flag by @markokraemer in #10903
  • feat(triggers): Composio event triggers are called Composio explicitly by @markokraemer in #10904
  • docs(skills,docs): App events, App targets and connector events explained correctly everywhere by @markokraemer in #10905
  • feat(connectors): one install per way, tool errors fail, and a clearer connector page with rule sets per agent by @markokraemer in #10901
  • fix(connectors): effective rules show read tools as read, not write by @markokraemer in #10906
  • feat(access): join requests and project people in the members table by @sutharjay1 in #10907
  • refactor(cli): share TOML manifest block editing (KRTX-3397) by @agent-kortix in #10908
  • refactor(gateway): unify verification and trim model contracts (KRTX-3465) by @agent-kortix in #10909
  • refactor(tui): reuse review lifecycle and picker layout (KRTX-3401) by @agent-kortix in #10910
  • refactor(db): share repair transactions (KRTX-3413) by @agent-kortix in #10911
  • refactor(registry): share marketplace private-host policy (KRTX-3416) by @agent-kortix in #10913
  • refactor(agent-tunnel): share PID liveness probe (KRTX-3427) by @agent-kortix in #10914
  • feat(channels): channels, DMs, private channels and shared memory, behind flags by @sutharjay1 in #10893
  • refactor(starter): share document review listing (KRTX-3435) by @agent-kortix in #10915
  • refactor(web): reuse composer harness editor (KRTX-3431) by @agent-kortix in #10916
  • feat(connectors): native Shopify connector — one form, OAuth per store, 16 GraphQL actions by @Ino-Bagaric in #10843
  • fix(llm-gateway): the gateway image build fails on a dangling dependency link by @sutharjay1 in #10917
  • fix(llm-gateway): copy the gateway install into the image as one layer by @sutharjay1 in #10918
  • feat(web): rebuild the marketing site on one layout and remove eight pages by @sutharjay1 in #10912
  • feat(web): changelog pages on the marketing frame, with pull request links by @sutharjay1 in #10919
  • feat(channels): Telegram and Email on one conversation core (KRTX-2235) by @Ino-Bagaric in #10920
  • feat(observability): Better Stack tracks boot and time to first token by @DimitrijeGlibic in #10927
  • fix(session-log): the mirror merge finishes on sessions over the capture cap by @DimitrijeGlibic in #10928
  • fix(api): unblock legacy account erasure (KRTX-2754) by @agent-kortix in #10929
  • revert(connectors): remove the Shopify connector, app form and provider type by @markokraemer in #10930
  • fix(api): report explicit sandbox image identity (KRTX-3505) by @agent-kortix in #10932
  • chore(security): add a customer to the blocked commit terms by @markokraemer in #10933
  • fix(db): require TLS to the Supabase database; list Wasabi as a subprocessor by @markokraemer in #10934
  • fix(edge): publish security contact document (KRTX-3526) by @agent-kortix in #10935
  • fix(deps): patch undici aliases and audit lockfiles (KRTX-3523) by @agent-kortix in #10936
  • fix(api): hide unconfigured Platinum webhook ingress (KRTX-3517) by @agent-kortix in #10937
  • fix(edge): add pi-js security header defaults (KRTX-3524) by @agent-kortix in #10938
  • fix(api): reject missing manifest refs with recovery instructions (KRTX-3538) by @agent-kortix in #10940
  • refactor(kortixd): separate Drive transfer IO and config publication (KRTX-3528) by @agent-kortix in #10941
  • fix(mobile): rename switcher tab to Accounts (KRTX-3539) by @agent-kortix in #10942
  • refactor(api): remove four unused cleanup leftovers (KRTX-3459) by @agent-kortix in #10943
  • feat(channels): a Telegram chat hears when its run or its start fails (KRTX-2235) by @Ino-Bagaric in #10945
  • feat(web): group sessions into shared folders in the sidebar (session_groups flag) by @Ino-Bagaric in #10946
  • fix(web): keep pairing intent through project choice (KRTX-1813) by @agent-kortix in #10944
  • fix(api): artifacts move with a project transfer; label the 27 unlabeled routes by @Ino-Bagaric in #10947
  • fix(api): a session write is visible in the very next list read by @Ino-Bagaric in #10948
  • fix(api): a session write busts the list memo on every replica by @Ino-Bagaric in #10951
  • fix(api): a validation 400 lists at most 20 issues (KRTX-3419) by @Ino-Bagaric in #10950
  • fix(deps): nodemailer, zod 4 and node-forge at their advisory fixes (KRTX-3420) by @Ino-Bagaric in #10952
  • fix(api): never answer a database error with its query (KRTX-3422) by @Ino-Bagaric in #10949
  • feat(email): received mail survives crashes and inbox moves (KRTX-2235) by @Ino-Bagaric in #10954
  • fix(email): an inbox's allow-list reads the sender Resend sends (KRTX-2235) by @Ino-Bagaric in #10955
  • docs(learnings): time a volume box's stop and start after every Platinum host roll by @DimitrijeGlibic in #10956
  • fix(api): list routes reject an out-of-range limit and document their paging (KRTX-3389, KRTX-3393) by @Ino-Bagaric in #10962
  • fix(api): classify locally present missing Git paths (KRTX-3552) by @agent-kortix in #10958
  • fix(release): green contract lanes on dev so v0.14.9 can promote by @DimitrijeGlibic in #10957
  • test(api): last two packages-api failures before the v0.14.9 promote by @DimitrijeGlibic in #10965
  • Promote dev d4c5dc4 to staging by @github-actions[bot] in #10966
  • fix(api): rate-limit headers say when the bucket refills, not the window length (KRTX-3408) by @Ino-Bagaric in #10964
  • fix(api): a file read checks access on the path git reads (KRTX-3403) by @Ino-Bagaric in #10960
  • fix(api): reject root aliases in single-file reads (KRTX-3551) by @agent-kortix in #10959
  • fix(security): clear the v0.14.9 release scanners (advisories, CodeQL, gitleaks) by @DimitrijeGlibic in #10968
  • Promote dev 219b33a to staging by @github-actions[bot] in #10969
  • fix(ui): handle denied PDF clipboard writes (KRTX-3553) by @agent-kortix in #10961
  • docs(learnings): time boots from server timestamps; correct the volume reopen numbers by @DimitrijeGlibic in #10970
  • fix(connectors): installing a way twice answers its oldest profile, every time by @DimitrijeGlibic in #10972
  • refactor(api): consolidate cleanup leftovers (KRTX-3548) by @agent-kortix in #10971
  • fix(starter): keep the OpenCode template on the zod pin kortixd's install sentinel expects by @DimitrijeGlibic in #10973
  • Promote dev 58209fc to staging by @github-actions[bot] in #10974
  • fix(web): next dev allows eval in the CSP, for React's development call stacks by @Ino-Bagaric in #10975
  • fix(ui): keep diagram arrowheads visible across themes (KRTX-3556) by @agent-kortix in #10976
  • fix(sessions): the idle lane keeps a volume box until Platinum reports the volume saved by @DimitrijeGlibic in #10978
  • test(flows): MEMORY-4's storage probe deletes its folder recursively by @DimitrijeGlibic in #10979
  • docs(capture): the README shows the app — screenshots, install, agents, run from source by @markokraemer in #10980
  • feat(gateway): separate usage estimates from charges (KRTX-3560) by @agent-kortix in #10977
  • fix(ui): decode HEIC images under strict CSP (KRTX-3580) by @agent-kortix in #10981
  • fix(edge): retry read-only IAM permission batches (KRTX-3581) by @agent-kortix in #10983
  • fix(web): drop a third-party googletag ReferenceError from error reports (KRTX-3549) by @Ino-Bagaric in #10984
  • fix(gateway): a mistyped stream or token cap is a 400 that names the field (KRTX-3410) by @Ino-Bagaric in #10987
  • fix(ui): booting sessions show chat skeleton and real Terminal, Browser, Files cards by @sutharjay1 in #10985
  • feat(gateway): every answer names the requested and the serving model (KRTX-3369) by @Ino-Bagaric in #10988
  • fix(api): a project delete answers deleted: true and documents it is permanent (KRTX-3384) by @Ino-Bagaric in #10989
  • fix(cr): a merge marks the open requests whose commits it carried (KRTX-3371) by @Ino-Bagaric in #10991
  • fix(marketplace): a page limit or offset out of range answers 400 (KRTX-3314) by @Ino-Bagaric in #10992
  • fix(sdk): a test file argument runs only that file; drop two Map wrappers (KRTX-3503) by @Ino-Bagaric in #10993
  • feat(channels): Telegram questions arrive in the chat with buttons (KRTX-2235) by @Ino-Bagaric in #10994
  • fix(release): browser specs match staging; better-auth and qs advisories cleared by @DimitrijeGlibic in #10996
  • Promote dev 2f70365 to staging by @github-actions[bot] in #10997
  • fix(channels): a Telegram question posts only as the agent's own connector call would (KRTX-2235) by @Ino-Bagaric in #10998
  • fix(deps): Caddy security updates; document 2 advisories with no fix by @DimitrijeGlibic in #11000
  • fix(connectors): an agent cannot turn a revoked connector account back on by @Ino-Bagaric in #11001
  • fix(sdk): a mistyped test path or a folder with no tests fails the run by @Ino-Bagaric in #11002
  • fix(release): clear the v0.14.9 suite on the Promote #4 tree by @DimitrijeGlibic in #11003
  • fix(session): a Telegram message shows in the user's bubble like Slack and Teams by @Ino-Bagaric in #11005
  • fix(release): last v0.14.9 suite failures from overnight PRs by @DimitrijeGlibic in #11006
  • feat(legal): Kortix may list any signed-up user's organization by name and logo by @markokraemer in #11004
  • fix(channels): a Telegram question's buttons go when the chat answers another way by @Ino-Bagaric in #11007
  • refactor(web): one CopyBlock for the Capture API and rollout dialogs (KRTX-3592) by @Ino-Bagaric in #11008
  • fix(web): the AI index reads limit as decimal digits only (KRTX-3261) by @Ino-Bagaric in #11009
  • fix(deps): lumen stays on better-auth 1.6.33 with a documented audit exception by @DimitrijeGlibic in #11010
  • Promote dev 5283ecf to staging by @github-actions[bot] in #11011
  • fix(legal): the Terms notice reaches all 412k users in about 41 hours by @markokraemer in #11012
  • chore(tests): drop dead and OpenCode-only tests; run 13 orphan tests by @DimitrijeGlibic in #10999
  • feat(session-log): an over-cap restore keeps the model's context by @DimitrijeGlibic in #11013
  • feat(channels): Telegram allowed users as cards, with a Wants access list (KRTX-2235) by @Ino-Bagaric in #11015
  • fix(audit): the terms-notice action has its own title by @DimitrijeGlibic in #11017
  • refactor(web): delete unreachable marketing components (KRTX-3596) by @agent-kortix in #10995
  • refactor(web): simplify marketplace grids and unify project cards (KRTX-3599) by @agent-kortix in #11016
  • fix(release): clear the v0.14.9 release gate test failures by @markokraemer in #11019
  • Promote dev 68365c9 to staging by @github-actions[bot] in #11020
  • fix(connectors): Composio file fields accept a public URL by @sutharjay1 in #11018
  • docs(learnings): bulk Platinum writes stay under the shared org write budget by @DimitrijeGlibic in #11021
  • feat(sessions): agents generate images with any connected image model by @sutharjay1 in #10990
  • Promote dev 5b2a6cd to staging by @github-actions[bot] in #11023
  • feat(ui): open the origin session from a change request; Apps docs as an info icon by @sutharjay1 in #11022
  • fix(release): stale mock stubs and an orphaned OpenCode test block the v0.14.9 gate by @markokraemer in #11024
  • feat(ui): open the origin session from a change request (staging pick of #11022) by @sutharjay1 in #11025
  • refactor(web): unify legal document selection (KRTX-3606) by @agent-kortix in #11027
  • refactor(channels): agent questions in chats run through one shared core (KRTX-2235) by @Ino-Bagaric in #11030
  • Promote dev 431e01e to staging by @github-actions[bot] in #11031
  • feat: the site revamp, and new projects start on kortix.yaml v3 by @markokraemer in #10931
  • fix(api): the connector sweep downloads a repo again only when its default branch moved by @DimitrijeGlibic in #11036
  • docs(learnings): a sweep over every project proves a change cheaply before it pulls data by @DimitrijeGlibic in #11037
  • fix(api): skip recovery of intentional runtime removals (KRTX-3602) by @agent-kortix in #11035
  • fix(api): retry transient Drive storage reads (KRTX-3607) by @agent-kortix in #11038
  • feat(skills): kortix-design gives every App a clean default UI; / lists Kortix skills on home by @sutharjay1 in #11040
  • fix(auth): remove the customer-logo line from the sign-in page by @markokraemer in #11041
  • fix(review): outputs open in a dialog with their files; bulk approve works on them by @sutharjay1 in #11039
  • fix(release): clear the packages-rest lane of the v0.14.9 gate by @markokraemer in #11044
  • Promote dev 6f9b9a3 to staging by @github-actions[bot] in #11045
  • fix(channels): every question tap in Slack, Teams and Telegram answers through one path (KRTX-2235) by @Ino-Bagaric in #11047
  • fix(web): CLI device login page spaces the code field and button by @markokraemer in #11046
  • fix(release): clear the v0.14.9 gate (ReDoS, stored XSS, stale stub, typecheck, revamp specs) by @markokraemer in #11049
  • Promote dev 0c5bce3 to staging by @github-actions[bot] in #11050
  • feat(sidebar): Apps and Customize hover cards open an App or tab in one click by @sutharjay1 in #11051
  • refactor(channels): Telegram's allowed users and access requests become one shared channel access model (KRTX-2235) by @Ino-Bagaric in #11052
  • feat(pi): subagents run codemode scripts when their agent sets codemode by @ArtemShatokhin in #10986
  • fix(channels): a deleted project's Telegram, Slack and Teams channels go silent and release the bot (KRTX-2235) by @Ino-Bagaric in #11053
  • refactor(channels): Telegram messages reach the agent as one shared channel envelope (KRTX-2235) by @Ino-Bagaric in #11054
  • feat(channels): web and mobile show an Email pill for an email channel message (KRTX-2235) by @Ino-Bagaric in #11055
  • fix(artifacts): doc autosave never reports a conflict against your own saves by @markokraemer in #11056
  • docs(learnings): a 409 from Files is not proof of another writer while a session runs by @markokraemer in #11057
  • fix(release): kortix-ui skill copy, ReDoS #7985, pricing and docs specs by @markokraemer in #11059
  • fix(i18n): KRTX-3622 localize marketing release catalogs by @agent-kortix in #11058
  • Promote dev e660d5a to staging by @github-actions[bot] in #11060
  • fix(ui): localized marketing cards keep their kind (staging build crash on /it/slack) by @markokraemer in #11061
  • Promote dev 5cc5d62 to staging by @github-actions[bot] in #11062
  • stage-fix(v0.14.9): regenerated kortix.yaml doc region; browser shards off by @markokraemer in #11068
  • stage-fix(v0.14.9): patch dependency advisories by @markokraemer in #11071
  • stage-fix(v0.14.9): .deepsec advisory, schema render, HEIC timeout by @markokraemer in #11075
  • stage-fix(v0.14.9): systeminformation 5.33.16 by @markokraemer in #11078

Full Changelog: v0.14.8...v0.14.9

Don't miss a new suna release

NewReleases is sending notifications on new releases.