A researcher can pass its findings to a reporting agent
CrewAI's README gives a researcher a search tool and passes its findings to a reporting agent, which writes a Markdown file. That handoff is a good reason to consider this framework. Each job has an owner and an expected result, and you can inspect the boundary between them. If your application needs those separate responsibilities, you can define those relationships in crew.jsonc. For a single extraction prompt, I'd start with a direct model call.
The source tree is substantial: our checkout contained 34,979 files, roughly 362,104 source lines, and occupied 443.2 MB. Those figures describe the repository, including material beyond your application. Our installed environment occupied 37 MB. Keep those measurements separate when deciding whether to contribute to the framework or use it as a library. Maintaining a source checkout and shipping a crew are different commitments.
What happened when we ran it
Our run installed CrewAI commit 75808b0 in 19 seconds, adding 34 packages and occupying 37 MB on disk. We ran it on October 14, 2026, in an unprivileged Debian container using ghcr.io/astral-sh/uv:python3.12-bookworm, with 3 CPUs, 8 GB of RAM, and no secrets. Installation succeeded. These measurements describe that sandbox run and commit, rather than every provider configuration the framework supports.
The build failed with exit 1 after 9 seconds. The supplied log tail does not explain the build failure. The test step failed with exit 4 after 8 seconds while loading /work/repo/conftest.py. Line 12 imports load_dotenv from dotenv, and Python raised ModuleNotFoundError: No module named 'dotenv'. That identifies the missing import. It does not explain why the module was unavailable, or establish what would happen after supplying it.
Pip-audit reported 0 known vulnerabilities in the environment it inspected. The repository scan found 16 CI workflow files, no Dockerfile, and no tests directory. Those are scan results, rather than proof that upstream has no tests or container deployment options. The immediate finding is narrower: installation completed, while the build and test steps failed. The supplied measurements contain no agent-quality benchmark or model-response timing.
Flows keep branching decisions in Python
CrewAI's Flows documentation shows typed state, conditional routing, and persisted state. A Flow can call ordinary Python code or invoke a crew at the step that needs one. For a research report, you could validate the input in code, ask a crew to gather material, and send its output for review. That is the architecture I'd start with because the approval decision remains visible in your program.
The agent API also exposes iteration limits and execution time limits. Use them to put bounds around delegated work, then define an acceptable output for each task. Our 8-second failed test step provides no evidence that a crew completes its assignment correctly. A reporting agent can receive another agent's mistakes along with its useful findings, so I'd inspect the intermediate research before trusting the final report.
The CLI and your project have separate environments
The installation guide uses uv tool install crewai for the global CLI. New crews use agents/*.jsonc and crew.jsonc; the --classic option produces the older Python/YAML layout. Upgrading the global CLI does not upgrade CrewAI inside an existing project's environment. Pin the project version and follow documentation matching it, especially when copying examples that expect a different scaffold.
Python must be at least 3.10 and below 3.14. Our Python 3.12 sandbox was inside that range, yet its build and tests still failed. A working interpreter is only part of setup. The README's research example also needs a model-provider credential and SERPER_API_KEY for search. Local model connections are documented, but choosing one still leaves you responsible for the model service and the tools your agents call.
Telemetry needs an explicit policy
CrewAI's telemetry documentation says default collection includes agent roles and tool names. Enabling share_crew expands collection to detailed crew and task data. CREWAI_DISABLE_TELEMETRY=true disables CrewAI telemetry, and OTEL_SDK_DISABLED=true is another documented option. For internal document work, set that policy before writing sensitive role names or enabling sharing. The MIT license permits code reuse, while the commercial AMP control plane is a separate offering.
An open MCP report describes missing discovery pages
Issue #8216 reports that CrewAI 1.15.28 returns only the first page of MCP prompts and misses later tools on its HTTPS discovery path. MCP lets agents reach tools exposed by compatible servers. The report names those specific paths and includes a reproduction; it is not a general claim that every MCP connection fails. Teams depending on a paginated tool catalog should verify discovery against their server before adopting this release.
October activity supports a trial, with a reproducibility condition
GitHub recorded a push on October 16, 2026, alongside recent issue and pull-request activity. Release 1.15.28 shipped on October 14 with fixes for resumed human feedback and deployment handling. The API listed 728 open issues and PRs combined. That is evidence of active maintenance and a busy queue, without establishing how quickly a particular report will be resolved.
Compare LangGraph when explicit graph state and durable execution are your starting requirements. Compare Pydantic AI when typed inputs, tools, and structured results matter more than CrewAI's role-and-task organization. CrewAI earns its place when the researcher-to-reporter handoff matches how you need to divide the work. Before building around that handoff, reproduce a clean build and test run for your pinned commit. Our 19-second install still left the build and test failures to resolve.

