Building agents on the JVM with Embabel
·
Part 7
The condition nothing could satisfy: custom @Condition gates in Embabel
My agent refused to run a single action. The @Condition gate was FALSE and nothing in the agent could ever make it TRUE, because Embabel builds an action's effects from what you declare, not from what your condition reads.
28 Jul 2026
·
7 min read
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 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 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 2
MongoDB, Part 2: The Aggregation Pipeline, Stage by Stage
Part 2 of my MongoDB learning series: how the aggregation pipeline reshapes documents stage by stage — $unwind, $group, $lookup — plus the type-mismatch bug that silently joins nothing and why stage order is a cost decision.
15 Jul 2026
·
5 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
Spring and Java mechanics
Aggregate Roots in Spring Data JDBC: The Delete-Boundary Rule
Spring Data JDBC takes DDD aggregates literally. Here's a one-question rule for drawing aggregate boundaries — and how to avoid N+1 once you have them, verified against the real generated SQL.
5 Jul 2026
·
6 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
Spring and Java mechanics
Spring Batch 6, Hands-On: A New Engine, a Real Operator, and Stops That Cross JVMs
A code-forward tour of Spring Batch 6 on Spring Boot 4 and Java 25 — the resourceless repository, the new ChunkOrientedStep engine, Spring Framework 7 retry, the CommandLineJobOperator, and how stop and recover actually work under the hood.
28 Jun 2026
·
9 min read
The Model Context Protocol, hands on
Building an MCP Tool with Spring Boot AI
How I turned Apache Kafka into a set of tools an AI client can call — using Spring AI's MCP server, a handful of @Tool methods, and one ugly-but-necessary servlet filter.
28 Jun 2026
·
5 min read