AgentFlow — From Agent Code to Production API in Minutes
Source: Dev.to
Why AgentFlow?
Most agent frameworks stop at the prototype. You get a cute demo, then spend weeks bolting on auth, rate limiting, persistence, and a frontend. AgentFlow is built for what comes after the demo.
One framework. From the first pip install to production Docker deploy.
🔗 Links
| Resource | URL |
|---|---|
| Core Python Library | |
| API & CLI | |
| Documentation | |
| PyPI — Core | |
| PyPI — CLI |
The Full Stack
agentflow → Core Python orchestration engine
agentflow-cli → FastAPI server + CLI tooling
agentflow-client → TypeScript/React SDK (@10xscale/agentflow-client)
agentflow-playground → Hosted UI for testing agents
Use any layer alone or combine them for a complete AI product stack — from LLM call to browser UI — without stitching four different libraries together.
Get Running in 60 Seconds
pip install 10xscale-agentflow-cli
agentflow init # scaffold a new project
agentflow api # start the dev server
agentflow play # open the playground UI
That’s it. Your agent is running, streamed, and explorable in under a minute.
What You Get
Graph‑Based Agent Orchestration
AgentFlow uses a StateGraph — directed nodes, conditional edges, and full control over execution flow. No black boxes. No magic routing you can’t debug.
from agentflow.graph import Agent, StateGraph, ToolNode
from agentflow.state import AgentState, Message
from agentflow.utils.constants import END
def get_weather(location: str) -> str:
"""Get weather for a location."""
return f"The weather in {location} is sunny, 72°F"
graph = StateGraph()
graph.add_node(
"MAIN",
Agent(
model="gemini/gemini-2.5-flash",
system_prompt=[{"role": "system", "content": "You are a helpful assistant."}],
tool_node_name="TOOL",
),
)
graph.add_node("TOOL", ToolNode([get_weather]))
def route(state: AgentState) -> str:
if state.context and state.context[-1].tools_calls:
return "TOOL"
return END
graph.add_conditional_edges("MAIN", route, {"TOOL": "TOOL", END: END})
graph.add_edge("TOOL", "MAIN")
graph.set_entry_point("MAIN")
app = graph.compile()
result = app.invoke(
{"messages": [Message.text_message("Weather in NYC?")]},
config={"thread_id": "1"},
)
Stateful. Tool‑calling. Under 30 lines.
LLM‑Agnostic
Pass the model string; AgentFlow routes it.
| Provider | Package |
|---|---|
| OpenAI (GPT‑4o, o1, etc.) | pip install openai |
| Google Gemini + Vertex AI | pip install google-genai |
| Anthropic Claude | pip install anthropic (coming soon) |
No provider‑specific abstractions to learn. Swap models without touching your agent logic.
Parallel Tool Execution — Automatic
When an LLM calls multiple tools at once, AgentFlow runs them concurrently. No config required.
Other frameworks: 1.0s + 1.5s + 0.8s = 3.3s
AgentFlow: max(1.0s, 1.5s, 0.8s) = 1.5s ⚡ 2.2x faster
Production Memory — Three Layers
Working Memory → Current execution state (AgentState)
Session Memory → Redis (hot) + PostgreSQL (durable) checkpointer
Knowledge Memory → Qdrant vector store + Mem0 semantic recall
Redis keeps hot conversation state fast. PostgreSQL keeps it durable and horizontally scalable. Both run together — you don’t have to pick one.
Streaming
stream_gen = app.astream(
inp,
config=config,
response_granularity=ResponseGranularity.LOW,
)
async for chunk in stream_gen:
print(chunk.model_dump())
Three granularity levels: token‑by‑token (ChatGPT‑style), message‑by‑message, or node‑by‑node graph traces. Your frontend decides what to show.
Auth and Security — Built In, Not Bolted On
Most frameworks leave auth as an exercise for the reader. AgentFlow ships it.
{ "auth": "jwt" }
{ "auth": null }
{ "auth": { "method": "custom", "path": "auth.my_backend:MyAuth" } }
One line in agentflow.json. Switch from dev to production auth without touching your graph code.
Security features included:
- JWT authentication with configurable secrets
- Custom auth backends for OAuth2, API keys, and sessions
- Role‑Based Access Control (RBAC)
- Sliding‑window rate limiting (memory or Redis backends)
- Configurable request‑size limits (DoS protection, default 10 MB)
- Auto‑redaction of tokens and secrets from logs
- Startup validation — warns about insecure CORS and debug mode before you accidentally deploy them
Lifecycle Callbacks
Hook into every layer of execution — before and after each LLM call, tool call, or MCP invocation. Hook into the graph itself for start, end, checkpoint, interrupt, resume, and error events. Use them for logging, tracing, custom metrics, or dynamic graph modifications.
Quick Start Recap
pip install 10xscale-agentflow-cli
agentflow init
agentflow api
agentflow play
You now have a production‑ready, auth‑protected, streaming‑enabled, multi‑agent AI stack ready to ship.
AgentFlow Overview
AgentFlow lets you build production‑grade LLM agents with a graph‑based DSL, automatic persistence, parallel tool execution, and a full‑stack CLI. No boilerplate, no custom state management.
The CLI
agentflow init # Scaffold project + config
agentflow api # Dev server with auto‑reload
agentflow play # Open playground against local backend
agentflow build --docker-compose # Generate Dockerfile + compose
Auto‑generated FastAPI Endpoints
| Endpoint | Method | Description |
|---|---|---|
/invoke | POST | Synchronous agent call |
/stream | POST | Streaming agent call |
/threads | GET | List conversation threads |
/threads/{id} | GET | Fetch thread history |
/threads/{id} | DELETE | Delete thread |
Your agent graph becomes a production API—no FastAPI boilerplate required.
Dependency Injection with InjectQ
from agentflow.utils import tool
@tool(tags=["weather"])
async def get_weather(
location: str,
user_id: str = Inject(UserService)
) -> str:
"""Get weather for a location."""
return f"Weather for user {user_id} in {location}: sunny"
- Clean, testable tools.
- Per‑request context without global state.
Human‑in‑the‑Loop
- Pause execution mid‑graph.
- Inject a human decision.
- Resume with full state intact—no re‑running prior steps.
Use cases: approval workflows, moderation gates, interactive debugging.
Event Publishing
| Publisher | Use Case |
|---|---|
| Redis Pub/Sub | Lightweight in‑process distribution |
| Kafka | High‑volume event streaming |
| RabbitMQ | Reliable queuing, distributed systems |
| Console | Local debugging |
| Custom | Any backend you want |
React/TypeScript Client SDK
@10xscale/agentflow-client provides React hooks (useAgent, useStream, useThreads), token‑level streaming for ChatGPT‑style UIs, and client‑side tool execution. The frontend talks to your AgentFlow API without custom integration code.
Feature Comparison
| Feature | AgentFlow | LangGraph | CrewAI | AutoGen |
|---|---|---|---|---|
| Architecture | Graph | Graph | Role‑Based | Conversational |
| Full Stack (Backend + Frontend SDK) | ✅ | ❌ | ❌ | ❌ |
| Parallel Tool Execution | ✅ Auto | ⚠️ Config | ❌ | ❌ |
| Persistence | ✅ Redis + Postgres | ⚠️ Postgres/SQLite | ⚠️ Local | ⚠️ Local |
| Dependency Injection | ✅ Native | ❌ | ❌ | ❌ |
| CLI + Docker Deployment | ✅ One command | ❌ | ❌ | ❌ |
| Auth Built‑In | ✅ JWT + Custom | ❌ | ❌ | ❌ |
| Rate Limiting | ✅ Memory + Redis | ❌ | ❌ | ❌ |
| Lifecycle Callbacks | ✅ Full | ⚠️ Manual | ❌ | ⚠️ Manual |
| MCP Support | ✅ Native | ⚠️ Partial | ❌ | ❌ |
| Event Publishing | ✅ Kafka/Redis/AMQP | ❌ | ❌ | ❌ |
| Open Source (MIT) | ✅ | ✅ | ✅ | ✅ |
Installation
# Core library
pip install 10xscale-agentflow
# Full CLI + API server
pip install 10xscale-agentflow-cli
Optional extras
pip install 10xscale-agentflow[pg_checkpoint] # PostgreSQL + Redis persistence
pip install 10xscale-agentflow[mcp] # Model Context Protocol
pip install 10xscale-agentflow[google-genai] # Google GenAI adapter
pip install 10xscale-agentflow[kafka] # Kafka event publishing
pip install 10xscale-agentflow[redis] # Redis publisher + rate limiting
Current Version
| Package | Version |
|---|---|
10xscale-agentflow (core) | v0.7.4 |
10xscale-agentflow-cli | v0.3.2 |
Added in v0.7.x: multimodal support (images, audio, video), extended reasoning / chain‑of‑thought, 3‑layer memory, callback and lifecycle hooks, agent skills, Vertex AI support, structured Pydantic outputs.
Roadmap
- ✅ Graph engine with nodes, edges, and conditional routing
- ✅ Redis + PostgreSQL state checkpointing
- ✅ Tool integration — local Python, MCP, optional adapters
- ✅ Parallel tool execution
- ✅ Lifecycle callbacks and graph hooks
- ✅ Streaming + event publishing
- ✅ Human‑in‑the‑loop
- ✅ Multimodal agents
- 🚧 Remote node execution for distributed processing
- 🚧 OpenTelemetry tracing
- 🚧 More persistence backends (DynamoDB, etc.)
- 🚧 Visual graph editor
Privacy & Licensing
- MIT License – free for commercial use.
- No data collection – conversations stay on your infrastructure.
- No per‑call billing – you only pay for your LLM API and infra.
- Deploy anywhere – Docker, Kubernetes, AWS ECS, Cloud Run, Azure, Heroku.
Links
| Resource | URL |
|---|---|
| Core Library | |
| API & CLI | |
| Documentation | |
| PyPI Core | |
| PyPI CLI | |
| Issues & Requests | |
| Discussions |
Built by 10xScale and the community. MIT licensed.