Standalone Python framework for orchestrating role-based multi-agent crews
★ 56kPythoncrewAIInc/crewAI

What it is: CrewAI is an open-source Python framework for building multi-agent systems. Instead of asking one model to do a whole complex job, you define several agents — each with a role, a goal, and a backstory — hand them tasks, and let a crew coordinate the hand-offs. It's MIT-licensed and standalone: its own primitives for agents, tasks, crews, flows, and tools, not a layer on top of LangChain.

Who it's for: Builders whose problem splits naturally into roles — a researcher that gathers, a writer that drafts, a reviewer that checks — and who want the coordination plumbing handled instead of hand-writing the glue between model calls.

The idea: roles, not one giant prompt#

A single agent with a 2,000-word system prompt trying to research, write, and fact-check at once is hard to steer and harder to debug. CrewAI's bet is that the same job is easier to build and reason about as a team: give each agent one clear job and a defined output, and let the framework route work between them. You write the what — who's on the crew and what each is responsible for — and CrewAI handles the how of passing work along.

How you use it — a crew in a few lines#

pip install crewai
from crewai import Agent, Task, Crew

researcher = Agent(
    role="Researcher",
    goal="Find and verify the latest on {topic}",
    backstory="A meticulous analyst who never states a fact without a source.",
)

writer = Agent(
    role="Writer",
    goal="Turn the research into a tight 5-bullet brief",
    backstory="An editor who writes for busy founders and cuts every wasted word.",
)

research = Task(
    description="Research {topic}. Return verified facts with sources.",
    expected_output="A list of verified facts, each with a source URL.",
    agent=researcher,
)

brief = Task(
    description="Write a 5-bullet brief from the research.",
    expected_output="Five skimmable bullets, each citing a source.",
    agent=writer,
)

crew = Crew(agents=[researcher, writer], tasks=[research, brief])
result = crew.kickoff(inputs={"topic": "agent memory"})
print(result)

The shape is: define agents, give them tasks, assemble a Crew, call kickoff(). The researcher's output feeds the writer's task; you didn't write that hand-off, the crew did.

One agent with a giant prompt is a monolith. A crew of small, role-scoped agents is a team you can debug one member at a time.

Crews vs. Flows — the one distinction to learn#

CrewAI gives you two orchestration modes, and picking the right one is most of the design work:

They compose — a Flow can call a Crew — so the common production pattern is a deterministic outer Flow wrapping the autonomous Crew steps. If you're weighing CrewAI against the alternatives, the Crews-vs-Flows breakdown and the framework comparisons go deeper on when each shape wins.

Free core, paid production layer#

The framework is MIT-licensed and free to self-host — pip install and go. For teams shipping to production, CrewAI sells the AMP suite: a managed Control Plane (app.crewai.com) that adds deployment, observability, governance, and enterprise support. You can build and run entirely on the open-source core; AMP is the "don't operate the orchestration yourself" option.

The one-line take#

If your task decomposes into roles and you want the hand-offs handled for you, CrewAI turns "one model doing everything" into a small crew you assemble in a few lines — autonomous Crews when you want flexibility, deterministic Flows when you want control.