July 2026
♻️ Run Recovery
Recovering a failed run now reuses the actions that already succeeded and re-executes only what failed or changed, so you stop paying twice for compute.
--recoverand--recover-fromon the CLI recover a run.- A new “Recovered” action status is shown across the platform.
See Recover runs.
🤖 Bring Your Own Agent Framework
New plugins run CrewAI, LangGraph, LangChain, PydanticAI, and Hermes agents as Flyte tasks, with native tool calling preserved under durable execution.
- Multi-agent event stream. The agent event stream carries multiple agents, so a supervisor and its sub-agents report coherently.
- Observability. Agent runs emit OpenTelemetry traces and metrics.
- Human-in-the-loop approval. Approval runs on native conditions.
- MCP servers.
transport="stdio"now serves stdio.
⚡ Reusable Ray Clusters
Declare a ReusePolicy on a task environment and Ray tasks with identical configuration share one long-lived Ray cluster instead of paying full cold start each time.
Idle clusters are reclaimed after a configurable TTL. Ray task metrics and logs cover head and worker nodes, not only the driver pod.
See Reusable containers.
🔔 Notifications on Paused Runs
Notification rules can subscribe to the PAUSED phase, so a webhook or email fires the moment an action pauses to wait for a human signal.
Paused notifications carry the paused action’s identifier and the condition’s prompt, description, and prompt type.
⚙️ Queue Lifecycle Management
You can now drain a queue: it stops accepting new work while in-flight work completes.
- Default queues. A queue set as a default in settings is validated before draining, and a draining or drained queue cannot be set as a default.
- Cluster pools. You can move a queue between cluster pools and register clusters into pools from the CLI.
- Cluster deletion. A cluster cannot be deleted while an explicit queue still points at it.
- Metrics. Queue metrics stream for live display.
🔍 Cluster Visibility
New CLI commands and Console views expose cluster configuration and system logs.
flyte get cluster-configreads the live configuration of your clusters’ core components directly from the cluster, and lists any component it cannot read with the reason. It is available to Viewer and above.flyte get system-logsstreams system component logs from the target cluster.- A cluster Logs tab in the Console shows the same system logs live.
- Hovering over a pool in the clusters and queues lists shows its object store, secret store, and image registry.
🔒 Editable Roles and Policies
You can now edit which actions a custom role grants from the Console.
- Descriptions on roles and policies persist.
- Admins can access system logs without also holding the separate support role.
- Fetching a role or policy that doesn’t exist returns “not found” instead of an internal error.
✨ Launch Form Version Selector
When you launch a task or rerun a run or action, a searchable selector in the launch drawer picks the version to launch. Switching versions updates the inputs to match.
The Inputs tab defaults to the form view, with raw JSON one toggle away. Closing the form without launching discards unsubmitted changes.
⚡ Fail Fast and Stay Connected
Runs with invalid pod specs now fail at creation, and long-lived connections no longer drop.
- Fail fast. A run whose pod spec Kubernetes will reject, such as one with an empty container image, now fails at run creation with the reason instead of sitting in Queued for about 30 minutes.
- Long-lived streams. Watching runs, streaming logs, and app watches are no longer cut off after 20 minutes.
- Gateway resilience. In-flight API requests survive gateway deployments, autoscaling, and availability-zone disruption.
- Operator reconnection. The data plane operator reconnects with backoff instead of restarting when the control plane is briefly unreachable.
✨ Metrics, Apps, and Sign-In Fixes
- GPU metrics. GPU utilization, SM active cycles, and SM occupancy charts now render for GPU tasks.
- App logs. An app with no running pods shows recent persisted logs instead of an empty stream.
- Apps list. The Apps list splits into active cards and an inactive table.
- Sign-in. Email and password sign-in works for self-serve organizations in every region and from CLI authentication flows.
- macOS keychain. The keychain no longer prompts once per virtual environment.
- Raw container tasks. Raw container tasks start again.
- App pod templates. App pod template annotations are preserved.
- Unassigned clusters. A cluster not yet assigned to a cluster pool reports an error naming the command to fix it.
🔧 SDK Updates
flyte.remote.Run.get_report()andAction.get_report()pull run and action HTML reports.- A remote TUI lets you browse runs from the terminal.
Image.with_pixi_projectandImage.from_pixi_script()are new.- Image builds add a base registry override, a default push registry, and extra
docker buildxflags through an environment variable. TaskTemplate.overrideacceptsplugin_config.flyte get appsaccepts a--statusfilter.- A new fork verb in the CLI and SDK forks a run or volume, optionally merging new inputs over the source run’s.
- Authentication tokens are stored in a single keychain item.
⚙️ Self-Managed Data Plane Updates
Update to the latest Union Helm chart to pick up:
- The shared-cluster plugin manager required for
ReusePolicyon Ray tasks. - Permission for the operator proxy to read the component ConfigMaps that
flyte get cluster-configreturns. Against a data plane that has not been updated, the command succeeds but every entry reports “permission denied”. - Fail-fast on invalid pod specs, operator reconnection with backoff, the raw container task startup fix, and preserved app pod template annotations.
- An S3 mount startup probe, and a clear error for a cluster with no cluster pool.
Self-managed deployments also gain:
- An alternative ingress provider, supported as an opt-in.
- A dedicated operator and API-key OAuth client provisioned for each data plane.
- The separate control plane and data plane multi-cluster topology on AWS as well as GCP.
⚠️ Breaking Changes
- SDK versions older than 2.0.4 can no longer create runs. Upgrade to Flyte SDK 2.0.4 or later.
- The earlier human-in-the-loop tool-approval mechanism is deprecated in favor of native conditions. It still works and emits a deprecation notice. Move
@tool(requires_approval=True)approvals onto native conditions at your convenience. - A cluster with an explicit queue pointing at it can no longer be deleted. Drain and remove or re-point the queue first.