Third-highest Python agent framework by download volume, ahead of CrewAI, Google ADK, and Strands. DL/star ratio of 1,003 indicates massive silent adoption.
Pydantic AI
active#3 Python agent framework by downloads — 15.6M PyPI/month. Built by the Pydantic team. Runtime type enforcement is a genuine differentiator no other framework offers. V1 shipped with Temporal integration for durable execution and Logfire observability. Emerging pattern: 'Pydantic AI for agent logic, LangGraph for orchestration' (ZenML).
Where it wins
15.6M PyPI downloads/month — #3 Python agent framework by volume
Built by the Pydantic team — unmatched trust signal in Python ecosystem
Runtime type enforcement — genuine differentiator no other framework offers
V1 shipped with Temporal integration for durable execution
Logfire observability built-in
DL/star ratio of 1,003 — massive silent adoption
Where to be skeptical
Higher issue count (583) — may indicate growing pains at scale
No named enterprise customers found (likely many private deployments)
Not a standalone orchestration framework — pairs with LangGraph for multi-agent workflows
Editorial verdict
The type-safe agent logic layer for Python teams. 15.6M downloads/month makes it #3 by volume. Not a competitor to LangGraph — it's a complement. The Pydantic team's reputation is an unmatched trust signal in the Python ecosystem. Best paired with LangGraph for orchestration.
Source
Videos
Reviews, tutorials, and comparisons from the community.
PydanticAI - The NEW Agent Builder on the Block
Building a Research Agent with PydanticAI
Related

Claude Code
98Anthropic's official agentic coding CLI. v2.1.81 (Mar 20) shipped `--bare`, smarter worktree resume, and improved MCP OAuth while the repo crossed 82,204 stars and logged ~14 commits/week across 10+ maintainers. Terminal-native, tool-use-driven, with deep file system + shell access, #1 SWE-bench Pro standardized (45.89%), ~4% of GitHub public commits (SemiAnalysis), $2.5B annualized revenue. 8M+ npm weekly downloads. Opus 4.6 with 1M context.
LangGraph
95#1 Python agent framework by production evidence — 40.2M PyPI downloads/month, Fortune 500 deployments (LinkedIn, Uber, Replit, Elastic, Klarna, Cloudflare, Coinbase), ~400 LangGraph Platform companies, LangSmith rated best-in-class observability. Stable v1.x API, model-agnostic, MCP support.
AutoGen (Microsoft)
95⚠️ MAINTENANCE MODE — Microsoft officially confirmed bug fixes and security patches only, no new features (VentureBeat 2026-02-19). 55.9K stars but only 1.57M PyPI/month — DL/star ratio of 28, the most inflated among active frameworks. Being replaced by Microsoft Agent Framework (AutoGen + Semantic Kernel merge, GA targeted ~Q2 2026). Teams on AutoGen should plan migration.
CrewAI
93#2 Python agent framework — 5.7M PyPI downloads/month (3× growth in 6 months), Fortune 500 customers (PwC, IBM, Capgemini, NVIDIA, DocuSign), YAML-driven role-based orchestration rated 'fastest to prototype' in 2026 independent reviews. CVE-responsive: gitpython path traversal fixed in v1.11.0.
Public evidence
'The pattern gaining the most traction in production AI engineering circles in 2026 is PydanticAI for agent logic and LangGraph for orchestration.' Independent validation of complementary positioning.
'The other two offer partial type hints but don't enforce them at runtime.' Runtime enforcement is the technical differentiator.
Raw GitHub source
GitHub README peek
Constrained peek so you can sanity-check the source material without leaving the site.
Pydantic AI is the Python AI SDK: a typed, extensible agent loop with every model a string swap away. The same agent runs everywhere you need it: behind a web frontend, in the terminal, on a voice call, on a durable background queue, or as a plain object you call run() on. Image generation and embeddings come in the same box.
Pydantic AI Harness has everything an agent needs for complex, long-running work, snapped on as capabilities, from memory, sub-agents, and context management to a complete coding agent.
View the complete documentation at pydantic.dev/docs/ai.
What are you building?
From simple typed data extraction to complex, long-running multi-agent collaboration, Pydantic AI and Pydantic AI Harness have got you covered.
Coding agent
A complete coding agent in your terminal: workspace-rooted file access, allowlisted shell, repo orientation, planning, and context management that survives long sessions. Here with web search and a second-opinion advisor snapped on alongside:
uv add pydantic-ai pydantic-ai-harness
from pydantic_ai import Agent
from pydantic_ai.capabilities import WebSearch
from pydantic_ai_harness import Advisor, Coder
agent = Agent(
'anthropic:claude-fable-5',
capabilities=[
Coder(), # files, shell, repo context, planning, sub-agents, context management
WebSearch(), # look up docs and error messages on the web
Advisor('openai:gpt-5.6-sol'), # a second opinion from another model when stuck
],
)
agent.to_cli_sync()
Coder is a regular combined capability, not a black box: use it whole, or use the blocks it bundles directly; the two are equivalent:
capabilities = [
FileSystem('.'), Shell(cwd='.'), RepoContext(), Planning(), SubAgents(...),
ClearToolResults(), WarnNearLimits(), ToolOutputLimits(),
]
Run the file and you're chatting with the agent in your terminal. To try it before writing any code, run the exported coder_agent with clai (the Pydantic AI CLI), via uvx:
uvx --with pydantic-ai-harness clai -a pydantic_ai_harness.coder:coder_agent -m anthropic:claude-fable-5
Build this → Coder, from the Harness
Data extraction
Give the agent an output type and tools, and every run comes back validated and typed:
uv add pydantic-ai
from typing import Literal
from pydantic import BaseModel, Field
from pydantic_ai import Agent, RunContext
class Sentiment(BaseModel):
label: Literal['positive', 'negative', 'neutral']
score: float = Field(ge=-1, le=1)
agent = Agent('openai:gpt-5.6-sol', output_type=Sentiment)
@agent.tool
def recent_reviews(ctx: RunContext[None], product: str) -> list[str]:
"""Fetch recent review snippets for a product."""
return ['The new release fixed everything I complained about!']
result = agent.run_sync('How are people feeling about the Extract app?')
print(result.output)
#> label='positive' score=0.9
The @agent.tool function receives a RunContext that carries your dependencies in; the rest of its signature and its docstring become the tool schema, arguments are validated before your code runs, and the run is guaranteed to return a Sentiment, so your IDE, type checker, and the LLM all agree on the returned type.
Build this → Agents, Function Tools, and Structured Output
Realtime voice
Put the same agent on a live voice session, tools and capabilities included:
uv add "pydantic-ai[openai-realtime]"
import asyncio
from pydantic_ai import Agent
from pydantic_ai.capabilities import MCP
agent = Agent(
instructions='You are a helpful voice assistant.',
capabilities=[MCP('https://internal.example.com/mcp')], # capabilities work in voice too
)
@agent.tool_plain
def order_status(order_id: str) -> str:
"""Look up the status of an order."""
return f'Order {order_id}: shipped, arriving Thursday.'
async with agent.realtime('openai:gpt-realtime-2.1').session() as session:
microphone = asyncio.create_task(session.send_audio(microphone_chunks())) # your microphone → the model
speaker = asyncio.create_task(play_audio(session.stream_audio())) # model audio → your speaker
async for part in session.stream_transcripts():
print(f'{part.speaker}: {part.transcript}')