Embabel Agent Framework is a JVM-based framework written in Kotlin for building agentic AI systems that combine large language model interactions with traditional code and domain models. The framework is pronounced Em-BAY-bel and originates from the creator of Spring, integrating seamlessly with the Spring ecosystem and Java enterprise capabilities.
The framework models agentic flows around five core concepts: Actions as steps an agent takes, Goals as what an agent tries to achieve, Conditions that assess readiness before execution, a Domain model of objects informing the flow, and Plans as dynamically formulated sequences of actions rather than programmer-defined paths. This architecture enables the system to replan after each action, creating an OODA loop that allows agents to adapt to new information and observe the effects of previous actions.
Embabel differentiates itself through sophisticated planning that goes beyond finite state machines by introducing true planning using non-LLM AI algorithms. This enables agents to perform tasks they were not explicitly programmed to do by combining known steps in novel orders and making runtime decisions about parallelization. The dynamic planning approach provides superior extensibility and reuse, as adding new domain objects, actions, goals, and conditions extends system capability without editing existing FSM definitions or code. The framework maintains strong typing and object-oriented benefits, allowing actions, goals, and conditions to be informed by domain models with full refactoring support.
Developers can author flows using two approaches: an annotation-based model similar to Spring MVC with @Agent, @Goal, @Condition, and @Action annotations, or an idiomatic Kotlin DSL with agent and action blocks. Both approaches are backed by domain models that can include rich behavior.
The planning step is pluggable, with Goal Oriented Action Planning as the default approach. GOAP is a popular AI planning algorithm from gaming that enables dynamic decision-making based on world state and agent goals. The framework also supports Utility AI out of the box, which selects actions based on dynamic utility scores rather than strict preconditions and postconditions, valuable for exploration and open-ended tasks.
The framework executes through an AgentPlatform implementation supporting three modes: Focused mode where user code requests particular functionality, Closed mode where user intent is classified to choose an agent from known agents, and Open mode where the platform assesses user intent and uses all available resources to achieve it by building custom agents from scratch. Open mode is the most powerful but least deterministic, capable of finding novel paths combining functionality from multiple providers.
Additional benefits include platform abstraction enabling local execution while potentially offering higher quality of service in production without code changes, designed LLM mixing to ensure cost-effective and capable solutions by leveraging different models for different tasks, and built-in testability supporting both unit testing and end-to-end agent testing. The framework is designed for enterprise use with Spring dependency injection, AOP decoration, robust persistence, and transaction management.
Quick start templates are available for both Java and Kotlin, with comprehensive examples in the Embabel Agent Examples Repository and a sophisticated realistic example in the Tripper travel planner agent. The framework also provides an Embabel-powered hub where users can ask questions about the framework in natural language through an agent interface.