EvenAge - A transparent, Docker-native, observable, distributed agent framework. A superset of CrewAI with explicit communication, real distributed runtime, and local observability.
Project description
EvenAge
A transparent, Docker-native, observable, distributed agent framework.
EvenAge is a superset of CrewAI that removes excessive abstractions and introduces real distributed runtime, local observability, and explicit agent communication.
๐ฏ Philosophy
CrewAI is too abstract, making it nearly impossible to understand or debug what's happening under the hood.
EvenAge fixes this by being:
- Transparent โ All logic (task flow, prompts, tool calls) visible and traceable
- Pluggable โ Configure your own queues, databases, models, or tools
- Observable โ Every agent action recorded via OpenTelemetry
- Containerized โ Everything runs inside Docker for predictable behavior
In short: EvenAge = CrewAI with explicit communication, Docker-native execution, local observability, and zero hidden magic.
๐๏ธ Architecture
Communication Model
Unlike CrewAI's internal synchronous calls, EvenAge uses Redis Streams for explicit message passing:
Controller โ Redis Queue โ Agent Worker โ Redis Response Stream
Each agent runs in its own container and consumes tasks from a dedicated Redis stream.
Services
- PostgreSQL (with pgvector) โ Stores traces, job history, agent metadata
- Redis โ Message bus for task distribution
- MinIO โ S3-compatible storage for artifacts and large payloads
- Jaeger โ OpenTelemetry trace collection and visualization
- Prometheus โ Metrics collection and monitoring
- API Server โ FastAPI server for job submission and queries
- Worker Containers โ One per agent, consumes and processes tasks
- Dashboard โ Real-time monitoring and agent interaction
๐ Quick Start
Installation
# Clone the repository
cd lib/evenage
# Install locally (for now)
pip install -e .
Create a Project
# Initialize a new project
evenage init my_project
# Navigate to project
cd my_project
# Add agents
evenage add agent summarizer
evenage add agent analyzer
# Start the environment
evenage run dev
This will start all services and open the dashboard at http://localhost:5173.
๐ฆ Project Structure
my_project/
โโโ evenage.yml # Project configuration
โโโ docker-compose.yml # Docker services (auto-generated)
โโโ Dockerfile # Container definition
โโโ .env # Environment variables
โโโ agents/ # Agent configurations
โ โโโ summarizer/
โ โ โโโ agent.yml
โ โโโ analyzer/
โ โโโ agent.yml
โโโ tools/ # Custom tools
โ โโโ my_tool.py
โโโ pipelines/ # Pipeline definitions
โโโ analysis_pipeline.yml
๐ค Creating Agents
Add an Agent
evenage add agent researcher
This will:
- Create
agents/researcher/agent.yml - Add worker service to
docker-compose.yml - Register agent in
evenage.yml
Agent Configuration
agents/researcher/agent.yml:
name: researcher
role: Research Specialist
goal: Find and analyze information from various sources
backstory: An expert researcher with years of experience
llm: gpt-4
tools:
- web_search
- document_reader
max_iterations: 15
allow_delegation: false
verbose: true
๐ง Custom Tools
Add a Tool
evenage add tool web_search
Edit tools/web_search.py:
def web_search(query: str, max_results: int = 5) -> str:
"""Search the web for information."""
# Implementation here
return results
๐ Pipelines
Create pipelines/analysis.yml:
name: document_analysis
description: Analyze documents and generate insights
tasks:
- name: summarize
description: Summarize the document: {document}
agent: summarizer
expected_output: A concise summary
- name: analyze
description: Analyze the summary for key insights
agent: analyzer
context: [summarize]
expected_output: Key insights and recommendations
Run a Pipeline
evenage run job pipelines/analysis.yml --input document="report.pdf"
๐ Observability
View Traces
Navigate to Jaeger at http://localhost:16686 to see:
- Task execution traces
- LLM API calls
- Tool invocations
- Error spans
View Metrics
Navigate to Prometheus at http://localhost:9090 to query:
evenage_agent_task_duration_secondsโ Task execution timeevenage_queue_depthโ Pending tasks per agentevenage_tokens_totalโ Token usageevenage_errors_totalโ Error counts
Agent Logs
# View logs for an agent
evenage logs summarizer
# Follow logs in real-time
evenage logs summarizer -f
๐ API Reference
Submit Job
curl -X POST http://localhost:8000/jobs \
-H "Content-Type: application/json" \
-d '{
"pipeline_name": "analysis",
"inputs": {"document": "report.pdf"}
}'
Get Job Status
curl http://localhost:8000/jobs/{job_id}
List Agents
curl http://localhost:8000/agents
๐ Dashboard
Access the dashboard at http://localhost:5173 to:
- View all active agents
- Monitor real-time logs
- Inspect OpenTelemetry traces
- Interact with individual agents
- Visualize job workflows
- Check system health metrics
๐ณ Docker Commands
# Start all services
evenage run dev
# View logs
evenage logs <agent_name>
# Stop all services
evenage stop
# Rebuild containers
docker compose up -d --build
โ๏ธ Configuration
Environment Variables
Edit .env to customize:
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/evenage
REDIS_URL=redis://redis:6379
MINIO_ENDPOINT=minio:9000
OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318
API_HOST=0.0.0.0
API_PORT=8000
Project Configuration
Edit evenage.yml:
project:
name: my_project
broker: redis
database: postgres
storage: minio
tracing: true
metrics: true
agents:
- summarizer
- analyzer
๐ Message Format
Task Message
{
"task_id": "uuid",
"job_id": "uuid",
"source_agent": "controller",
"target_agent": "summarizer",
"payload": {
"description": "Summarize this document",
"context": "...",
"expected_output": "..."
},
"trace_parent": "trace-id",
"created_at": "timestamp"
}
Response Message
{
"task_id": "uuid",
"job_id": "uuid",
"agent_name": "summarizer",
"status": "completed",
"result": {"output": "..."},
"metrics": {
"tokens": 2200,
"latency_ms": 5200
},
"trace_parent": "trace-id",
"completed_at": "timestamp"
}
๐ง Development
Prerequisites
- Python 3.10+
- Docker & Docker Compose
- Git
Setup
# Clone repository
git clone https://github.com/evenage/evenage.git
cd evenage
# Install dependencies
cd lib/evenage
pip install -e .[dev]
# Run tests
pytest
๐ CLI Reference
evenage init [project_name] # Initialize new project
evenage add agent <name> # Add new agent
evenage add tool <name> # Add custom tool
evenage run dev # Start development environment
evenage run job <pipeline> [opts] # Run a pipeline
evenage logs <agent> [-f] # View agent logs
evenage stop # Stop all services
๐ EvenAge vs CrewAI
| Feature | CrewAI | EvenAge |
|---|---|---|
| Communication | Hidden internal calls | Explicit Redis message bus |
| Runtime | In-memory Python | Docker containers per agent |
| Observability | Limited logging | Full OpenTelemetry + Prometheus |
| Scalability | Single process | Distributed workers |
| Transparency | Opaque orchestration | Visible task flow |
| Storage | In-memory | MinIO/S3 for artifacts |
| Monitoring | None | Dashboard + Jaeger + Prometheus |
| Configuration | Code-based | YAML + Docker Compose |
๐ค Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
๐ License
MIT License - see LICENSE for details.
๐ Links
- Documentation: Coming soon
- GitHub: https://github.com/evenage/evenage
- Issues: https://github.com/evenage/evenage/issues
Built with transparency in mind. No hidden magic. Just distributed agents.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evenage-0.1.0.tar.gz.
File metadata
- Download URL: evenage-0.1.0.tar.gz
- Upload date:
- Size: 38.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95b76caf19c615698fe61eced902d3ad684c7af488d2706a38c9cb58acae1082
|
|
| MD5 |
b23f9804ad5835ce93ef274afed8182f
|
|
| BLAKE2b-256 |
118f38ddfefbf2834656b33deaeb8d043fb0f4917c8a047871d94e9c09ad96c0
|
File details
Details for the file evenage-0.1.0-py3-none-any.whl.
File metadata
- Download URL: evenage-0.1.0-py3-none-any.whl
- Upload date:
- Size: 51.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2c90aefcd9a8d7b67f97f56909b370bd786a9e7d93646d4cbbbae664aeac173
|
|
| MD5 |
51eaafb21dabff6b00a98191e425e71a
|
|
| BLAKE2b-256 |
75ae2f1898ad5967698f0dcfd9725e3d71566450fa46eddbaa8ef9f70b9ffbd4
|