github kortix-ai/suna v0.13.11
v0.13.11 — Billing wallet floor, scoped git push, and an agent-centric Customize

latest release: dev-latest
4 hours ago

Billing

  • No account runs on an empty wallet. Paid per-seat and credit-plan accounts used to keep spending past $0 with no floor; one six-seat account settled $588.81 against a $150 monthly grant with the wallet at $0.00. Every account now stops at the same floor before new work starts.
  • Work that already ran is always recorded. A settlement that the wallet could not cover used to be refused, which deleted the record of the spend and left "Spent this period" frozen while compute kept running. The ledger now records the overdraft, and the account stays blocked until it is topped up.
  • Wallet alerts agree with the server. Every wallet alert and billing string in the app now reads the account's billing state, so the sidebar and the project page no longer disagree about whether you are out of credits.
  • Credits have their own tab in account settings, with the available balance and where it comes from. Plan keeps its own card.

Git and access

  • Push authority is scoped to who is pushing. A session credential can push only to its own branch. Pushing other refs and deleting refs are two new permissions, project.gitops.ref.any and project.gitops.ref.delete, held by the project manager role and grantable to agents from the agent editor, the CLI scope validator and the docs. Before this, any credential that could push at all could rewrite or delete any branch.
  • Deleting a branch checks the person's role, so a plain push right no longer deletes a colleague's branch.
  • GitHub reconnect is named, not failed. When a stored GitHub App installation stops minting tokens, the app tells you to reconnect instead of throwing an opaque error.
  • A project always has a manifest. Provisioning through the API seeds kortix.yaml by default, and kortix ship refuses to push a project that has none.
  • Signed-in identity is your own. The app no longer shows an account owner's email as the signed-in identity, and account lookups stay inside the account you are in.

Customize, agents and settings

  • Customize is built around the agent. Agents lead the Customize bar, and each agent is a full-page editor with a topic rail: People, Access pages for Skills, Connectors, Secrets and Project actions that reuse the catalog cards and modals, grant editing in place, and a Share button showing who has the agent.
  • Capability tabs live under /customize/<tab>. Old URLs redirect. Review is its own tab on the bar. The per-project config page is retired; its sections live in the settings overlay.
  • Settings is a full-screen shell with Workspace, Personal and Account groups. Security, Appearance, Notifications and Plan are separate tabs. Personal settings are called Preferences, the account Tokens tab is called API keys, and Mod+, opens the panel.
  • Review center is a full-width inbox with an inline review page, no modals.
  • A change request is a card in the turn that produced it, with a status that updates and a URL to share.
  • Admin console rebuilt on the app shell and the design system.
  • Project home and account hub extracted and tidied: hero column centred, composer band on the base surface, the workspace name throws confetti for every project and the icon only when you choose one.
  • Smaller fixes: sidebar active row paints again, info and warning banners are legible, managed repositories no longer read as unmanaged, triggers open in place, the Git repository section is its own settings section, and connector proposals get an <app>-<random> slug.

Docs and support

  • Docs moved to Blume. /docs is rebuilt on a new docs engine with a working favicon, a canonical origin, and no stray files in the published site. The credits guide lives at /docs/credits.
  • One support hub. /help merged into /support: contact channels, guides, FAQ, account deletion and legal in one place.

Sessions and runtime

  • Stop stays visible while a response streams, and the session reports busy for the whole turn.
  • Queued prompts keep their order and sync after a turn completes. Prompts sent during a live turn are forwarded instead of waiting.
  • Turn failures show the real message instead of a raw JSON body.
  • File tool rows use the right tense (wrote, edited, listed) instead of the tool's registry name.
  • The terminal no longer reconnects every 60 seconds. The PTY connection between the API and the sandbox was cut after a minute of silence; both legs are now kept alive.
  • Connecting a provider refreshes the model picker without a page reload.
  • Older sandboxes catch up. Boxes provisioned before the self-updating runtime receive the current daemon, OpenCode and CLI from the control plane, and the daemon re-detects the OpenCode binary after a restart. This revives sessions that went silent after the 2026-08-14 OpenCode message-id rollover.
  • Trigger status is truthful. Reuse, keyed and pinned trigger fires record fired on delivery instead of sitting at queued forever, dead-letters are visible, and a re-prompted session runs on the trigger's model.

CLI and desktop

  • kortix login works against dev and staging again. The web firewall was rejecting the localhost callback.
  • Desktop shows a sign-in dialog for the dev and staging HTTP Basic gate, with an option to remember the credential on the device.
  • pnpm worktree nuke stops on a failed removal instead of reporting success and orphaning the worktree.

Reliability

  • Audit reconciliation writes use the isolated audit pool, so an audit lock convoy cannot starve the gateway's auth queries.
  • Preview environments heal themselves. Disk is pruned, a failed deploy keeps the last good stack, and the environment is named in words rather than by hostname. The JS pi agent has a stable name on Platinum dev.

Under the hood

  • @kortix/sdk root entry is canonical. The root, ./react and ./server are the real entries; the 20 legacy subpaths remain as shims until the next major.
  • One resolved next version across the workspace (16.3.3), with a test that fails the build if the lockfile ever resolves two. Three consecutive dev deploys had died at boot on Cannot find module 'next'.
  • Web tests run isolated, so a partial module mock cannot leak across files.
  • Production has its own managed-git token, separate from staging, and the secrets exception list was cleaned.
  • Two database migrations: the two git ref permissions (4 catalog rows) and a settlement function that records overdrafts. Neither touches user data at volume.

What's Changed

  • chore(release): VERSION → 0.13.10 [skip ci] by @github-actions[bot] in #7057
  • fix(session): report file tool rows in the tense they are actually in by @sutharjay1 in #7059
  • fix(projects): a project always has a manifest — seeding is the default, not an opt-in by @markokraemer in #7047
  • fix: a provider connect refreshes the model picker without a hard refresh (+ isolate apps/web tests) by @markokraemer in #7049
  • fix(worktree): a failed git worktree remove aborts the nuke instead of orphaning the worktree by @markokraemer in #7052
  • fix(api): route audit reconciliation writes through the isolated audit pool by @agent-kortix in #7060
  • fix(terminal): keep the PTY WebSocket alive — it was cut every 60s by @markokraemer in #7062
  • fix(web,api): close the cross-account identity boundary by @sutharjay1 in #7065
  • Sidebar and menu polish, Next 16.3.3 by @sutharjay1 in #7067
  • sdk: make the root entry canonical in fact, not just in prose by @sutharjay1 in #7068
  • feat(web): a change request now has a card, a status, and a URL by @sutharjay1 in #7069
  • fix(gateway): drop gpt-5.6-sol from the ChatGPT codex lineup by @agent-kortix in #7071
  • chore(secrets): production gets its own managed-git PAT; drop the Aster orphan by @markokraemer in #7063
  • fix(deps): one resolved next version — dev frontend image died at boot by @sutharjay1 in #7070
  • revert(gateway): restore gpt-5.6-sol to the codex lineup by @agent-kortix in #7075
  • feat(git): tell people when GitHub needs reconnecting, instead of failing by @markokraemer in #7072
  • fix(ci): resolve API image CVE-2026-56854 scan failure by @sutharjay1 in #7076
  • chore(secrets): report file-only exceptions that excuse nothing, and drop four by @markokraemer in #7078
  • Account hub and project home extraction, loader simplification, composer fixes by @sutharjay1 in #7077
  • Scope git push authority to the pushing principal by @markokraemer in #7073
  • Throw confetti only for a chosen icon, never for the initial by @sutharjay1 in #7079
  • billing: hard-block at zero — remove the wallet-floor bypass, stop losing spend by @markokraemer in #7080
  • web: flatten the composer and project-home band onto the base surface by @sutharjay1 in #7087
  • enh(web): full-screen shell, re-segmented rail, config page retired by @sutharjay1 in #7086
  • Converge legacy sandbox runtimes from the control plane (OpenCode id-wrap victims) by @markokraemer in #7088
  • settings: bind Mod+, to the panel it opens, and print it where it acts by @sutharjay1 in #7093
  • triggers: settle reuse-mode fire runtime status on delivery/dead-letter by @agent-kortix in #7094
  • fix(maintenance): stop a failed Edge Config read from locking production by @kubet in #7095
  • session errors: unwrap serialized bodies in the SDK, rebuild the banner on Item by @sutharjay1 in #7096
  • chore(release): VERSION → 0.13.11 [skip ci] by @github-actions[bot] in #7099
  • chore(release): staging VERSION → 0.13.11 [skip ci] by @github-actions[bot] in #7100
  • review center: full-width inbox, inline review page, no modals by @sutharjay1 in #7104
  • settings: split Credits out of Plan, give Plan its own card by @sutharjay1 in #7105
  • Ask a person's role before letting them delete a branch by @markokraemer in #7107
  • feat(web): one support hub at /support, credits guide moved to /docs/credits by @DimitrijeGlibic in #7061
  • fix(cli): kortix login could not complete against dev or staging by @markokraemer in #7082
  • enh(web): admin console redesign by @sutharjay1 in #7108
  • Customize: agent-centric editor, /customize/ routes, access + roles, preferences by @markokraemer in #7083
  • project home: workspace name throws confetti for every project again by @markokraemer in #7110
  • fix(session): synchronize queued prompts after turn completion by @sutharjay1 in #7103
  • feat(desktop): sign-in dialog for the dev/staging HTTP Basic gate by @markokraemer in #7111
  • project home: hero column dead centre again by @markokraemer in #7112
  • fix(preview): a branch environment heals itself, and a failed deploy keeps the last good stack by @Ino-Bagaric in #7114
  • docs(learnings): the Caddyfile and overlay come from the branch checkout, not main by @Ino-Bagaric in #7115
  • Fix session busy status during response streaming by @sutharjay1 in #7118
  • docs: move /docs from fumadocs to Blume by @sutharjay1 in #7121
  • fix(triggers): record a reuse/keyed/pinned delivery handoff as fired, not queued by @agent-kortix in #7124
  • fix(docker): keep the built docs site in the image context by @sutharjay1 in #7122
  • fix(docs): stop the docs header printing Kortix twice in dark mode by @sutharjay1 in #7126
  • fix(docs): restore the docs favicon and set the canonical origin by @sutharjay1 in #7128
  • fix(triggers): record a reuse/keyed/pinned delivery handoff as fired, not queued (staging hotfix) by @agent-kortix in #7129
  • infra: pi-js.kortix.com — a stable name for the JS pi agent on Platinum dev by @kubet in #7125
  • ci(pi-js-router): read its tokens from the pi-js environment by @kubet in #7130
  • Promote main 37c161b to staging (0.13.11 release candidate) by @markokraemer in #7131
  • staging: verify the host-only access cookie (cherry-pick of #7137) by @markokraemer in #7138
  • staging: relax engine-strict on the release gate install (cherry-pick of dbd11d2, #7137) by @markokraemer in #7140
  • staging: release-gate tests follow the deployed contracts main changed (cherry-pick of 8e518e3, #7137) by @markokraemer in #7141
  • Release v0.13.11 — Billing wallet floor, scoped git push, and an agent-centric Customize by @github-actions[bot] in #7139

New Contributors

Full Changelog: v0.13.10...v0.13.11

Don't miss a new suna release

NewReleases is sending notifications on new releases.