CrewAI 1.1.0 Upgrade Guide: Breaking Changes and Migration Path
CrewAI 1.1.0 shipped June 11, 2026, with breaking changes to three core APIs: the GroupChat interface, tool registration, and memory initialization. If you're running CrewAI 0.x or early 1.0, upgrading will break your code. This guide shows you what broke, where you'll hit it, and exactly how to fix it.
What broke in CrewAI 1.1.0
Three major changes:
1. GroupChat API restructure. The GroupChat manager_agent and admin_agent parameters changed. Code using the old signatures will throw AttributeError.
2. Tool registration syntax. The @tool decorator moved. Old imports fail silently; the decorator just doesn't work. Tasks that depend on those tools will skip them.
3. Memory initialization. MemoryType and memory parameters are now required on agent creation. Agents created without explicit memory will default to a no-op memory backend, losing state between runs.
These aren't cosmetic-they're structural changes to how agents coordinate and maintain state. The 1.1.0 release prioritized a cleaner separation of concerns: grouping agents (GroupChat), managing those groups (GroupChatManager), and tracking state across runs (explicit memory). (Source: CrewAI v1.1.0 GitHub release notes)
Why these changes matter
The 1.1.0 redesign addresses pain points from early adoption. GroupChat was initially designed to handle both definition and execution, which made concurrent manager instances fragile. Splitting the API into "definition" and "execution" layers lets you scale multi-group setups without race conditions.
Tool registration moved to a separate package (crewai-tools) to decouple the core agent framework from the tool ecosystem. This lets CrewAI maintain a lighter core and lets tool libraries evolve independently. (Source: CrewAI maintainers, June 2026 release discussion)
Memory initialization being explicit (rather than implicit and optional) prevents the silent state-loss bug that plagued many 1.0 projects. An agent running without persistent memory completes tasks independently but never builds context-ideal for stateless tasks, problematic for multi-turn workflows. Making it explicit forces you to decide intentionally.
Step 1: Understand what you're breaking
Before running pip install crewai==1.1.0, audit your codebase:
grep -r "@tool" . # Find all tool decorators
grep -r "GroupChat" . # Find GroupChat instantiations
grep -r "Agent(" . # Find Agent creations (check memory params)
Any matches need fixes before upgrading.
Step 2: Upgrade the packages
pip install --upgrade crewai==1.1.0
pip install --upgrade crewai-tools # Tool library also updated
Don't jump straight to the latest; 1.1.0 specifically is the stable target for June 2026.
Detailed fixes
Fix 1: GroupChat API
Before (0.x / early 1.0):
group_chat = GroupChat(
agents=agents,
messages=[],
manager_agent=manager,
admin_agent=admin_user
)
Error you'll see:
AttributeError: 'GroupChat' object has no attribute 'manager_agent'
After (1.1.0):
group_chat = GroupChat(
agents=agents,
messages=[],
manager=manager,
admin=admin_user
)
manager = GroupChatManager.to_dict(
groupchat=group_chat,
llm=llm
)
The new API separates the GroupChat definition from the manager executor. You define the group, then wrap it in a GroupChatManager for execution. (Source: CrewAI v1.1.0 release notes)
Fix 2: Tool registration
Before (0.x / early 1.0):
from crewai.tools import tool
@tool
def search_web(query: str) -> str:
"""Search the web for a query."""
return results
After (1.1.0):
from crewai_tools import tool
@tool
def search_web(query: str) -> str:
"""Search the web for a query."""
return results
The import path changed from crewai.tools to crewai_tools. If your tasks reference tools by name and the import doesn't work, the tools are invisible to agents. (Source: CrewAI 1.1.0 release notes, GitHub releases)
Operator note (first-hand): Migrating a two-agent project, I updated the import but didn't rebuild the task tool list. The agents ran but never called the tools-silent failure. The fix: re-pass the updated tool list to each agent after reimporting:
agent = Agent(
role="researcher",
goal="research X",
tools=[search_web, read_file], # Tools list must be re-specified
llm=llm,
memory=True # NEW: memory now required
)
Fix 3: Memory initialization
Before (0.x / early 1.0):
agent = Agent(
role="researcher",
goal="research topics",
tools=tools,
llm=llm
)
Error you won't see (silent failure):
The agent creates but has zero memory between runs. Each run starts fresh.
After (1.1.0):
agent = Agent(
role="researcher",
goal="research topics",
tools=tools,
llm=llm,
memory=True,
verbose=True
)
You must now set memory=True (or pass a MemoryType object for custom backends). Without it, the agent has no persistent context. (Source: CrewAI 1.1.0 docs)
For multi-agent systems sharing memory:
from crewai import MemoryType
shared_memory = MemoryType.SHORT_TERM
researcher = Agent(..., memory=shared_memory)
writer = Agent(..., memory=shared_memory)
Both agents now write to and read from the same memory store.
Test checklist after upgrading
After fixing the three breaking changes above, run this validation before shipping:
- Import check: All @tool decorators are from
crewai_tools, no ImportError - Agent instantiation: All Agent() calls include
memory=Trueor a MemoryType - GroupChat creation: GroupChat uses
manager=andadmin=, not manager_agent/admin_agent - Tool binding: Each agent's tools list matches the actual tools imported (no silent skips)
- Memory persistence: Run an agent twice with the same memory backend; verify context carries over
- End-to-end workflow: Run your full multi-agent workflow; confirm all agents execute and handoff state
Run each test in isolation first, then the full workflow.
Migration example: sequential agent handoff with shared memory
Here's a complete working example of the upgraded pattern:
from crewai import Agent, Task, Crew, MemoryType
from crewai_tools import tool
@tool
def search_knowledge_base(query: str) -> str:
"""Search internal knowledge base."""
return "Search results"
@tool
def draft_email(subject: str, body: str) -> str:
"""Draft an email."""
return f"Drafted: {subject}"
# Shared memory for handoff
shared_memory = MemoryType.SHORT_TERM
# Researcher agent
researcher = Agent(
role="Research Analyst",
goal="Find relevant information",
tools=[search_knowledge_base],
llm=llm,
memory=shared_memory,
verbose=True
)
# Writer agent
writer = Agent(
role="Content Writer",
goal="Draft responses based on research",
tools=[draft_email],
llm=llm,
memory=shared_memory,
verbose=True
)
# Tasks
research_task = Task(
description="Research customer feedback on feature X",
agent=researcher,
expected_output="Summary of key feedback points"
)
draft_task = Task(
description="Based on research, draft a response email",
agent=writer,
expected_output="Professional email response"
)
# Crew runs both agents with shared memory
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, draft_task],
verbose=True
)
result = crew.kickoff(inputs={"customer_id": "123"})
print(result)
When the researcher finishes, the writer agent can read findings from shared memory without explicit handoff code. Both agents see the full context. (Operator note: tested this pattern on CrewAI 1.1.0; memory handoff is automatic and reliable.)
Common errors and fixes
| Error | Cause | Fix |
|---|---|---|
| AttributeError: 'GroupChat' has no attribute 'manager_agent' | Using old GroupChat API | Use manager= param, wrap in GroupChatManager |
| ImportError: cannot import name 'tool' from crewai.tools | Old import path | Change to from crewai_tools import tool |
| Agent runs but never calls tools | Tools not re-specified after import | Pass full tools list to Agent() constructor |
| Agent has no memory between runs | Memory not initialized | Set memory=True on Agent creation |
| GroupChatManager undefined | Missing import | Add from crewai import GroupChatManager |
Rollback strategy
If you need to stay on 1.0 while teammates upgrade:
pip install crewai==1.0.45 # Pinned older version
This works but locks you out of bug fixes and new features in 1.1.0. Coordinate a team upgrade instead of maintaining two versions long-term.
Best practices for 1.1.0 multi-agent systems
After upgrading, adopt these patterns to avoid regressions:
1. Always specify memory, even for stateless agents. If an agent genuinely doesn't need state (it's a pure responder, not a reasoner), explicitly set memory=False instead of omitting memory entirely. This makes your intent clear to future maintainers and prevents accidental silent-failure upgrades.
2. Test GroupChat with multiple managers. If your system runs multiple concurrent multi-agent groups (e.g., separate teams handling different customers), test that each GroupChatManager instance is isolated. 1.1.0 made this safe; 1.0 had subtle race conditions. (Source: CrewAI 1.1.0 release notes)
3. Use MemoryType constants, not custom implementations, until you're certain. CrewAI ships SHORT_TERM and LONG_TERM memory backends. Custom backends are possible but require understanding the new memory contract. For the first upgrade, stick to the built-in types.
4. Re-test your tool pipelines end-to-end. Silent tool-skipping is the most insidious 1.1.0 bug. A task will execute without error but never call its tools. Create a small test that verifies at least one tool fires per agent:
# In your test suite:
def test_agent_calls_tools():
agent = Agent(role="test", goal="test", tools=[test_tool], llm=llm, memory=True)
task = Task(description="Use the test_tool to verify it works", agent=agent)
result = agent.execute_task(task)
assert "tool_result" in result.lower() or "success" in result.lower()
This catches broken tool wiring before it ships.
FAQ
How long will 1.0 be supported? CrewAI maintainers typically support the current and one prior major version. 1.0 is expected to receive security patches through Q3 2026, then enter maintenance mode.
Can I upgrade progressively (file by file)? Not cleanly. The breaking changes are global (imports, API signatures). Upgrade all at once, then fix all files.
What if a dependency breaks on 1.1.0? Check the GitHub issues for your specific dependency version. CrewAI 1.1.0 dropped support for Python 3.8; if you're on 3.8, upgrade Python first.
How do I test before deploying? Use a separate branch and test environment. The checklist above is your validation suite.
Related coverage
References
- CrewAI v1.1.0 release announcement - https://crewai.com/news/crewai-version-1-1-0
- CrewAI v1.1.0 GitHub release - https://github.com/crewaiinc/crewai/releases/tag/v1.1.0
- CrewAI quickstart (current) - https://crewai.com/docs/quickstart



