Skip to main content

🌐 OmniDaemon

Universal Event-Driven Runtime Engine for AI Agents

Run any AI agent. Any framework. One event-driven control plane. Created by Abiola Adeshina β€’ From the team behind OmniCoreAgent

🎯 What is OmniDaemon?

β€œKubernetes for AI Agents” - A universal runtime that makes AI agents autonomous, observable, and scalable.
OmniDaemon transforms AI from static reasoning engines into event-driven, self-operating entities that integrate seamlessly across clouds, data streams, and enterprise environments.

In 5 Seconds

  • πŸ€– Run AI agents in the background (not chatbots, not APIs)
  • πŸ“¨ Event-driven (agents react to events, not HTTP requests)
  • πŸ”Œ Use any AI framework (OmniCore Agent, Google ADK, LangChain, or custom)
  • πŸš€ Production-ready (retries, DLQ, metrics, scaling built-in)

🌊 Why Event-Driven AI? The Evolution Story

The AI Evolution: Three Waves

AI has progressed through distinct waves, each unlocking new possibilities but also introducing critical limitations.

Wave 1: Predictive Models (Traditional ML)

The first wave focused on narrowly defined, domain-specific tasks.
Training Data β†’ ML Model β†’ Predictions for Specific Use Case
Limitations:
  • ❌ Domain-specific and rigid
  • ❌ Required ML expertise for each use case
  • ❌ Difficult to repurpose
  • ❌ Lacked scalability

Wave 2: Generative Models (LLMs)

Generative AI revolutionized capabilities by training on vast, diverse datasets.
Massive Dataset β†’ LLM β†’ Generate Text, Images, Code
Breakthrough: Generalization across contexts Limitations:
  • ❌ Fixed in time (no dynamic information)
  • ❌ Expensive to fine-tune
  • ❌ No access to private/domain data
  • ❌ Generic responses without context
Example Problem:
β€œRecommend an insurance policy tailored to my health history, location, and financial goals.”
The LLM can’t deliver accurate recommendations because it lacks access to your personal data. Without it, responses are either generic or wrong. Solution: Compound AI (RAG) Retrieval-Augmented Generation bridges the gap:
  1. Retrieve user’s health and financial data from database
  2. Add data to context during prompt assembly
  3. LLM generates accurate, personalized response
Database β†’ Retrieve Context β†’ LLM + Context β†’ Accurate Response
RAG Limitation: Fixed workflows. Every interaction path must be pre-defined. This rigidity makes it impractical for complex, dynamic tasks.

Wave 3: Agentic AI (Current)

The future of AI lies with autonomous agents β€” systems that think, adapt, and act independently.
Event β†’ Agent Reasons β†’ Uses Tools β†’ Adapts Workflow β†’ Takes Action
Why Agents Are Different:
  • βœ… Dynamic workflows (figure out next steps on the fly)
  • βœ… Context-driven (adapt to the situation)
  • βœ… Autonomous (no pre-defined paths needed)
  • βœ… Tool use (access external systems)
  • βœ… Memory (learn from past interactions)
Industry Validation:
β€œAgents are the new apps.” β€” Dharmesh Shah, HubSpot CTO
β€œWe’ve reached the upper limits of what LLMs can do. The future lies with autonomous agents.” β€” Marc Benioff, Salesforce CEO (The Wall Street Journal, β€œFuture of Everything” podcast)
Google’s Gemini and OpenAI’s Orion are reportedly hitting limits despite larger training datasets. The next breakthrough isn’t bigger models β€” it’s agentic systems.

πŸ—οΈ Why Agents Need Event-Driven Architecture

The Infrastructure Problem

AI agents aren’t just an AI problem β€” they’re a distributed systems problem. Agents need:
  • πŸ“Š Access to data from multiple sources
  • πŸ”§ Ability to use tools and external systems
  • 🀝 Communication with other agents
  • 🌐 Outputs available to multiple services
  • ⚑ Real-time responsiveness
  • πŸ“ˆ Horizontal scalability
This isn’t about better models. It’s about better infrastructure.

The Tight Coupling Problem

You could connect agents via APIs and RPC, but that creates:
❌ Tightly Coupled Architecture
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent 1 │────▢│ Agent 2 │────▢│ Agent 3 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
     β”‚               β”‚               β”‚
     β–Ό               β–Ό               β–Ό
  [Fails] ───────▢ [Fails] ─────▢ [Fails]

Problems:
β€’ If one agent fails, entire chain breaks
β€’ Hard to scale individual agents
β€’ Changes ripple through system
β€’ Difficult to add new agents
β€’ Can't support multiple consumers

The Event-Driven Solution

Event-Driven Architecture (EDA) solves this through loose coupling:
βœ… Event-Driven Architecture
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚   Event Bus      β”‚
        β”‚ (Redis Streams)  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         ↑      ↑      ↑
         β”‚      β”‚      β”‚
    β”Œβ”€β”€β”€β”€β”΄β”€β”€β” β”Œβ”΄β”€β”€β”€β”€β” β”Œβ”΄β”€β”€β”€β”€β”
    β”‚Agent 1β”‚ β”‚Agentβ”‚ β”‚Agentβ”‚
    β”‚       β”‚ β”‚  2  β”‚ β”‚  3  β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜

Benefits:
βœ… Agents don't depend on each other
βœ… Scale agents independently
βœ… Add/remove agents dynamically
βœ… Multiple consumers per event
βœ… Automatic retries & DLQ
βœ… Message persistence

Agents as Microservices

Like microservices, agents are:
  • Autonomous - Operate independently
  • Decoupled - Don’t depend on each other
  • Scalable - Add more instances for load
But agents go further:
  • Context-rich - Need shared information to reason
  • Tool-enabled - Interact with external systems
  • Collaborative - Share insights with other agents
  • Adaptive - Modify behavior based on events
The Challenge: Managing these informational dependencies without tight coupling. The Solution: EDA provides a β€œcentral nervous system” for data flow.

πŸš€ What OmniDaemon Provides

Traditional AI (Request-Driven)

User asks β†’ AI responds β†’ Done ❌

OmniDaemon (Event-Driven)

Event happens β†’ AI agent reacts β†’ Result stored βœ…
              β†’ Multiple agents listen
              β†’ Automatic retries
              β†’ DLQ for failures

Core Features

FeatureWhat It Means
πŸ€– Run Any AI AgentOmniCore Agent, Google ADK, LangChain, CrewAI, AutoGen, LlamaIndex, or custom
πŸ“¨ Event-DrivenAgents listen to topics, not HTTP endpoints
πŸ”„ Auto RetriesFailed tasks retry automatically (configurable)
πŸ’€ Dead Letter QueueFailed messages go to DLQ for analysis
πŸ“Š Real-time MetricsTasks received, processed, failed, timing
πŸŽ›οΈ Full ControlBeautiful CLI + HTTP API for management
βš–οΈ Horizontal ScalingRun multiple agent instances for load balancing
πŸ”Œ PluggableSwap backends via environment variables (no code changes!)

Pluggable Architecture

The Simple Truth: You provide the URL, OmniDaemon handles EVERYTHING else!
# Event Bus - Switch backends with NO code changes
EVENT_BUS_TYPE=redis_stream + REDIS_URL=...         # Current
EVENT_BUS_TYPE=rabbitmq + RABBITMQ_URL=...          # Coming soon
EVENT_BUS_TYPE=kafka + KAFKA_SERVERS=...            # Coming soon

# Storage - Switch backends with NO code changes  
STORAGE_BACKEND=json + JSON_STORAGE_DIR=...         # Development
STORAGE_BACKEND=redis + REDIS_URL=...               # Production
STORAGE_BACKEND=postgresql + POSTGRES_URL=...       # Coming soon
STORAGE_BACKEND=mongodb + MONGODB_URI=...           # Coming soon
Your agent code NEVER changes. Just update environment variables!

🎯 When to Use OmniDaemon

βœ… Perfect For

  • Background AI Agents - Autonomous agents that react to events
  • Event-Driven Workflows - Multi-step AI processing pipelines
  • Multi-Agent Systems - Multiple agents collaborating on tasks
  • Async AI Processing - Long-running AI tasks (not real-time chat)
  • Enterprise AI Ops - Scalable, observable, production AI systems
  • Simple HTTP APIs - Use FastAPI/Flask directly (simpler)
  • Real-Time Chat - Use WebSockets/SSE (lower latency)
  • Synchronous Request-Response - Use REST APIs (simpler architecture)
  • Single-Shot Scripts - Use Python scripts directly (no runtime needed)

πŸ†š Compared to Alternatives

ToolUse Casevs OmniDaemon
CeleryTask queues❌ Not AI-first, complex setup, no agent abstraction
AWS LambdaServerless functions❌ Cold starts, time limits, vendor lock-in
TemporalWorkflow engine❌ Heavy, complex, not AI-optimized
AirflowDAG orchestration❌ Batch-oriented, not real-time events
OmniDaemonAI Agent Runtimeβœ… AI-first, event-driven, any framework, production-ready

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         OmniDaemon                              β”‚
β”‚                   Universal Runtime Engine                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                     β”‚                     β”‚
        β–Ό                     β–Ό                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Event Bus   β”‚    β”‚   Storage    β”‚    β”‚ Agent Runner β”‚
β”‚ (Pluggable!) β”‚    β”‚ (Pluggable!) β”‚    β”‚  (Your Code) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ Streams    β”‚    β”‚ β€’ Agents     β”‚    β”‚ β€’ Register   β”‚
β”‚ β€’ Pub/Sub    β”‚    β”‚ β€’ Results    β”‚    β”‚ β€’ Subscribe  β”‚
β”‚ β€’ DLQ        β”‚    β”‚ β€’ Metrics    β”‚    β”‚ β€’ Process    β”‚
β”‚ β€’ Groups     β”‚    β”‚ β€’ Config     β”‚    β”‚ β€’ Respond    β”‚
β”‚              β”‚    β”‚              β”‚    β”‚              β”‚
β”‚ Redis βœ…     β”‚    β”‚ Redis βœ…     β”‚    β”‚              β”‚
β”‚ Kafka 🚧     β”‚    β”‚ JSON βœ…      β”‚    β”‚              β”‚
β”‚ RabbitMQ 🚧  β”‚    β”‚ Postgres 🚧  β”‚    β”‚              β”‚
β”‚ NATS 🚧      β”‚    β”‚ MongoDB 🚧   β”‚    β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                     β”‚                     β”‚
        β”‚                     β”‚                     β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                     β”‚                     β”‚
        β–Ό                     β–Ό                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     CLI      β”‚    β”‚     API      β”‚    β”‚     SDK      β”‚
β”‚   (Typer)    β”‚    β”‚  (FastAPI)   β”‚    β”‚  (Python)    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ Commands   β”‚    β”‚ β€’ REST       β”‚    β”‚ β€’ Register   β”‚
β”‚ β€’ Rich UI    β”‚    β”‚ β€’ Endpoints  β”‚    β”‚ β€’ Publish    β”‚
β”‚ β€’ Monitoring β”‚    β”‚ β€’ Webhooks   β”‚    β”‚ β€’ Query      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Components

  1. Event Bus (Pluggable) - Message broker for event distribution
    • Currently: Redis Streams
    • Coming: Kafka, RabbitMQ, NATS
  2. Storage (Pluggable) - Persistent layer for agents, results, metrics
    • Currently: Redis, JSON
    • Coming: PostgreSQL, MongoDB, S3
  3. Agent Runner - Orchestrates agent execution and lifecycle
  4. CLI - Beautiful command-line interface (powered by Rich)
  5. API - RESTful HTTP API (powered by FastAPI)
  6. SDK - Python SDK for agent integration

πŸš€ Quick Start

Get OmniDaemon running in 5 minutes:
# 1. Install Redis (event bus backend)
docker run -d -p 6379:6379 --name redis redis:latest

# 2. Install OmniDaemon (using uv - recommended)
uv add omnidaemon
# Or with pip: pip install omnidaemon

# 3. Create your first agent
cat > agent_runner.py << 'EOF'
import asyncio
from omnidaemon import OmniDaemonSDK
from omnidaemon import AgentConfig

sdk = OmniDaemonSDK()

async def greeter(message: dict):
    """Your AI agent runs here!"""
    name = message.get("content", {}).get("name", "stranger")
    return {"reply": f"Hello, {name}! πŸ‘‹"}

async def main():
    await sdk.register_agent(
        agent_config=AgentConfig(
            topic="greet.user",
            callback=greeter,
        )
    )
    await sdk.start()
    print("🎧 Agent running. Press Ctrl+C to stop.")
    
    try:
        while True:
            await asyncio.sleep(1)
    except KeyboardInterrupt:
        pass
    finally:
        await sdk.shutdown()

if __name__ == "__main__":
    asyncio.run(main())
EOF

# 4. Run your agent
python agent_runner.py
πŸŽ‰ Your AI agent is now running and listening for events! β†’ Continue with Full Tutorial

πŸ“š What’s Next?

For New Users

  1. Getting Started - Understand core concepts
  2. Quick Start Tutorial - Build your first agent in 10 minutes
  3. Complete Examples - Real-world agent implementations

For Developers

  1. How-To Guides - Solve specific problems
  2. Common Patterns - Production-ready recipes
  3. API Reference - Complete SDK documentation

For Architects

  1. Architecture & Design - Deep dive into system design
  2. Enterprise - Use cases and deployment guide

🌟 Learn More


πŸ“– References

This documentation is inspired by Sean Falconer’s article: β€œThe Future of AI Agents is Event-Driven”

πŸ‘¨β€πŸ’» About

Created by Abiola Adeshina and the OmniDaemon Team From the creators of OmniCore Agent β€” building the future of event-driven AI systems ⭐ Star on GitHub Β· πŸ› Report Bug Β· πŸ’‘ Request Feature