The most natural thing to do when building an MCP server is to mirror your existing API. You have a REST endpoint for creating users, so you make a create_user tool. You have one for listing orders, so you make a list_orders tool. Fifteen endpoints become fifteen tools, each one a thin wrapper that translates JSON-RPC to HTTP and passes the response back. It works. The agent can call the tools,…
The previous post in The Flock series covered what happens when agents forget mid-run and confidently fill the gaps. This one covers a different failure mode: what happens when one agent’s leftover context converts the next agent into something it was never supposed to be. The flock grazes in separate paddocks for a reason. Put the bell sheep and the border collie in the same field and by…
The init command for my Claude Code plugin needed a few things to happen in order: run a setup script, ask the user some configuration questions, apply the results. Not complicated. The skill file spelled out each step with code blocks and paths, and the agent understood all of it. Then it went its own way. Sometimes it called the CLI directly, skipping a wrapper script that checks prerequisites…
The previous post in The Flock series covered what happens when agents get creative where they shouldn’t. This one covers a more fundamental problem: what happens when agents forget what they were doing, and then confidently make something up. The bell sheep always knows the way home. Except on days when the fog rolls in and the familiar landmarks disappear. On those days, she confidently…
Every coding agent has its own context file. CLAUDE.md for Claude Code, .cursorrules for Cursor, .github/copilot-instructions.md for Copilot, GEMINI.md for Gemini CLI. If you work with more than one agent, you end up maintaining multiple files with 90% identical content . AGENTS.md is the attempt to end that. Why AGENTS.md # The problem AGENTS.md solves isn’t technical, it’s…
You’ve seen this screen. If you use Claude Code or Cursor with MCP servers, you’ve clicked through it dozens of times. “Google MCP Server wants to access your Google Account.” You review the scopes, click Allow, a token lands in your local config, and everything works. Now imagine the agent that needs your Google Calendar isn’t the one you’re talking to.…
Your agent passed every guardrail test. It never says anything harmful, never generates offensive content, politely declines every adversarial prompt you throw at it. And last Tuesday, it quietly deleted the wrong database because a Jira ticket it was reading contained a hidden instruction in the description field. The guardrails caught everything the agent said . They caught nothing about what it…
The 101 post covered working with one agent in one session, with a human watching. Those principles still hold, but the question changes when you remove the human and let agents run unsupervised in CI. This is the first post in “The Flock,” a series about what happens when agents run at scale with nobody around. We start with creativity, because it’s the pattern every developer…
The 101 post covered working with coding agents one-on-one. A human watches, nudges, clears context when things drift. Those habits work well when someone is paying attention. The question this series asks: what changes when nobody is? Running AI agents unsupervised in CI, processing hundreds of items per batch through multi-agent pipelines, turns every context engineering principle up to eleven.…
You’re reading through a lengthy architecture proposal shared on a team channel, and something feels off. Near the end, tucked between the conclusion and the appendix, you find a section titled “Corrections Applied After Cross-Referencing: The following adjustments were made based on automated analysis of the upstream repository.” Clearly, AI wrote most of this. And the review…
The conversation was going well. We were working out how to integrate OpenShell ’s network isolation into our agent platform. The AI had produced an overlap analysis, identified shared capabilities, proposed a feature breakdown for the integration. Everything sounded reasonable, the trade-offs clearly articulated, the architecture diagrams sensible. I was nodding along, ready to take the…
Everybody talks about prompt engineering. Write better prompts, get better results. That framing was useful once, but it misses the point for coding agents. The prompt is maybe five percent of what determines whether a session goes well or falls apart. The rest is context: what the agent sees when it starts working, how that context evolves over the session, and what happens when it grows too…
Claude Code skills let you extend a coding agent with custom workflows, specialist knowledge, and automation. You write a SKILL.md file with instructions, and the agent follows them. At least, that’s the idea. In practice, Claude treats skill content as advice, not as instructions. A skill that says “always use spec-kit to create the specification” might get followed, or Claude…
The last post on this blog was about Jib , Google’s daemonless Java image builder. That was July 2018. Almost eight years ago. Anybody remember when that was the latest hotness? Before that, I wrote about Docker when Docker was still exciting and built a Kubernetes cluster on Raspberry Pi 3 nodes when that was still a weekend adventure. I spent way many words on Jolokia and JMX. 27 posts…
As soon as Google’s blog post “Introducing Jib — build Java Docker images better” was online, all my channels went crazy about Jib . That was a bit surprising as Jib was started over one year ago but with this blog post this project rockets with more than 1000 new GitHub stars within one day. Crazy. I got a lot asked yesterday how Jib compares to fabric8io/docker-maven-plugin…
Yesterday a blog post Using Docker from Maven and Maven from Docker by Kostis Kapelonis was published which gives some insights on the possible relationships between Docker and Maven. The article makes some essential points really, and gives an overview for the two remaining Docker Maven plugins as well as how Codefresh recommends doing Docker multi-stage builds as the alternative. As I’m…
I’m a big fan of the Camel Java DSL for defining Camel routes with a RouteBuilder . This is super easy and slim. However, in this blog post I show you a nerdy trick how this can be done even more elegant. --> If you are a Camel user, you know, that defining a route for a given Camel context ctx ist just a matter to implement the configure() method of the abstract RouteBuilder class: ctx. add…
As you might know, one of my Open Source babies is the one and only fabric8io/docker-maven-plugin (d-m-p). If you already use this Maven plugin, you know, that it is super powerful and flexible to configure. This flexibility comes at a price so that the configuration can become quite complicated. Now, if you only want to build Docker images with Maven, I have good news: Since 0.25.1 d-m-p supports…
Octobox is for sure one of my favourite tools in my GitHub centred developer workflow. It is incredible for GitHub notification management which allows me to ignore all the hundreds of GitHub notification emails I get daily. Octobox is a Ruby-on-Rails application and can be used as SaaS at octobox.io or installed and used separately. Running Octobox in an own account is especially appealing for…
Since I got my first Amazon Echo end of last year, I love it. And although, as a typical German, I’m still a bit concerned about data privacy, at the end, convenience wins (as always :). There are many things which work flawlessly, and to be honest, the most used feature for me is a simple timer. But when it comes to aggregate actions, Alexa is still quite limited. Ok, you can define your…
Our Ansible Playbooks for installing Kubernetes on a Raspberry Pi Cluster have been constantly updated and are now using the awesome kubeadm . The update to Kubernetes 1.6. was a bit tricky, though. Recently I had the luck to meet Mr. @kubernetesonarm Lucas Käldström at the DevOps Gathering where he demoed his multi-arch cluster. That was really impressing. Lucas really squeezes out the maximum…
From time to time people come to me and say: “I really would love Jolokia if only it would be RESTful”. This post tells you why. I really like REST, yes I do. If I would crete a new application on a green field, its remote access API would very likely obey the REST paradigm. 1 However, Jolokia is a different beast. It is a bridge to the world of JMX, providing an open minded…
Now that some weeks has been passed we all had time to absorb the revised Java EE 8 proposal presented at Java One. As you know, some JSRs remained, some things were added and some stuff was dropped. Java EE Management API 2.0 , supposed to be a modern successor of JSR 77, is one of the three JSRs to be dropped. What does this mean for the future of Java EE management and monitoring ? First of all…
Let’s build a Raspberry Pi Cluster running Docker and Kubernetes. There has been already a handful of good recipes, however this howto is a bit different and provides some unique features. My main motivation for going the Raspberry Pi road for a Kubernetes cluster was that I wanted something fancy for my Kubernetes talk to show, shamelessly stealing the idea from others (kudos to @KurtStam ,…
rhuss/docker-maven-plugin is dead, long live fabric8io/docker-maven-plugin ! If you follow the Docker Maven Plugin Scene 1 , you probably noticed that there has been quite some progress in the last year. Started as a personal research experiment early 2014, rhuss/docker-maven-plugin (d-m-p) has took off a little bit. With more than 300 GitHub stars it’s now the second most popular…
Dealing with multiple Docker registries is hard, mostly because the meta information where a image is located is part of a Docker image’s name, which is typically used as an identifier, too. Let’s see how the rhuss/docker-maven-plugin deals with this peculiarity. When setting up a Maven build for creating Docker images out of your Java application, the classical way to specify the…
This screencast gives a live demo of the forthcoming JMX notification support in Jolokia 2.0. Jolokia supports currently two notification modes. In all modes, the Jolokia agent itself subscribe to a JMX notification locally and then dispatches the notifications to its clients. Pull Mode : Here, the agent keeps the notification received for a client in memory and sends it back on an JMX request to…
I hope you all had a good start into 2016 and have charged all your batteries during the time of stillness. Jolokia had a good start, too. During the holiday season I took the opportunity to continue to work on version 2.0 which now takes on form. If you have followed the history of Jolokia you know that work on 2.0 started early 2013 but advanced quite slowly for multiple reasons. Now its time to…
When I had to create multiple Docker base images which only differ slightly for some minor variations I couldn’t avoid to feel quite dirty because of all the copying & pasting of Dockerfile fragments. We all know how this smells, but unfortunately Docker has only an answer for inheritance but not for composition of Docker images. Luckily there is now fish-pepper , a multi-dimensional docker…
As you might know, Jmx4Perl is the mother of Jolokia . But what might be not so known is, that Jmx4Perl provides a set of nice CLI tools for accessing Jolokia agents. However, installing Jmx4Perl manually is cumbersome because of its many Perl and also native dependencies. However, if you are a Docker user there is now a super easy way to benefit from this gems. Even if Perl is not your cup of…
Ok, you know Docker. And since you are a Java developer you want to know how you can use this in your daily development workflow. You probably also heard about the docker-maven-plugin which seamlessly creates Docker images, starts and stops Docker containers and more all with a concise configuration syntax. And now there is this new goal docker:watch . We developers are lazy, right ? We want our…
Building a Docker wormhole is easy. A wormhole is a special type of structure that some scientists think might exist, connecting parts of space and time that are not usually connected — Cambridge Dictionaries Online In Docker universe we have several uses cases, which require a Docker installation within a Docker container. For example the OpenShift Builds use images whose container’s…
The HTTP-JMX Bridge Jolokia allows easy access to JMX. It exposes all JMX information and operations via an REST-like interface and has tons of nifty features. Jmx4Perl on the other side is a client for Jolokia, which beside Perl access modules also provides quite some nice CLI tools for accessing and installing Jolokia. This post explains how install these tools on OS X. Jmx4Perl provides some…
A health check is a useful technique for determining the overall operational state of a system in a consolidated form. It provides some kind of internal monitoring which collects metrics, evaluates them against some thresholds and provides a unified result. Health checks are now coming to Jolokia . This post explains the strategy to include health checks into Jolokia without blowing up the agents…
A local Maven repository serves as a cache for artifacts and dependencies, we all know this. This helps in speeding up things but can cause subtle problems when doing releases. Docker can help here a bit for avoiding caching issues. Before doing a release I typically move ~/.m2/repository away to be really sure that everybody else can build the source as well and that any dependencies are also on…
My docker-maven-plugin is undergoing a major refactoring. This post explains the motivation behind this and also what you can expect in the very near future. The configuration syntax becomes much cleaner and implicit behavior was removed. Originally, I needed a docker-maven-plugin for a very specific use case: To test Jolokia , the HTTP-JMX bridge in all the JEE and non-JEE servers out there. This…
While on the way of transforming the Jolokia integration test suite from a tedious, manual, half-a-day procedure to a full automated process I ran into and felt in love with Docker . As a byproduct a java-jolokia docker repository emerged, which can be easily used as a Java base image for enabling a Jolokia JVM agent during startup for any Java application. These images are variants of the…
NSEnter is a nice way to connect to a running Docker container. This post presents a script to simplify the usage of nsenter together with Boot2Docker . There is still quite some dust around Docker and after gaining more and more experience, new patterns and anti-patterns are emerging. One of those anti-patterns is the usage of an SSH daemon inside an image for debugging, backup and…
Recently I gave a Meetup talk for the Docker Munich Meetup Group which explained how Docker can help developers to improve integration tests and to ship applications. The slides are online as well as the demo project . During the demo I used Butterfly for an in-browser shell, which was quite cool, I guess ;-) (This is obviously not enabled in the online slides). I’m going to continue to…
Jolokia has configurable CORS support so that it plays nicely together with the Browser world when it comes to cross origin requests. However, Jolokia’s CORS support is not without gotchas. This post explains how Jolokias CORS supports works, what are the issues and how I plan to solve them. tldr; Jolokia CORS support is configured via jolokia-access.xml but has issues with authenticated requests…
If you have ever sent or received mail messages via Java, chances are high that you have used JavaMail for this task. Most of the time JavaMail does an excellent job and a lot of use cases are described in the JavaMail FAQ. But there are still some additional quirks you should be aware of when doing advanced mail operations like adding or removing attachments (or “Parts”) from existing mails…
This blog is where I think out loud about how AI is changing the way we build software. Most posts circle around context engineering, spec-driven development, and the practical reality of running AI agents at scale. Some are technical, some are opinion, all come from daily experience rather than theory. About me # I’m Roland Huß, Distinguished Engineer at Red Hat , working on Agent Ops…
Content License # Unless otherwise noted, the content on this blog is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0). You are free to # Share — copy and redistribute the material in any medium or format Adapt — remix, transform, and build upon the material for any purpose, even commercially Under the following terms # Attribution — You must give appropriate…
1. Data controller # Roland Huß, blog@ro14nd.de 2. Hosting # This website is hosted on GitHub Pages (GitHub Inc., USA). GitHub may process technical data such as IP addresses. For more information, see the GitHub Privacy Statement . 3. Comments # Comments are powered by Giscus, which is based on GitHub Discussions. A GitHub account is required to participate. The GitHub Privacy Statement applies.…