* fix(projects): keep workflow save actions visible and guard unsaved edits
* fix(projects): restore workflow navigation and saved state
* fix(app-client): preserve editors during blocked history navigation
* fix(app-client): preserve navigation guards after native hash changes
* fix(app-client): recover navigation after duplicate history indexes
* fix(app-client): restore navigation across history index resets
* fix(agent-runner): report Claude Code models
Claude Code lists its models and efforts through the Agent SDK's supportedModels(), on a session that is sent no prompt, instead of reporting detection as unsupported.
* fix(agents): match Codex reasoning efforts to current releases
Codex takes low through xhigh, max and ultra, and no longer minimal; max is passed as itself. A saved effort its tool dropped stays until the entry changes.
* fix(agents): keep model effort cells aligned and drop the built-in badge
Reported efforts move to a line under the entry and name only selectable efforts, so the effort select no longer shifts its row. Model suggestions lose the Built-in badge.
* fix(agents): wrap long descriptions in the agents list
The description wraps inside a capped name column, two lines at most with the full text on hover, so other columns keep their widths.
* fix(agents): group the agents list and sort it by shown name
Everyone agents come first, the application's own in the order it added them, then the caller's own, then shared ones, each by translated name. List entries carry owned.
* feat(agent-runner): give agents the runner's Node.js and pnpm
The runner ships pnpm and puts node and pnpm launchers first on each run's PATH, pinned against packageManager switching; config set agent-tools system opts out. Store pruning uses the bundled pnpm.
* fix(agent-protocol): update the coding tools' suggested models
* fix(agent-protocol): suggest Sonnet 5 and Haiku 4.5, the current model ids
* fix(agent-protocol): include current models and qualify Pi suggestions
* feat(agents): suggest models reported by runtimes
* fix(agents): show model suggestions in a wider combobox and drop unpublished models
* fix(agents): expand model suggestions and pluralize runtime counts
* fix(agent-runner): let Codex write each working tree's .agents and skip unchanged skills in skills sync
* fix(agent-runner): validate skill roots and preserve submodule paths
* test(mail): wait for the compose action to become available
* test(mail): control time in credential lease renewal coverage
* fix(agent-runner): restrict writable skill roots to canonical directories
* feat(agents): pass proxy and CA variables, let the runner's owner pass and set variables, and take variables from the runner
* fix(runner): detect local provider keys and preserve service variables
* fix(agents): preserve application notice and enqueue types
* test(mail): control lease time while awaiting refresh heartbeats
* chore: redeploy the Studio preview on a fresh database
* fix(agents): drop the RunnerNotice alias and order the runner variables migration after the workspace usage one
* fix(agent-runner): keep task git metadata in reference clones
* fix(agent-runner): guard host git from writable checkout configuration
* fix(agent-runner): guard host git from writable checkout configuration
* fix(agent-runner): accept standard submodule configuration on resume
* feat(agents): define the runner workspace report and subject settlement contract
* feat(agent-runner): remove working directories once their work is over or over the size limit
* style(agent-runner): format workspace cleanup sources
* fix(agents): order the workspace usage migration after execution history
* fix(agent-runner): keep workspace records out of the agent's reach and never remove unpushed work
* style(agent-runner): format the workspace record reader
* test(agent-protocol): use a neutral subject key in the workspace fixture
* fix(agent-runner): run pnpm in a runner-owned directory and stop sharing store files through hard links
Also replace the workspace size cap with a min-free-disk threshold read from statfs, so collection no longer walks every node_modules.
* fix(agent-runner): probe whether the work root clones and import with clone or copy
pnpm's clone-or-copy falls back to hard links on file systems that cannot clone, so the runner probes the work root once and picks clone or copy itself.
* fix(agent-runner): default min-free-disk to 5G and remove only settled workspaces on a low disk
Pushed workspaces whose work goes on are no longer removed automatically; the runner warns once per pass and points to gc.
* fix(agent-runner): exit after stopping and stop what runs leave behind
The foreground daemon returned once it had stopped and relied on the event
loop draining; an open handle kept an updated runner's old version running,
so its service never started the new one. It now stops whatever is still
running below it and exits, with 75 after updating itself so a service that
restarts only on failure starts it too.
The supervisor notes the process groups below each worker while it runs and
kills what is left of them when the worker exits, the worker stops what is
still below it before exiting, and closing an OpenCode server that already
exited still kills its process group.
* fix(agent-runner): find a run's leftovers by a tag in their environment
A process a run started that left its parent and its process group before
the supervisor looked escaped every cleanup. Each worker now gets a random
tag that its tool's environment carries and whatever it starts inherits;
when the worker exits, and once more when the daemon stops or recovers an
orphaned run, every process still carrying the tag is killed.
Closing an OpenCode server now waits until its process group is empty, not
only until the server exits, and kills what is left in it.
* test(agent-runner): wait for the OpenCode stand-in's child before closing it
* fix(agent-protocol): update the coding tools' suggested models
* fix(agent-protocol): suggest Sonnet 5 and Haiku 4.5, the current model ids
* fix(agent-protocol): include current models and qualify Pi suggestions
* feat: expose run execution history and actual models
* fix: distinguish observed execution facts and protect machine details
* fix(agents): order execution history migration after tool slots
* docs(agents): describe model requirements without internal task references
* fix(agents): rename the attempt snapshot type to avoid the run execution mode
v3-develop now exports RunExecution as the 'auto' | 'mine' execution mode of run requests, so the per-attempt claim snapshot becomes RunExecutionSnapshot, with the AgentsRunExecutionSnapshot schema ref.
* test(agents): keep attempt history consistent when a team-only claim is refused
* fix(agents): retain the latest effort observation across reports
* feat(agent-runner): retry transient git failures while preparing a run and requeue them as prepareNetwork
* fix(agent-runner): finish unfinished submodules, retry only passing git failures, and record retries before a permanent failure
* feat(agents): confirm work others cause before it runs as the responsible
Work someone causes on a subject another person answers for becomes a run request the responsible confirms, instead of a run that borrows their identity and runners. The asker may instead run it as themselves on a runner they may use. Runs record the source of their chain of work and who confirmed it, and work a run causes keeps that run's source.
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* fix(agents): expire due run requests on reassignment and keep their schedule
Reassigning a subject's responsible now expires requests whose time already ran out instead of renewing or queueing them, and withdrawing one is refused the same way. A request keeps the work's fireAt and maxAttempts and confirming restores them; a consultation is never made to wait for confirmation.
* fix(agents): isolate request execution and preserve reassigned work
* fix(agents): order run request migration after merged runner changes
* test(agents): describe run request regressions by behavior
* fix(agents): normalize pending request scheduling comparisons
* refactor(agents): unify notification contracts as AgentsNotice
---------
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* feat(app-plugin-agents): answer with an online agent when a runner agent cannot run
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* fix(ci): align chat fixtures and allow cold route imports
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* fix(app-plugin-agents): require an available model for online fallback
* fix(agents): align fallback copy and consolidate model regressions
* fix(agents): use claim eligibility throughout chat fallback
* fix(agents): suppress repeated online fallback failure notices
---------
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* fix(app-plugin-agents): merge work per actor and hand variables only to trusted runners
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* fix(app-plugin-agents): deliver run variables after a final trust check, and share claim eligibility
* fix(app-plugin-agents): isolate variable access failures and restore undelivered claims
* fix(app-plugin-agents): renumber the secrets-refused migration after the runner tool slots one
* fix(app-plugin-agents): send variables with every run unless marked for team runners only
* fix(app-plugin-agents): keep new wait and variable metadata optional
* fix(app-plugin-agents): send wait reasons as codes with params and word them on the client
* test(agents): describe claim regressions by behavior and use neutral examples
* fix(agents): enforce team-only variables for jobs
* fix(agents): expose job secret refusal to custom sources
---------
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* feat(ui-library): add the approval-ui block
Presentational components for an approval process: progress, timeline,
route preview, parallel branches, receipts and an action bar with forms.
They take data already shaped and translated for display and depend on
no plugin. Includes a preview demo, its registry example and tests.
* docs(app-skills): list the approval-ui block in the UI Library catalog
* feat(agents): limit runs per coding tool on a runner
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* feat(agent-runner): limit runs per coding tool with --slots
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* feat(agents): edit and show limits per coding tool on the runtimes page
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* chore: format and add the changeset for limits per coding tool
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>
* fix(agents): make the fields for limits per coding tool optional in shared types
* fix(agents): align queue component with per-tool wait reason
* feat(agents): one tools table per runtime, saved with its settings
---------
Co-authored-by: Project lead <agent+studio-project-lead@studio.noreply>