Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This document lists all significant changes in Python releases since the start of 2026, including breaking changes and important enhancements that may affect your code. Each change is marked as:
- 🔴 Breaking — Requires code changes to upgrade
- 🟡 Enhancement — New capability or improvement; existing code continues to work
This document tracks significant Python changes across all 2026 releases, so please refer to it when upgrading between versions to ensure you don't miss any important changes. For detailed upgrade instructions on specific topics (e.g., options migration), refer to the linked upgrade guides or the linked PR's.
python-1.8.0 (June 4, 2026)
Release Notes: python-1.8.0
🔴 github-copilot-sdk upgraded to v1.0.0 with breaking API changes
PR: #6292
PR #6292 upgrades agent-framework-github-copilot from github-copilot-sdk 1.0.0b2 to the stable 1.0.0 release, adapting to all breaking API changes introduced in the GA version.
SubprocessConfigremoved — useRuntimeConnection.for_stdio(path=...)+ keyword arguments onCopilotClient(connection,log_level,base_directory).- Import paths moved —
copilot.generated.session_events→copilot.session_events. - Settings renamed —
copilot_home→base_directory; the environment variable is nowGITHUB_COPILOT_BASE_DIRECTORY(wasGITHUB_COPILOT_COPILOT_HOME). - Permission handlers — use concrete decision types instead of
PermissionRequestResult(kind=...). The built-inPermissionHandler.approve_allreplaces manual approve patterns. - Default deny handler — now returns
PermissionDecisionUserNotAvailable()(matching SDK fallback behavior). - Permission handler type — now supports both sync and async callbacks (
Callable[..., PermissionRequestResult | Awaitable[PermissionRequestResult]]).
Before:
from copilot import CopilotClient, SubprocessConfig
from copilot.generated.session_events import PermissionRequest
from copilot.session import PermissionRequestResult
# Client construction
client = CopilotClient(SubprocessConfig(cli_path="/path/to/cli", log_level="debug", copilot_home="/custom/home"))
# Permission handler
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
if request.kind == "shell":
return PermissionRequestResult(kind="approved")
return PermissionRequestResult(kind="denied-interactively-by-user")
# Agent
agent = GitHubCopilotAgent(default_options={"copilot_home": "/custom/home", "on_permission_request": approve_shell})
After:
from copilot import CopilotClient, RuntimeConnection
from copilot.generated.rpc import PermissionDecisionDeniedInteractivelyByUser, PermissionDecisionUserNotAvailable
from copilot.session import PermissionHandler, PermissionRequestResult
from copilot.session_events import PermissionRequest
# Client construction
client = CopilotClient(connection=RuntimeConnection.for_stdio(path="/path/to/cli"), log_level="debug", base_directory="/custom/home")
# Permission handler — use concrete decision types or PermissionHandler.approve_all
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
if request.kind == "shell":
return PermissionHandler.approve_all(request, context)
return PermissionDecisionUserNotAvailable()
# Agent
agent = GitHubCopilotAgent(default_options={"base_directory": "/custom/home", "on_permission_request": approve_shell})
🟡 Progressive tool exposure via FunctionInvocationContext
PR: #6233
Adds support for progressively exposing tools during a run using FunctionInvocationContext. Tools can now be dynamically added or removed based on prior tool results within the same agent run.
For full documentation including patterns, caveats, and tool-ordering examples, see Controlling tool availability.
🟡 MCP-based skills discovery (McpSkillsSource)
PR: #6169
Adds McpSkillsSource to agent-framework-core, enabling skill discovery and loading via MCP servers.
🟡 Bedrock native structured output support via Converse API
PR: #6052
agent-framework-bedrock now implements native structured output support through the AWS Bedrock Converse API, allowing response_format to work with Bedrock models.
🟡 Foundry Adaptive Evals integration (rubric-generation)
PR: #6101
Adds Foundry Adaptive Evals integration to agent-framework-foundry for automated rubric generation in evaluation workflows.
🟡 Mistral AI embedding client package
PR: #5480
New agent-framework-mistral package providing a Mistral AI embedding client.
🟡 agent-framework-declarative promoted to release candidate
PR: #6256
The agent-framework-declarative package is promoted from beta to release candidate stage.
python-1.7.0 (May 28, 2026)
Release Notes: python-1.7.0
🔴 Declarative: Python-only actions removed and alias kinds renamed to C# canonical names
PR: #6126
PR #6126 removes Python-only declarative actions and renames alias kinds to match the C# canonical names for cross-language consistency.
- Python-only declarative action types that had no C# equivalent are removed.
- Action alias kinds are now aligned with C# naming conventions; update existing declarative YAML/JSON files accordingly.
🟡 HarnessAgent and background-agents harness provider
Adds HarnessAgent to agent-framework-core, enabling harness-backed agent patterns for background processing.
🟡 A2AAgentSession with referenced task IDs and input-required support
PR: #5980
Adds A2AAgentSession to agent-framework-a2a and agent-framework-core, supporting referenced task IDs and input-required flow for A2A protocol interactions.
🟡 Experimental prompt-agent conversion and deployment APIs
PR: #5959
Adds experimental APIs to agent-framework-foundry for converting prompt definitions into agents and deploying them programmatically.
python-1.6.0 (May 21, 2026)
Release Notes: python-1.6.0
🔴 Instrumentation enabled by default
PR: #5865
PR #5865 enables OpenTelemetry instrumentation by default in agent-framework-core and agent-framework-foundry.
- Agent runs now emit telemetry spans automatically without explicit opt-in.
- If you previously disabled instrumentation or have custom telemetry pipelines, verify that the default behavior does not conflict.
- To disable, pass
enable_instrumentation=Falsewhere applicable.
Before:
from agent_framework import Agent
from agent_framework.observability import configure_otel_providers
# Had to explicitly enable instrumentation
configure_otel_providers(enable_console_exporters=True)
agent = Agent(client=client, enable_instrumentation=True)
After:
from agent_framework import Agent
# Instrumentation is now on by default — no opt-in needed
agent = Agent(client=client)
# To explicitly disable:
agent = Agent(client=client, enable_instrumentation=False)
🟡 Shell tool with local and Docker execution support
PR: #5664
Adds a built-in shell tool to agent-framework-core that supports both local execution and Docker-based sandboxed execution.
🟡 New agent-framework-monty CodeAct provider package
PR: #5915
Introduces the agent-framework-monty package for Monty-backed CodeAct integrations (alpha stage).
python-1.4.0 (May 14, 2026)
Release Notes: python-1.4.0
🔴 [Experimental Skills API] Align file skill folder discovery with agentskills.io spec
PR: #5807
PR #5807 updates the experimental skills API to align file-based skill folder discovery with the agentskills.io specification.
- Skill folder resolution logic has changed; update custom skill directory layouts if using the experimental skills API.
🔴 [Experimental Skills API] Extract skill spec metadata into SkillFrontmatter
PR: #5775
PR #5775 moves skill specification metadata into a dedicated SkillFrontmatter dataclass.
- If you directly access skill metadata fields, update references to use
SkillFrontmatterattributes.
🔴 DevUI: Tighten default access controls and CORS posture
PR: #5740
PR #5740 tightens the default access control and CORS configuration for agent-framework-devui.
- Default CORS origins are now more restrictive.
- If your DevUI setup relies on cross-origin access from custom domains, explicitly configure allowed origins.
🔴 A2A: Migrate to a2a-sdk v1.0
PR: #5752
PR #5752 migrates agent-framework-a2a to a2a-sdk v1.0.
- The A2A protocol types and transport APIs follow the a2a-sdk 1.0 conventions.
- Update any code that directly interacts with A2A protocol types.
🟡 AG-UI: Tool result display channel and release candidate promotion
Adds tool result display channel to agent-framework-ag-ui and promotes the package to release candidate stage.
python-1.3.0 (May 7, 2026)
Release Notes: python-1.3.0
🔴 [Experimental Skills API] Restructure agent skills to multi-source architecture
PR: #5584
PR #5584 restructures the experimental skills API to support multi-source skill loading.
- Skill registration and discovery logic changed for the experimental skills feature.
- If using the experimental skills API, review the new multi-source loading conventions.
🟡 ClassSkill for class-based skill definitions
PR: #5678
Adds ClassSkill to agent-framework-core for class-based skill definitions with declarative metadata and automatic method discovery.
🟡 Information-flow control prompt injection defense
PR: #5331
Adds an information-flow control mechanism to agent-framework-core that helps defend against prompt injection attacks.
🟡 github-copilot-sdk upgraded to v1.0.0b2
PR: #5665
Upgrades agent-framework-github-copilot to github-copilot-sdk>=1.0.0b2, adding instruction_directories, copilot_home configuration, and runtime options forwarding on session resume.
🟡 Enforce approval_mode in Claude and GitHub Copilot agents
PR: #5562
agent-framework-claude and agent-framework-github-copilot now enforce the approval_mode decorator on function tools, consistent with other agent implementations.
🟡 OpenAI and Gemini allowed_tools tool choice support
PR: #5322
Adds support for allowed_tools tool choice in agent-framework-openai, allowing you to constrain which tools the model may call.
python-1.2.2 (April 29, 2026)
Release Notes: python-1.2.2
🔴 Orchestration terminal outputs standardized as AgentResponse
PR: #5301
PR #5301 standardizes orchestration terminal outputs as AgentResponse so Workflow.as_agent() returns the final answer only.
- Sequential-approval (
with_request_info) and concurrent (intermediate_outputs=True) flows now follow the same output contract. - If you consume orchestration results directly, expect
AgentResponseobjects instead of raw text or mixed types.
Before:
# Orchestration returned mixed types (raw strings, dicts, etc.)
result = await workflow.as_agent().run("Draft a report")
text = str(result) # had to handle various types
After:
# Orchestration now always returns AgentResponse
result = await workflow.as_agent().run("Draft a report")
text = result.text # consistent AgentResponse API
🟡 Azure AI Content Understanding context provider
PR: #4829
New alpha package agent-framework-azure-contentunderstanding — auto-analyzes file attachments (documents, images, audio, video) and injects structured results into the LLM context.
🟡 Hosted Durable Workflow support via foundry hosting
PR: #5531
Adds hosted Durable Workflow support to agent-framework-foundry-hosting, propagating full conversation history to workflow agents.
python-1.1.0 (April 21, 2026)
Release Notes: python-1.1.0
🔴 CosmosCheckpointStorage restricted pickle deserialization by default
PR: #5200
CosmosCheckpointStorage now uses restricted pickle deserialization by default, matching FileCheckpointStorage behavior.
- If your checkpoints contain application-defined types, pass them via
allowed_checkpoint_types=["my_app.models:MyState"]. - Without this, deserialization of custom types will raise
WorkflowCheckpointException.
Before:
from agent_framework.azure.cosmos import CosmosCheckpointStorage
storage = CosmosCheckpointStorage(endpoint=endpoint, database="mydb", container="checkpoints")
After:
from agent_framework.azure.cosmos import CosmosCheckpointStorage
storage = CosmosCheckpointStorage(
endpoint=endpoint,
database="mydb",
container="checkpoints",
allowed_checkpoint_types=["my_app.models:MyState"],
)
🟡 GeminiChatClient added
PR: #4847
New agent-framework-gemini package with GeminiChatClient for Google Gemini API and Vertex AI support.
🟡 Hyperlight CodeAct package
PR: #5185
New agent-framework-hyperlight package for Hyperlight-based CodeAct sandboxed code execution.
🟡 Foundry Toolboxes support
PR: #5346
Adds support for Foundry Toolboxes in agent-framework-foundry, enabling managed tool configurations from Azure AI Foundry.
🟡 finish_reason on AgentResponse and AgentResponseUpdate
PR: #5211
Adds finish_reason field to AgentResponse and AgentResponseUpdate, allowing consumers to check why the model stopped generating.
🟡 Hosted agent V2 support in Foundry
PR: #5379
Adds hosted agent V2 support in agent-framework-foundry for the latest Foundry agent service capabilities.
python-1.0.1 (April 9, 2026)
Release Notes: python-1.0.1
🔴 FileCheckpointStorage restricted pickle deserialization (security hardening)
PR: #4941
Checkpoint deserialization now flows through a restricted unpickler by default, which only permits a built-in set of safe Python types and all agent_framework framework types.
- If your application stores custom types in checkpoints, pass their
"module:qualname"identifiers via the newallowed_checkpoint_typesconstructor parameter — otherwise loads will raiseWorkflowCheckpointException. - See Security Considerations for details.
Before:
from agent_framework.workflows import FileCheckpointStorage
storage = FileCheckpointStorage(directory="./checkpoints")
After:
from agent_framework import FileCheckpointStorage
storage = FileCheckpointStorage(
directory="./checkpoints",
allowed_checkpoint_types=["my_app.models:MyState", "my_app.models:TaskResult"],
)
🔴 Handoff workflow context management fix
PR: #5136