{"id":14,"library":"crewai","title":"CrewAI","description":"Python framework for orchestrating role-playing, autonomous AI agents. Agents collaborate via sequential or hierarchical processes to complete complex tasks. Built from scratch — independent of LangChain. Two core primitives: Crews (autonomous multi-agent collaboration) and Flows (event-driven, precise orchestration).","status":"active","version":"1.10.0","language":"python","source_language":"en","source_url":"https://docs.crewai.com","tags":["agents","orchestration","multi-agent","crewai","python","llm","autonomous","flows"],"install":[{"cmd":"pip install crewai","lang":"bash","label":"Core framework"},{"cmd":"pip install crewai-tools","lang":"bash","label":"Optional: pre-built tools (SerperDevTool, FileReadTool, WebsiteSearchTool, etc.)"},{"cmd":"pip install 'crewai-tools[mcp]'","lang":"bash","label":"Optional: MCP server tool support"}],"dependencies":[{"reason":"Hard requirement. Python 3.9 and below are not supported.","package":"Python >=3.10, <3.14","optional":false},{"reason":"Required for non-native LLM providers. Installed with crewai but must be configured for non-OpenAI models.","package":"litellm","optional":false}],"imports":[{"note":"Core classes are in the crewai package. Tools (SerperDevTool etc.) are in the separate crewai_tools package.","wrong":"from crewai import *","symbol":"Agent, Task, Crew","correct":"from crewai import Agent, Task, Crew, Process\nfrom crewai import LLM"},{"note":"crewai_tools is a separate pip package. It is NOT included with pip install crewai.","wrong":"from crewai import SerperDevTool","symbol":"crewai_tools","correct":"from crewai_tools import SerperDevTool, FileReadTool"}],"quickstart":{"code":"from crewai import Agent, Task, Crew, Process\n\nresearcher = Agent(\n    role='Senior Researcher',\n    goal='Uncover groundbreaking technologies in AI',\n    backstory='You are an expert researcher with a passion for AI innovation.',\n    verbose=True\n)\n\nwriter = Agent(\n    role='Tech Writer',\n    goal='Craft compelling articles about AI discoveries',\n    backstory='You are a skilled writer who makes complex topics accessible.',\n    verbose=True\n)\n\nresearch_task = Task(\n    description='Research the latest breakthroughs in AI for 2026.',\n    expected_output='A list of 5 key AI breakthroughs with brief descriptions.',\n    agent=researcher\n)\n\nwrite_task = Task(\n    description='Write a short article based on the research findings.',\n    expected_output='A 3-paragraph article in markdown format.',\n    agent=writer\n)\n\ncrew = Crew(\n    agents=[researcher, writer],\n    tasks=[research_task, write_task],\n    process=Process.sequential,\n    verbose=True\n)\n\nresult = crew.kickoff()\nprint(result)","lang":"python","description":"Minimal two-agent crew with sequential process"},"warnings":[{"fix":"Use Python 3.10, 3.11, or 3.12. Python 3.13 is supported but 3.14 is not yet.","message":"Python <3.10 is not supported. CrewAI requires Python >=3.10 and <3.14. Installation on 3.9 will fail or produce broken behavior.","severity":"breaking","affected_versions":"all"},{"fix":"Always specify expected_output in every Task definition, even if just a short description string.","message":"Task.expected_output is a required field. Omitting it raises a validation error at instantiation time.","severity":"breaking","affected_versions":"all"},{"fix":"pip install crewai-tools (or pip install 'crewai-tools[mcp]' for MCP support)","message":"crewai-tools is a completely separate package from crewai. Tools like SerperDevTool, FileReadTool, and WebsiteSearchTool raise ImportError if crewai-tools is not installed separately.","severity":"breaking","affected_versions":"all"},{"fix":"Use 'crewai create crew <name>' CLI command to scaffold the correct project structure with YAML configs.","message":"The recommended project structure uses YAML config files (src/<project>/config/agents.yaml and tasks.yaml) with @CrewBase, @agent, @task decorators. Code-only setups from older tutorials (pre-1.0) are still valid but the YAML-first pattern is now canonical and most docs assume it.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Install from PyPI: pip install crewai-tools. Do not use the archived GitHub repo directly.","message":"The crewai-tools repo (crewAIInc/crewAI-tools on GitHub) is now archived. Tool development has moved to the crewai-tools PyPI package maintained in the main crewai ecosystem.","severity":"breaking","affected_versions":"all"},{"fix":"Use models with strong tool-call support: GPT-4o, Claude 3.5+, Gemini 2.0+, or Qwen3-72B+ for reliable agentic behavior.","message":"Small open-source models (7B and below) often fail at function/tool calling within CrewAI. The framework relies heavily on the LLM's ability to generate correctly structured tool calls.","severity":"gotcha","affected_versions":"all"},{"fix":"Install Visual Studio Build Tools with the 'Desktop development with C++' workload before pip install crewai.","message":"Windows users encounter build errors for chroma-hnswlib==0.7.6 (a memory dependency) due to missing C++ build tools.","severity":"gotcha","affected_versions":"all"},{"fix":"await crew.kickoff_async(inputs={...}) in async contexts.","message":"crew.kickoff() is synchronous and blocking. For async contexts or FastAPI use, use crew.kickoff_async() instead.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use LLM(model='anthropic/claude-sonnet-4-5', api_key=...) or set the MODEL env var to 'provider/model-name'.","message":"Non-OpenAI LLM providers require litellm and the correct model string format: 'provider/model-name' (e.g. 'anthropic/claude-sonnet-4-5', 'ollama/gemma3'). Passing just the model name without provider prefix silently routes to OpenAI.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-11T18:29:31.119Z","next_check":"2026-05-28T00:00:00.000Z","problems":[{"fix":"If using OpenAI, ensure your `OPENAI_API_KEY` is set as an environment variable or in a `.env` file. If using another LLM (e.g., Groq, Ollama, Google Generative AI), explicitly pass the `llm` parameter to your agents and crew. You might still need to set a dummy `OPENAI_API_KEY=\"sk-dummy\"` in your `.env` file to bypass initial validation if the error persists.","cause":"CrewAI, or its underlying dependencies like `litellm`, often defaults to requiring an OpenAI API key for validation, even when a different LLM provider or local model is intended for use.","error":"OPENAI_API_KEY is required"},{"fix":"Install `tiktoken` explicitly. It's often beneficial to install it along with the `crewai[embeddings]` or `crewai[tools]` extras to ensure all related dependencies are met: `pip install 'crewai[embeddings]'` or `pip install tiktoken`.","cause":"The `tiktoken` library, essential for tokenization with many LLMs and often required for embeddings, is a dependency that might not be automatically installed with the base `crewai` package or if specific 'extras' like `[embeddings]` or `[tools]` were omitted during installation.","error":"ModuleNotFoundError: No module named 'tiktoken'"},{"fix":"Review your agent and task definitions, especially if loading from YAML files. Ensure that where dictionaries are expected (e.g., for agent configurations), you are providing a dictionary-like structure and not a list. Check for incorrect indentation or syntax in your YAML.","cause":"This error typically occurs when a list is provided in a context where a dictionary is expected, and the code attempts to call the `.get()` method (which is a dictionary method) on that list. This often happens with malformed YAML configurations for agents or tasks.","error":"AttributeError: 'list' object has no attribute 'get'"},{"fix":"Install the `crewai` package using pip in your active Python environment: `pip install crewai`.","cause":"The `crewai` library has not been installed in your current Python environment, or the environment where it was installed is not active.","error":"ModuleNotFoundError: No module named 'crewai'"},{"fix":"Increase the `max_iter` and/or `max_execution_time` parameters when initializing your agent. For example, `Agent(..., max_iter=25, max_execution_time=120)`. If the problem persists, consider using a more powerful LLM or breaking down the task into simpler, more manageable sub-tasks.","cause":"An agent has exceeded the configured maximum number of iterations (`max_iter`) or the maximum allowed execution time (`max_execution_time`) while attempting to complete its assigned task. This can occur with complex tasks, less capable LLMs, or insufficient default limits.","error":"Agent stopped due to iteration limit or time limit."}],"ecosystem":"pypi","meta_description":null,"install_score":28,"install_tag":"stale","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-11","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"mcp","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"mcp","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":6.44,"mem_mb":69.2,"disk_size":"864M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.14,"mem_mb":69.2,"disk_size":"778M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":6.45,"mem_mb":69.2,"disk_size":"864M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"mcp","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"mcp","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.36,"mem_mb":72.5,"disk_size":"923M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":17.09,"mem_mb":72.5,"disk_size":"762M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.28,"mem_mb":72.5,"disk_size":"923M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"mcp","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"mcp","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.59,"mem_mb":71.3,"disk_size":"903M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":17.75,"mem_mb":71.3,"disk_size":"748M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.47,"mem_mb":71.3,"disk_size":"903M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"mcp","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"mcp","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.95,"mem_mb":72.3,"disk_size":"901M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":16.84,"mem_mb":72.3,"disk_size":"747M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.99,"mem_mb":72.3,"disk_size":"901M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"mcp","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"mcp","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-05-11","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":-1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":-1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":-1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":-1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}