Building agents on the JVM with Embabel
·
Part 6
The Silent No-Op: Exposing Embabel Agents Over MCP
Turning my JVM agents into MCP tools took one dependency and one annotation. It also took three silent failures -- a starter that suppresses the web server, a shell that eats your CLI flags, and an annotation default that publishes exactly zero tools without telling you.
26 Jul 2026
·
7 min read
Building agents on the JVM with Embabel
·
Part 5
Embabel Agents Being Tracked Through LGTM Observability
I pointed my Embabel agents at a local Grafana LGTM stack and saw nothing. Three configuration gotchas later, every GOAP planning step, LLM call and tool loop shows up as a span in Tempo. Here is the full walkthrough, with screenshots.
26 Jul 2026
·
8 min read
Building agents on the JVM with Embabel
·
Part 4
The Agent Asks First: Human-in-the-Loop with Embabel's WaitFor
In regulated work the dangerous agent is the one that acts without asking. Here's how I made an Embabel agent pause for human approval before moving money -- with the approval built into the type graph, not an if-check.
25 Jul 2026
·
5 min read
Building agents on the JVM with Embabel
·
Part 3
Give the Agent Hands: Tools in Embabel
An LLM cannot know a live account balance, and in banking a confidently hallucinated number is a disaster. The fix is a tool. Here's how @LlmTool works in Embabel on the JVM, plus the one API gotcha that cost me a compile.
25 Jul 2026
·
5 min read
Building agents on the JVM with Embabel
·
Part 2
Stub the Model, Assert the Plan: Unit-Testing Embabel Agents
The non-deterministic part of an agent is the LLM. Box it out and the rest is ordinary, deterministic code you can test. Here's how I test Embabel agents on the JVM without spending a single token.
25 Jul 2026
·
5 min read
Building agents on the JVM with Embabel
·
Part 1
One Goal Too Many: Learning Embabel's Planner the Hard Way
My first afternoon with Embabel, the JVM agent framework. I added one action too many, the planner quietly stopped early, and a cryptic get(...) must not be null taught me how GOAP, goals, and AgentInvocation actually fit together.
24 Jul 2026
·
8 min read
Learning MongoDB
·
Part 1
Learning MongoDB, one document at a time
Part one of a series: a Spring Boot 4 playground, the embed-vs-reference call that replaces schema normalization, and the Decimal128 default that would have quietly corrupted every price I stored.
15 Jul 2026
·
6 min read
Shipping an AI feature into my own product
·
Part 3
Adding a job description match to my AI Concierge
I added job-description matching to the AI concierge on my career site. It shipped with no new bean, no new table, and no migration — because the leverage was in a seam I'd already built. A design note on shared streaming cores, streamable structured output, and treating a pasted JD as hostile.
13 Jul 2026
·
11 min read
Running the box: Docker, Linux, the JVM
Where does app.jar find its dependencies? The JVM rule hiding in your Dockerfile
Spring Boot's layered jar extraction splits your dependencies from your code for faster Docker rebuilds. But the mechanism that makes the pieces find each other at runtime isn't Spring at all — it's a JVM rule from 1998.
8 Jul 2026
·
5 min read
Shipping an AI feature into my own product
·
Part 1
Ask Zakaria: I bolted a grounded AI chat onto my CV site
Why my career site now answers questions out loud — the graceful-degradation bean, the SSE streaming, the atomic quota race, and the discoverability bug that had nothing to do with code.
2 Jul 2026
·
5 min read