Advanced

Crews

Learn to orchestrate multi-agent workflows with sequential and hierarchical processes, memory systems, planning, and advanced crew configuration.

Sequential Process

In a sequential process, tasks execute one after another in order. Each task can receive the output of previous tasks as context:

Python
from crewai import Crew, Process

crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process=Process.sequential,  # Task 1 → Task 2 → Task 3
    verbose=True
)

result = crew.kickoff()

# Sequential flow:
# 1. Researcher completes research_task
# 2. Writer receives research output, completes writing_task
# 3. Editor receives writing output, completes editing_task
# → Final result = editing_task output

Hierarchical Process

In a hierarchical process, a manager agent coordinates the crew, delegating tasks and reviewing results:

Python
crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process=Process.hierarchical,  # Manager delegates tasks
    manager_llm="gpt-4o",            # LLM for the manager agent
    verbose=True
)

result = crew.kickoff()

# Hierarchical flow:
# 1. Manager analyzes all tasks
# 2. Manager delegates research_task to researcher
# 3. Manager reviews output, delegates writing_task to writer
# 4. Manager may request revisions or re-delegation
# 5. Manager delegates editing_task to editor
# → Final result curated by manager

Sequential vs Hierarchical

FeatureSequentialHierarchical
Task OrderFixed, in list orderManager decides dynamically
CoordinationAutomatic (output flows to next)Manager coordinates
FlexibilityPredictable, linearAdaptive, can re-delegate
CostLower (no manager LLM calls)Higher (manager overhead)
Best ForLinear workflows, pipelinesComplex, dynamic workflows

Memory

Python
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=Process.sequential,
    memory=True,          # Enable memory across runs
    verbose=True
)

# Memory types:
# Short-term: conversation within a single crew run
# Long-term: persisted across multiple crew runs
# Entity: remembers key entities and facts

# First run - crew learns about the topic
result1 = crew.kickoff(inputs={"topic": "AI in Healthcare"})

# Second run - crew remembers previous research
result2 = crew.kickoff(inputs={"topic": "AI in Healthcare Updates"})

Dynamic Inputs

Python
# Use {placeholders} in task descriptions
research_task = Task(
    description="Research {topic} for the {market} market.",
    expected_output="Detailed report on {topic}.",
    agent=researcher
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=Process.sequential
)

# Pass inputs at runtime
result = crew.kickoff(inputs={
    "topic": "Electric Vehicles",
    "market": "European"
})

Real-World Example: Content Creation Crew

Python - Complete Content Crew
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool

# Agents
researcher = Agent(
    role="SEO Research Specialist",
    goal="Find trending topics and keywords for {topic}",
    backstory="Expert in SEO research and trend analysis.",
    tools=[SerperDevTool()],
)

writer = Agent(
    role="Senior Content Writer",
    goal="Write SEO-optimized articles that rank and engage",
    backstory="Award-winning writer specializing in tech content.",
)

editor = Agent(
    role="Chief Editor",
    goal="Ensure all content is accurate, engaging, and polished",
    backstory="Former newspaper editor with an eye for detail.",
)

# Tasks
research = Task(
    description="Research {topic}. Find 5 key angles, trending keywords, and competitor content.",
    expected_output="Research brief with angles, keywords, and sources.",
    agent=researcher,
)

write = Task(
    description="Write a 1000-word article on {topic} using the research. Include H2 headings, code examples, and a call-to-action.",
    expected_output="A complete article in markdown format.",
    agent=writer,
    context=[research],
)

edit = Task(
    description="Edit the article for grammar, accuracy, SEO, and readability. Ensure claims match the research.",
    expected_output="Final polished article ready for publication.",
    agent=editor,
    context=[write, research],
    output_file="output/article.md",
)

# Crew
content_crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research, write, edit],
    process=Process.sequential,
    verbose=True,
)

result = content_crew.kickoff(inputs={"topic": "AI Code Assistants"})
Start sequential: Begin with sequential process for predictable workflows. Only switch to hierarchical when you need the manager to make dynamic decisions about task assignment and quality review.

What's Next?

In the final lesson, we will cover best practices, real-world patterns, debugging strategies, cost control, and production deployment.