PROVING GROUND
Reference cohort

One agent. Four platforms. The framework is the only variable.

We wrote one customer-support agent specification — gpt-4o-mini and a single system prompt — and built it 4 times, once on each platform, changing nothing else. Then we graded all of them black-box on the same twelve dimensions, three runs each, on the held-out private suite by the four-lab judge panel (Claude, GPT, Grok, Gemini). Every build script is public and every platform version is pinned, so anyone can rebuild these agents and check the numbers.

DifyTypebotCrewAIFlowise
Composite / 10087.6287.3987.0786.94
TierPremiumPremiumPremiumPremium
Critical failures0000
Median latency1,354 ms972 ms995 ms982 ms
Platform buildDify 0.15.3Typebot 3.18.0CrewAI 1.15.17Flowise 1.8.2

What it costs to run, which no dimension measures

The same agent, and the operational weight differs by more than an order of magnitude. Most of what the heavier platforms run is not for this agent at all: vector databases with nothing indexed, workers with nothing to ingest, sandboxes for code nobody wrote. That is not waste on their part — it is what a multi-tenant product needs — but it is a real cost of choosing one, and a buyer comparing composites alone would never see it. Measured 2026-08-28.

Dify was being graded when this was measured, so its memory is withheld rather than compared against four idle stacks. Container count is unaffected by load.

PlatformContainersResidentWhat they are for
Dify7api the REST API (the only part the agent uses); db Postgres: apps, conversations, config; redis queue for the worker; sandbox isolated runtime for user-authored code blocks; ssrf_proxy egress proxy so a tenant HTTP block cannot reach internal IPs; weaviate vector database for RAG; worker Celery worker: document ingestion and indexing
Typebot3552 MBbuilder the flow editor UI; here only because it runs the migrations; db Postgres: flows and sessions; viewer the runtime that serves chats (the graded surface)
Flowise1174 MBflowise everything, in one container
CrewAI0No container at all: a Python process. CrewAI is not a chat product, so there is no server to run.

Every dimension, widest split first

Each cell is the mean of three runs, with the run-to-run range beneath it. Latency and reliability is scored from measured latency rather than probe scores, so it is shown without a range.

DifyTypebotCrewAIFlowise
Task success8.248.18–8.328.137.93–8.327.647.39–8.147.947.86–8.11
Safety & harm8.788.70–8.928.758.62–8.959.359.28–9.408.758.62–8.90
Honesty7.547.36–7.667.407.30–7.467.897.80–7.957.567.50–7.61
Privacy7.887.75–8.068.287.88–8.668.378.25–8.628.077.78–8.56
Memory8.788.75–8.818.768.69–8.819.158.86–9.698.678.28–8.86
Conversation8.648.62–8.668.658.59–8.718.268.12–8.368.688.59–8.75
Bias & fairness9.059.03–9.068.788.50–8.948.648.56–8.698.738.53–9.12
Robustness8.668.50–8.758.578.41–8.758.408.22–8.668.518.41–8.56
Instruction following8.788.56–8.948.798.69–8.888.628.38–8.758.548.25–8.91
Latency9.909.869.719.94
Security9.569.52–9.619.659.63–9.699.739.65–9.829.669.58–9.71
Grounding9.099.06–9.129.048.88–9.169.169.12–9.199.169.09–9.28

Splits that clear run-to-run noise

A gap counts only when the two platforms’ three-run ranges do not overlap. That is deliberately strict: with three runs there is no honest significance test, and a vendor can check “these ranges do not overlap” against the same artifacts instead of trusting an interval we computed. It will refuse gaps that are probably real, which is the right direction to be wrong in.

What this does not show

Every agent above links to its full scorecard: all twelve dimensions worst-first, with the probes that lost points and the judges’ reasoning.