Self-hosted AI agent backend. LangGraph power without vendor lock-in.
Replace LangGraph Platform with your own infrastructure. Built with FastAPI + PostgreSQL for developers who demand complete control over their agent orchestration.
π Agent Protocol Compliant: Aegra implements the Agent Protocol specification, an open-source standard for serving LLM agents in production.
π― Perfect for: Teams escaping vendor lock-in β’ Data sovereignty requirements β’ Custom deployments β’ Cost optimization
- π€ Human-in-the-Loop Support: Interactive agent workflows with approval gates and user intervention points
- π Langfuse Integration: Complete observability and tracing for your agent runs with automatic metadata capture
Aegra is participating in Hacktoberfest! We welcome meaningful contributions.
What we're looking for:
- Feature development and enhancements
- Bug fixes that improve stability
- Substantial documentation improvements
- Testing and feedback on real use cases
What we're NOT looking for:
- Single typo fixes
- Whitespace changes
- Low-effort PRs for swag hunting
Quality over quantity. If you're here to build something real, we'd love your help.
Check out our Contributing Guidelines and open issues to get started.
Feature | LangGraph Platform | Aegra (Self-Hosted) |
---|---|---|
Cost | $$$+ per month | Free (self-hosted), infra-cost only |
Data Control | Third-party hosted | Your infrastructure |
Vendor Lock-in | High dependency | Zero lock-in |
Customization | Platform limitations | Full control |
API Compatibility | LangGraph SDK | Same LangGraph SDK |
Authentication | Lite: no custom auth | Custom auth (JWT/OAuth/Firebase/NoAuth) |
Database Ownership | No bring-your-own database | BYO Postgres (you own credentials and schema) |
Tracing/Telemetry | Forced LangSmith in SaaS | Your choice (Langfuse/None) |
- π Self-Hosted: Run on your infrastructure, your rules
- π Drop-in Replacement: Use existing LangGraph Client SDK without changes
- π‘οΈ Production Ready: PostgreSQL persistence, streaming, authentication
- π Zero Vendor Lock-in: Apache 2.0 license, open source, full control
- π Fast Setup: 5-minute deployment with Docker
- π Agent Protocol Compliant: Implements the open-source Agent Protocol specification
- π¬ Agent Chat UI Compatible: Works seamlessly with LangChain's Agent Chat UI
- Python 3.11+
- Docker (for PostgreSQL)
- uv (Python package manager)
# Clone and setup
git clone https://github.com/ibbybuilds/aegra.git
cd aegra
# Install uv if missing
curl -LsSf https://astral.sh/uv/install.sh | sh
# Sync env and dependencies
uv sync
# Activate environment
source .venv/bin/activate # Mac/Linux
# OR .venv/Scripts/activate # Windows
# Environment
cp .env.example .env
# Start everything (database + migrations + server)
docker compose up aegra
# Health check
curl http://localhost:8000/health
# Interactive API docs
open http://localhost:8000/docs
You now have a self-hosted LangGraph Platform alternative running locally.
Aegra works seamlessly with LangChain's Agent Chat UI. Simply set NEXT_PUBLIC_API_URL=http://localhost:8000
and NEXT_PUBLIC_ASSISTANT_ID=agent
in your Agent Chat UI environment to connect to your Aegra backend.
New to database migrations? Check out our guides:
- π Developer Guide - Complete setup, migrations, and development workflow
- β‘ Migration Cheatsheet - Quick reference for common commands
Quick Development Commands:
# Docker development (recommended)
docker compose up aegra
# Local development
docker compose up postgres -d
python3 scripts/migrate.py upgrade
python3 run_server.py
# Create new migration
python3 scripts/migrate.py revision --autogenerate -m "Add new feature"
Use the same LangGraph Client SDK you're already familiar with:
import asyncio
from langgraph_sdk import get_client
async def main():
# Connect to your self-hosted Aegra instance
client = get_client(url="http://localhost:8000")
# Create assistant (same API as LangGraph Platform)
assistant = await client.assistants.create(
graph_id="agent",
if_exists="do_nothing",
config={},
)
assistant_id = assistant["assistant_id"]
# Create thread
thread = await client.threads.create()
thread_id = thread["thread_id"]
# Stream responses (identical to LangGraph Platform)
stream = client.runs.stream(
thread_id=thread_id,
assistant_id=assistant_id,
input={
"messages": [
{"type": "human", "content": [{"type": "text", "text": "hello"}]}
]
},
stream_mode=["values", "messages-tuple", "custom"],
on_disconnect="cancel",
)
async for chunk in stream:
print(f"event: {getattr(chunk, 'event', None)}, data: {getattr(chunk, 'data', None)}")
asyncio.run(main())
Key Point: Your existing LangGraph applications work without modification! π
Client β FastAPI β LangGraph SDK β PostgreSQL
β β β β
Agent HTTP State Persistent
SDK API Management Storage
- FastAPI: Agent Protocol-compliant HTTP layer
- LangGraph: State management and graph execution
- PostgreSQL: Durable checkpoints and metadata
- Agent Protocol: Open-source specification for LLM agent APIs
- Config-driven:
aegra.json
for graph definitions
aegra/
βββ aegra.json # Graph configuration
βββ auth.py # Authentication setup
βββ graphs/ # Agent definitions
β βββ react_agent/ # Example ReAct agent
βββ src/agent_server/ # FastAPI application
β βββ main.py # Application entrypoint
β βββ core/ # Database & infrastructure
β βββ models/ # Pydantic schemas
β βββ services/ # Business logic
β βββ utils/ # Helper functions
βββ tests/ # Test suite
βββ deployments/ # Docker & K8s configs
Copy .env.example
to .env
and configure values:
cp .env.example .env
# Database
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/aegra
# Authentication (extensible)
AUTH_TYPE=noop # noop, custom
# Server
HOST=0.0.0.0
PORT=8000
DEBUG=true
# LLM Providers
OPENAI_API_KEY=sk-...
# ANTHROPIC_API_KEY=...
# TOGETHER_API_KEY=...
aegra.json
defines your agent graphs:
{
"graphs": {
"agent": "./graphs/react_agent/graph.py:graph"
}
}
- Agent Protocol-compliant REST endpoints
- Persistent conversations with PostgreSQL checkpoints
- Streaming responses with network resilience
- Config-driven agent graph management
- Compatible with LangGraph Client SDK
- Human-in-the-loop support
- Langfuse integration for observability and tracing
- Docker containerization
- Database migrations with Alembic
- Comprehensive test suite
- Authentication framework (JWT/OAuth ready)
- Health checks and monitoring endpoints
- Interactive API documentation (FastAPI)
- Hot reload in development
- Clear error messages and logging
- Extensible architecture
- π Developer Guide - Complete setup, migrations, and development workflow
- β‘ Migration Cheatsheet - Quick reference for common commands
β Completed
- Agent Chat UI compatibility
- Agent Protocol API implementation
- PostgreSQL persistence and streaming
- Authentication framework
- Human-in-the-loop support
- Langfuse integration
π― Next
- Custom HTTP endpoints support
- Generative user interfaces support
- Redis-backed streaming buffers
- Advanced deployment recipes
π Future
- Performance optimizations
- Custom UI themes and branding
- Aegra CLI for migration and image building
We welcome contributions! Here's how you can help:
π Issues & Bugs
- Report bugs with detailed reproduction steps
- Suggest new features and improvements
- Help with documentation
π» Code Contributions
- Improve Agent Protocol spec alignment
- Add authentication backends
- Enhance testing coverage
- Optimize performance
π Documentation
- Deployment guides
- Integration examples
- Best practices
Get Started: Check out CONTRIBUTING.md, our Developer Guide, and our good first issues.
Apache 2.0 License - see LICENSE file for details.
β If Aegra helps you escape vendor lock-in, please star the repo! β
Built with β€οΈ by developers who believe in infrastructure freedom