
CrewAI review
Python framework for teams of role-based AI agents and event-driven flows
Verdict
CrewAI is the quickest way to get several agents working together on a task, because you describe each one by role, goal and backstory and it handles the hand-offs. Flows add the step-by-step control that crews lack. The tracing and visual editor are in the hosted CrewAI AMP rather than the open source package.
Best for
Teams that want several specialised agents working on one task with little code
Not for
Teams that need fine control over every step, or tracing without signing up to a vendor's platform
Pros
- Agents defined by role, goal and backstory, so a working crew takes little code
- Checkpointing lets a crew or flow resume after a failure
- MCP servers can be added to an agent in one line
- Standalone, with no LangChain dependency
Cons
- Built-in tracing needs a CrewAI AMP account, though other tools work through OpenTelemetry
- Sends anonymous telemetry unless you turn it off
- Supports Python 3.10 to 3.13 only
Is CrewAI right for your project?
Describe what you need and AI will check the fit against this review.
CrewAI features and capabilities
Role-based crews
Each agent gets a role, a goal and tools, and the crew runs tasks in sequence or under a manager agent, so splitting work across specialists is quick to set up.
Flows for fixed steps
Flows chain Python functions, crews and single LLM calls with events and shared state, for the parts of a process that must run the same way every time.
Checkpoints and resume
State is saved after each task to JSON files or SQLite, so a long crew can pick up where it stopped instead of repeating finished work.
Human feedback
A task or flow step can stop for a person to approve or correct the output before the run continues.
MCP and built-in tools
Agents can use tools from MCP servers over stdio, SSE or HTTP, alongside the crewai-tools package for search, files and scraping.
- Any model providerWorks with OpenAI, Anthropic, Google and local models, not one vendor
- Yes
- Multi-agentSeveral agents can hand off or work together
- Yes
- MCP toolsCan use tools from MCP servers
- Yes
- Durable stateSaves progress so a run can resume after a crash or a pause
- YesCheckpoints to JSON files or SQLite
- Human approvalCan pause for a person to approve or edit before continuing
- Yes
- TracingShows each step, tool call and token use
- PartlyBuilt-in traces go to CrewAI AMP; others via OpenTelemetry
- Visual studioA UI to build, run or debug agents
- PartlyCrew Studio is in the hosted CrewAI AMP, with a free plan
At a glance
- Type
- Multi-agent framework
- Stack
- Python 3.10–3.13
- Databases
- SQLite
- Licence terms
- The framework is MIT. It sends anonymous usage telemetry by default, which you can turn off with OTEL_SDK_DISABLED=true.
- SSO
- Paid only
- Roles and permissions
- Paid only
- Audit logs
- Not documented
Free vs paid editions
What you get when you self-host, and what needs a paid plan.
The framework is free under MIT and includes crews, flows, memory, checkpointing, MCP tools and human input. CrewAI AMP adds a hosted control plane with tracing, Crew Studio, a visual editor, and managed deployment. Its free Basic plan allows 50 workflow runs a month. Enterprise adds SSO, RBAC, PII redaction and deployment in your own cloud, at a custom price.
Self-hosting CrewAI
CrewAI supports Python 3.10 to 3.13 and installs with uv or pip. It has no server component of its own.
New cloud server to ready
1 min 23 s
Research task, median of 3
29.6 s, 391 MB peak
Version tested
1.15.28 · Oct 19, 2026
- Installing CrewAI took 57 seconds in a fresh Python container and peaked at 391 MB, the most of the seven.
- I described one researcher agent by role, goal and backstory and gave it the two tools as a task. All three runs passed, taking 26 to 40 seconds.
- Its runs cost $0.001 to $0.006 each, on average about twice as much as Mastra or the OpenAI Agents SDK for the same answer.
# tools.py holds the shared web_search and read_page functions over Geekflare's APIs,
# common.py the model name, OpenRouter key, system prompt and task.
from crewai import LLM, Agent, Crew, Task
from crewai.tools import tool
import tools
from common import KEY, MODEL, SYSTEM
@tool("web_search")
def web_search(query: str) -> str:
"""Search the web. Returns the top 5 results as 'title | url | snippet' lines."""
return tools.web_search(query)
@tool("read_page")
def read_page(url: str) -> str:
"""Read a web page as Markdown, cut to 6,000 characters."""
return tools.read_page(url)
llm = LLM(model=f"openrouter/{MODEL}", api_key=KEY, temperature=0, max_tokens=1024)
researcher = Agent(role="Researcher", goal="Answer the question with cited facts", backstory=SYSTEM,
tools=[web_search, read_page], llm=llm, max_iter=8, verbose=False)
def run(task: str) -> str:
t = Task(description=task, expected_output="A short cited answer", agent=researcher)
return str(Crew(agents=[researcher], tasks=[t], verbose=False).kickoff())Latest stable release: Scrapy 2.19.0, released 10 September 2026 (the release notes list it as 2026-09-10). GitHub also marks it as "Latest."
Two notable changes:
- A new RemoteControl extension lets you inspect and control a running crawl over HTTP. The Scrapy MCP server uses it.
- The default priority queue is now DownloaderAwarePriorityQueue. Python 3.9 and PyPy 3.10 support was also dropped.
Sources:
- https://docs.scrapy.org/en/latest/news.html
- https://github.com/scrapy/scrapy/releases