E.D.D.I (Enhanced Dialog Driven Interface) is a production-grade, config-driven multi-agent orchestration middleware for conversational AI. It coordinates users, AI agents, and business systems through intelligent routing, persistent memory, and API orchestration — without writing code.
Built with Java 25 and Quarkus. Ships as a Red Hat-certified Docker image. Native support for MCP (Model Context Protocol), A2A (Agent-to-Agent), Slack, OpenAPI, and OAuth 2.0.
Latest version: 6.0.1 · Website · Documentation · License: Apache 2.0
- 🏁 Quick Start
- 💡 Why EDDI?
- 📸 See It In Action
- ✨ Features
- 🧩 Quarkus SDK
- 📖 Documentation
- 📋 Compliance & Privacy
- 🏗️ Development
- 🤝 Contributing
- 🔒 Security
- 📜 Code of Conduct
The fastest way to get EDDI running is the one-command installer. It sets up EDDI + your choice of database via Docker Compose, deploys the Agent Father starter agent, and walks you through creating your first AI agent.
Linux / macOS / WSL2:
curl -fsSL https://raw.githubusercontent.com/labsai/EDDI/main/install.sh | bashWindows (PowerShell):
iwr -useb https://raw.githubusercontent.com/labsai/EDDI/main/install.ps1 | iexNote: If your Antivirus blocks this command as "malicious content", securely download and run it instead:
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/labsai/EDDI/main/install.ps1" -OutFile "install.ps1" Unblock-File .\install.ps1 .\install.ps1
Requires Docker. The wizard auto-generates a unique vault encryption key for secret management.
🔧 Installer options
bash install.sh --defaults # All defaults, no prompts
bash install.sh --db=postgres --with-auth # PostgreSQL + Keycloak
bash install.sh --full # Everything enabled (DB + auth + monitoring)
bash install.sh --local # Build Docker image from local sourceThe --local flag is for contributors testing pre-release builds:
./mvnw package -DskipTests # Build the Java app
bash install.sh --local # Build Docker image + start containersThe installer creates an eddi CLI wrapper that makes updating easy:
eddi updateThis pulls the latest Docker image from the registry and restarts the containers. It works even when the same tag (e.g. latest) was re-published — Docker always checks the remote digest for changes.
eddicommand not found? The CLI lives at~/.eddi/eddi(Linux/macOS) or~/.eddi/eddi.cmd(Windows). Either restart your terminal so the PATH takes effect, or use the full path:# Linux / macOS ~/.eddi/eddi update # Windows (PowerShell) & "$HOME\.eddi\eddi.cmd" update
Manual update (without the CLI)
If the eddi CLI isn't available, run the equivalent docker commands from your install directory (~/.eddi by default):
cd ~/.eddi
docker compose --env-file .env -f docker-compose.yml pull
docker compose --env-file .env -f docker-compose.yml up -dAdjust the -f flags to match your setup (e.g. add -f docker-compose.auth.yml if using Keycloak).
If you prefer manual control over Docker Compose:
# Default (EDDI + MongoDB)
docker compose up
# PostgreSQL instead of MongoDB
EDDI_DATASTORE_TYPE=postgres docker compose -f docker-compose.yml -f docker-compose.postgres.yml up
# With Keycloak authentication
docker compose -f docker-compose.yml -f docker-compose.auth.yml up
# With Prometheus + Grafana monitoring
docker compose -f docker-compose.yml -f docker-compose.monitoring.yml up
# Full stack (all overlays)
docker compose -f docker-compose.yml -f docker-compose.auth.yml \
-f docker-compose.monitoring.yml -f docker-compose.nats.yml upAvailable compose overlays: docker-compose.auth.yml (Keycloak), docker-compose.monitoring.yml (Prometheus+Grafana), docker-compose.nats.yml (NATS JetStream), docker-compose.postgres.yml / docker-compose.postgres-only.yml, docker-compose.local.yml (build from source).
docker pull labsai/eddi # Pull latest from Docker Hub→ hub.docker.com/r/labsai/eddi
Most multi-agent frameworks (LangGraph, CrewAI, AutoGen) are Python/Node libraries — great for prototyping, hard to govern in production. EDDI approaches from the opposite direction: a deterministic engine built to safely govern non-deterministic AI.
| Dimension | Typical Python/Node Frameworks | EDDI |
|---|---|---|
| Concurrency | GIL or single-threaded event loop | Java 25 Virtual Threads — true OS-level parallelism |
| Agent Logic | Embedded in application code | Versioned JSON configurations — update behavior without redeployment |
| Security Model | Often relies on sandboxed code execution | No dynamic code execution at all; envelope-encrypted vault, SSRF protection |
| Compliance | Requires custom implementation | GDPR, HIPAA, EU AI Act infrastructure built-in |
| Audit Trail | Application-level logging | HMAC-SHA256 immutable ledger with cryptographic agent signing |
| Deployment | pip/npm + manual infrastructure | One-command Docker install, Kubernetes/OpenShift-ready |
"The engine is strict so the AI can be creative." — Project Philosophy
More screenshots: LLM Config, Logs, User Memory, Schedules, Agent Detail
- 🔀 Intelligent Routing — Direct conversations to different agents based on context, rules, and intent
- 🗣️ Group Conversations — Multi-agent debates with 5 built-in discussion styles: Round Table, Peer Review, Devil's Advocate, Delphi, and Debate
- 💬 Slack Integration — Deploy agents to Slack channels and run multi-agent debates directly in threads
- 🪆 Nested Groups — Compose groups of groups for tournament brackets, red-team vs blue-team, and panel reviews
- 👥 Managed Conversations — Intent-based auto-routing with one conversation per user per intent
- 🎯 Capability Matching — Discover and route to agents by skill, confidence score, and custom attributes
- 🧙 Agent Father — Meta-agent that creates other agents through conversation (ships out of the box)
| Category | Providers |
|---|---|
| Cloud APIs | OpenAI · Anthropic Claude · Google Gemini · Mistral AI |
| Enterprise Cloud | Azure OpenAI · Amazon Bedrock · Oracle GenAI · Google Vertex AI |
| Self-Hosted | Ollama · Jlama · Hugging Face |
| Compatible | Any OpenAI-compatible endpoint (DeepSeek, Cohere, etc.) via baseUrl |
EDDI implements open standards — not proprietary APIs:
| Standard | Role | What It Enables |
|---|---|---|
| MCP (Model Context Protocol) | Server (42 tools) + Client | Control EDDI from Claude Desktop, Cursor, or any MCP client. Connect agents to external MCP tool servers |
| A2A (Agent-to-Agent Protocol) | Full implementation | Cross-platform agent communication, Agent Cards, and skill discovery |
| OpenAPI 3.1 | Native generation + consumption | Auto-generated spec. Paste any OpenAPI spec → get a fully deployed API-calling agent |
| OAuth 2.0 / OIDC | Keycloak integration | Authentication, authorization, and multi-tenant isolation |
| SSE (Server-Sent Events) | Streaming transport | Real-time chat responses, group discussion feeds, and live log streaming |
- 💾 Persistent User Memory — Agents remember facts, preferences, and context across conversations via structured key-value entries with visibility scoping (
global,agent,group) - 🧠 LLM Memory Tools — Built-in tools agents can call to read, write, and search their own persistent memory
- 💤 Dream Consolidation — Background memory maintenance: stale entry pruning, contradiction detection, and fact summarization (inspired by Anthropic's research on background memory consolidation)
- 🪟 Token-Aware Windowing — Intelligent context packing with model-specific tokenizer support and anchored opening steps
- 📝 Rolling Summary — Incremental LLM-powered summarization of older turns with a Conversation Recall Tool for drill-back into compressed history
- 🔧 Property Extraction — Config-driven slot-filling with
longTerm/conversation/stepscoping — EDDI's importance extraction mechanism - 🛡️ Memory Policy (Commit Flags) — Strict write discipline marks failed task output as uncommitted (hidden from LLM context) and injects concise error digests for graceful degradation
- 🔄 Conversation State — Full history with undo/redo support
- 📦 7 Embedding Providers — OpenAI, Ollama, Azure OpenAI, Mistral, Bedrock, Cohere, Vertex AI
- 🗄️ 5 Vector Stores — pgvector, In-Memory, MongoDB Atlas, Elasticsearch, Qdrant
- 🌐 httpCall RAG — Zero-infrastructure RAG via any search API (BM25, Elasticsearch, custom)
- 📥 REST Ingestion API — Async document ingestion with status tracking
| Tool | Description |
|---|---|
| 🔍 Web Search | DuckDuckGo or Google Custom Search |
| 🧮 Calculator | Sandboxed recursive-descent math parser (no eval(), no code injection) |
| 🌐 Web Scraper | SSRF-protected content extraction from web pages |
| 📄 PDF Reader | SSRF-protected document extraction |
| ☁️ Weather · 🕐 DateTime | Real-time data tools |
| 📊 Data Formatter · 📝 Text Summarizer | Data transformation tools |
| 🔌 HTTP Calls as Tools | Expose your own REST APIs as LLM-callable tools with full security sandboxing |
| 🧠 User Memory | Read/write/search persistent user memory |
| 🔙 Conversation Recall | Drill back into summarized conversation history |
| 📎 Multimodal Attachments | Image, PDF, audio, and video input with MIME-based routing |
- 🫀 Heartbeat Triggers — Periodic agent wake-ups at configurable intervals for proactive behavior (inspired by OpenClaw's heartbeat architecture)
- ⏲️ Cron Scheduling — Standard cron expressions for timed agent execution
- 🔄 Conversation Strategies —
persistent(reuse same conversation across fires) ornew(fresh context each time) - 📊 Fire Logging — Complete execution history with status, duration, cost tracking, and retry logic
- 🌙 Dream Cycles — Scheduled background memory consolidation with cost ceilings per run
- 📉 Cost Optimization — Try cheap/fast models first, escalate to powerful models only when confidence is low
- 📊 4 Confidence Strategies — Structured output, heuristic, judge model, or none
- 💰 Per-Conversation Budgets — Automatic cost tracking with budget caps and eviction
- 🏢 Tenant Cost Ceilings — Monthly cost budgets per tenant with automatic enforcement
Security Architecture
- 🏦 Secrets Vault — Envelope encryption (PBKDF2 + AES-256) with tenant-scoped DEK/KEK rotation. Never plaintext in DB
- 🛡️ SSRF Protection — All tools validate URLs against private IPs, internal hostnames, and non-HTTP schemes before any request
- 🔒 Sandboxed Evaluation — Recursive-descent math parser only. No
eval(), no script engines, no reflection-based execution - 🔑 OAuth 2.0 / Keycloak — Multi-tenant authentication, authorization, and role-based access control
- ✍️ Agent Signing — Ed25519 cryptographic identity per agent; audit entries signed with agent private keys
- 🚫 No Dynamic Code Execution — Custom logic runs in external MCP servers, outside the EDDI security perimeter
Regulatory Compliance
| Regulation | EDDI Support |
|---|---|
| EU AI Act | Immutable HMAC-SHA256 audit ledger, decision traceability, risk classification guidance |
| GDPR | Cascading data erasure (Art. 17), data portability (Art. 15/20), restriction of processing (Art. 18), per-category retention, pseudonymization |
| CCPA | Right to delete, right to know, data portability |
| HIPAA | Deployment guide, BAA template, LLM provider BAA matrix, session timeout guidance |
| International | PIPEDA 🇨🇦 · LGPD 🇧🇷 · APPI 🇯🇵 · POPIA 🇿🇦 · PDPA 🇸🇬🇹🇭🇲🇾 · PIPL 🇨🇳 compatibility documented |
- 📜 Audit Ledger — Every agent decision recorded in a write-once, HMAC-secured, append-only ledger
- 🔍 Compliance Startup Checks — Advisory warnings on boot for TLS and database encryption gaps
- 🗑️ GDPR Orchestration — One-call cascading erasure across 6 stores + audit trail pseudonymization
- 📤 Data Portability — Complete user data export (memories, conversations, audit entries) via REST and MCP
- 📄 JSON Configs, Not Code — Agent behavior defined in versioned, diffable JSON documents
- 🔧 Lifecycle Pipeline — Pluggable task pipeline: Input → Parse → Rules → API/LLM → Output
- 📦 Composable Agents — Agents assembled from reusable, version-controlled workflows and extensions
- 🧪 Behavior Rules — IF-THEN logic engine for routing, orchestration, and business logic
- 📤 Import / Export — Agents portable as ZIP files with automatic secret scrubbing on export
- 🔄 Agent Sync — Live instance-to-instance sync with structural matching, content diffing, and selective resource picking — no ZIP intermediary needed
- 📝 Prompt Snippets — Reusable, versioned system prompt building blocks available as
{{snippets.safety_rules}} - 📎 Content Type Routing — MIME-based behavior rule conditions for multimodal attachment routing
- 🐳 One-Command Install — Interactive wizard sets up EDDI + database + starter agent via Docker
- ☸️ Kubernetes / OpenShift — Kustomize overlays, Helm charts, HPA, PDB, NetworkPolicy
- 📊 Prometheus & Grafana — 50+ Micrometer metrics at
/q/metrics(tools, vault, memory, scheduling, conversations) - 🩺 Health Checks — Liveness & readiness probes at
/q/health/liveand/q/health/ready - 🔄 NATS JetStream — Async event bus for distributed processing
- ⚡ Virtual Threads — Java 25 virtual threads for true OS-level concurrency (no Python GIL or Node.js event loop bottleneck)
- 🗃️ DB-Agnostic — Choose MongoDB or PostgreSQL; switch with one env var. Single Docker image for both
- 🏗️ Red Hat Certified — Container certification with automated preflight checks in CI/CD
- 🎨 React 19 Manager — Modern admin dashboard for agent building, testing, deployment, and monitoring
- 💬 Chat Widget — Embeddable React chat UI with SSE streaming and Keycloak auth
- 🔍 Audit Trail Viewer — Timeline-based compliance and debugging UI
- 📋 Logs Panel — Live SSE log streaming + searchable history
- 🔑 Secrets Manager — Write-only vault UI with copy-reference support
- 🌍 11 Languages — English, German, Spanish, French, Portuguese, Chinese, Japanese, Korean, Arabic (RTL), Hindi, Thai
Building a Quarkus app that talks to EDDI? Use the quarkus-eddi extension:
<dependency>
<groupId>io.quarkiverse.eddi</groupId>
<artifactId>quarkus-eddi</artifactId>
<version>6.0.1</version>
</dependency>@Inject EddiClient eddi;
String answer = eddi.chat("my-agent", "Hello!");Features: Dev Services (auto-starts EDDI in dev mode), fluent API, SSE streaming, @EddiAgent endpoint wiring, @EddiTool MCP bridge. See the quarkus-eddi README for full docs.
| Guide | Description |
|---|---|
| Getting Started | Setup and first steps |
| Developer Quickstart | Build your first agent in 5 minutes |
| Architecture | Deep dive into EDDI's design and pipeline |
| LLM Configuration | Connecting to 12 LLM providers |
| Behavior Rules | Configuring agent routing logic |
| HTTP Calls | External API integration |
| RAG | Knowledge base retrieval setup |
| MCP Server | 42 tools for AI-assisted agent management |
| A2A Protocol | Agent-to-Agent peer communication |
| Slack Integration | Deploy agents to Slack and run group discussions |
| Group Conversations | Multi-agent debate orchestration |
| User Memory | Cross-conversation fact retention |
| Memory Policy | Commit flags and strict write discipline |
| Model Cascading | Cost-optimized multi-model routing |
| Scheduling & Heartbeats | Cron schedules, heartbeats, dream consolidation |
| Agent Sync | Live instance-to-instance sync and upgrade imports |
| Import / Export | ZIP-based agent portability and merge |
| Prompt Snippets | Reusable system prompt building blocks |
| Attachments | Multimodal attachment pipeline |
| Capability Matching | A2A skill discovery and routing |
| Security | SSRF protection, sandboxing, and hardening |
| Secrets Vault | Envelope encryption and auto-vaulting |
| Audit Ledger | EU AI Act-compliant audit trail |
| Kubernetes | Deploy with Kustomize or Helm |
| Red Hat OpenShift | Certified container, automated release |
| Agent Father Deep Dive | How the meta-agent works |
| Full Documentation | Complete documentation site |
EDDI provides built-in infrastructure for regulatory compliance:
| Guide | Covers |
|---|---|
| GDPR / CCPA | Data erasure, export, Art. 18 restriction of processing, per-category retention, and consent guidance |
| HIPAA | Healthcare deployment guide — encryption, BAAs, LLM provider matrix, session management |
| EU AI Act | AI risk classification, decision traceability, immutable audit ledger |
| Privacy & Data Processing | Data flows, LLM provider matrix, international regulations (PIPEDA, LGPD, APPI, POPIA, PDPA, PIPL) |
| Compliance Data Flow | Single-page data flow diagram for auditors |
| Incident Response | Breach response runbook (GDPR 72h, CCPA 45 days, HIPAA 60 days) |
| Tool | Version | Notes |
|---|---|---|
| Java (JDK) | 25 | Eclipse Temurin recommended |
| Maven | 3.9+ | Bundled via mvnw / mvnw.cmd wrapper — no install needed |
| MongoDB | 6.0+ | Local instance or Docker (docker run -d -p 27017:27017 mongo:7) |
| Docker | Latest | For integration tests and container builds |
Windows users: Replace
./mvnwwith.\mvnw.cmdin all commands below.
Dev mode starts the application with live reload — code changes are picked up automatically without restarting:
# Linux / macOS
./mvnw compile quarkus:dev
# Windows (PowerShell)
.\mvnw.cmd compile quarkus:devThen open http://localhost:7070. The Quarkus Dev UI is available at http://localhost:7070/q/dev.
Dev mode also enables:
- Continuous testing — press
rin the terminal to re-run tests on changes - Dev UI — browse endpoints, CDI beans, configuration, and health checks
- Live reload — Java and resource changes apply instantly
💡 Secrets Vault: To use the secrets vault (storing API keys encrypted), set the master key before starting:
# Linux/macOS export EDDI_VAULT_MASTER_KEY=my-dev-passphrase # Windows (PowerShell) $env:EDDI_VAULT_MASTER_KEY = "my-dev-passphrase" # Or in a .env file (already in .gitignore) echo "EDDI_VAULT_MASTER_KEY=my-dev-passphrase" > .envWithout this, the vault is disabled and secret management returns HTTP 503. Any passphrase works for local development. See Secrets Vault for production setup.
| Command | What It Does |
|---|---|
./mvnw compile quarkus:dev |
Start dev mode with live reload (port 7070) |
./mvnw compile |
Compile sources only (fast feedback) |
./mvnw clean compile |
Clean build — delete target/ and recompile from scratch |
./mvnw test |
Run unit tests (excludes *IT.java integration tests) |
./mvnw verify -DskipITs |
Compile + unit tests + package (no integration tests) |
./mvnw verify |
Full build — compile + unit tests + integration tests (requires Docker) |
./mvnw validate |
Run Checkstyle code style checks |
./mvnw formatter:format |
Auto-format Java sources using the project Eclipse formatter |
./mvnw package -DskipTests |
Build the JAR without running tests (for install.sh --local) |
./mvnw clean package '-Dquarkus.container-image.build=true' |
Build the app + Docker image |
./mvnw package -Plicense-gen -DskipTests |
Generate third-party licenses (Red Hat certification) |
./mvnw quarkus:dev -Dsuspend |
Start dev mode and wait for debugger on port 5005 |
./mvnw quarkus:dev -Ddebug=false |
Start dev mode without the debug agent |
Code coverage
JaCoCo is configured to run automatically during ./mvnw test. After tests complete, find the coverage report at:
target/site/jacoco/index.html
Useful system properties
| Property | Default | Description |
|---|---|---|
-Dquarkus.http.port=<port> |
7070 |
Override the HTTP port |
-Dquarkus.mongodb.connection-string=<uri> |
mongodb://localhost:27017 |
MongoDB connection |
-Dquarkus.profile=<profile> |
dev |
Active Quarkus profile (dev, test, prod) |
-DskipTests |
false |
Skip all tests |
-DskipITs |
true |
Skip integration tests only |
# Build app + Docker image
./mvnw clean package '-Dquarkus.container-image.build=true'
# Build without container (for install.sh --local)
./mvnw package -DskipTests
# Generate third-party licenses (Red Hat certification)
./mvnw package -Plicense-gen -DskipTests# Quickstart (one-file deployment)
kubectl apply -f https://raw.githubusercontent.com/labsai/EDDI/main/k8s/quickstart.yaml
# Kustomize overlays
kubectl apply -k k8s/overlays/mongodb/ # MongoDB backend
kubectl apply -k k8s/overlays/postgres/ # PostgreSQL backend
# Helm
helm install eddi ./helm/eddi --namespace eddi --create-namespaceIncludes overlays for auth (Keycloak), monitoring (Prometheus/Grafana), NATS messaging, Ingress, and production hardening (HPA, PDB, NetworkPolicy). See the Kubernetes Guide for details.
We welcome contributions! Please read our Contributing Guide for details on setting up your development environment, code style, commit conventions, and the pull request process.
Every PR is automatically checked by CI (build + tests), CodeQL (security), dependency review, and AI-powered code review.
Please report security vulnerabilities privately — see our Security Policy.
This project follows the Contributor Covenant Code of Conduct.











