---
title: Migrating from v0.10 to v0.11
description: Breaking changes, renamed classes, new required imports, and deprecated APIs in v0.11.0.
weight: 10
---

## What Changed and Why

v0.11.0 is the "Multi-Agent Swarms" release. The headline features — budget intelligence, swarm topologies, AgentRegistry, A2A messaging, security hardening — are all additive. You don't have to use any of them to upgrade.

But three things are breaking, and you need to know about them.

## The Three Breaking Changes

### 1. DynamicPipeline is now AgentRouter

`DynamicPipeline` has been renamed to `AgentRouter`. If you import `DynamicPipeline` in v0.11, you get an `ImportError` immediately — it doesn't exist anymore.

This is how your v0.10 code looked:

```python
from syrin import DynamicPipeline

pipeline = DynamicPipeline(agents=[...])
result = await pipeline.run("task")
```

This is what you change it to in v0.11:

```python
from syrin import AgentRouter

router = AgentRouter(agents=[...])
result = await router.run("task")
```

The API is identical. Only the name and import path changed. Find-and-replace `DynamicPipeline` with `AgentRouter` and you're done.

### 2. AgentTeam is deprecated (but still works, for now)

`AgentTeam` still runs in v0.11, but it emits a `DeprecationWarning` the moment you instantiate it. It will be removed completely in v0.12.0.

The replacement is `Swarm`. Here's the v0.10 pattern:

```python
from syrin import AgentTeam

team = AgentTeam(agents=[Researcher(), Writer()], goal="...")
result = await team.run()
```

And the v0.11 equivalent:

```python
from syrin.swarm import Swarm
from syrin.enums import SwarmTopology

swarm = Swarm(
    agents=[Researcher(), Writer()],
    goal="...",
    topology=SwarmTopology.PARALLEL,
)
result = await swarm.run()
```

`Swarm` is a strict superset of `AgentTeam`. Everything `AgentTeam` could do, `Swarm` does — plus four additional topologies (CONSENSUS, REFLECTION, ORCHESTRATOR, WORKFLOW), shared budget pools, `AgentRegistry`, `MonitorLoop`, A2A messaging, and `pry=True` support.

If you're migrating a large codebase, you can silence the warnings temporarily with Python's `warnings` module while you work through the migration, but don't leave that in production.

### 3. New Hook values may break exhaustive match chains

If you've written code like this — iterating over every possible `Hook` value:

```python
match hook:
    case Hook.AGENT_RUN_START: ...
    case Hook.AGENT_RUN_END: ...
    # ... every other hook ...
```

v0.11.0 adds 34 new hooks. Any exhaustive match that expects a known set will need updating. If you're using `agent.events.on(Hook.SPECIFIC_HOOK, callback)` style — subscribing to individual hooks — you don't need to change anything. New hooks just show up as new options.

## New Features Worth Knowing About

### pry=True on everything

In v0.10, you had to manually attach the `Pry` debugger:

```python
from syrin.debug import Pry

pry = Pry()
pry.attach(agent)
```

In v0.11, every multi-agent primitive accepts `pry=True` as a constructor argument:

```python
from syrin.workflow import Workflow
from syrin.swarm import Swarm

wf = Workflow("research-pipeline", pry=True)
swarm = Swarm(agents=[...], goal="...", pry=True)
```

This is equivalent to the manual `Pry().attach(...)` call — it just saves you the import and the extra line.

### Workflow gets serve()

In v0.10, `serve()` (which exposes your agent as an A2A-compatible HTTP endpoint) was only available on `Agent`, `Swarm`, and `Pipeline`. In v0.11, `Workflow` joins the party:

```python
from syrin.workflow import Workflow

wf = Workflow("research")
wf.step(ResearchAgent)
wf.step(WriterAgent)
wf.serve(port=8080)  # Workflow is now an HTTP endpoint
```

### Workflow replaces manual agent chaining

The v0.10 pattern of manually passing results between agents still works — it's not deprecated:

```python
result1 = agent1.run("research this topic")
result2 = agent2.run(result1.content)
result3 = agent3.run(result2.content)
```

But the v0.11 `Workflow` builder is cleaner and gives you budget cascade, pause/resume/cancel, checkpointing, and visualization for free:

```python
from syrin.workflow import Workflow

wf = (
    Workflow("research-pipeline")
    .step(ResearchAgent)
    .step(AnalystAgent)
    .step(WriterAgent)
)
result = await wf.run("research this topic")
```

## New Hook Values

If you need to handle any of the new hooks, here they are by category:

**Debugging** — `Hook.PRY_BREAKPOINT_HIT`, `Hook.PRY_SESSION_ENDED`

**Budget** — `Hook.BUDGET_FORECAST`, `Hook.DAILY_LIMIT_APPROACHING`, `Hook.BUDGET_ANOMALY`

**Workflow** — `Hook.WORKFLOW_STARTED`, `Hook.WORKFLOW_ENDED`, `Hook.WORKFLOW_COMPLETED`, `Hook.WORKFLOW_FAILED`, `Hook.WORKFLOW_STEP_START`, `Hook.WORKFLOW_STEP_END`, `Hook.WORKFLOW_PAUSED`, `Hook.WORKFLOW_RESUMED`, `Hook.WORKFLOW_CANCELLED`, `Hook.WORKFLOW_BRANCH_TAKEN`

**Swarm** — `Hook.SWARM_STARTED`, `Hook.SWARM_ENDED`, `Hook.SWARM_PARTIAL_RESULT`, `Hook.SWARM_BUDGET_LOW`, `Hook.SWARM_AGENT_HANDOFF`

**Remote Config** — `Hook.CONFIG_RECEIVED`, `Hook.CONFIG_APPLIED`, `Hook.CONFIG_ROLLBACK`, `Hook.CONFIG_REJECTED`, `Hook.COMMAND_EXECUTED`, `Hook.COMMAND_REJECTED`

**Agent Registry** — `Hook.AGENT_REGISTERED`, `Hook.AGENT_UNREGISTERED`, `Hook.GOAL_SET`, `Hook.GOAL_UPDATED`

## New DebugPoint Values

`DebugPoint` is new in v0.11.0. If you are importing `DebugPoint` from a pre-release version, the stable values are:

- `DebugPoint.ON_HANDOFF` — pause when an agent hands off to another
- `DebugPoint.ON_LLM_REQUEST` — pause before each LLM call
- `DebugPoint.ON_TOOL_RESULT` — pause after a tool returns
- `DebugPoint.ON_A2A_RECEIVE` — pause when an A2A message arrives
- `DebugPoint.ON_ERROR` — pause when an error occurs

See [Pry Breakpoints](/debugging/pry-breakpoints) for the full reference.

## Summary: What You Need to Do

If you have `DynamicPipeline` imports: rename them to `AgentRouter`. One find-and-replace.

If you have `AgentTeam` usage: migrate to `Swarm` before v0.12 (it still runs in v0.11 with warnings).

If you have exhaustive `Hook` match chains: add cases for the new hooks above.

Everything else in v0.10 continues to work unchanged.

## What's Next?

- [Swarm](/multi-agent/swarm) — full topology reference
- [Workflow](/multi-agent/workflow) — step types and lifecycle controls
- [AgentRouter](/multi-agent/agent-router) — LLM-driven routing (replaces DynamicPipeline)
- [Pry Multi-Agent](/debugging/pry-multi-agent) — new multi-agent TUI
