mrkeyoor.com_
Wed 23 Sept 00:36 UTC
LLM Toolsevaluationupdated 26 Aug 2026

embabel-agent review

Embabel Agent is a Kotlin and Java framework for building AI agents as typed goals, actions, conditions, and domain objects. Its planner chooses a route through the actions at runtime, letting Spring teams mix ordinary application code with model calls without encoding every flow as a fixed sequence.

+11stars / 7d
Verdict

Our Embabel run passed 2,025 of 2,123 tests, skipped 98, and failed none, which makes version 1.5.1 a credible trial for a serious Spring team. Use it when typed domain objects and runtime planning solve a flow problem you can already name. Avoid it for durable human approval workflows until you provide process persistence, and choose Spring AI directly when explicit orchestration is easier to reason about.

We ran it

Lab card: what happened when we ran embabel-agentScreenshot of embabel-agent (hub.embabel.com)
Install✓ · 376s
Build✓ · 236s
Tests✓ · 635s2025 passed · 0 failed · 98 skipped of 2123 (maven surefire)
Repo1984 files~297,419 lines of source · 18.5 MB · 5 CI workflows

Answers from our run

Does embabel-agent build from source?

Dependencies installed in 376 seconds, and the build succeeded in 236 seconds. We cloned commit 74db1c7 into a clean Debian container with 3 CPUs and no project-specific setup.

Do embabel-agent's tests pass?

Yes: 2025 of 2123 passed when we ran the project's own test command (maven surefire). Some failures need services or credentials a bare container does not have.

Who should not use embabel-agent?

Python-first teams or developers seeking a small scriptable agent loop: Embabel is a large Maven and Spring codebase with about 297,419 source lines in our checkout.

What are the alternatives to embabel-agent?

Spring AI, LangChain4j. Our Embabel run passed 2,025 of 2,123 tests, skipped 98, and failed none, which makes version 1.

Setup3/5Checks passed, but install and build took over 10 minutes
Docs5/5Deep coverage of planning, providers, MCP, tests, and tracing
Community4/54,386 stars with active releases and a busy contribution queue
Maturity3/5Large passing suite; process persistence remains unshipped

Discussed on

  1. hnEmbabel Agent Framework for the JVM47 points

Who it’s for

Spring teams that want agent behavior expressed through typed Java or Kotlin domain models.
JVM developers who need several model providers, MCP tools, retrieval, and application services in one codebase.
Teams willing to test planning rules and individual actions as ordinary Spring components.
Platform engineers building focused or closed agents with explicit limits on which actions may run.

Who it’s NOT for

Python-first teams or developers seeking a small scriptable agent loop: Embabel is a large Maven and Spring codebase with about 297,419 source lines in our checkout.
Teams that need durable human-in-the-loop state today: issue #1965 says the shipped process repository is memory-only, so a scaled-down pod loses paused work.
Buyers expecting every advertised direction to exist now: the README labels federation, evolving mode, and other platforms as future goals.
Projects that cannot supply provider credentials or local model services: the examples require OpenAI, and some need Anthropic plus external web tools.

Setup reality

Our sandbox install succeeded in 376 seconds, followed by a successful 236-second build. Tests finished in 635 seconds: Maven Surefire reported 2,025 passed, 0 failed, and 98 skipped out of 2,123.

The basic application path needs JDK 21, Maven or Gradle, Spring configuration, and at least an OpenAI key for the documented examples. Anthropic, Gemini, OCI, Ollama, Docker model services, and MCP tools each add their own credentials or endpoints.

Gradle users must add the Spring Milestones repository because a transitive MCP BOM is not on Maven Central. Live integration tests skip when their keys or services are missing, and human-in-the-loop processes have no shipped persistent repository.

Typed actions give the planner a bounded set of moves

Embabel models an agent as domain objects, goals, actions, and conditions. Developers write Java annotations or a Kotlin DSL, then the platform chooses a path through available actions. The default planner uses Goal Oriented Action Planning rather than asking an LLM to invent the workflow. That separation is attractive in business software: the model can transform data or choose a tool, while code defines the operations it is allowed to perform.

The framework is substantial. Our commit 74db1c7 checkout contained 1,984 files and about 297,419 source lines, though it occupied only 18.5 MB before dependencies. It supports focused execution for a specific capability, closed execution that selects among known agents, and open execution that can combine actions across agents. Open mode is expressly less deterministic. Even there, Embabel can only call steps developers have defined, unless a step itself delegates broad behavior to a model.

Dynamic planning pays off when actions can be reused

A fixed workflow is simpler when the steps never change. Embabel becomes interesting when several agents can share domain objects and actions, or when new capabilities should become available without editing old state-machine definitions. Strong types make prompts, service calls, and outputs visible to Java tooling. Actions remain Spring beans, so dependency injection, transactions, persistence libraries, and unit-test practices are already available.

That design has a learning cost beyond the 376-second install we measured. A team must define preconditions, outputs, goal completion, and approval boundaries well enough for a planner to compose them safely. Names also matter because goals can be exported as MCP tools. The README warns that domain methods exposed with @Tool should be safe to invoke and suggests keeping mutation or deletion behind explicit code actions instead of making those methods directly callable by a model.

What happened when we ran it

Our sandbox installed the project in 376 seconds and completed the build in another 236 seconds. The test step took 635 seconds. Maven Surefire counted 2,123 cases: 2,025 passed, 0 failed, and 98 skipped. That is a strong result for a fresh unprivileged container with 3 CPUs, 10 GB of RAM, no secrets, and JDK 21.

The scan found 5 CI workflow files, no root Dockerfile, and no tests directory, even though Maven discovered the large suite inside module-specific source trees. The skipped cases matter because the README says credentialed integration tests are omitted when their provider variables or services are absent. Our run therefore proves that the available no-secret suite passed. It does not prove OpenAI, Anthropic, Gemini, OCI, Ollama, Vertex AI, or remote MCP behavior.

The first useful agent needs a provider and Spring configuration

The documented examples expect OPENAI_API_KEY; the project recommends adding Anthropic for examples that mix models. Other starters cover MiniMax, Z.ai, OCI Generative AI, Ollama, Docker model services, and LM Studio. The deep-research example also wants web tools through Docker Desktop or another MCP setup. A small demo can start from the Java or Kotlin template, but reproducing the richer examples means coordinating several services.

Stable artifacts are on Maven Central, yet Gradle users still need the Spring Milestones repository because the dependency BOM refers to an experimental MCP BOM unavailable from Central. Our 236-second build succeeded with the repository's own configuration. Consumers should pin Embabel, Spring AI, and milestone dependencies together, then repeat the build from an empty cache. A provider switch can affect structured output and thinking behavior even when application code still compiles.

Human approval state disappears with an autoscaled pod

Issue #1965 identifies a concrete production limit: the only shipped AgentProcessRepository implementation stores state in memory. An agent paused for a form submission remains tied to the pod that created it. If Kubernetes removes that pod, routing cannot restore the process. Teams building long-running approvals must implement a persistent repository or keep that workload off autoscaling infrastructure until the framework supplies one.

Provider edges also need focused tests. Issue #1813 documents a Google GenAI thinking response where typed JSON lived in a later generation, while the framework selected the first thought block. The result was a parse failure despite valid answer content. Version 1.5.1 includes many provider and structured-output fixes, but the open queue shows how quickly those adapters move. Contract tests with your model, options, and response types are more useful than assuming all Spring AI providers behave alike.

Version 1.5.1 is active, while the roadmap stays ambitious

GitHub recorded 4,386 stars, an Apache-2.0 license, and 70 combined issues and pull requests. The repository was pushed on August 24, 2026, and version 1.5.1 was released the same day. That release addressed Bedrock options, provider-independent roles, model credentials, search filtering, Ollama thinking extraction, MCP documentation, and an HTTP components vulnerability. The activity supports continued evaluation, though the combined open count is not a defect count.

Embabel is best treated as an application architecture, not an agent helper to sprinkle into one controller. The 2,025 passing tests give the implementation more weight than its self-described early stage might suggest. Start with one bounded agent, keep execution focused or closed, and test the planner against real domain states. Open execution, durable waits, and broad tool access should arrive only after the team can explain how each action fails and how the process resumes.

Alternatives

ProjectWhat it isPick it when
Spring AISpring's lower-level application framework for models, tools, retrieval, and MCP.pick this instead when you want direct control of the flow and do not need Embabel's goal planner.
LangChain4jA JVM library for model providers, tools, agents, retrieval, and framework integrations.pick this instead when a library-style Java API and wider framework choice matter more than GOAP planning.

What people are saying

  1. [github-trending] embabel/embabel-agent

Sources

  1. Embabel Agent README
  2. Embabel Agent 1.5.1 release
  3. Issue 1965: no persistent agent process backend
  4. Issue 1813: Google GenAI structured output selection

More llm tools reviews

treg · train-llm-from-scratch · mistral.rs · flue · TensorRT-LLM · pydantic-ai · the whole board →