Traces, Tempo and the LGTM stack
Auto-instrumenting Spring Batch 6 with OpenTelemetry — four silent failures
Wiring Spring Boot 4 + Spring Batch 6 to emit job/step traces into Tempo and spring_batch_* metrics into Prometheus — and the four config traps that each failed the same way: green build, zero errors, nothing exported.
26 Aug 2026
·
5 min read
Security and privacy, in practice
Why /.well-known/security.txt matters, and how to serve it properly
RFC 9116 answers the one question a stranger needs answered about your site: who do I tell about a vulnerability. What the file must contain, why the expiry date belongs in a test, and the routing trap that makes an SPA host serve it as HTML at 200.
2 Aug 2026
·
8 min read
Security and privacy, in practice
I didn't need an MCP gateway, I needed a smaller credential
I put an MCP server on the public internet so an AI client could file todos onto my private kanban board. The interesting part wasn't the protocol — it was making the dangerous call unrepresentable.
1 Aug 2026
·
7 min read
Security and privacy, in practice
A fourth host on the same jar: taking my kanban board off localhost
My kanban board had no authentication at all and handed its entire database to any caller. Putting it on focus.zakaria.lu meant a fourth host on the jar that was already running - plus a disclosure bug caught in review, and one cookie dot that 500'd every sign-in.
30 Jul 2026
·
8 min read
Building agents on the JVM with Embabel
·
Part 8
Blackboard vs Context: what an Embabel agent keeps between runs
An Embabel blackboard lives and dies with a single agent process. A Context is the thing that outlives it - and because it seeds the blackboard before planning starts, it changes which actions actually run.
30 Jul 2026
·
6 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 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