New
- Connect Gmail and other apps from the chat: a Connect card appears when the agent needs a sign-in, and the connection finishes by itself when you come back.
- Provider keys are checked when you save them. Models → Providers shows whether the provider accepted each key, with "Check again".
- OpenAI API keys can be added in Models → Providers, next to ChatGPT accounts.
Improved
- Every LLM provider key lives in one place, the Models panel. Keys saved earlier by other paths move there automatically.
- When a provider refuses a key, the chat says which provider and offers "Open in Models".
- Saving a key never changes a working default model.
- Automations that cannot run (no model, no credits) pause with the reason and resume by themselves; the trigger page says why a run failed, was skipped or paused.
- An app account shared with an automation's agent is enough for its event trigger; Gmail for an automation asks for one shared sign-in.
- An MCP server that needs a sign-in shows "Sign in", not an error. Unfinished sign-ins show "Finish sign-in".
- A secret you ask the agent to store reaches the agent as an environment variable; you can change a secret's delivery in its Edit dialog.
- A workspace with no usable model says so before a session starts, with Upgrade and Add provider key.
- Subagent reports fold into the "Worked for" step.
Fixed
- Apps hosted on the old provider rebuild on Platinum instead of failing every hour.
- The trigger composer's model picker opens.
- Requests on your own key no longer ask for more output tokens than the model supports, and Gemini tool calls keep their signatures.
- A setup link that writes a provider key can be used once.
- The workspace split sends no owner email.
What's Changed
- fix(apps): App runtime refreshes build on Platinum instead of the dead Daytona key by @markokraemer in #12492
- feat(web): fold subagent reports into the Worked-for step; answer a run once (KRTX-4732) by @agent-kortix in #12442
- refactor(gateway): every LLM provider key lives in one store, the Models panel's by @markokraemer in #12493
- perf(api): batch the per-connection credential check in connector entitlements (KRTX-4750) by @agent-kortix in #12480
- fix(workspaces): the legacy split sends no owner email (D13) by @markokraemer in #12495
- fix(api): flip a sandbox row to error when Platinum confirms the box not running (KRTX-4751) by @agent-kortix in #12477
- fix(triggers): a trigger the account cannot run pauses and resumes itself; an unsigned MCP server shows Sign in by @markokraemer in #12498
- refactor(ui): split the fullscreen presentation viewer, load the workbook in the parent, one stage-fit scale (KRTX-4753) by @agent-kortix in #12481
- fix(api): a skipped dead-daemon repair logs why it did not run (KRTX-4754) by @agent-kortix in #12485
- fix(connectors): finish connector sign-ins from the chat card, settings and the provider's return by @markokraemer in #12500
- fix(gateway): provider keys are checked on save, and a refused key says so in the chat by @markokraemer in #12502
- refactor(mobile): unify the tool card frame on ToolResultCard and drop the dead frame surface (KRTX-4758) by @agent-kortix in #12494
- test(api): pin the already-staged gate's verdict line and the single-line skip verdicts (KRTX-4756) by @agent-kortix in #12497
- fix: key saves keep the working default model; CLI, trigger and inbox fixes from the dev e2e run by @markokraemer in #12504
- test(web): clear the red Tests lane (KRTX-4760) by @agent-kortix in #12501
- fix(secrets): every legacy credential path reads the moved store, and connector legacy rows get a backfill by @markokraemer in #12505
- fix(triggers): model picker opens in the composer; failed, skipped and paused triggers say why by @markokraemer in #12507
- fix(release): the v0.15.8 release suite passes again by @markokraemer in #12506
- docs(learnings): never reap a sandbox image whose name another deployment can compute by @markokraemer in #12509
- fix(sdk): the runtime config read settles a proxy give-up instead of replaying it (KRTX-4755) by @agent-kortix in #12503
- fix(setup-links): a link that writes a provider key is single-use again by @markokraemer in #12511
- fix(secrets,connectors): agent secrets reach the agent, connector_not_shared, no-model refusal by @markokraemer in #12512
- fix(gateway): a refused provider key is no default model; session create answers 409 by @markokraemer in #12516
- feat(secrets): self-hosts move legacy credentials at boot, and the last legacy forms get a move by @markokraemer in #12518
- fix(api): GET /v1/agent-marks/:file has a workspace binding by @markokraemer in #12519
- docs(sdk): a backend wrapper gives each end user their own project by @markokraemer in #12521
- refactor(mobile): one composer card, one hand-off body, one Reduce Motion read (KRTX-4762) by @agent-kortix in #12513
- fix(api): KRTX-4773 — the agent face route has its workspace binding by @agent-kortix in #12523
- fix(api): connector upstream-failure warn no longer splits one failure class per action (KRTX-4759) by @agent-kortix in #12517
- Promote dev d6b72cc to staging by @github-actions[bot] in #12526
- chore(release): staging VERSION → 0.15.9 [skip ci] by @github-actions[bot] in #12528
- fix(release): the v0.15.9 contract lanes match the merged behavior (stage-fix of #12533) by @markokraemer in #12534
- Release v0.15.9 — Connect apps from the chat, checked provider keys, and automations that explain themselves by @github-actions[bot] in #12530
Full Changelog: v0.15.8...v0.15.9