Skip to main content

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:

  1. Create agents/researcher/agent.yml
  2. Add worker service to docker-compose.yml
  3. 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 time
  • evenage_queue_depth โ€” Pending tasks per agent
  • evenage_tokens_total โ€” Token usage
  • evenage_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


Built with transparency in mind. No hidden magic. Just distributed agents.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evenage-0.1.0.tar.gz (38.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evenage-0.1.0-py3-none-any.whl (51.2 kB view details)

Uploaded Python 3

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

Hashes for evenage-0.1.0.tar.gz
Algorithm Hash digest
SHA256 95b76caf19c615698fe61eced902d3ad684c7af488d2706a38c9cb58acae1082
MD5 b23f9804ad5835ce93ef274afed8182f
BLAKE2b-256 118f38ddfefbf2834656b33deaeb8d043fb0f4917c8a047871d94e9c09ad96c0

See more details on using hashes here.

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

Hashes for evenage-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b2c90aefcd9a8d7b67f97f56909b370bd786a9e7d93646d4cbbbae664aeac173
MD5 51eaafb21dabff6b00a98191e425e71a
BLAKE2b-256 75ae2f1898ad5967698f0dcfd9725e3d71566450fa46eddbaa8ef9f70b9ffbd4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page