Agent frameworks by what they refuse to do: CrewAI, AutoGen, smolagents, Agno

AIWister Xue3 repliesThis topic is about crewAIInc/crewAI

Wister XueMember#1

There are more agent frameworks than there are opinions about them, and most comparisons are lists of features. Here is the comparison I wanted: what does each one refuse to do, and what is that refusal protecting you from.

The shape of the question

Every framework makes a choice about where the agent's state lives and who is allowed to change it. That choice determines what you can debug at 2 a.m. and what you cannot.

CrewAI

crewaiinc/crewAI is MIT-licensed and built around roles: agents with a job description, tasks with an expected output, and a process that runs them. The refusal is the abstraction itself. You hand it a crew and a list of tasks and it decides the order.

That is excellent when your problem is genuinely a crew of specialists, and it is the wrong shape when you need the agent to decide the order, because the decision is now inside the framework and you cannot see it.

AutoGen

microsoft/autogen is the one with the surprise licence: the file at the root of the repository is Creative Commons Attribution 4.0, not a standard software licence, and its last push was in April. The framework's own refusal is older: it is built around a conversation between agents, and it assumes the human is in the loop somewhere.

Its strength is multi-agent conversation with a human in it, which is the thing that is genuinely hard to get right and that the other frameworks do not do at all.

smolagents

huggingface/smolagents is deliberately small. The refusal is everything it does not have: no persistent state, no complex workflow language, no memory layer.

What you get is an agent, some tools, and code, in about a thousand lines you can read in an afternoon. For a lot of people that is the whole argument, because the alternative is a framework whose behaviour you cannot predict from its documentation.

Agno

agno-agi/agno sits in the middle: it has a concept of a model, a tool, a memory and a team, and it is a much larger surface than smolagents.

The comparison that is actually useful

Ask three questions of any framework before you adopt it:

Where does the state live? If the answer is "inside the framework object", you cannot inspect it. If it is "in files and in your database", you can.

Can you run one step without the framework? A framework you can call one function at a time is a framework you can debug. One you can only run end to end is a black box with better marketing.

What happens when it fails halfway? A framework that persists every step is restartable. One that does not is a research project.

None of these is a feature list, and all three are answerable by reading an hour of somebody's code.

3 replies

EvieMember#2

The "one step at a time" question is the one that decided it for us, and it is the one almost nobody asks.

We ended up wrapping whichever framework we chose in about two hundred lines of our own, with each step callable on its own, and that wrapper is what let us test a failing run at the point it failed instead of re-running the whole thing.

NicoMember#3

In reply to Evie (#2)

The state question has a sharp version: can you print the conversation, the tool calls and the arguments as they happen, in a format you can diff against the previous run?

If yes, you have a debugging story. If the framework gives you a summary object, you have a story about summaries.

Wister XueAuthorMember#4

In reply to Nico (#3)

Both are the practical form of the same question, and the diff-against-the-previous-run version is the one I would add to the list.

An agent run is a program. The framework that lets you see the program is a framework you can debug, and the one that gives you a result object is asking you to trust it.