← Back to articlesTRACK 02 · State and identity in multi-agent systems · PART 4 OF 4
GovernanceArchitecture & agents

LangGraph, Agno, or CrewAI? Choosing the abstraction that fits the problem

After discussing continuity difficulties in hybrid architectures, it is worth examining a more basic question: when would I start with LangGraph, Agno, or CrewAI? The three frameworks overlap, and all have evolved considerably. A comparison based only on feature checklists tends to age quickly and, worse, does little to help decide the architecture.

The criterion I find most useful is observing the form in which the problem already appears in the domain. Some systems are clearly workflows with states and transitions, while others look more like a platform of reusable specialists. There are also cases where the business naturally describes a team with roles, tasks, and deliverables. Each format finds a more comfortable abstraction in one of the frameworks.

An approximate synthesis would be:

Enlarge ↗

This does not create rigid boundaries. LangGraph supports multiple agents, Agno has workflows, and CrewAI has stateful Flows. The difference lies in the path each tool makes more direct and the number of decisions the team must take on itself.


LangGraph when the process must be visible in code#

I tend to start with LangGraph when the application resembles a business state machine. Credit is a good example: an application passes through document validation, fraud checks, analysis, policy, approval, and execution. In such a flow, I want to be able to point to the code and identify which states exist, which transitions are permitted, where checkpoints occur, which stages may interrupt execution, and which conditions release the next step.

Enlarge ↗

This approach fits long-running workflows, branching, loops, human-in-the-loop, and deterministic rules interleaved with model calls. Another advantage is that not every node needs to be an agent. A node can call an API, execute a Python rule, query a database, wait for approval, or trigger an asynchronous task. The LLM is concentrated in the parts genuinely requiring interpretation or generation.

The cost is the amount of explicit engineering. State schemas, nodes, edges, reducers, checkpointers, interrupts, and subgraphs require decisions other frameworks hide or abstract more fully. For a small agent with few tools, this level of structure may be unnecessary, but for a regulated process or one with complex recovery, it is often exactly what we need to see.


Agno when the product is a platform of specialists#

Agno often becomes attractive when the domain consists of reusable agents or Teams and the team wants an integrated ecosystem around them. It is natural to organize the solution around Agent, Team, Workflow, sessions, knowledge, and memory, then take advantage of AgentOS's runtime and APIs.

Think of a platform with a risk analyst, researcher, investment specialist, and compliance agent. Each component may have its own tools and knowledge, and the system needs to serve them through APIs, maintain sessions, observe runs, and integrate other protocols. In this scenario, assembling the entire operational layer externally may cost more than the application itself, and the ecosystem's integration becomes valuable.

In my experience, the main concern is preventing that convenience from hiding overlapping responsibilities. If sessions, workflow, background jobs, HITL, and retries are already controlled by AgentOS, there is little sense in introducing another layer that also tries to own the same global execution without a very clear division. Agno works well as the main runtime; it also works well as a specialized capability, provided its role is defined.


CrewAI when the business already speaks in people, roles, and tasks#

CrewAI seems particularly natural for problems described as a team. Due diligence may involve a financial analyst, legal analyst, risk specialist, and someone responsible for the final report. Research may involve a researcher, critic, and writer. The domain already arrives in terms of who does what and which deliverable each role produces.

Enlarge ↗

In this context, Agent, Task, Crew, and Process represent the problem quite directly. Declarative configuration also helps when roles and tasks need adjustment without redesigning an entire state machine. CrewAI has Flows for cases requiring more structured processes, persistence, and routing, so I would avoid treating it as a framework limited to demos of collaborating agents.

The concern reappears when a Flow starts occupying the same layer as another orchestrator. If LangGraph controls the global process and a CrewAI Flow also records phases, retries, and resumption points for the same case, we return to the difficulty discussed in previous articles. In a hybrid architecture, I prefer using a Crew as a bounded capability within the main workflow, leaving Flow for situations where CrewAI itself was chosen as the process runtime.


Comparing by problem type#

Enlarge ↗

I would use this table as a starting point, not a ranking. The choice tends to become simpler when the team first describes the problem without mentioning a framework.

If the requirement is controlling a business process with phases, approvals, failures, and resumptions, LangGraph often fits well. If most of the value lies in a collection of agents and Teams served as a platform, Agno deserves serious evaluation. If the domain is already organized into specialists with roles and tasks, CrewAI can greatly reduce the structure needed to represent that collaboration.


When combining makes sense#

There are cases where both problem types genuinely coexist. A credit-granting process may be a global stateful workflow with a team of specialists inside the analysis stage. In that case, one possible composition is:

Enlarge ↗

The same position could be occupied by an Agno Agent or Team. The relevant point is that the inner component returns a result to the main workflow and does not maintain a second version of the process's global status.

I would be more cautious about a chain where LangGraph calls a CrewAI Flow, which in turn calls an Agno Workflow, all with their own persistence and retry. This composition may be justified in specific circumstances, especially when each runtime is an existing independent service, but operational cost grows quickly: lifecycle, schema, observability, versioning, recovery, and failure semantics need to be understood at every boundary.


There are projects where I would start with none of the three#

It is also worth considering the simplest solution: an application making one model call, consulting two tools, and performing retrieval may be better served by conventional application code, a model client, typed contracts, and explicit state. Agentic frameworks have value when they resolve complexity that genuinely exists; adopting them merely because a project uses an LLM may bring forward problems that have not yet appeared.

Today, if I had to choose, I would try to answer three questions:

  • which part of the system needs durable state

  • how the business describes collaboration between components

  • which runtime will have authority over global execution.

Those answers usually narrow the decision space considerably. Only then would I compare ergonomics, integrations, operational maturity, and the team's knowledge.

This is also why I added CrewAI to this series' example repository. The same SpecialistRequest can be handled by an Agno agent or a CrewAI Crew without changing LangGraph. The experiment helps separate two decisions that often get mixed together: which framework implements a capability, and which component owns the product's state machine.

Originally published on LinkedIn. View publication ↗