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

# Configure API keys in .env
# Edit .env and add your GEMINI_API_KEY and SERPER_API_KEY

# Start the environment (includes default researcher agent)
evenage run dev

This will start all services with a working researcher agent and web_search tool ready to use.

What's included out-of-the-box:

  • Default researcher agent with Gemini 2.0 Flash
  • web_search tool powered by Serper.dev
  • Sample research_pipeline.yml
  • Full observability stack (Jaeger, Prometheus, Dashboard)

Access the dashboard at http://localhost:5173 to interact with your agents.

๐Ÿ“ฆ 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

Note: A default researcher agent with web_search tool is created automatically when you run evenage init.

Agent Configuration

agents/researcher/agent.yml:

name: researcher
role: Research Agent
goal: Research topics on the web and summarize findings concisely
backstory: A helpful researcher that gathers and condenses information from reliable web sources
llm:
  provider: gemini
  model: gemini-2.5-flash
  api_key: ${GEMINI_API_KEY}
  temperature: 0.7
  max_tokens: 2048
tools:
  - web_search
max_iterations: 15
allow_delegation: false
verbose: true

LLM Providers

EvenAge supports multiple LLM providers:

  • Gemini (default) - Google's Gemini models
  • OpenAI - GPT-4, GPT-3.5, etc.
  • Anthropic - Claude models
  • Groq - Fast inference
  • Ollama - Local models
  • llama.cpp - Local C++ inference

Set your API keys in .env:

GEMINI_API_KEY=your_key_here
OPENAI_API_KEY=your_key_here
ANTHROPIC_API_KEY=your_key_here
GROQ_API_KEY=your_key_here

๐Ÿ”ง Custom Tools

Default Tool: web_search

A web_search tool using Serper.dev is included by default:

# tools/web_search.py
def web_search(query: str, max_results: int = 5) -> str:
    """Search the web using Serper.dev API."""
    # Uses SERPER_API_KEY from .env
    # Get your free API key at https://serper.dev

Setup: Add your Serper.dev API key to .env:

SERPER_API_KEY=your_serper_key_here

Add More Tools

evenage add tool my_custom_tool

Edit tools/my_custom_tool.py:

def my_custom_tool(param: str) -> str:
    """Your custom tool logic."""
    return result

๐Ÿ“‹ Pipelines

A sample pipeline (research_pipeline.yml) is created automatically on init.

Example Pipeline

pipelines/research_pipeline.yml:

name: research_pipeline
description: Example research pipeline using the researcher agent
tasks:
  - name: search_topic
    description: "Search the web for information about: {topic}"
    agent: researcher
    expected_output: A comprehensive summary of web search results
    tools:
      - web_search
    async_execution: false
    
  - name: analyze_results
    description: Analyze the search results and extract key insights
    agent: researcher
    expected_output: Key insights and recommendations based on the research
    context:
      - search_topic
    async_execution: false

Run a Pipeline

evenage run pipeline pipelines/analysis.yml

Note: Pipeline inputs are defined in the YAML file or can be passed via API.

๐Ÿ” 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 agent <agent>            # Run single agent locally
evenage run pipeline <file.yml>      # Run a pipeline
evenage logs <agent>                 # 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.9.1.tar.gz (93.3 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.9.1-py3-none-any.whl (112.9 kB view details)

Uploaded Python 3

File details

Details for the file evenage-0.9.1.tar.gz.

File metadata

  • Download URL: evenage-0.9.1.tar.gz
  • Upload date:
  • Size: 93.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.6

File hashes

Hashes for evenage-0.9.1.tar.gz
Algorithm Hash digest
SHA256 f8d36b39709f411a1ad5516d2669fb9e862fbf647bb5f7d0ed95a1e541c094e9
MD5 a54d9b13a831ff63ed330081a82aaf89
BLAKE2b-256 ddeb247ab7b59bee83e953783b3e92d0a0a04999403fa18a895888215e818230

See more details on using hashes here.

File details

Details for the file evenage-0.9.1-py3-none-any.whl.

File metadata

  • Download URL: evenage-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 112.9 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.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bf11033e199b8e17fcd068616133ab7a6e65f95a3472e792c3b55d8e6c99f874
MD5 195a3055a30f1a39933c7792fbde39f8
BLAKE2b-256 b382d6d91ad8c7432b9340865f71b8e5f78252e4d9b58feba4da4ae5e327a30f

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